Rate Control
rc_init_seq()
关于Reaction Parameter:
Reaction Parameter帮助编码器动态调整编码时的QP值。对于图像复杂度小的图像来说,使用更大的reaction parameter,这时会有更小的QP值,这样编码的时候更为细节化,如果reaction parameter小,那么QP值较大,这时编码就会比较粗糙。
关于average activity
对于一个宏块来说,它的activity值为4个8x8块中的activity中的最小值。它本身是用在最近编码块的归一化过程中的。
关于global complexity
global complexity是用来对不同的帧类型(I,P,B)进行全局复杂度计量而设定的一些权重(Xi,Xp,Xb),I帧给的权重最大,B帧的权重最小,
在rc初始化之后,开始写序列头,头格式从头向下:
内容 长度(位) 值
序列开始码 32 0x1B3L
水平长度 12
垂直长度 12
aspect ratio 4
帧率码 4
码率值 18
标志位 1 1
vbv缓冲大小 10
强制参数标志 1
之下,如有intra量化表和非intra量化表的话,把量化矩阵写在码流头中。
如非mpeg1码流的话,写入extension码流部分
内容 长度(位) 值
EXT开始码 32 0x1B5L
SEQ_ID 4 1
profile&level 8
prog序列标识 1
chroma格式 2
水平大小扩展 2
垂直大小扩展 2
码率扩展 12
标记位 1
vbv缓冲扩展 8
low_delay 1
帧率扩展_n 2
帧率扩展_d 5
写入显示扩展属性
内容 长度(位) 值
EXT开始码 32 0x1B5L
DISP_ID 4 2
视频格式 3
色描述 1
colourprimaries 8
传输特性 8
矩阵系数 8
显示水平大小 14
标记位 1
显示垂直大小 14
写入用户数据
内容 长度(位) 值
USER_START_CODE 32 0x1B2L
写出用户ID串
至此序列头写出完毕。
之后开始对源数据流中的所有的帧开始编码。
编码阶段首先取得当前GOP中的最小的帧号,初始在par文件中指定一个GOP中的帧数N和I与P帧之间的距离M.那么当前GOP中的最小帧号为 N*((curr_frame_no+(M-1))/N)-(M-1).
之后的过程下回来说.