Encode()
for( i_frame = 0, i_file = 0, i_progress = 0; b_ctrl_c == 0 && (i_frame < i_frame_total || i_frame_total == 0); )
这个i_frame会一直增长,直到最大帧,它代表的是这个视频的总帧数,从0开始增长。
h->frames.i_last_idr,代表的是上一个IDR帧的编号(编码器自身的内部编号)。
举例:(下面所列数字均按下图所示排列)
![i_frame等几个变量 - 加菲 - 视频会议 - 加菲 i_frame等几个变量 - 加菲 - 视频会议 - 加菲](http://img7.ph.126.net/YHbrrDJR1tfRGyrct9XCHg==/2823475491401625197.jpg)
150
44;172
175
44;197
200
48;224
225
38;244
这些都是在代码中用printf语句实时打出来的。
h->fenc->i_frame - h->frames.i_last_idr 总是为h->fenc->i_poc的一半。这是因为poc每帧增长2,这是考虑场造成的。
h->frames.i_last_idr
h->fenc->i_frame
h->fenc->i_poc
这些参数不与其它函数的变量发生联系,它是编码过程中自已维护的。所以它和encode()函数的帧数统计是不一样的。
比如已编码帧数,encode()的计数要多两帧,因为它延迟了两帧编码。
可以从代码上看出它们这间的关系:
h->fenc->i_poc = 2 * (h->fenc->i_frame - h->frames.i_last_idr);
x264_frame_t *fenc
fenc->i_frame = h->frames.i_input++;
h->frames.i_input++记录从文件中输入编码器的总帧数,比如已经从文件读了100帧,这个fenc->i_frame就是100,而Encode_Frame就已经被调用了100次,x264_Encoder_Encode就被调用了100次,被编码的总帧数实际是10-2,因为前两次x264_Encoder_Encode并没有实质进行编码。