H.264中一些参数的设置和含义.doc_第1页
H.264中一些参数的设置和含义.doc_第2页
H.264中一些参数的设置和含义.doc_第3页
H.264中一些参数的设置和含义.doc_第4页
H.264中一些参数的设置和含义.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

H.264中一些参数的设置和含义 2009-10-22 16:41:44| 分类: h.264和AVS的学习 | 标签: |字号大中小订阅一参数说明这一节阐述的是encoder.cfg 中的参数对编码过程的影响要注意的是encoder.cfg 中的参数跟input 结构体中的变量是一一对应的StartFrame:从视频流的第几帧开始编码FramesToBeEncoded:指明了除去 B帧后将要被编码的帧数input-no_frames = FramesToBeEncodedFrameSkip:指明了编码过程中跳过的帧数,中间有 B 帧也算跳过一帧。NumberBFrames:相邻 I、P帧或相邻的 P帧之间的 B 帧个数,必须有NumberBFramessuccessive_Bframe = NumberBFramesIntraPeriod:I 帧出现的频率。若 IntraPeriod=3,则每 3 帧(不含 B 帧)中有一 I 帧;IntraPeriod=0 时只有第一帧是 I 帧。IDRIntraEnable:此值为1时每个 I帧都是 IDR,否则只有第一个 I帧是 IDR。举例:在 StartFrame=0FramesToBeEncoded=5FrameSkip=3NumberBFrames=2IntraPeriod=3IDRIntraEnable=1的情况下编码情况如下,其中红色代表 IDR 帧表 1视频流 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17编码流 I B B P B B P B B I B B P编码顺序 0 2 3 1 5 6 4 8 9 7 11 12 10二pic_order_cnt_type 为 0 的情况这种情况下显式的计算 POC(1) 编码端 I 帧或 P 帧 toppoc 的计算这个过程在 main()函数的组循环“for (img-number=0; img-number no_frames; img-number+) ”中实现z IntraPeriod或 IDRIntraEnable 为零时这种情况下只有第一个 I 帧是 IDR 帧,比较简单。对于 I帧或 P 帧,其顶场的 POC 为(img-number) * (2*(input-successive_Bframe+1) z IntraPeriod和 IDRIntraEnable 都不为零时这种情况下每个 I 帧都是 IDR 帧,其 POC 必须设置为零, I帧出现的频率为 IntraPeriod,故其 toppoc为(img-number % input-intra_period) * (2*(input-successive_Bframe+1)z 说明:原程序中使用了宏定义 IMG_NUMBER“#define IMG_NUMBER (img-number - start_frame_no_in_this_IGOP)”通过搜start_frame_no_in_this_IGOP可知这个变量在NumberOfFrameInSecondIGOP为0(encoder_main.cfg 中就是这样设置的)时恒为 0,故有IMG_NUMBER = img-number(2) 编码端 B帧 POC 的计算由表一可知,在编完一 I 帧或 P 帧之后才开始对它前面的 B帧进行编码for (img-number=0; img-number no_frames; img-number+)I,P 帧编码if (input-successive_Bframe != 0) & (IMG_NUMBER 0)for(img-b_frame_to_code=1; img-b_frame_to_codesuccessive_Bframe;img-b_frame_to_code+)z IntraPeriod或 IDRIntraEnable 为零时toppoc 等于2+(img-number-1) * (2*(input-successive_Bframe+1)+2* (img-b_frame_to_code-1)a) 第一个 2 指得是 IDR 的两个场;b) img-number要减一是因为要对当前帧(img-number)前面的 B帧进行编码;z IntraPeriod和 IDRIntraEnable 都不为零时 toppoc等于2+(img-number % input-intra_period-1) * (2*(input-successive_Bframe+1)+2* (img-b_frame_to_code-1)IDR 帧前面(3) toppoc 到 pic_order_cnt_lsb 的转化img-pic_order_cnt_lsb=img-toppoc &(unsigned int)( 1) 0时,img-pic_order_cnt_lsb=img-toppoc当 toppoc pic_order_cnt_lsb= max_pic_order_cnt+ img-toppoc其中 max_pic_order_cnt=1successive_Bframe+1)或poc = 2*(input-successive_Bframe+1)+ (frame_num 1)*2*(input-successive_Bframe+1) 解码端实现poc = img-ExpectedPicOrderCnt+ img-delta_pic_order_cnt0 (在 I,P 帧下为 0)z 对于 I 帧或P 帧之前的 B 帧(视频流中)poc = (frame_num 1)*2*(input-successive_Bframe+1) 2*(input-successive_Bframe+1 img-b_frame_to_code)或poc = 2*(input-successive_Bframe+1)+ (frame_num 1 1)*2*(input-successive_Bframe+1)+ 2*( img-b_frame_to_code 1) 2*input-successive_Bframe解码端的实现poc = img-ExpectedPicOrderCnt+ img-delta_pic_order_cnt0+ active_sps-offset_for_non_ref_picz 变量说明a) 其中 img-b_frame_to_code请参见标题一(2)b) img-disposable_flag = (nalu-nal_reference_idc = = 0),而 nal_reference_idc 只在 B 帧时为0,即img-disposable_flag只在B帧时为1。这也是在B帧情况下img-AbsFrameNum要比 I 帧或P 帧多减去一个 1 的原因。c) 其它变量参见下面小题;(3)编码端参数设置a) img-num_ref_frames_in_pic_order_cnt_cycle:这个参数在 init_poc( )函数中设置为 1 后就再没改动过;b) img-offset_for_ref_frame0 :在 StoredBPictures为0 时等于 2*(input-successive_Bframe+1);c) img-offset_for_ref_frame1 :没什么用,264 头文件中不会保存此变量;d) img-delta_pic_order_cnt0 :这个变量只对 B 帧有用,等于 2*(img-b_frame_to_code 1); 对于 I 帧或 P 帧,其值为 0;e) active_sps-offset_for_non_ref_pic:只对 B 帧有用,在 StoredBPictures 为0 时等于2*input-successive_Bframe,/(1) 文件操作参数:#Files InputFile =silent.yuv #输入序列,YUV 4:2:0 FramesToBeEncoded = 30 #编码图象帧数 SourceWidth = 352 #图象宽度,必须是16像素的倍数 SourceHeight = 288 #图象高度,必须是16像素的倍数 TraceFile = silent_enc2.txt #跟踪文件 ReconFile = silent_rec_RD2.yuv #恢复文件 OutFile = silent.26l #输出文件 (2) 编码控制参数: #Encoder Control IntraPeriod = 0 #I帧的周期(0=只有第一帧为I帧) QPFirstFrame = 15 #第一帧量化步长(0-31) QPRemainingFrame = 25 #其它帧量化步长(0-31) FrameSkip = 0 #输出图象采样间隔(如2表示每三帧取一帧) MVResolution = 1 #运动矢量精度:0:1/4像素精度,1:1/8像素精度 UseHamard = 0 #Hadamard变换(0=无效,=有效) SearchRange = 16 #最大搜索范围 NumberRefereceFrames = 1 #用于帧间预测的参考帧数(1-5) MbLineIntraUpdate= 0 #错误鲁棒性0:无效,N:每帧进行一次帧内编码GOB InterSearch16x16 = 1 #帧间搜索块16x16大小(0=无效,1=有效) InterSearch16x8 = 1 #帧间搜索块16x8大小(0=无效,1=有效) InterSearch8x16 = 1 #帧间搜索块8x16大小(0=无效,1=有效) InterSearch8x8 = 1 #帧间搜索块8x8大小(0=无效,1=有效) InterSearch8x4 = 1 #帧间搜索块8x4大小(0=无效,1=有效) InterSearch4x8 = 1 #帧间搜索块4x8大小(0=无效,1=有效) InterSearch4x4 = 1 #帧间搜索块4x4大小(0=无效,1=有效) (3) 定义输入参数结构体InputParameters typedef struct int no_frames; /编码帧数 int qp0; /第一帧量化步长 int qpN; /其余帧量化步长 int jumpd; /输出图象采样间隔(如表示每三帧取一帧) int mv_res; /运动矢量精度:0:1/4像素精度1:1/8像素精度 int hadamard; /0:普通1:利用x4adamard变换,计算绝对变换误差 int search_range; /搜索范围基于16x16块整像素搜索,搜索窗是以预测矢量为中心,对于8x8和4x4块的搜索范围是基于16x16块的1/2 int no_multpred; /1:仅以前一帧做参考,2:以前一帧或大前帧,最多个参考帧 int img_width; /图象宽度 int img_height; /图象高度 int yuv_format; /YUV采样比(0=4:0:0,1=4:2:0,2=4:2:2,3=4:4:4) int color_depth; /每个像素所需的位数,一般为8bit/pel int intra_upd; /错误鲁棒性(0:无效,N:每N帧进行一次帧内编码GOB) int blc_size82; /帧间搜索的不同大小块数组 int slice_mode; /片编码模式 int UseConstrainedIntraPred; /0:帧间宏块采用帧内预测 1:无效 int infile_header; /输出文件的头信息长度 char infile100; /YUV4:2:0输入文件 char outfile100; /H26L压缩输出码流 char ReconFile100; /重建图象文件 char TraceFile100; /跟踪输出文件 int intra_period; /帧内编码周期 /B pictures int successive_Bframe; /B帧编码数目 int pqB;

温馨提示

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

评论

0/150

提交评论