printf("\npic.i_pts=%d; i_frame=%d; param->i_fps_den=%d; \n",pic.i_pts,i_frame,param->i_f...

static int  Encode( x264_param_t *param, cli_opt_t *opt )
{
    x264_t *h;    //定义一个结构体的指针
    x264_picture_t pic;  //这是一个结构体的对象,所以已经分配了内存空间,不用再动态分配了,本结构体里有一个数组,是用来存图像的,但它只是存的指针,所以后面还得分配实际存图像的内存,然后用这个数组记下这块内存的地址

    int     i_frame, i_frame_total;  //x264_param_t结构的字段里也有个i_frame_total字段,默认值为0
    int64_t i_start, i_end;    //从i_start开始编码,直到i_end结束
          /* i_start = x264_mdate();  i_end = x264_mdate(); */
    int64_t i_file;      //好像是计数编码过的长度的
    int     i_frame_size;    //后面有一句,是用编码一帧的返回值赋值的
    int     i_progress;     //记录进度

    i_frame_total = p_get_frame_total( opt->hin ); /* 得到输入文件的总帧数 由于p_get_frame_total = get_frame_total_yuv(见Parse()函数),所以调用函数int get_frame_total_yuv( hnd_t handle ),在文件muxers.c中*/
    i_frame_total -= opt->i_seek;     /* 要编码的总帧数= 源文件总帧数-开始帧(不一定从第1帧开始编码) */
    if( ( i_frame_total == 0 || param->i_frame_total < i_frame_total ) && param->i_frame_total > 0 ) /* 对这个待编码的总帧数进行一些判断 */
        i_frame_total = param->i_frame_total;  /* 保证i_frame_total是有效的 */
    param->i_frame_total = i_frame_total;   /* 获取要求编码的帧数param->i_frame_total 根据命令行输入参数计算得到的总帧数,存进结构体的字段*/

    if( ( h = x264_encoder_open( param ) ) == NULL ) /* 在文件encoder.c中,创建编码器,并对不正确的264_t结构体(h的类型是264_t * )参数进行修改,并对各结构体参数、编码、预测等需要的参数进行初始化 */
    {
        fprintf( stderr, "x264 [error]: x264_encoder_open failed\n" );  /* 打印错误信息 */
        p_close_infile( opt->hin );     /* 关闭输入文件 */
        p_close_outfile( opt->hout );    /* 关闭输出文件 */
        return -1;         /* 程序结束 */
    }

    if( p_set_outfile_param( opt->hout, param ) ) /* 设置输出文件格式 */
    {
        fprintf( stderr, "x264 [error]: can't set outfile param\n" );//输出:不能设置输出文件参数
        p_close_infile( opt->hin ); /* 关闭YUV文件 关闭输入文件 */
        p_close_outfile( opt->hout ); /* 关闭码流文件 关闭输出文件 */
        return -1;
    }

    /* 创建一帧图像空间 Create a new pic (这个图像分配好的内存首地址等填充到了pic结构)*/
    x264_picture_alloc( &pic, X264_CSP_I420, param->i_width, param->i_height ); /* #define X264_CSP_I420  0x0001  /* yuv 4:2:0 planar */

    i_start = x264_mdate(); /* 返回当前日期,开始和结束时间求差,可以计算总的耗时和每秒的效率 return the current date in microsecond */

    /* (循环编码每一帧) Encode frames */
    for( i_frame = 0, i_file = 0, i_progress = 0; b_ctrl_c == 0 && (i_frame < i_frame_total || i_frame_total == 0); )
    {
        if( p_read_frame( &pic, opt->hin, i_frame + opt->i_seek ) )/*读取一帧,并把这帧设为prev; 读入第i_frame帧,从起始帧算,而不是视频的第0帧 */
            break;

        pic.i_pts = (int64_t)i_frame * param->i_fps_den; //字段:I_pts :program time stamp 程序时间戳,指示这幅画面编码的时间戳
              //帧率*帧数,好像也能算出时间戳来

  printf("\npic.i_pts=%d;  \n",pic.i_pts);//zjh
  printf("\npic.i_pts=%d;     i_frame=%d;      param->i_fps_den=%d;   \n",pic.i_pts,i_frame,param->i_fps_den);//zjh

 

        if( opt->qpfile )//这儿可能是一个什么设置,或许是存在一个配置文件
            parse_qpfile( opt, &pic, i_frame + opt->i_seek );//parse_qpfile() 为从指定的文件中读入qp的值留下的接口,qpfile为文件的首地址
        else//没有配置的话,就全自动了,呵呵
        {
            /* 未强制任何编码参数Do not force any parameters */
            pic.i_type = X264_TYPE_AUTO;
            pic.i_qpplus1 = 0;//I_qpplus1 :此参数减1代表当前画面的量化参数值
        }

  /*编码一帧图像,h编码器句柄,hout码流文件,pic预编码帧图像,实际就是上面从视频文件中读到的东西*/
        i_file += Encode_frame( h, opt->hout, &pic );//进入核心编码层

        i_frame++;//已编码的帧数统计(递增1)

        /* 更新数据行,用于显示整个编码过程的进度 update status line (up to 1000 times per input file) */
        if( opt->b_progress && param->i_log_level < X264_LOG_DEBUG &&  /* #define X264_LOG_DEBUG 3 调试 */
            ( i_frame_total ? i_frame * 1000 / i_frame_total > i_progress /*  */
                            : i_frame % 10 == 0 ) )  /*  */
        {
            int64_t i_elapsed = x264_mdate() - i_start;//elapsed:(时间)过去;开始至现在的时间差
            double fps = i_elapsed > 0 ? i_frame * 1000000. / i_elapsed : 0;
            if( i_frame_total )
            {
                int eta = i_elapsed * (i_frame_total - i_frame) / ((int64_t)i_frame * 1000000);//已用的时间*(总共要编码的帧数-已编码的帧数=待编码的帧数)/(已编码的帧数*1000000),看上去就象是预计剩余时间,也就是估计的倒计时,根据过去的效率动态的估计这个时间
                i_progress = i_frame * 1000 / i_frame_total;
                fprintf( stderr, "已编码的帧数:: %d/%d (%.1f%%), %.2f fps, eta %d:%02d:%02d  \r", /* 状态提示 FPS(Frames Per Second):每秒传输帧数,每秒钟填充图像的帧数(帧/秒)*/
                         i_frame, i_frame_total, (float)i_progress / 10, fps,
                         eta/3600, (eta/60)%60, eta%60 );//ETA是Estimated Time of Arrival的英文缩写,指 预计到达时间
            }
            else
                fprintf( stderr, "已编码的帧数: %d, %.2f fps   \r", i_frame, fps ); /* 状态提示,共编码了... */
            fflush( stderr ); // needed in windows
       }
    }

    /* Flush delayed(延迟) B-frames */
    do {
        i_file +=
        i_frame_size = Encode_frame( h, opt->hout, NULL );//上面调用的是i_file += Encode_frame( h, opt->hout, &pic );
    } while( i_frame_size );
//printf("p_write_nalu=%s",p_write_nalu);
    i_end = x264_mdate();  /* 返回当前时间return the current date in microsecond//前面有句: i_start = x264_mdate(); */
    x264_picture_clean( &pic ); /* common.c:void x264_picture_clean( x264_picture_t *pic ){free()} x264_picture_t.x264_image_t.plane[4]用来存放实际的图像 */
    x264_encoder_close( h ); /* 关闭一个编码处理器 ncoder.c:void x264_encoder_close  ( x264_t *h ) */
    fprintf( stderr, "\n" );

    if( b_ctrl_c ) /* 按下了ctrl+c组合键 编码中止,做一些收尾工作 */
        fprintf( stderr, "aborted(失败的) at input frame %d\n", opt->i_seek + i_frame ); /* 输入帧时失败 */

    p_close_infile( opt->hin );  //关闭输入文件
    p_close_outfile( opt->hout ); //关闭输出文件

    if( i_frame > 0 )
    {
        double fps = (double)i_frame * (double)1000000 / (double)( i_end - i_start );/* 每秒多少帧 */

        fprintf( stderr, "encoded %d frames, %.2f fps, %.2f kb/s\n", i_frame, fps,
                 (double) i_file * 8 * param->i_fps_num /
                 ( (double) param->i_fps_den * i_frame * 1000 ) ); /* 在窗口显示encoded 26 frames等进度提示 */
    }

    return 0;
}

添加此代码,输出情况如下:

printf(npic.i_pts=d;     i_frame=d;      param-i_fps_den=d;   n,pic.i_pts,i_frame,param-i_fps_den); - 加菲 -  .
 
......
printf(npic.i_pts=d;     i_frame=d;      param-i_fps_den=d;   n,pic.i_pts,i_frame,param-i_fps_den); - 加菲 -  .
 

 

pic.i_pts=156156;     i_frame=0;      param->i_fps_den=156;

pic.i_pts=157157;     i_frame=0;      param->i_fps_den=157;

pic.i_pts=158158;     i_frame=0;      param->i_fps_den=158;

pic.i_pts=159159;     i_frame=0;      param->i_fps_den=159;

pic.i_pts=160160;     i_frame=0;      param->i_fps_den=160;

pic.i_pts=161161;     i_frame=0;      param->i_fps_den=161;

pic.i_pts=162162;     i_frame=0;      param->i_fps_den=162;

pic.i_pts=163163;     i_frame=0;      param->i_fps_den=163;

pic.i_pts=164164;     i_frame=0;      param->i_fps_den=164;

pic.i_pts=165165;     i_frame=0;      param->i_fps_den=165;

pic.i_pts=166166;     i_frame=0;      param->i_fps_den=166;

pic.i_pts=167167;     i_frame=0;      param->i_fps_den=167;

pic.i_pts=168168;     i_frame=0;      param->i_fps_den=168;

pic.i_pts=169169;     i_frame=0;      param->i_fps_den=169;

pic.i_pts=170170;     i_frame=0;      param->i_fps_den=170;

pic.i_pts=171171;     i_frame=0;      param->i_fps_den=171;

pic.i_pts=172172;     i_frame=0;      param->i_fps_den=172;

pic.i_pts=173173;     i_frame=0;      param->i_fps_den=173;

pic.i_pts=174174;     i_frame=0;      param->i_fps_den=174;

pic.i_pts=175175;     i_frame=0;      param->i_fps_den=175;

pic.i_pts=176176;     i_frame=0;      param->i_fps_den=176;

pic.i_pts=177177;     i_frame=0;      param->i_fps_den=177;

pic.i_pts=178178;     i_frame=0;      param->i_fps_den=178;

pic.i_pts=179179;     i_frame=0;      param->i_fps_den=179;

pic.i_pts=180180;     i_frame=0;      param->i_fps_den=180;

pic.i_pts=181181;     i_frame=0;      param->i_fps_den=181;

pic.i_pts=182182;     i_frame=0;      param->i_fps_den=182;

pic.i_pts=183183;     i_frame=0;      param->i_fps_den=183;

pic.i_pts=184184;     i_frame=0;      param->i_fps_den=184;

pic.i_pts=185185;     i_frame=0;      param->i_fps_den=185;

pic.i_pts=186186;     i_frame=0;      param->i_fps_den=186;

pic.i_pts=187187;     i_frame=0;      param->i_fps_den=187;

pic.i_pts=188188;     i_frame=0;      param->i_fps_den=188;

pic.i_pts=189189;     i_frame=0;      param->i_fps_den=189;

pic.i_pts=190190;     i_frame=0;      param->i_fps_den=190;

pic.i_pts=191191;     i_frame=0;      param->i_fps_den=191;

pic.i_pts=192192;     i_frame=0;      param->i_fps_den=192;

pic.i_pts=193193;     i_frame=0;      param->i_fps_den=193;

pic.i_pts=194194;     i_frame=0;      param->i_fps_den=194;

pic.i_pts=195195;     i_frame=0;      param->i_fps_den=195;

pic.i_pts=196196;     i_frame=0;      param->i_fps_den=196;

pic.i_pts=197197;     i_frame=0;      param->i_fps_den=197;

pic.i_pts=198198;     i_frame=0;      param->i_fps_den=198;

pic.i_pts=199199;     i_frame=0;      param->i_fps_den=199;

pic.i_pts=200200;     i_frame=0;      param->i_fps_den=200;

pic.i_pts=201201;     i_frame=0;      param->i_fps_den=201;

pic.i_pts=202202;     i_frame=0;      param->i_fps_den=202;

pic.i_pts=203203;     i_frame=0;      param->i_fps_den=203;

pic.i_pts=204204;     i_frame=0;      param->i_fps_den=204;

pic.i_pts=205205;     i_frame=0;      param->i_fps_den=205;

pic.i_pts=206206;     i_frame=0;      param->i_fps_den=206;

pic.i_pts=207207;     i_frame=0;      param->i_fps_den=207;

pic.i_pts=208208;     i_frame=0;      param->i_fps_den=208;

pic.i_pts=209209;     i_frame=0;      param->i_fps_den=209;

pic.i_pts=210210;     i_frame=0;      param->i_fps_den=210;

pic.i_pts=211211;     i_frame=0;      param->i_fps_den=211;

pic.i_pts=212212;     i_frame=0;      param->i_fps_den=212;

pic.i_pts=213213;     i_frame=0;      param->i_fps_den=213;

pic.i_pts=214214;     i_frame=0;      param->i_fps_den=214;

pic.i_pts=215215;     i_frame=0;      param->i_fps_den=215;

pic.i_pts=216216;     i_frame=0;      param->i_fps_den=216;

pic.i_pts=217217;     i_frame=0;      param->i_fps_den=217;

pic.i_pts=218218;     i_frame=0;      param->i_fps_den=218;

pic.i_pts=219219;     i_frame=0;      param->i_fps_den=219;

pic.i_pts=220220;     i_frame=0;      param->i_fps_den=220;

pic.i_pts=221221;     i_frame=0;      param->i_fps_den=221;

pic.i_pts=222222;     i_frame=0;      param->i_fps_den=222;

pic.i_pts=223223;     i_frame=0;      param->i_fps_den=223;

pic.i_pts=224224;     i_frame=0;      param->i_fps_den=224;

pic.i_pts=225225;     i_frame=0;      param->i_fps_den=225;

pic.i_pts=226226;     i_frame=0;      param->i_fps_den=226;

pic.i_pts=227227;     i_frame=0;      param->i_fps_den=227;

pic.i_pts=228228;     i_frame=0;      param->i_fps_den=228;

pic.i_pts=229229;     i_frame=0;      param->i_fps_den=229;

pic.i_pts=230230;     i_frame=0;      param->i_fps_den=230;

pic.i_pts=231231;     i_frame=0;      param->i_fps_den=231;

pic.i_pts=232232;     i_frame=0;      param->i_fps_den=232;

pic.i_pts=233233;     i_frame=0;      param->i_fps_den=233;

pic.i_pts=234234;     i_frame=0;      param->i_fps_den=234;

pic.i_pts=235235;     i_frame=0;      param->i_fps_den=235;

pic.i_pts=236236;     i_frame=0;      param->i_fps_den=236;

pic.i_pts=237237;     i_frame=0;      param->i_fps_den=237;

pic.i_pts=238238;     i_frame=0;      param->i_fps_den=238;

pic.i_pts=239239;     i_frame=0;      param->i_fps_den=239;

pic.i_pts=240240;     i_frame=0;      param->i_fps_den=240;

pic.i_pts=241241;     i_frame=0;      param->i_fps_den=241;

pic.i_pts=242242;     i_frame=0;      param->i_fps_den=242;

pic.i_pts=243243;     i_frame=0;      param->i_fps_den=243;

pic.i_pts=244244;     i_frame=0;      param->i_fps_den=244;

pic.i_pts=245245;     i_frame=0;      param->i_fps_den=245;

pic.i_pts=246246;     i_frame=0;      param->i_fps_den=246;

pic.i_pts=247247;     i_frame=0;      param->i_fps_den=247;

pic.i_pts=248248;     i_frame=0;      param->i_fps_den=248;

pic.i_pts=249249;     i_frame=0;      param->i_fps_den=249;

pic.i_pts=250250;     i_frame=0;      param->i_fps_den=250;

pic.i_pts=251251;     i_frame=0;      param->i_fps_den=251;

pic.i_pts=252252;     i_frame=0;      param->i_fps_den=252;

pic.i_pts=253253;     i_frame=0;      param->i_fps_den=253;

pic.i_pts=254254;     i_frame=0;      param->i_fps_den=254;

pic.i_pts=255255;     i_frame=0;      param->i_fps_den=255;

pic.i_pts=256256;     i_frame=0;      param->i_fps_den=256;

pic.i_pts=257257;     i_frame=0;      param->i_fps_den=257;

pic.i_pts=258258;     i_frame=0;      param->i_fps_den=258;

pic.i_pts=259259;     i_frame=0;      param->i_fps_den=259;

pic.i_pts=260260;     i_frame=0;      param->i_fps_den=260;

pic.i_pts=261261;     i_frame=0;      param->i_fps_den=261;

pic.i_pts=262262;     i_frame=0;      param->i_fps_den=262;

pic.i_pts=263263;     i_frame=0;      param->i_fps_den=263;

pic.i_pts=264264;     i_frame=0;      param->i_fps_den=264;

pic.i_pts=265265;     i_frame=0;      param->i_fps_den=265;

pic.i_pts=266266;     i_frame=0;      param->i_fps_den=266;

pic.i_pts=267267;     i_frame=0;      param->i_fps_den=267;

pic.i_pts=268268;     i_frame=0;      param->i_fps_den=268;

pic.i_pts=269269;     i_frame=0;      param->i_fps_den=269;

pic.i_pts=270270;     i_frame=0;      param->i_fps_den=270;

pic.i_pts=271271;     i_frame=0;      param->i_fps_den=271;

pic.i_pts=272272;     i_frame=0;      param->i_fps_den=272;

pic.i_pts=273273;     i_frame=0;      param->i_fps_den=273;

pic.i_pts=274274;     i_frame=0;      param->i_fps_den=274;

pic.i_pts=275275;     i_frame=0;      param->i_fps_den=275;

pic.i_pts=276276;     i_frame=0;      param->i_fps_den=276;

pic.i_pts=277277;     i_frame=0;      param->i_fps_den=277;

pic.i_pts=278278;     i_frame=0;      param->i_fps_den=278;

pic.i_pts=279279;     i_frame=0;      param->i_fps_den=279;

pic.i_pts=280280;     i_frame=0;      param->i_fps_den=280;

pic.i_pts=281281;     i_frame=0;      param->i_fps_den=281;

pic.i_pts=282282;     i_frame=0;      param->i_fps_den=282;

pic.i_pts=283283;     i_frame=0;      param->i_fps_den=283;

pic.i_pts=284284;     i_frame=0;      param->i_fps_den=284;

pic.i_pts=285285;     i_frame=0;      param->i_fps_den=285;

pic.i_pts=286286;     i_frame=0;      param->i_fps_den=286;

pic.i_pts=287287;     i_frame=0;      param->i_fps_den=287;

pic.i_pts=288288;     i_frame=0;      param->i_fps_den=288;

pic.i_pts=289289;     i_frame=0;      param->i_fps_den=289;

pic.i_pts=290290;     i_frame=0;      param->i_fps_den=290;

pic.i_pts=291291;     i_frame=0;      param->i_fps_den=291;

pic.i_pts=292292;     i_frame=0;      param->i_fps_den=292;

pic.i_pts=293293;     i_frame=0;      param->i_fps_den=293;

pic.i_pts=294294;     i_frame=0;      param->i_fps_den=294;

pic.i_pts=295295;     i_frame=0;      param->i_fps_den=295;

pic.i_pts=296296;     i_frame=0;      param->i_fps_den=296;

pic.i_pts=297297;     i_frame=0;      param->i_fps_den=297;

pic.i_pts=298298;     i_frame=0;      param->i_fps_den=298;

pic.i_pts=299299;     i_frame=0;      param->i_fps_den=299;
x264 [info]: slice I:2     Avg QP:19.00  size: 10261  PSNR Mean Y:46.51 U:49.01
V:49.94 Avg:47.29 Global:47.29
x264 [info]: slice P:298   Avg QP:22.71  size:   783  PSNR Mean Y:43.57 U:47.00
V:48.16 Avg:44.53 Global:44.33
x264 [info]: mb I  I16..4: 50.1%  0.0% 49.9%
x264 [info]: mb P  I16..4:  4.5%  0.0%  1.2%  P16..4: 24.6%  8.9%  1.5%  0.0%  0
.0%    skip:59.2%
x264 [info]: PSNR Mean Y:43.586 U:47.013 V:48.171 Avg:44.545 Global:44.340 kb/s:
202.94

encoded 300 frames, 24.03 fps, 203.36 kb/s

D:\>

这个测试序列一共300帧,呵呵

printf(npic.i_pts=d;     i_frame=d;      param-i_fps_den=d;   n,pic.i_pts,i_frame,param-i_fps_den); - 加菲 -  .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值