现在的位置: 首页 > 综合 > 正文

前两次调用Encode_Frame()并不会执行do_encode:

2013年02月06日 ⁄ 综合 ⁄ 共 571字 ⁄ 字号 评论关闭

// 

http://wmnmtm.blog.163.com/blog/static/38245714201192502624491/

 

在用x264.exe编码一个文件时,会重复调用Encode_frame,但是发现,前两次调用不会执行do_encode:,只有第三次才会执行到这儿,验证的方法很简单,插入一条打印观察就可:
       
if( h->frames.i_input <= h->frames.i_delay ) /* delay:延迟 */
        {
            /* Nothing yet to encode 仍然没有去编码 */
            /* waiting for filling bframe buffer 等待填充b帧缓冲区 */
            pic_out->i_type = X264_TYPE_AUTO;
            printf("\n 111111111111111......\n");//放在这儿每次都会打印
            return 0;//第0、1次调用Encode_Frame(),到这儿就返回了,第3次才会执行do_encode:后面
        }
            printf("\n 111111111111111......\n");//放在这儿前两次不会打印
h->frames.i_delay打印显示是2,意思是说延迟两帧开始编码。这个值始终是这样,并不会改变。它应该是做一些初始准备。
这和上面的观察结果是相符的,当然这个自然有它的道理。

 

抱歉!评论已关闭.