基于过滤机制的视频解码方法技术

技术编号:31081900 阅读:29 留言:0更新日期:2021-12-01 12:27
本发明专利技术属于linux系统下视频解码技术,涉及一种基于过滤机制的视频解码方法。首先,移植ffmpeg到海思平台,对ffmpeg进行源码修改使其适配海思芯片。其次,启动ffmpeg的动态库对网络传输的数据进行参数帧和图像帧的组合,获取完整图像信息,然后,建立过滤机制,动态筛选错误帧,分析编码规律,调整错误数据包内数据帧顺序,将可解码的数据包再传送给海思芯片的硬解码模块。最后,创建获取图像线程,从解码通道获取已解码的图像数据,从而完成解码任务。从而完成解码任务。从而完成解码任务。

【技术实现步骤摘要】
基于过滤机制的视频解码方法


[0001]本专利技术属于linux系统下视频解码技术,特别是一种基于过滤机制的视频解码方法。

技术介绍

[0002]Hi3559AV100是专业的8K Ultra HD Mobile Camera SOC,它提供了8K30/4K120广播级图像质量的数字视频录制,支持多路Sensor输入,支持H.265编码输出或影视级的RAW数据输出,并集成高性能ISP处理,同时采用先进低功耗工艺和低功耗架构设计,为用户提供了卓越的图像处理能力。
[0003]Hi3559AV100支持业界领先的多路4K Sensor输入,多路ISP图像处理,支持HDR10高动态范围技术标准,并支持多路全景硬件拼接。在支持8K30/4K120视频录制下,Hi3559AV100提供硬化的6

Dof数字防抖,减少了对机械云台的依赖。
[0004]但是Hi3559AV100属于硬解码范畴,在协议帧不完全符合解码协议,或者错误帧比较多的情况下,解码效率比较低下或者不能解码,并且对于带有参数帧的图像信息,硬解码模块无法提取本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.基于过滤机制的视频解码方法,其特征在于,包括以下步骤:1)配置ffmpeg的编译属性和参数,将ffmpeg动态库到海思平台;2)创建网络接收任务接收主机传送的原始压缩数据;3)创建获取数据包线程,使用ffmpeg动态库获取含有带有含参数帧的图像数据包;4)建立过滤机制,筛选错误帧,组合成可解码的数据包发送到芯片的硬解码模块;5)获取硬解码模块内的解码图像。2.根据权利要求1所述的基于过滤机制的视频解码方法,其特征在于,步骤4)所述筛选错误帧,组合成可解码的数据包,具体为:动态筛选出不符合协议规定的错误帧,分析编码规律,调整数据包图像帧顺序,根据编码器特性动态修改帧类型,使其组合成可解码的图像数据包。3.根据权利要求1所述的基于过滤机制的视频解码方法,其特征在于,步骤4)所述过滤机制,具体为:41)判断图像类型,分析不同类型需要的slice个数图像数据包中含P帧的个数,并记录在该通道的数据结构变量PSliceNumber;42)判断当前数据包大小是否大于协议帧规定的最大数,如果大于则退出本次数据包的过滤过程,待接收到新的图像数据包后返回步骤41),否则进行下一步;43)循环遍历本次数据包内的数据,依次判断当前帧是否符合h265协议帧头,如果符合则进行下一步,如果不符合则跳转到步骤49);44)判断当前帧是否为P帧或者I帧,如果是,则需要增加本通道本次传输的数据包内sllice个数temp_PSliceNumber,进入下一步;如果不是则跳转到步骤46);45)如果当前数据包的temp_PSliceNumber等于2,则再次判断p_slice是否为0,如果是,则设置p_size为i,并更新记录slice标志p_slice为1;46)判断当前帧类型是否为SPS,是SPS则置标志top为1,反之,则直接进入48);47)继续判断当前帧是否为参数帧,如果是则将当前数据包数组ptr内的i位置拷贝到数据结构Idr_buf,保存sei帧之前的帧头信息,记录当前保存帧头的数据大小Idr_Size为i,将首次出现sps标识entryFlag为1,并清零top为0;完成后进入步骤48);48)判断当前通道的图像数据是否需要插入I帧,并且entryFlag为1,如果上述两个条件成立则判断当前帧类型是否为p帧,如果是p帧则将数据包的帧类型字节内容由0x02改成0x26,改P帧为I帧;反之则直接进入步骤49);49)继续查看数据包内ptr是否还有其他数据需要遍历查询,如果有就回到步骤43),如果没有就继续下一步;410)判断当前通道的insertIDR标志和entryFlag是否都为1,如果是则继续下一步,如果不是则进行步骤413);411)判断当前temp_PSliceNumber是否等于本通道图像类型应该具备的PSliceNumber,如果是则下一步,如果不是则丢弃该数据包,退出该数据包的解码过程;待接收到新的图像数据包后返回步骤41);412)将当前数据包内完整图像帧大小为size的数据,拷贝到Idr_Buf中,拷贝的位置从Idr_Buf的Idr_Size开始,将size的大小增大Idr_Size,再次将Idr_Buf的数据拷贝到ptr中,拷贝的数据大小为size;
413)判断当前temp_PSliceNumber是否等于本通道图像类型应该具备的PSliceNumber,如果是则进行下一步,如果不是则进行步骤415);414)判断p_slice是否为1,如果是则将p_size赋值给size,清零p_slice;反之,则直接进入步骤415);415)将当前通道的图像参数帧大小记录在seiSize中,同时拷贝当前图像的参数帧到当前通道的待解码图像数据结构体decodeArray中,将参数个数seiCount作为待解码图像的时间戳u64PTS;416)查询当前通道的解码状态,并把状态结构体中的已解码图像帧数保存到u32DecodeStreamFrames;417)获取当前通道待解码图像数据的首地址ptr和数据长度size,时间戳u64PTS,并以流形式发送到硬解码模块;418)循环查询解码器的工作状态,直至获得新的解码图像;419)调用海思库函数查询解码器通道状态;420)判断通道内剩余需解码的字节数是否为0,如果是则进去下一步,如果不是则延时1ms跳转到步骤419);421)解码器通道已经解码后的图像帧数是否与之前保存的u32DecodeStreamFrames不相等,或者该通道的insertIDR标识为1,如果是进入下一步,反之,则到步骤423);422)将insrtIDR标识清零,增加参数帧的个数,判断如果seiCount大于协议指定大的最大值SEI_NUM,则将参数帧的个数标志seiC...

【专利技术属性】
技术研发人员:高娟
申请(专利权)人:天津津航计算技术研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1