CN113596469A - 一种软硬结合且高效传输的视频解码方法 - Google Patents
一种软硬结合且高效传输的视频解码方法 Download PDFInfo
- Publication number
- CN113596469A CN113596469A CN202110699060.7A CN202110699060A CN113596469A CN 113596469 A CN113596469 A CN 113596469A CN 202110699060 A CN202110699060 A CN 202110699060A CN 113596469 A CN113596469 A CN 113596469A
- Authority
- CN
- China
- Prior art keywords
- data
- pcie
- address
- decoding
- image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 46
- 230000005540 biological transmission Effects 0.000 title claims abstract description 45
- 230000006870 function Effects 0.000 claims description 28
- 238000004590 computer program Methods 0.000 claims description 9
- 230000007717 exclusion Effects 0.000 claims description 9
- 238000012545 processing Methods 0.000 claims description 8
- 238000012544 monitoring process Methods 0.000 claims description 5
- 238000006243 chemical reaction Methods 0.000 claims description 3
- 238000013461 design Methods 0.000 abstract description 3
- 238000005516 engineering process Methods 0.000 abstract description 3
- 230000003993 interaction Effects 0.000 abstract 1
- 230000004048 modification Effects 0.000 abstract 1
- 238000012986 modification Methods 0.000 abstract 1
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
- H04N19/423—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/44—Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明属于linux系统下视频解码技术,涉及一种在linux系统下使用软硬结合的高效传输的视频解码设计方法。其特点在于:首先,移植ffmpeg到海思平台,对ffmpeg进行源码修改使其适配海思芯片。其次,启动PCIE通道与主机进行数据传输交互;然后,启动ffmpeg的动态库对网络传输的数据进行动态过滤,去除错误帧,同时获取图像与参数信息结合的数据包;最后,将完整数据包再传送给海思芯片的硬解码模块,从而完成解码任务。本发明使用芯片的硬解码模块完成解码过程,有效减少解码时间,采用PCIE通道传输解码前后的图像,极大地减少了数据传输时延。
Description
技术领域
本发明属于linux系统下视频解码技术,特别是一种软硬结合且高效传输的视频解码方法。
背景技术
Hi3559AV100是专业的8K Ultra HD Mobile Camera SOC,它提供了8K30/4K120广播级图像质量的数字视频录制,支持多路Sensor输入,支持H.265编码输出或影视级的RAW数据输出,并集成高性能ISP处理,同时采用先进低功耗工艺和低功耗架构设计,为用户提供了卓越的图像处理能力。
Hi3559AV100支持业界领先的多路4K Sensor输入,多路ISP图像处理,支持HDR10高动态范围技术标准,并支持多路全景硬件拼接。在支持8K30/4K120视频录制下,Hi3559AV100提供硬化的6-Dof数字防抖,减少了对机械云台的依赖。
PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为"3GIO",是由英特尔在2001年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。PCIe属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量(QOS)等功能。PCIe交由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为"PCI-Express",简称"PCI-e"。它的主要优势就是数据传输速率高,而且还有相当大的发展潜力。
但是Hi3559AV100属于硬解码范畴,在协议帧不完全符合解码协议,或者错误帧比较多的情况下,解码效率比较低下或者不能解码。另外,硬解码模块无法返回带有参数帧的解码图像帧。同时,在图像数据比较大的情况下,网络传输时延比较大,无法满足性能需求。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提供了一种软硬结合且高效传输的视频解码方法,使用芯片的硬解码模块完成解码过程,有效减少解码时间,采用PCIE通道传输解码前后的图像,极大地减少了数据传输时延。
本发明的技术解决方案是:
第一方面,一种软硬结合且高效传输的视频解码方法,包括如下步骤:
1)配置ffmpeg的编译属性和参数,将ffmpeg动态库移植到海思平台;
2)配置PCIE设备;
将海思平台的PCIE配置成从设备,主机的PCIE设备配置成主设备;同时,制定主设备和从设备的传输规则;
3)创建PCIE读数据线程,启动PCIE读任务获取主机传输的原始图像数据;
4)创建ffmpeg获取数据包线程,使用ffmpeg动态库获取压缩图像的完整数据包
5)使用海思平台的硬解码模块对压缩图像的数据包进行解码,获得解码后的图像数据;
6)使用PCIE通道回传解码后的图像数据给主机。
可选地,步骤2)所述主设备和从设备传输规则如下:
主设备上电后写入握手的规定内容,从设备在上电后检测到相应内容并握手成功;
主设备和从设备为每个通道分配读写的PCIE地址,不同的读写地址互不冲突;
主设备握手成功后在规定的PCIE地址段写入每个通道接收数据的地址内容;
主设备通过查询固定地址段的内容长度是否大于0作为判断是否有数据的标准,并在完成数据读取后将内容长度清零;
从设备在传输数据之前先通过固定地址段长度,判断主设备是否已读走上次数据,如果是则写入解码后的图像数据并将长度写入,如果不是则放弃本次写数据任务,等待接收到下一次解码后的图像数据再传输。
可选地,步骤3)所述创建PCIE读数据线程,具体如下:
31)申请PCIE通道的读写互斥锁,对每个PCIE通道的读写操作进行保护,不允许同时有多个PCIE通道进行读写操作;
32)查看主设备是否有新的图像数据可供读取,即在固定地址内的读数据长度是否不为零,同时主机的读地址也不为零;
33)根据协议规则在指定的读地址段读取数据,具体操作:设置PCIE读任务的目的地址为从设备的PCIE读地址;设置源地址为主设备的PCIE写地址;
34)通过ioctl函数对从设备发送读数据任务命令;判断读数据任务的返回值是否成功,如读数据任务成功则读长度清零,以供主设备进行下次传输数据;
35)解锁PCIE通道的读写互斥锁,释放资源。
可选地,步骤6)所述使用PCIE通道回传解码后的图像数据给主机的方法,具体为:
61)获取PCIE通道的读写互斥锁;
62)拷贝解码后的图像参数数据到DMA虚拟地址空间;
63)判断海思平台芯片内的写长度是否被主机清零,如果不为0则报错退出,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤61);反之则进入步骤64);
64)获取给主设备发送数据的目的物理地址,如果目的物理地址为零则报错退出,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤61);反之则进入步骤65);将海思的PCIE配置成从设备,主机的PCIE设备为主设备;
65)获取DMA传输的物理首地址和协议规定的偏移地址,将两者的和值作为DMA传输任务的源地址,将主机PCIE的物理地址vxworks_phy_addr作为任务的目的地址;
66)设置本次任务的传输长度为参数帧数据的长度sei_len;
67)判断当前PCIE的操作句柄是否大于零,如果是则使用系统函数ioctl下达PCIE写任务并进入下一步,如果不是则报错退出本次过程,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤61);
68)判断当前PCIE写任务的任务状态是否为完成,如果是则进入下一步,如果不是则报错退出本过程;待接收到新的解码后的图像参数数据后返回步骤61);
69)设置第二次DMA传输任务的源地址为图像帧数组数据,将主机物理地址vxworks_phy_addr偏移参数帧字节个数sei_len的地址作为任务的目的地址,设置图像帧长度frame_len为第二次任务的传输长度;
610)重复第67)和68),进入下一步;
611)将发送的图像帧长度frame_len写入到协议规定的内存地址,提示主机可以读取数据;
612)使用主机读取图像帧数据和参数帧数据,完成回传工作;
613)解锁PCIE通道的互斥锁,释放PCIE通道资源,待接收到新的解码后的图像参数数据后返回步骤步骤61)。
可选地,步骤1)所述将ffmpeg动态库移植到海思平台,具体为:
11)首先,配置ffmpeg编译属性,根据平台类型、cpu类型、编码解码器属性、格式转换属性、交叉编译属性配置参数;
12)修改acodec.h文件,增加参数帧长度sei_len和数组sei_buf,根据应用层需求确定其参数帧大小SEI_BUF_SIZE;
13)在hevc_sei.c文件中的decode_nal_sei_prefix函数中添加获取参数帧功能;
14)执行configure命令,在配置文件夹的子文件夹lib下将生成的解码库libavcodec、libavformat、libavutil、libswscale;
15)最后,将动态库拷贝到解码板卡的/usr/lib路径下。
可选地,步骤4)创建ffmpeg获取数据包线程,具体为:
421)获取从PCIE通道读取的图像数据数组首地址指针bufPtr和长度bufLen;
422)判断当前的数据长度bufLen是否大于0,如果是则继续下一步,如果不是,则退出本次数据的解码过程,等待下次PCIE通道传送的图像数据数据;
423)传送数据数组首地址指针bufPtr和长度bufLen给软解码模块,使用库函数av_parser_parse2对图像数据按帧进行分割,如果从数组能成功获得一个完整的图像帧数据包则记录继续下一步,如果不是则退出本次解码过程;等待PCIE通道传送的图像数据数组;
424)保存本次数据数组中图像帧分割的数据包长度ret,从数据数组总长度bufLen剔除本次分割的图像帧数据包长度ret,并向前移动首地址指针bufPtr,移动次数为ret;
425)将本次分割的图像完整数据包放到待解码队列中。
可选地,步骤5)所述压缩图像的数据包进行解码的方法,具体为:
51)根据图像参数和解码类型初始化硬解码模块,配置硬解码模块中视频数据缓冲区大小,启动解码模块;
52)动态申请视频图像帧数据包的缓冲区大小buf;
53)循环判断是否为解码结束,如果是则退出处理流程进行步骤57),否则进行下一步;
54)设置当前待解码帧的参数:流结束标志符、帧头标志,帧尾标志;
55)将图像帧数据放入buf;
56)调用动态库函数发送buf数据到硬解码模块;
57)实时监控硬解码模块的解码状态,如果解码错误则软重启硬解码模块并重置参数,如果解码正常则调用库函数获取解码后的图像;
58)调用库函数停止发送视频流给硬解码模块,关闭解码通道,解绑模块间的绑定关系,清除资源。
第二方面,一种处理装置,包括:
存储器,用于存储计算机程序;
处理器,用于从所述存储器调用并运行所述计算机程序,以执行第一方面所述方法。
一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序或指令,当所述计算机程序或指令被执行时,实现第一方面所述的方法。
一种计算机程序产品,所述计算机程序产品包括指令,当所述计算机程序产品在计算机上运行时,使得计算机执行第一方面所述的方法。
本发明与现有技术相比的优点在于:
本发明采用ffmpeg解码库获取原始帧中参数帧信息和数据帧信息,组合一个完整数据包给硬解码模块,减少解码时延,完成解码功能。同时,采用PCIE通道传输图像大数据,极大地减少了传输时延。
本发明为系统为linux下,以海思Hi3559AV100芯片作为硬解码模块,使用FFMPEG解码库获取完整数据包,有效获取压缩帧参数信息和图像帧信息,减少解码时间,同时启动PCIE通道对图像数据进行高效传输,极大地减少数据传输时延。
附图说明
图1为本发明一种软硬结合的高效传输的视频解码方案流程图。
具体实施方式
下面结合附图和具体实施方式对本发明做进一步详细的描述。
结合图1,为了解决linux系统下视频解码问题,我们采用基于ffmpeg软解码和海思芯片模块硬解码结合,同时利用PCIE通道对图像数据进行传输。下面我们对本发明的内容作进一步描述。
PCIE(Peripheral Components Interconnect Express)是一种高速串行计算机拓展总线标准。PCIE属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽。PCIE设备通过称为互联或链路的逻辑连接进行通信。链路是两个PCI Express端口之间的点对点通信通道,允许它们发送和接收普通PCI请求和中断。PCIE使用共享并行总线架构,其中PCI主机和所有设备共享一组通用的地址,数据和控制线。
1、移植ffmpeg到海思平台
11)首先,配置ffmpeg编译属性,根据平台类型、cpu类型、编码解码器属性、格式转换属性、交叉编译属性配置参数。
12)修改acodec.h文件,增加参数帧长度sei_len和数组sei_buf,根据应用层需求确定其参数帧大小SEI_BUF_SIZE;
13)在hevc_sei.c文件中的decode_nal_sei_prefix函数中添加获取参数帧功能:获取函数中的参数size,将size赋值给sei_len,判断size是否小于等于SEI_BUF_SIZE,如果满足条件则拷贝上下文参数数组gb内数据到sei_buf,拷贝的长度为size,拷贝的sei_buf的数组下标i为gb数组的索引index除以8,即sei_buf[i]=gb_buf[index/8];
14)然后,执行configure命令,在配置文件夹的子文件夹lib下将生成的解码库libavcodec、libavformat、libavutil、libswscale。
15)最后,将动态库拷贝到解码板卡的/usr/lib路径下;
2、配置PCIE设备
首先,根据传输需求,将海思的PCIE配置成从设备,主机的PCIE设备为主设备。
然后,配置PCIE的驱动文件。在海思板卡的系统路径/etc/profile里面自动加载3559驱动文件:hi35xx_dev_slv.ko、irq_map_slv.ko、mcc_drv_slv.ko、mcc_usrdev_slv.ko、pcit_dma_slv.ko。
最后,制定主设备和从设备传输规则,规则如下:
主设备上电后写入握手的规定内容,从设备在上电后检测到相应内容并握手成功;
主设备和从设备为每个通道分配读写的PCIE地址,不同的读写地址互不冲突;
主设备握手成功后在规定的PCIE地址段写入每个通道接收数据的地址内容;
主设备通过查询固定地址段的内容长度是否大于0作为判断是否有数据的标准,并在完成数据读取后将内容长度清零;
从设备在传输数据之前先通过固定地址段长度,判断主设备是否已读走上次数据(即固定地址段长度为0),如果是则写入解码后的图像数据并将长度写入,如果不是则放弃本次写数据任务,等待接收到下一次解码后的图像数据再传输;
3、获取主机通过PCIE传输的数据
创建PCIE读数据线程,线程具体操作为:
31)申请PCIE通道的读写互斥锁,对每个PCIE通道的读写操作进行保护,不允许同时有多个PCIE通道进行读写操作;
32)查看主设备是否有新的图像数据可供读取,即在固定地址内的读数据长度是否不为零,同时主机的读地址也不为零;
33)根据协议规则在指定的读地址段读取数据,具体操作:设置PCIE读任务的目的地址为从设备的PCIE读地址;设置源地址为主设备的PCIE写地址;
34)通过ioctl函数对从设备发送读数据任务命令;判断读数据任务的返回值是否成功,如读数据任务成功则读长度清零,以供主设备进行下次传输数据。
35)解锁PCIE通道的读写互斥锁,释放资源。
4、使用ffmpeg动态库获取压缩图像完整数据包
为ffmpeg创建使用环境,并指定启动要求的软解码器,可针对原始数据进行协议分析。同时,从网络接收的数据区循环获取原始数据,调用库函数获取可组合成完整图像帧的数据包的长度,从网络接收数据区剔除该长度并循环反复进行直到数据区没有任何数据。具体如下:
41)初始化解码库使用环境
首先,设置解码器类型,采用HEVC(h265)类型的解码器。然后,初始化解码器上下文环境,根据每帧图像数据的大小,动态申请图像帧存储空间。最后,根据参数打开解码器。
42)创建ffmpeg获取数据包线程,线程具体流程如下:
421)获取从PCIE通道读取的图像数据数组首地址指针bufPtr和长度bufLen;
422)判断当前的数据长度bufLen是否大于0,如果是则继续下一步,如果不是,则退出本次数据的解码过程,等待下次PCIE通道传送的图像数据数据。
423)传送数据数组首地址指针bufPtr和长度bufLen给软解码模块,使用库函数av_parser_parse2对图像数据按帧进行分割,如果从数组能成功获得一个完整的图像帧数据包则记录继续下一步,如果不是则退出本次解码过程;等待PCIE通道传送的图像数据数组。
424)保存本次数据数组中图像帧分割的数据包长度ret,从数据数组总长度bufLen剔除本次分割的图像帧数据包长度ret,并向前移动首地址指针bufPtr,移动次数为ret。
425)将本次分割的图像完整数据包放到待解码队列中。
5、将待解码的完整数据包发送给硬解码模块。
启动芯片的硬解码模块,根据需解码图像大小动态申请图像缓冲区的大小,将图像原始数据拷入缓存,并针对其配置信息进行硬解码。同时,针对错误帧导致解码模块无法工作的情况启动实时监控线程,分析其解码状态并实施软复位措施使得解码模块能持续进行解码工作。
51)根据图像参数和解码类型初始化硬解码模块,配置其视频数据缓冲区大小,启动解码模块;
52)动态申请视频图像帧数据包的缓冲区大小buf;
53)循环判断是否为解码结束,如果是则退出处理流程进行步骤57),否则进行下一步;
54)设置当前待解码帧的参数:流结束标志符、帧头标志,帧尾标志;
55)将图像帧数据放入buf;
56)调用动态库函数发送buf数据到硬解码模块;
57)实时监控硬解码模块解码状态,如果解码错误则软重启硬解码模块并重置参数,如果解码正常则调用库函数获取解码后的图像;
58)调用库函数停止发送视频流给硬解码模块,关闭解码通道,解绑各模块绑定关系,清除资源。
6、将解码后的图像通过PCIE发送给主机
获取硬解码后的目标图像后,将图像数据拷贝到DMA传输的内存空间,并启动DMA传输任务将图像数据发送到主机端的PCIE通道,并将发送长度写入协议规定的地址段通知主机读取数据。具体步骤如下:
61)获取PCIE通道的读写互斥锁;
62)拷贝解码后的图像参数数据到DMA虚拟地址空间;
63)判断海思平台芯片内的写长度是否被主机清零(即上一帧图像数据已被主设备取走),如果不为0则报错退出,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤61);反之则进入步骤64);
64)获取给主设备发送数据的目的物理地址,如果目的物理地址为零则报错退出,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤61);反之则进入步骤65);将海思平台的PCIE配置成从设备,主机的PCIE设备为主设备;
65)获取DMA传输的物理首地址和协议规定的偏移地址,将两者的和值作为DMA传输任务的源地址,将主机PCIE的物理地址vxworks_phy_addr作为任务的目的地址;
66)设置本次任务的传输长度为参数帧数据的长度sei_len;
67)判断当前PCIE的操作句柄是否大于零,如果是则使用系统函数ioctl下达PCIE写任务并进入下一步,如果不是则报错退出本次过程,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤61);
68)判断当前PCIE写任务的任务状态是否为完成,如果是则进入下一步,如果不是则报错退出本过程;待接收到新的解码后的图像参数数据后返回步骤61);
69)设置第二次DMA传输任务的源地址为图像帧数组数据,将主机物理地址vxworks_phy_addr偏移参数帧字节个数sei_len的地址作为任务的目的地址,设置图像帧长度frame_len为第二次任务的传输长度;
610)重复第67)和68),进入下一步;
611)将发送的图像帧长度frame_len写入到协议规定的内存地址,提示主机可以读取数据;
612)使用主机读取图像帧数据和参数帧数据,完成回传工作;
613)解锁PCIE通道的互斥锁,释放PCIE通道资源,待接收到新的解码后的图像参数数据后返回步骤步骤61)。
本发明步骤2)、3)和6)启动了PCIE通道对数据进行传输,有效的减少了传输时延。
本发明属于linux系统下视频解码技术,在系统为linux的应用场景下,针对海思Hi3559AV100芯片特点,并结合PCIE设备属性,设计实现了一种linux系统下基于软解码和硬解码结合的视频解码方案设计方法。
利用上述技术方案,采用上述操作步骤,本发明可以实现linux系统下视频解码和传输问题,该方法已经经过了算法验证,并进行了实验检验。结果标明,该方案可以为解决图像解码问题,采用软解码方法,动态过滤错帧,并获取完整数据包,使用芯片的硬解码模块完成解码过程,有效减少解码时间,采用PCIE通道传输解码前后的图像,极大地减少了数据传输时延。
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。
Claims (10)
1.一种软硬结合且高效传输的视频解码方法,其特征在于,包括如下步骤:
1)配置ffmpeg的编译属性和参数,将ffmpeg动态库移植到海思平台;
2)配置PCIE设备;
将海思平台的PCIE配置成从设备,主机的PCIE设备配置成主设备;同时,制定主设备和从设备的传输规则;
3)创建PCIE读数据线程,启动PCIE读任务获取主机传输的原始图像数据;
4)创建ffmpeg获取数据包线程,使用ffmpeg动态库获取压缩图像的完整数据包
5)使用海思平台的硬解码模块对压缩图像的数据包进行解码,获得解码后的图像数据;
6)使用PCIE通道回传解码后的图像数据给主机。
2.根据权利要求1所述的一种软硬结合且高效传输的视频解码方法,其特征在于,步骤2)所述主设备和从设备传输规则如下:
主设备上电后写入握手的规定内容,从设备在上电后检测到相应内容并握手成功;
主设备和从设备为每个通道分配读写的PCIE地址,不同的读写地址互不冲突;
主设备握手成功后在规定的PCIE地址段写入每个通道接收数据的地址内容;
主设备通过查询固定地址段的内容长度是否大于0作为判断是否有数据的标准,并在完成数据读取后将内容长度清零;
从设备在传输数据之前先通过固定地址段长度,判断主设备是否已读走上次数据,如果是则写入解码后的图像数据并将长度写入,如果不是则放弃本次写数据任务,等待接收到下一次解码后的图像数据再传输。
3.根据权利要求1所述的一种软硬结合且高效传输的视频解码方法,其特征在于,步骤3)所述创建PCIE读数据线程,具体如下:
31)申请PCIE通道的读写互斥锁,对每个PCIE通道的读写操作进行保护,不允许同时有多个PCIE通道进行读写操作;
32)查看主设备是否有新的图像数据可供读取,即在固定地址内的读数据长度是否不为零,同时主机的读地址也不为零;
33)根据协议规则在指定的读地址段读取数据,具体操作:设置PCIE读任务的目的地址为从设备的PCIE读地址;设置源地址为主设备的PCIE写地址;
34)通过ioctl函数对从设备发送读数据任务命令;判断读数据任务的返回值是否成功,如读数据任务成功则读长度清零,以供主设备进行下次传输数据;
35)解锁PCIE通道的读写互斥锁,释放资源。
4.根据权利要求1或3所述的一种软硬结合且高效传输的视频解码方法,其特征在于,步骤6)所述使用PCIE通道回传解码后的图像数据给主机的方法,具体为:
61)获取PCIE通道的读写互斥锁;
62)拷贝解码后的图像参数数据到DMA虚拟地址空间;
63)判断海思平台芯片内的写长度是否被主机清零,如果不为0则报错退出,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤61);反之则进入步骤64);
64)获取给主设备发送数据的目的物理地址,如果目的物理地址为零则报错退出,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤61);反之则进入步骤65);将海思的PCIE配置成从设备,主机的PCIE设备为主设备;
65)获取DMA传输的物理首地址和协议规定的偏移地址,将两者的和值作为DMA传输任务的源地址,将主机PCIE的物理地址vxworks_phy_addr作为任务的目的地址;
66)设置本次任务的传输长度为参数帧数据的长度sei_len;
67)判断当前PCIE的操作句柄是否大于零,如果是则使用系统函数ioctl下达PCIE写任务并进入下一步,如果不是则报错退出本次过程,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤61);
68)判断当前PCIE写任务的任务状态是否为完成,如果是则进入下一步,如果不是则报错退出本过程;待接收到新的解码后的图像参数数据后返回步骤61);
69)设置第二次DMA传输任务的源地址为图像帧数组数据,将主机物理地址vxworks_phy_addr偏移参数帧字节个数sei_len的地址作为任务的目的地址,设置图像帧长度frame_len为第二次任务的传输长度;
610)重复第67)和68),进入下一步;
611)将发送的图像帧长度frame_len写入到协议规定的内存地址,提示主机可以读取数据;
612)使用主机读取图像帧数据和参数帧数据,完成回传工作;
613)解锁PCIE通道的互斥锁,释放PCIE通道资源,待接收到新的解码后的图像参数数据后返回步骤步骤61)。
5.根据权利要求4所述的一种软硬结合且高效传输的视频解码方法,其特征在于,步骤1)所述将ffmpeg动态库移植到海思平台,具体为:
11)首先,配置ffmpeg编译属性,根据平台类型、cpu类型、编码解码器属性、格式转换属性、交叉编译属性配置参数;
12)修改acodec.h文件,增加参数帧长度sei_len和数组sei_buf,根据应用层需求确定其参数帧大小SEI_BUF_SIZE;
13)在hevc_sei.c文件中的decode_nal_sei_prefix函数中添加获取参数帧功能;
14)执行configure命令,在配置文件夹的子文件夹lib下将生成的解码库libavcodec、libavformat、libavutil、libswscale;
15)最后,将动态库拷贝到解码板卡的/usr/lib路径下。
6.根据权利要求5所述的一种软硬结合且高效传输的视频解码方法,其特征在于,步骤4)创建ffmpeg获取数据包线程,具体为:
421)获取从PCIE通道读取的图像数据数组首地址指针bufPtr和长度bufLen;
422)判断当前的数据长度bufLen是否大于0,如果是则继续下一步,如果不是,则退出本次数据的解码过程,等待下次PCIE通道传送的图像数据数据;
423)传送数据数组首地址指针bufPtr和长度bufLen给软解码模块,使用库函数av_parser_parse2对图像数据按帧进行分割,如果从数组能成功获得一个完整的图像帧数据包则记录继续下一步,如果不是则退出本次解码过程;等待PCIE通道传送的图像数据数组;
424)保存本次数据数组中图像帧分割的数据包长度ret,从数据数组总长度bufLen剔除本次分割的图像帧数据包长度ret,并向前移动首地址指针bufPtr,移动次数为ret;
425)将本次分割的图像完整数据包放到待解码队列中。
7.根据权利要求6所述的一种软硬结合且高效传输的视频解码方法,其特征在于,步骤5)所述压缩图像的数据包进行解码的方法,具体为:
51)根据图像参数和解码类型初始化硬解码模块,配置硬解码模块中视频数据缓冲区大小,启动解码模块;
52)动态申请视频图像帧数据包的缓冲区大小buf;
53)循环判断是否为解码结束,如果是则退出处理流程进行步骤57),否则进行下一步;
54)设置当前待解码帧的参数:流结束标志符、帧头标志,帧尾标志;
55)将图像帧数据放入buf;
56)调用动态库函数发送buf数据到硬解码模块;
57)实时监控硬解码模块的解码状态,如果解码错误则软重启硬解码模块并重置参数,如果解码正常则调用库函数获取解码后的图像;
58)调用库函数停止发送视频流给硬解码模块,关闭解码通道,解绑模块间的绑定关系,清除资源。
8.一种处理装置,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于从所述存储器调用并运行所述计算机程序,以执行权利要求2至7中任一项所述的方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序或指令,当所述计算机程序或指令被执行时,实现权利要求2至7中任一项所述的方法。
10.一种计算机程序产品,其特征在于,所述计算机程序产品包括指令,当所述计算机程序产品在计算机上运行时,使得计算机执行权利要求2至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110699060.7A CN113596469A (zh) | 2021-06-23 | 2021-06-23 | 一种软硬结合且高效传输的视频解码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110699060.7A CN113596469A (zh) | 2021-06-23 | 2021-06-23 | 一种软硬结合且高效传输的视频解码方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113596469A true CN113596469A (zh) | 2021-11-02 |
Family
ID=78244349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110699060.7A Pending CN113596469A (zh) | 2021-06-23 | 2021-06-23 | 一种软硬结合且高效传输的视频解码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113596469A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114327237A (zh) * | 2021-12-15 | 2022-04-12 | 中国地质大学(武汉) | 利用上位机进行实时数据解码的方法、装置及设备 |
CN117931458A (zh) * | 2024-03-21 | 2024-04-26 | 北京壁仞科技开发有限公司 | 一种推理服务调度方法、装置、处理器及芯片 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104980788A (zh) * | 2015-02-11 | 2015-10-14 | 腾讯科技(深圳)有限公司 | 视频解码方法及装置 |
US20160119572A1 (en) * | 2014-10-22 | 2016-04-28 | Genetec Inc. | System to dispatch video decoding to dedicated hardware resources |
CN108235096A (zh) * | 2018-01-18 | 2018-06-29 | 湖南快乐阳光互动娱乐传媒有限公司 | 移动终端硬解码智能切换软解码播放视频的方法 |
CN109274973A (zh) * | 2018-09-26 | 2019-01-25 | 江苏航天大为科技股份有限公司 | 嵌入式arm平台上的快速视频解码方法 |
EP3663930A1 (en) * | 2018-12-05 | 2020-06-10 | New Century Technologies Ltd. | Peripheral device with embedded video codec functionality |
CN112165623A (zh) * | 2020-09-30 | 2021-01-01 | 广州光锥元信息科技有限公司 | 软硬结合的音视频编解码装置 |
CN112261460A (zh) * | 2020-10-19 | 2021-01-22 | 天津津航计算技术研究所 | 一种基于pcie的多路视频解码方案设计方法 |
CN112511897A (zh) * | 2020-10-26 | 2021-03-16 | 长沙市到家悠享网络科技有限公司 | 视频封面设置方法、装置、设备和存储介质 |
CN112511840A (zh) * | 2020-12-24 | 2021-03-16 | 北京睿芯高通量科技有限公司 | 一种基于ffmpeg与硬件加速设备的解码系统及方法 |
CN112764954A (zh) * | 2019-10-21 | 2021-05-07 | 中车株洲电力机车研究所有限公司 | 嵌入式设备的启动诊断方法,嵌入式设备和存储介质 |
-
2021
- 2021-06-23 CN CN202110699060.7A patent/CN113596469A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160119572A1 (en) * | 2014-10-22 | 2016-04-28 | Genetec Inc. | System to dispatch video decoding to dedicated hardware resources |
CN104980788A (zh) * | 2015-02-11 | 2015-10-14 | 腾讯科技(深圳)有限公司 | 视频解码方法及装置 |
CN108235096A (zh) * | 2018-01-18 | 2018-06-29 | 湖南快乐阳光互动娱乐传媒有限公司 | 移动终端硬解码智能切换软解码播放视频的方法 |
CN109274973A (zh) * | 2018-09-26 | 2019-01-25 | 江苏航天大为科技股份有限公司 | 嵌入式arm平台上的快速视频解码方法 |
EP3663930A1 (en) * | 2018-12-05 | 2020-06-10 | New Century Technologies Ltd. | Peripheral device with embedded video codec functionality |
CN112764954A (zh) * | 2019-10-21 | 2021-05-07 | 中车株洲电力机车研究所有限公司 | 嵌入式设备的启动诊断方法,嵌入式设备和存储介质 |
CN112165623A (zh) * | 2020-09-30 | 2021-01-01 | 广州光锥元信息科技有限公司 | 软硬结合的音视频编解码装置 |
CN112261460A (zh) * | 2020-10-19 | 2021-01-22 | 天津津航计算技术研究所 | 一种基于pcie的多路视频解码方案设计方法 |
CN112511897A (zh) * | 2020-10-26 | 2021-03-16 | 长沙市到家悠享网络科技有限公司 | 视频封面设置方法、装置、设备和存储介质 |
CN112511840A (zh) * | 2020-12-24 | 2021-03-16 | 北京睿芯高通量科技有限公司 | 一种基于ffmpeg与硬件加速设备的解码系统及方法 |
Non-Patent Citations (3)
Title |
---|
MAOQIANG SONG; WENKUO XIONG; XIANGLING FU: "Research on Architecture of Multimedia and Its Design Based on Android", 《2010 INTERNATIONAL CONFERENCE ON INTERNET TECHNOLOGY AND APPLICATIONS》, 9 September 2010 (2010-09-09) * |
余启家: "基于硬解码的虚拟桌面客户机设计与实现", 《中国优秀硕士学位论文全文数据库(电子期刊)》, 15 May 2019 (2019-05-15) * |
刘建敏 杨斌: "嵌入式Linux下基于FFmPeg的视频硬件编解码", 《单片机与嵌入式系统应用》, 6 December 2011 (2011-12-06) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114327237A (zh) * | 2021-12-15 | 2022-04-12 | 中国地质大学(武汉) | 利用上位机进行实时数据解码的方法、装置及设备 |
CN117931458A (zh) * | 2024-03-21 | 2024-04-26 | 北京壁仞科技开发有限公司 | 一种推理服务调度方法、装置、处理器及芯片 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112261460B (zh) | 一种基于pcie的多路视频解码方案设计方法 | |
US10838665B2 (en) | Method, device, and system for buffering data for read/write commands in NVME over fabric architecture | |
CN113596469A (zh) | 一种软硬结合且高效传输的视频解码方法 | |
CN113645490B (zh) | 一种软硬结合的多通道视频同步解码方法 | |
WO2023005748A1 (zh) | 数据处理方法以及装置 | |
US20190073237A1 (en) | Techniques to copy an operating system | |
JP5194014B2 (ja) | データワードストリーム処理装置 | |
CN114546913B (zh) | 一种基于pcie接口的多主机之间数据高速交互的方法和装置 | |
CN113727114B (zh) | 一种可转码的视频解码方法 | |
CN115499505B (zh) | Usb网卡和通信方法 | |
CN112764877B (zh) | 一种用于硬件加速设备与docker内进程通信的方法与系统 | |
US20060236001A1 (en) | Direct memory access controller | |
CN113498595B (zh) | 一种基于PCIe的数据传输方法及装置 | |
US9122779B2 (en) | Bridge device with an error tolerant DMA transfer function | |
CN114385534A (zh) | 一种数据处理的方法及装置 | |
CN113709495B (zh) | 一种基于pcie缓冲机制的同步解码方法 | |
US8032675B2 (en) | Dynamic memory buffer allocation method and system | |
CN115827524A (zh) | 一种数据传输方法以及装置 | |
CN117312201B (zh) | 一种数据传输方法、装置及加速器设备、主机和存储介质 | |
CN113727115B (zh) | 一种高效可转码的视频解码方法 | |
US7930445B2 (en) | Computer system using remote I/O and I/O data transfer method | |
CN104025026B (zh) | 访问用于配置空间的配置和状态寄存器 | |
CN113727116A (zh) | 基于过滤机制的视频解码方法 | |
CN113645467B (zh) | 一种软硬结合的视频解码方法 | |
CN113747171B (zh) | 一种自恢复的视频解码方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |