并行处理的H.264到AVS转码器设计_第1页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、并行处理的h.264到avs转码器设计 转码应用涉及视频服务器、通用多媒体拜访设备、监控系统、dvd等多媒体设备和系统。其基本原则是在环境和处理能力受限的状况下,在码流转换的质量和复杂性之间取得最佳折衷。 实现的关键是对压缩视频码流中的压缩数据举行复用,避开重新编码中的复杂运算。讨论中的转码技术主要包括:码率转换、辨别率转换、帧率转换、语法转换等。mediacoder是目前比较优秀的一款转码软件,它将众多来自开源社区优秀的音视频软件整合于一个友好的图形界面。它可以挺直、批量地在众多音频视频压缩格式和容器格式之间转换,支持的格式包括h.264,xvid,mpeg-124等,但是没有将avs视频编

2、码标准融合进来。本文介绍的软件实现了h.264到avs两个视频编码标准的转码。针对这两个标准的硬件转码器还在研发之中,上海龙晶微有限公司基于avs标准提出了国内第一款具有彻低自主学问产权的高清电视解码芯片ds10000。双核技术的广泛应用可用并行处理方法加迅速度。视频转码可分为同类视频转码技术和不同类视频转码技术。2 像素域和变换域转码结构图1是空域转码器结构框图,将h.264码流举行熵解码和反量化,然后逆dct变换,得到像素域的像素值;按照解码的运动矢量和频域残差数据举行运动估量(motion estimation,me),按照得到的运动矢量举行运动补偿(motion compensatio

3、n,mc);再将得到的残差数据举行变换和量化、熵编码形成avs码流。图2是变换域转码器结构框图,转码中不需要解得像素域的像素值,h.264码流经过熵解码和反量化,在频域中举行补偿,得到频域中重构的ht系数值,然后由h.264中的4×4ht系数变换成avs中的8×8ht系数,按照h.264中解码得到的运动矢量和ht系数值来举行运动估量me,由得到的8×8ht系数值在频域举行误差补偿;举行量化和熵编码形成avs码流。3 多线程转码器设计应用程序加载到内存中,给出一个执行点称为线程。线程是系统需要分配cpu时光的基本执行单元。单个进程在任何时刻可包含多个线程,它们可同时

4、执行进程地址空间内的代码。1) 子线程的创建与终止vc+应用程序的主线程在创建应用程序时生成,创建子线程可通过调用createthread函数创建,其格式:handle = createthread (lpsecurity attributes ipsa,dword cbstack,lpthread start routine lpstartad2dr,lpvoidlpvthreadparm,dword fdwcreate,lpdword lphread);在本转码器中,子线程创建办法如下:slot=0; hthrdsslot=createthread(null,0,threadfunc,(l

5、pvoid)slot,0,&threadid)2) 转码器的多线程实现结构由图1和图2可以看出,转码器的解码和编码部分是相对自立的。虽然在编码端要用到解码得到的运动矢量、分块模式还有频域中的系数等信息,假如是单线程程序的话,在编码到这一帧时,解码程序就要停止,惟独当编码这一帧的程序执行完后,才干开头执行下一帧的解码程序。所以,在解码时编码程序停止,在编码时解码程序停止,这将花费大量的时光来等待。假如是在双核或者多核计算机上,可采纳并行处理的办法,可启动两个或多个线程,一个解码线程和一个编码线程,在编码第n帧时,同时解码第n+1帧,达到解码和编码同时执行的效果。考虑到对系统内存的要求,这

6、里设置缓存区的大小为2,多线程转码器实现框架3所示。多线程转码器执行挨次如下:当解码第n帧完成,推断第n-1帧是否已经编码完成,假如没有完成,则等待编码第n-1帧直到它完成,假如第n-1帧已完成,则开头解码第n+1帧,并同时开头编码第n帧;当第n+1帧解码完成时,再推断第n帧编码是否完成,若没完成,则等待它完成,若完成,则开头编码第n+1帧,然后令n=n+2,举行循环。所以,实现了编码和解码并行处理,解码当前帧和编码前一帧是同时举行的。3) 多线程转码器的详细实现办法缓存区大小设置为2,奇数帧共用一组变量,偶数帧共用一组变量。h.264中解码的当前帧序号用img->number表示,av

7、s编码端编码的当前帧序号用img_avs->number表示。在解码第n+2帧时,decode_slice()解码一帧的函数前面加上推断是否编码完第n帧:if (img->number=(img_avs->number+2)waitforsingleobject(hthrds0,infinite);解码第n+2帧完成时,等待编码线程结束,wait-forsingleobjeet(hthrds0,infinite),然后开头一个新的进程:slot=0;hthrds0=createthread(null,0,threadfunc,(lpvoid)slot,0,&threa

8、did)在囫囵程序执行完之前,等待线程执行完以后,再结束囫囵转码程序。4 结果测试序列:foreman,格式为cif(352×288),编码成ippppippp,264量化系数为28,avs端编码的量化系数为36,编码帧数为100帧。计算机配置:intel奔腾1.6 ghz,内存1 gbyte,win-dows xp sp2操作系统。对于串行单线程的方式,平均转码一帧的时光为113.57 ms;并行多线程的方式,平均转码一帧的时光为80.19 ms。所以用法多线程编码的方式,因为编码和解码同时执行,时光可节省41.63%,转码速度是单线程编码方式的1.42倍。这是由于进程调度也要花费一定时光,所以双线程编码的速度

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论