CN113727115B - 一种高效可转码的视频解码方法 - Google Patents
一种高效可转码的视频解码方法 Download PDFInfo
- Publication number
- CN113727115B CN113727115B CN202110824903.1A CN202110824903A CN113727115B CN 113727115 B CN113727115 B CN 113727115B CN 202110824903 A CN202110824903 A CN 202110824903A CN 113727115 B CN113727115 B CN 113727115B
- Authority
- CN
- China
- Prior art keywords
- image
- data
- frame
- channel
- current
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 52
- 238000001914 filtration Methods 0.000 claims abstract description 18
- 230000006870 function Effects 0.000 claims description 50
- 230000005540 biological transmission Effects 0.000 claims description 45
- 238000006243 chemical reaction Methods 0.000 claims description 29
- 230000008569 process Effects 0.000 claims description 23
- 238000004590 computer program Methods 0.000 claims description 6
- 230000011218 segmentation Effects 0.000 claims description 6
- 230000009191 jumping Effects 0.000 claims description 4
- 238000003491 array Methods 0.000 claims description 3
- 230000007717 exclusion Effects 0.000 claims description 3
- 230000007246 mechanism Effects 0.000 abstract description 7
- 238000012216 screening Methods 0.000 abstract description 2
- 238000005516 engineering process Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000012958 reprocessing Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
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/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
- 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/40—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using video transcoding, i.e. partial or full decoding of a coded input stream followed by re-encoding of the decoded output stream
-
- 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
- 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
本发明涉及一种高效可转码的视频解码方法。首先,移植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属于硬解码范畴,在协议帧不完全符合解码协议,或者错误帧比较多的情况下,解码效率比较低下或者不能解码,并且对于带有参数帧的图像信息,硬解码模块无法提取参数信息。另外,在图像数据量比较大的情况下,网络传输占比时间长,严重影响了解码时间。解码后的图像格式在不符合应用层软件需求时,还需要对解码图像进行格式转化。
发明内容
本发明解决的技术问题是:克服现有技术的不足,本发明的目的是在linux平台下,针对海思Hi3559AV100芯片特点,并结合PCIE设备属性,设计实现了一种linux系统下一种高效可转码的视频解码方法。利用PCIE通道进行数据传输,使用FFMPEG软解码库获取完整帧信息,有效得获取压缩帧参数信息。同时针对协议类型,建立过滤机制筛选错误帧,传送可解码的数据包给海思Hi3559AV100芯片硬解码模块,从而完成解码和转码过程。
本发明的技术解决方案是:
一种高效可转码的视频解码方法,包括如下步骤:
1)配置ffmpeg的编译属性和参数,将ffmpeg动态库移植到海思平台;
2)配置PCIE设备,启动PCIE通道,制定主设备和从设备传输规则;
3)根据通道数为每个通道创建PCIE读数据线程,启动PCIE读任务获取主机传输的原始图像数据;
4)创建ffmpeg获取数据包线程,使用ffmpeg动态库获取含参数帧的完整压缩图像数据包;
5)对完整数据包进行过滤,将可解码的数据包发送到硬解码模块;
6)获取硬解码模块内的图像;
7)将解码后的图像转化为目标格式图像;
8)将转码后的图像通过PCIE通道发送给主机。
可选地,步骤7)所述将解码后的图像转化为目标格式图像,具体为:
71)判断历史记录的图像像素宽width和高height以及图像格式format是否与当前图像的宽和高、格式一致,如果一致就说明不需要进行转化,直接进入步骤8),否则进行下一步;
72)判断当前通道的转化上下文对象指针img_convert_ctx是否为空,如果不为空,则需要调用sws_freeContext库函数释放该对象指针,清空对该通道转化功能的配置参数;
73)将当前图像像素的宽、高和图像格式保存在历史记录标志width、height、format中,作为下次判断是否进行转化操作的参考值;
74)使用avpicture_get_size库函数,以一个最大图像像素Max_Width*Max_Height为函数参数,获取目标格式图像的字节数numBytes;
75)使用av_malloc库函数,以numBytes*sizeof(uint8_t)为参数,申请一个当前通道的存放图像RGB数据数组rgb;
76)以当前图像的RGB数据数组rgb、像素宽、高、目标格式为参数,调用avpicture_fill获取填充后的图像帧数组frameRgb;
77)使用当前图像帧的像素宽、高、当前帧格式、填充图像帧数组frameRgb、目标格式、转化方式为参数,调用sws_getContex库函数获取当前通道的转化上下文的对象img_convert_ctx;
78)使用sws_scale库函数将当前图像格式的图像转化为目标格式的图像,并进行相应的大小缩放,如果转化成功则将转化完的图像保存在frameRgb数组,如果转化不成功则报错提示并等待下一次图像传输。
可选地,步骤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路径下。
可选地,步骤2)所述主设备和从设备传输规则,具体为:
主设备上电后写入握手的规定内容,从设备在上电后检测到相应内容并握手成功;
主设备和从设备为每个通道分配读写的PCIE地址,并防止读写地址冲突;
主设备握手成功后在规定的PCIE地址段写入每个通道接收数据的地址内容;
主设备通过查询固定地址段的内容长度是否大于0作为判断是否有数据的标准,并在读走数据后将长度清零;
从设备在传输数据之前先判断主设备是否已读走上次数据,如果是则写入解码后的图像数据并将长度写入,如果不是则放弃本次写数据任务,等待下一次解码后的数据再传输。
可选地,步骤3)所述根据通道数为每个通道创建PCIE读数据线程,具体为:
31)申请PCIE通道的读写互斥锁,对每个通道的读写操作进行保护,不允许同时有多个通道进行读写操作;
32)查看主设备是否有新的图像数据可供读取,即在固定地址内的读数据长度是否不为零,同时主机的读地址也不为零;
33)根据协议规则再在指定的读地址段读取数据,设置PCIE读任务的目的地址为从设备的PCIE读地址;设置源地址为主设备的PCIE写地址;
34)然后,通过ioctl函数对从设备发送读数据任务命令;判断返回值是否成功,如成功则读长度清零,以供主设备进行下次传输数据;
35)解锁PCIE通道的读写互斥锁,释放资源。
可选地,步骤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)判断图像类型,分析不同类型需要的slice个数图像数据包中含P帧的个数,并记录在该通道的数据结构变量PSliceNumber;
52)判断当前数据包大小是否大于协议帧规定的最大数,如果大于则返回退出本次数据包的过滤过程,待接收到新的图像数据包后返回步骤51),否则进行下一步;
53)循环遍历本次数据包内的数据,依次判断当前帧是否符合h265协议帧头,如果符合则进行下一步,如果不符合则跳转到步骤59);
54)判断当前帧是否为P帧或者I帧,如果是,则需要增加本通道本次传输的数据包内sllice个数temp_PSliceNumber,进入下一步;如果不是则跳转到步骤56);
55)如果当前数据包的temp_PSliceNumber等于2,则再次判断p_slice是否为0,如果是,则设置p_size为i,并更新记录slice标志p_slice为1;
56)判断当前帧类型是否为SPS,是SPS则置标志top为1并进入步骤57);反之,则直接进入58);
57)继续判断当前帧是否为参数帧,如果是则将当前数据包数组ptr内的i位置拷贝到数据结构Idr_buf,保存sei帧之前的帧头信息,记录当前保存帧头的数据大小Idr_Size为i,将首次出现sps标识entryFlag为1,并清零top为0;完成后进入步骤58);
58)判断当前通道的图像数据是否需要插入I帧,并且entryFlag为1,如果上述两个条件成立则判断当前帧类型是否为p帧,如果是p帧则将数据包的帧类型字节内容由0x02改成0x26,即改P帧为I帧;反之则直接进入步骤49);
59)继续查看数据包内ptr是否还有其他数据需要遍历查询,如果有就回到步骤53),如果没有就继续下一步;
510)判断当前通道的insertIDR标志和entryFlag是否都为1,如果是则继续下一步,如果不是则进行步骤513);
511)判断当前temp_PSliceNumber是否等于本通道图像类型应该具备的PSliceNumber,如果是则下一步,如果不是则丢弃该数据包,退出该数据包的解码过程;待接收到新的图像数据包后返回步骤51);
512)将当前数据包内完整图像帧大小为size的数据,拷贝到Idr_Buf中,拷贝的位置从Idr_Buf的Idr_Size开始,将size的大小增大Idr_Size,再次将Idr_Buf的数据拷贝到ptr中,拷贝的数据大小为size;
513)判断当前temp_PSliceNumber是否等于本通道图像类型应该具备的PSliceNumber,如果是则进行下一步,如果不是则进行步骤515);
514)判断p_slice是否为1,如果是则将p_size赋值给size,清零p_slice;反之,则直接进入步骤515);
515)将当前通道的图像参数帧大小记录在seiSize中,同时拷贝当前图像的参数帧到当前通道的待解码图像数据结构体decodeArray中,将参数个数seiCount作为待解码图像的时间戳u64PTS;
516)查询当前通道的解码状态,并把状态结构体中的已解码图像帧数保存到u32DecodeStreamFrames;
517)获取当前通道待解码图像数据的首地址ptr和数据长度size,时间戳u64PTS,并以流形式发送到解码模块;
518)循环查询解码器的工作状态,直至获得新的解码图像;
519)调用海思库函数查询解码器通道状态;
520)判断通道内剩余需解码的字节数是否为0,如果是则进去下一步,如果不是则延时1ms跳转到步骤519);
521)解码器通道已经解码后的图像帧数是否与之前保存的u32DecodeStreamFrames不相等,或者该通道的insertIDR标识为1,如果是进入下一步,如果不是则到步骤523);
522)将insrtIDR标识清零,增加参数帧的个数,判断如果seiCount大于协议指定大的最大值SEI_NUM,则将参数帧的个数标志seiCount清零,进入步骤526);反之,则直接进入下一步;
523)复位解码器,进入步骤524);
524)判断解码器复位标志resetFlag是否为0,如果是则进入下一步,如果不是则继续等待1ms,跳转到步骤523);
525)将复位状态resetState置1,调用库函数停止解码通道的视频流接收任务,销毁解码通道,重启解码通道,将插入I帧的标志insertIDR置1,复位状态resetState置0,进入下一步;
526)结束本次过滤过程。
可选地,步骤8)所述将转码后的图像通过PCIE通道发送给主机,具体为:
81)获取PCIE通道的读写互斥锁;
82)拷贝解码后的图像参数数据到DMA虚拟地址空间;
83)判断海思平台芯片内的写长度是否被主机清零,如果为0则报错退出,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤81);反之则进入步骤84);
84)获取给主设备发送数据的目的物理地址,如果为零则报错退出,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤81);反之则进入步骤85);
85)获取DMA传输的物理首地址和协议规定的偏移地址,将两者的和作为DMA传输任务的源地址,将主机PCIE的物理地址vxworks_phy_addr作为任务的目的地址;
86)设置本次任务的传输长度为参数帧数据的长度sei_len;
87)判断当前PCIE设备的操作句柄是否大于零,如果是则使用系统函数ioctl下达PCIE写任务并进入下一步,如果不是则报错退出本次过程,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤81);
88)判断当前PCIE写任务的任务状态是否为完成,如果是则进入下一步,如果不是则报错退出本过程;待接收到新的解码后的图像参数数据后返回步骤81);
89)设置第二次DMA传输任务的源地址为图像帧数组数据,将主机物理地址vxworks_phy_addr偏移参数帧字节个数sei_len的地址作为任务的目的地址,设置图像帧长度frame_len为第二次任务的传输长度;
810)重复步骤87)和步骤88),进入下一步;
811)将发送的图像帧长度frame_len写入到协议规定的内存地址,提示主机可以读取数据;
812)使用主机读取图像帧数据和参数帧数据,完成回传工作;
813)解锁PCIE通道的互斥锁,释放PCIE通道资源,待接收到新的解码后的图像参数数据后返回步骤81)。
第二方面,一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面所述的方法的步骤。
一种具有处理器可执行的非易失的程序代码的计算机可读介质,所述程序代码使所述处理器执行第一方面所述方法。
本发明与现有技术相比的优点在于:
本发明利用PCIE通道采取DMA传输方式对图像大数据进行传输,同时采用ffmpeg解码库获取原始帧中参数帧信息和数据帧信息,获取完整图像帧数据包;建立过滤机制筛选出错误帧,调整数据包内的帧顺序,传输可解码的完整数据包给硬解码模块,完成解码和转码功能。
附图说明
图1为本发明一种高效可转码的视频解码方法实现流程图。
具体实施方式
结合图1,为了解决linux系统下视频解码问题,采用基于ffmpeg软解码和海思芯片模块硬解码结合的方法。下面对本发明的内容作进一步描述。
1)配置ffmpeg的编译属性和参数,将ffmpeg动态库移植到海思平台
首先,配置ffmpeg编译属性。然后,修改ffmpeg源码,使其具备返回参数帧的功能,交叉编译ffmpeg源码。最后,获取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设备为主设备。
然后,配置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读任务获取主机传输的原始图像数据
首先,创建PCIE读数据线程实时查看主机是否有新的图像数据可供读取;然后根据协议规则再在指定的地址段读取数据;最后将读完标志清零,以供主机进行下次传输数据。
根据通道数为每个通道创建PCIE读数据线程,线程具体操作为:
31)申请PCIE通道的读写互斥锁,对每个通道的读写操作进行保护,不允许同时有多个通道进行读写操作;
32)查看主设备是否有新的图像数据可供读取,即在固定地址内的读数据长度是否不为零,同时主机的读地址也不为零;
33)根据协议规则再在指定的读地址段读取数据,具体操作:设置PCIE读任务的目的地址为从设备的PCIE读地址;设置源地址为主设备的PCIE写地址);
34)然后,通过ioctl函数对从设备发送读数据任务命令;判断返回值是否成功,如成功则读长度清零,以供主设备进行下次传输数据。
35)解锁PCIE通道的读写互斥锁,释放资源。
4)创建ffmpeg获取数据包线程,使用ffmpeg动态库获取含参数帧的完整压缩图像数据包
首先,初始化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)判断图像类型,分析不同类型需要的slice个数图像数据包中含P帧的个数),并记录在该通道的数据结构变量PSliceNumber。
52)判断当前数据包大小是否大于协议帧规定的最大数,如果大于则返回退出本次数据包的过滤过程,待接收到新的图像数据包后返回步骤51),否则进行下一步;
53)循环遍历本次数据包内的数据,遍历从0到(size-3),size为该数据包的大小,依次判断当前帧是否符合h265协议帧头(即具备连续三个字节为00 0001),如果符合则进行下一步,如果不符合则跳转到步骤59);
54)判断当前帧是否为P帧或者I帧,如果是,则需要增加本通道本次传输的数据包内sllice个数temp_PSliceNumber,进入下一步;如果不是则跳转到步骤56);
55)如果当前数据包的temp_PSliceNumber等于2,则再次判断当前slice是否为本数据包第一个slice即p_slice是否为0,如果是,则记录当前数据包ptr内遍历字节所在的位置i,即设置p_size为i,并更新记录slice标志p_slice为1,表示已经存在一个slice;
56)判断当前帧类型是否为SPS,是SPS则置标志top为1并进入步骤57);反之,则直接进入58);
57)继续判断当前帧是否为参数帧(sei帧),如果是则将当前数据包数组ptr内的i位置拷贝到数据结构Idr_buf,保存sei帧之前的帧头信息(vps,pps,sps帧),记录当前保存帧头的数据大小Idr_Size为i,将首次出现sps标识entryFlag为1,并清零top为0;完成后进入步骤58);
58)判断当前通道的图像数据是否需要插入I帧(用insertIDR标识),并且entryFlag为1,如果上述两个条件成立则判断当前帧类型是否为p帧,如果是p帧则将数据包的帧类型字节内容由0x02改成0x26,即改P帧为I帧;反之则直接进入步骤49);
59)继续查看数据包内ptr是否还有其他数据需要遍历查询,如果有就回到步骤53),如果没有就继续下一步;
510)判断当前通道的insertIDR标志和entryFlag是否都为1,如果是则继续下一步,如果不是则进行步骤513);
511)判断当前temp_PSliceNumber是否等于本通道图像类型应该具备的PSliceNumber,如果是则下一步,如果不是则丢弃该数据包,退出该数据包的解码过程;待接收到新的图像数据包后返回步骤51);
512)将当前数据包内完整图像帧大小为size的数据,拷贝到Idr_Buf中,拷贝的位置从Idr_Buf的Idr_Size开始,将size的大小增大Idr_Size(即当前数据包大小需要插入之前保存的帧头信息),再次将Idr_Buf的数据拷贝到ptr中,拷贝的数据大小为size;
513)判断当前temp_PSliceNumber是否等于本通道图像类型应该具备的PSliceNumber,如果是则进行下一步,如果不是则进行步骤515);
514)判断p_slice是否为1,如果是则将p_size赋值给size(即只取),清零p_slice;反之,则直接进入步骤515);
515)将当前通道的图像参数帧大小记录在seiSize中,同时拷贝当前图像的参数帧到当前通道的待解码图像数据结构体decodeArray中,将参数个数seiCount作为待解码图像的时间戳u64PTS;
516)查询当前通道的解码状态,并把状态结构体中的已解码图像帧数保存到u32DecodeStreamFrames;
517)获取当前通道待解码图像数据的首地址ptr和数据长度size,时间戳u64PTS,并以流形式发送到解码模块;
518)循环查询解码器的工作状态,直至获得新的解码图像;
519)调用海思库函数查询解码器通道状态;
520)判断通道内剩余需解码的字节数是否为0,如果是则进去下一步,如果不是则延时1ms跳转到步骤519);
521)解码器通道已经解码后的图像帧数是否与之前保存的u32DecodeStreamFrames不相等,或者该通道的insertIDR(需要插入I帧)标识为1,如果是进入下一步,如果不是则到步骤523);
522)将insrtIDR标识清零,增加参数帧的个数(seiCount增加1),判断如果seiCount大于协议指定大的最大值SEI_NUM,则将参数帧的个数标志seiCount清零,进入步骤526);反之,则直接进入下一步;
523)复位解码器,进入步骤524);
524)判断解码器复位标志resetFlag是否为0,如果是则进入下一步,如果不是则继续等待1ms,跳转到步骤523);
525)将复位状态resetState置1,调用库函数停止解码通道的视频流接收任务,销毁解码通道,重启解码通道,将插入I帧的标志insertIDR置1,复位状态resetState置0,进入下一步;
526)结束本次过滤过程;
6)获取解码器通道内的图像
建立获取解码图像任务,实时读取解码器工作状态,调用库函数获取解码通道内解码图像。具体步骤如下:
61)创建获取解码图像线程;
62)进入图像获取循环;
63)查询通道内的复位状态resetState是否为1,如果是1则延时1ms,继续查询复位状态,如果不是则进行下一步;
64)调用库函数HI_MPI_VDEC_GetFrame获取图像存储的内存地址。如果失败则跳转到步骤63),如果成功则进入下一步;
65)将复位标志resetFlag置1;
7)将解码后的图像转化为目标格式图像
使用软解码动态库对解码图像进行再处理,创建转化线程任务,将解码图像转化成应用层需要的目标格式和目标像素大小的图像,具体步骤如下:
71)判断历史记录的图像像素宽width和高height以及图像格式format是否与当前图像的宽和高、格式一致,如果一致就说明不需要进行转化,直接进入步骤8),否则进行下一步;
72)判断当前通道的转化上下文对象指针img_convert_ctx是否为空,如果不为空,则需要调用sws_freeContext库函数释放该对象指针,清空对该通道转化功能的配置参数;
73)将当前图像像素的宽、高和图像格式保存在历史记录标志width、height、format中,作为下次判断是否进行转化操作的参考值;
74)使用avpicture_get_size库函数,以一个最大图像像素Max_Width*Max_Height为函数参数,获取目标格式图像的字节数numBytes;
75)使用av_malloc库函数,以numBytes*sizeof(uint8_t)(uint8_t为无符号8位二进制整型)为参数,申请一个当前通道的存放图像RGB数据数组rgb;
76)以当前图像的RGB数据数组rgb、像素宽、高、目标格式为参数,调用avpicture_fill获取填充后的图像帧数组frameRgb;
77)使用当前图像帧的像素宽、高、当前帧格式、填充图像帧数组frameRgb、目标格式、转化方式为参数,调用sws_getContex库函数获取当前通道的转化上下文的对象img_convert_ctx;
78)使用sws_scale库函数将当前图像格式的图像转化为目标格式的图像,并进行相应的大小缩放,如果转化成功则将转化完的图像保存在frameRgb数组,如果转化不成功则报错提示并等待下一次图像传输;
8)将转码后的图像通过PCIE通道发送给主机。
获取转码后的目标图像后,将图像数据拷贝到DMA传输的内存空间,并启动DMA传输任务将图像数据发送到主机端的PCIE通道,并将发送长度写入协议规定的地址段通知主机读取数据。具体步骤如下:
81)获取PCIE通道的读写互斥锁;
82)拷贝解码后的图像参数数据到DMA虚拟地址空间;
83)判断海思平台芯片内的写长度是否被主机清零(即上一帧图像数据已被主设备取走),如果为0则报错退出,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤81);反之则进入步骤84);
84)获取给主设备发送数据的目的物理地址,如果为零则报错退出,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤81);反之则进入步骤85);
85)获取DMA传输的物理首地址和协议规定的偏移地址,将两者的和作为DMA传输任务的源地址,将主机PCIE的物理地址vxworks_phy_addr作为任务的目的地址;
86)设置本次任务的传输长度为参数帧数据的长度sei_len;
87)判断当前PCIE设备的操作句柄是否大于零,如果是则使用系统函数ioctl下达PCIE写任务并进入下一步,如果不是则报错退出本次过程,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤81);
88)判断当前PCIE写任务的任务状态是否为完成,如果是则进入下一步,如果不是则报错退出本过程;待接收到新的解码后的图像参数数据后返回步骤81);
89)设置第二次DMA传输任务的源地址为图像帧数组数据,将主机物理地址vxworks_phy_addr偏移参数帧字节个数sei_len的地址作为任务的目的地址,设置图像帧长度frame_len为第二次任务的传输长度;
810)重复步骤87)和步骤88),进入下一步;
811)将发送的图像帧长度frame_len写入到协议规定的内存地址,提示主机可以读取数据;
812)使用主机读取图像帧数据和参数帧数据,完成回传工作;
813)解锁PCIE通道的互斥锁,释放PCIE通道资源,待接收到新的解码后的图像参数数据后返回步骤81)。
一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
一种具有处理器可执行的非易失的程序代码的计算机可读介质,所述程序代码使所述处理器执行上述方法。
利用上述技术方案,采用上述操作步骤,本发明可以实现linux系统下视频解码和传输问题,该方法已经经过了算法验证,并进行了实验检验。结果标明,该方案可以为解决图像解码问题,采用软解码方法,组成包含图像帧和参数帧的完整数据包,采用过滤机制,动态筛选不符合协议类型的错误帧,获取可解码的图像数据包,再使用芯片的硬解码模块完成解码和转码过程,有效减少解码时间。另外,使用PCIE通道的DMA传输方式对图像大数据进行传输,极大地减少了传输时延。
在本发明中,步骤1)对板卡进行了解码环境的配置,对其软解码库ffmpeg移植适应海思平台,同时对ffmpeg进行修改,使其返回的图像数据包带有参数帧。
步骤2)和步骤3)配置了PCIE设备,建立与主机传输过程的规则,启动PCIE的DMA传输模式,对图像大数据进行接收。
步骤7)再次使用PCIE回传解码后图像给主机,完成传输任务。
步骤3)为ffmpeg创建使用环境,并指定启动要求的解码器,可针对原始数据进行协议分析。同时,从网络接收的数据区循环获取原始数据,调用库函数获取可组合成带有参数帧的完整图像帧的数据包的长度,从网络接收数据区从剔除该长度并循环反复进行直到数据区没有任何数据。
步骤4)建立过滤机制,动态筛选出不符合协议规定的错误帧,分析编码规律,调整数据包图像帧顺序,根据编码器特性动态修改帧类型,使其组合成可解码的图像数据包。同时,实时监控解码器状态,根据当前数据包的需求启动复位解码通道操作,使其解码模块持续进行工作。
步骤5)创建获取数据线程,根据复位状态启动库函数获取解码通道内的图像,并在数据后修改其复位状态使得步骤4能实时更新解码器工作状态。
步骤6)使用硬解码模块内的视频图形子系统对解码后的图像进行格式转化,以任务形式持续处理解码通道内的图像,为应用层显示需要提供支持。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
本发明说明书中未作详细描述的内容属本领域专业技术人员的公知技术。
Claims (9)
1.一种高效可转码的视频解码方法,其特征在于,包括如下步骤:
1)配置ffmpeg的编译属性和参数,将ffmpeg动态库移植到海思平台;
2)配置PCIE设备,启动PCIE通道,制定主设备和从设备传输规则;
3)根据通道数为每个通道创建PCIE读数据线程,启动PCIE读任务获取主机传输的原始图像数据;
4)创建ffmpeg获取数据包线程,使用ffmpeg动态库获取含参数帧的完整压缩图像数据包;
5)对完整数据包进行过滤,将可解码的数据包发送到硬解码模块;
6)获取硬解码模块内的图像;
7)将解码后的图像转化为目标格式图像;
8)将转码后的图像通过PCIE通道发送给主机;
步骤5)所述对完整数据包进行过滤,具体为:
51)判断图像类型,分析不同类型需要的slice个数图像数据包中含P帧的个数,并记录在该通道的数据结构变量PSliceNumber;
52)判断当前数据包大小是否大于协议帧规定的最大数,如果大于则返回退出本次数据包的过滤过程,待接收到新的图像数据包后返回步骤51),否则进行下一步;
53)循环遍历本次数据包内的数据,依次判断当前帧是否符合h265协议帧头,如果符合则进行下一步,如果不符合则跳转到步骤59);
54)判断当前帧是否为P帧或者I帧,如果是,则需要增加本通道本次传输的数据包内sllice个数temp_PSliceNumber,进入下一步;如果不是则跳转到步骤56);
55)如果当前数据包的temp_PSliceNumber等于2,则再次判断p_slice是否为0,如果是,则设置p_size为i,并更新记录slice标志p_slice为1;
56)判断当前帧类型是否为SPS,是SPS则置标志top为1并进入步骤
57);反之,则直接进入58);
57)继续判断当前帧是否为参数帧,如果是则将当前数据包数组ptr内的i位置拷贝到数据结构Idr_buf,保存sei帧之前的帧头信息,记录当前保存帧头的数据大小Idr_Size为i,将首次出现sps标识entryFlag为1,并清零top为0;完成后进入步骤58);
58)判断当前通道的图像数据是否需要插入I帧,并且entryFlag为1,如果上述两个条件成立则判断当前帧类型是否为p帧,如果是p帧则将数据包的帧类型字节内容由0x02改成0x26,即改P帧为I帧;反之则直接进入步骤59);
59)继续查看数据包内ptr是否还有其他数据需要遍历查询,如果有就回到步骤53),如果没有就继续下一步;
510)判断当前通道的insertIDR标志和entryFlag是否都为1,如果是则继续下一步,如果不是则进行步骤513);
511)判断当前temp_PSliceNumber是否等于本通道图像类型应该具备的PSliceNumber,如果是则下一步,如果不是则丢弃该数据包,退出该数据包的解码过程;待接收到新的图像数据包后返回步骤51);
512)将当前数据包内完整图像帧大小为size的数据,拷贝到Idr_Buf中,拷贝的位置从Idr_Buf的Idr_Size开始,将size的大小增大Idr_Size,再次将Idr_Buf的数据拷贝到ptr中,拷贝的数据大小为size;
513)判断当前temp_PSliceNumber是否等于本通道图像类型应该具备的PSliceNumber,如果是则进行下一步,如果不是则进行步骤515);
514)判断p_slice是否为1,如果是则将p_size赋值给size,清零p_slice;反之,则直接进入步骤515);
515)将当前通道的图像参数帧大小记录在seiSize中,同时拷贝当前图像的参数帧到当前通道的待解码图像数据结构体decodeArray中,将参数个数seiCount作为待解码图像的时间戳u64PTS;
516)查询当前通道的解码状态,并把状态结构体中的已解码图像帧数保存到u32DecodeStreamFrames;
517)获取当前通道待解码图像数据的首地址ptr和数据长度size,时间戳u64PTS,并以流形式发送到解码模块;
518)循环查询解码器的工作状态,直至获得新的解码图像;
519)调用海思库函数查询解码器通道状态;
520)判断通道内剩余需解码的字节数是否为0,如果是则进去下一步,如果不是则延时1ms跳转到步骤519);
521)解码器通道已经解码后的图像帧数是否与之前保存的u32DecodeStreamFrames不相等,或者该通道的insertIDR标识为1,如果是进入下一步,如果不是则到步骤523);
522)将insrtIDR标识清零,增加参数帧的个数,判断如果seiCount大于协议指定大的最大值SEI_NUM,则将参数帧的个数标志seiCount清零,进入步骤526);反之,则直接进入下一步;
523)复位解码器,进入步骤524);
524)判断解码器复位标志resetFlag是否为0,如果是则进入下一步,如果不是则继续等待1ms,跳转到步骤523);
525)将复位状态resetState置1,调用库函数停止解码通道的视频流接收任务,销毁解码通道,重启解码通道,将插入I帧的标志insertIDR置1,复位状态resetState置0,进入下一步;
526)结束本次过滤过程。
2.根据权利要求1所述的一种高效可转码的视频解码方法,其特征在于,步骤7)所述将解码后的图像转化为目标格式图像,具体为:
71)判断历史记录的图像像素宽width和高height以及图像格式format是否与当前图像的宽和高、格式一致,如果一致就说明不需要进行转化,直接进入步骤8),否则进行下一步;
72)判断当前通道的转化上下文对象指针img_convert_ctx是否为空,如果不为空,则需要调用sws_freeContext库函数释放该对象指针,清空对该通道转化功能的配置参数;
73)将当前图像像素的宽、高和图像格式保存在历史记录标志width、height、format中,作为下次判断是否进行转化操作的参考值;
74)使用avpicture_get_size库函数,以一个最大图像像素Max_Width*Max_Height为函数参数,获取目标格式图像的字节数numBytes;
75)使用av_malloc库函数,以numBytes*sizeof(uint8_t)为参数,申请一个当前通道的存放图像RGB数据数组rgb;
76)以当前图像的RGB数据数组rgb、像素宽、高、目标格式为参数,调用avpicture_fill获取填充后的图像帧数组frameRgb;
77)使用当前图像帧的像素宽、高、当前帧格式、填充图像帧数组frameRgb、目标格式、转化方式为参数,调用sws_getContex库函数获取当前通道的转化上下文的对象img_convert_ctx;
78)使用sws_scale库函数将当前图像格式的图像转化为目标格式的图像,并进行相应的大小缩放,如果转化成功则将转化完的图像保存在frameRgb数组,如果转化不成功则报错提示并等待下一次图像传输。
3.根据权利要求2所述的一种高效可转码的视频解码方法,其特征在于,步骤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)最后,将解码库libavcodec、libavformat、libavutil、libswscale拷贝到解码板卡的/usr/lib路径下。
4.根据权利要求3所述的一种高效可转码的视频解码方法,其特征在于,步骤2)所述主设备和从设备传输规则,具体为:
主设备上电后写入握手的规定内容,从设备在上电后检测到相应内容并握手成功;
主设备和从设备为每个通道分配读写的PCIE地址,并防止读写地址冲突;
主设备握手成功后在规定的PCIE地址段写入每个通道接收数据的地址内容;
主设备通过查询固定地址段的内容长度是否大于0作为判断是否有数据的标准,并在读走数据后将长度清零;
从设备在传输数据之前先判断主设备是否已读走上次数据,如果是则写入解码后的图像数据并将长度写入,如果不是则放弃本次写数据任务,等待下一次解码后的数据再传输。
5.根据权利要求4所述的一种高效可转码的视频解码方法,其特征在于,步骤3)所述根据通道数为每个通道创建PCIE读数据线程,具体为:
31)申请PCIE通道的读写互斥锁,对每个通道的读写操作进行保护,不允许同时有多个通道进行读写操作;
32)查看主设备是否有新的图像数据可供读取,即在固定地址内的读数据长度是否不为零,同时主机的读地址也不为零;
33)根据协议规则再在指定的读地址段读取数据,设置PCIE读任务的目的地址为从设备的PCIE读地址;设置源地址为主设备的PCIE写地址;
34)然后,通过ioctl函数对从设备发送读数据任务命令;判断返回值是否成功,如成功则读长度清零,以供主设备进行下次传输数据;
35)解锁PCIE通道的读写互斥锁,释放资源。
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所述的一种高效可转码的视频解码方法,其特征在于,步骤8)所述将转码后的图像通过PCIE通道发送给主机,具体为:
81)获取PCIE通道的读写互斥锁;
82)拷贝解码后的图像参数数据到DMA虚拟地址空间;
83)判断海思平台芯片内的写长度是否被主机清零,如果为0则报错退出,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤81);反之则进入步骤84);
84)获取给主设备发送数据的目的物理地址,如果为零则报错退出,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤81);反之则进入步骤85);
85)获取DMA传输的物理首地址和协议规定的偏移地址,将两者的和作为DMA传输任务的源地址,将主机PCIE的物理地址vxworks_phy_addr作为任务的目的地址;
86)设置本次任务的传输长度为参数帧数据的长度sei_len;
87)判断当前PCIE设备的操作句柄是否大于零,如果是则使用系统函数ioctl下达PCIE写任务并进入下一步,如果不是则报错退出本次过程,终止图像发送任务,待接收到新的解码后的图像参数数据后返回步骤81);
88)判断当前PCIE写任务的任务状态是否为完成,如果是则进入下一步,如果不是则报错退出本过程;待接收到新的解码后的图像参数数据后返回步骤81);
89)设置第二次DMA传输任务的源地址为图像帧数组数据,将主机物理地址vxworks_phy_addr偏移参数帧字节个数sei_len的地址作为任务的目的地址,设置图像帧长度frame_len为第二次任务的传输长度;
810)重复步骤87)和步骤88),进入下一步;
811)将发送的图像帧长度frame_len写入到协议规定的内存地址,提示主机可以读取数据;
812)使用主机读取图像帧数据和参数帧数据,完成回传工作;
813)解锁PCIE通道的互斥锁,释放PCIE通道资源,待接收到新的解码后的图像参数数据后返回步骤81)。
8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述权利要求1至7任一项所述的方法的步骤。
9.一种具有处理器可执行的非易失的程序代码的计算机可读介质,其特征在于,所述程序代码使所述处理器执行所述权利要求1-7任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110824903.1A CN113727115B (zh) | 2021-07-21 | 2021-07-21 | 一种高效可转码的视频解码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110824903.1A CN113727115B (zh) | 2021-07-21 | 2021-07-21 | 一种高效可转码的视频解码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113727115A CN113727115A (zh) | 2021-11-30 |
CN113727115B true CN113727115B (zh) | 2024-04-23 |
Family
ID=78673607
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110824903.1A Active CN113727115B (zh) | 2021-07-21 | 2021-07-21 | 一种高效可转码的视频解码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113727115B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114302172B (zh) * | 2021-12-28 | 2023-08-18 | 威创集团股份有限公司 | 无缝切换方法、分布式拼接系统、存储介质及计算机设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106131563A (zh) * | 2016-07-28 | 2016-11-16 | 武汉斗鱼网络科技有限公司 | 基于dxva进行硬件解码h264视频流的方法及系统 |
CN108235096A (zh) * | 2018-01-18 | 2018-06-29 | 湖南快乐阳光互动娱乐传媒有限公司 | 移动终端硬解码智能切换软解码播放视频的方法 |
CN109274973A (zh) * | 2018-09-26 | 2019-01-25 | 江苏航天大为科技股份有限公司 | 嵌入式arm平台上的快速视频解码方法 |
CA3031366A1 (en) * | 2018-01-30 | 2019-07-30 | Deluxe Entertainment Services Group Inc. | Cognitive indexing of images in digital video content |
CN110351533A (zh) * | 2019-08-12 | 2019-10-18 | 桂林电子科技大学 | 基于Linux的视频图像处理的网络传输监控系统及其实现方法 |
CN111866546A (zh) * | 2020-07-21 | 2020-10-30 | 山东超越数控电子股份有限公司 | 一种基于FFmpeg的网络音频选择源的实现方法 |
CN112261460A (zh) * | 2020-10-19 | 2021-01-22 | 天津津航计算技术研究所 | 一种基于pcie的多路视频解码方案设计方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180192085A1 (en) * | 2016-12-30 | 2018-07-05 | Spotcheck Mobile Inc. | Method and apparatus for distributed video transmission |
-
2021
- 2021-07-21 CN CN202110824903.1A patent/CN113727115B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106131563A (zh) * | 2016-07-28 | 2016-11-16 | 武汉斗鱼网络科技有限公司 | 基于dxva进行硬件解码h264视频流的方法及系统 |
CN108235096A (zh) * | 2018-01-18 | 2018-06-29 | 湖南快乐阳光互动娱乐传媒有限公司 | 移动终端硬解码智能切换软解码播放视频的方法 |
CA3031366A1 (en) * | 2018-01-30 | 2019-07-30 | Deluxe Entertainment Services Group Inc. | Cognitive indexing of images in digital video content |
CN109274973A (zh) * | 2018-09-26 | 2019-01-25 | 江苏航天大为科技股份有限公司 | 嵌入式arm平台上的快速视频解码方法 |
CN110351533A (zh) * | 2019-08-12 | 2019-10-18 | 桂林电子科技大学 | 基于Linux的视频图像处理的网络传输监控系统及其实现方法 |
CN111866546A (zh) * | 2020-07-21 | 2020-10-30 | 山东超越数控电子股份有限公司 | 一种基于FFmpeg的网络音频选择源的实现方法 |
CN112261460A (zh) * | 2020-10-19 | 2021-01-22 | 天津津航计算技术研究所 | 一种基于pcie的多路视频解码方案设计方法 |
Non-Patent Citations (3)
Title |
---|
Packet-Preserving Network Coding Schemes for Padding Overhead Reduction;Bertram Schütz et al.;《 2019 IEEE 44th Conference on Local Computer Networks (LCN) 》;20200213;全文 * |
基于FPGA的H.264码流实时传输系统设计;马军等;《 计算机测量与控制 》;20210611(第5期);全文 * |
基于Linux系统的互联网高清播放器的设计与实现;万江;《中国优秀硕士学位论文全文数据库信息科技辑》;20160315(第3期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113727115A (zh) | 2021-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112261460B (zh) | 一种基于pcie的多路视频解码方案设计方法 | |
CN113727114B (zh) | 一种可转码的视频解码方法 | |
CN114556956A (zh) | 使用旁路子流和经熵编码子流的低时延编码 | |
CN113645490B (zh) | 一种软硬结合的多通道视频同步解码方法 | |
CN112839231B (zh) | 一种视频压缩传输方法和系统 | |
JP6705097B2 (ja) | プラットフォーム及びイメージデバイスの間の通信プロトコル | |
CN108377394B (zh) | 视频编码器的图像数据读取方法、计算机装置及计算机可读存储介质 | |
US10771792B2 (en) | Encoding data arrays | |
CN114286035B (zh) | 图像采集卡、图像采集方法及图像采集系统 | |
CN113498596B (zh) | 一种基于PCIe的数据传输方法及装置 | |
CN113727115B (zh) | 一种高效可转码的视频解码方法 | |
US20220368564A1 (en) | PCIe-Based Data Transmission Method and Apparatus | |
CN113596469A (zh) | 一种软硬结合且高效传输的视频解码方法 | |
CN113709495B (zh) | 一种基于pcie缓冲机制的同步解码方法 | |
CN111263097B (zh) | 媒体数据传输方法及相关设备 | |
CN113727116B (zh) | 基于过滤机制的视频解码方法 | |
CN113747171B (zh) | 一种自恢复的视频解码方法 | |
CN115225881B (zh) | 一种数据传输方法、装置、设备和存储介质 | |
CN104025026B (zh) | 访问用于配置空间的配置和状态寄存器 | |
CN107005731B (zh) | 使用应用代码的图像云端流媒体服务方法、服务器及系统 | |
CN113055672A (zh) | 包裹视频生成方法、装置、计算机设备和存储介质 | |
CN113645467B (zh) | 一种软硬结合的视频解码方法 | |
CN111200594B (zh) | 接收数据的方法、装置、数据接收设备和存储介质 | |
US20230401811A1 (en) | Information generation apparatus, information generation method, and storage medium | |
CN115474056A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |