1 / 13
文档名称:

xvid 处理流程.doc

格式:doc   大小:84KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

xvid 处理流程.doc

上传人:zxwziyou9 2018/9/2 文件大小:84 KB

下载得到文件列表

xvid 处理流程.doc

相关文档

文档介绍

文档介绍:编者按:,内部资料,仅供学****参考,未经授权,不得转载
xvid有两种编码方式:single pass和twopass
  single pass模式编码简单,速度也快,但最终效果不如twopass。
  twopass就是视频压制需要经过两次编码,分别为twopass-1st pass(简称1pass)和twopass-2nd pass(简称2pass)
  1pass时,编码器会用最高质量编码采集可供第2次运算参考的画面信息,而在2 pass时。编码器会根据第一次压缩获得的信息和用户指定的文件大小,自动分配比特率,使需要高流量的运动画面分配到更多的空间,更高的比特率来保证画面质量。相对的,对于那些不包含太多运动信息的静态画面则用较低的比特率。追求画质的朋友当然会选择这种方式,但运算比single pass更费时。
接下来介绍一些基本概念:
  Q值——量化值,它被用来描述1帧的质量,每帧都有一个Q值,取值范围在1-31之间。Q值越小,画质越好,比特率越大
  I-frame——关键帧,常被缩写为IF。关键帧是构成一个帧组的第一帧。IF保留了一个场景的所有信息
  P-frame——未来单项预测帧,缩写为PF,只储存与之前一个已解压画面的差值
  B-frame——双向预测帧,缩写为BF,除了参考之前解压的画面以外,也会参考后一帧的画面信息
 
编码流程:
 
   各变量的设置:创建xvid_enc_frame_t和xvid_enc_stats_t,分别用于传入参数和统计编码结果。
具体过程:
设置传入图像数据和图像色彩空间
设置传出的码流
设置vol的标志
设置帧的编码类型
设置量化因子
设置运动估计算法集合
设置vop的标志
编码器提供的函数
1,  xvid_global(NULL, XVID_GBL_INIT, &xvid_gbl_init, NULL);
含义:根据cpu的特性使用相应汇编优化的函数
2,  xvid_encore(NULL, XVID_ENC_CREATE, &xvid_enc_create, NULL);
含义:初始化编码器。
具体过程:
创建编码器句柄,并根据传入的参数设置各变量的值,并且分配要使用的内存,用于存放重建帧,参考帧(1/2像素精度)。以及各种临时变量。并且做好码率控制的初始化。
3,  xvid_encore(enc_handle, XVID_ENC_ENCODE, &xvid_enc_frame, &xvid_enc_stats);
目的:编码一帧
具体过程:
{
初始化写码流。
如果有必要,转换色彩空间,并且把原始图像拷贝到有边框的图像空间,但是没有扩展边框。
将重建帧交换成参考帧
从帧队列中获取当前帧
设置Encoder结构体的current结构体的vol_flags,vop_flags,motion_flags,fcode,bcode和quant字段。
调用call_plugins,在里面调用rc_single_before做码率控制的初始化,以及对current结构体的其他变量进一步设置
通过帧号或者MEanalysis函数分析来确定编码类型,并且根据用户的设置作修正。
MEanalysis的原理是,如果某个宏块的残差的sad大于该宏块的平均值的偏离,那么使用intra方式,否则使用inter方式,然后对这些宏块进行统计,得到整帧的编码方式。
如果编码类型是I_VOP
{
设置Encoder->mbParam->vol_flags
设置Encoder->
根据vol_flags设置vop_flags
调用FrameCodeI以I帧的方式编码
调用call_plugins,在里面调用rc_single_after,进行码率控制。
}
如果编码类型是P_VOP
{
->current->vol_flags
调用FrameCodeP以P帧的方式编码
调用call_plugins,在里面调用rc_single_after,进行码率控制。
}
}// xvid_encore
4, static int FrameCodeI(Encoder * pEnc, Bitstream * bs)
目的:将一帧图像编码成一个I帧
具体过程:
以XVID_PLG_FRAME参数调用call_plugins,该函数目前的作用是设置dquant,可以在该函数中设置最好质量。
调用SetMacroblockQuants,为每个宏块设置量化因子,所以也可以在这里设