登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

... ...

 
 
 

日志

 
 

X264代码学习(三)  

2011-06-12 03:57:22|  分类: VC++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

          signal( SIGINT, SigIntHandler );

          SIGINT是信号名称或代码(Ctrl-C会产生这个信号), SigIntHandler是编写的一段程序,  singal(SIGINT,   SigIntHandler) 就是捕获SIGINT(中断)信号,当键入Ctrl-C的时候,当前执行程序调用指针函数SigIntHandler执行完后,再返回原来执行的地方接着往下走。  

         static int  Encode( x264_param_t *param, cli_opt_t *opt )在X264.c中,开始编码。

      1.   语句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中,原型如下:

int get_frame_total_yuv( hnd_t handle )
{
    yuv_input_t *h = handle;
    int i_frame_total = 0;

    if( !fseek( h->fh, 0, SEEK_END ) )
    {
        uint64_t i_size = ftell( h->fh );                           //计算出文件的大小
        fseek( h->fh, 0, SEEK_SET );                           //作用是将文件指针放到文件开始位置
        i_frame_total = (int)(i_size / ( h->width * h->height * 3 / 2 ));

     //计算总的帧数, 这里乘以1.5是因为一个编码单位是一个亮度块加2个色度块,大小上等于1.5个亮度块
    }

    return i_frame_total;
}

    其中fseek中第一个参数为文件指针,第二个参数为偏移量,起始位置,SEEK_END 表示文件尾,SEEK_SET 表示文件头。fseek作用是将定位文件指针,用于随机访问。ftell函数返回h->fh的指针偏移位值.

    2.    i_frame_total -= opt->i_seek;
           if( ( i_frame_total == 0 || param->i_frame_total < i_frame_total )
          && param->i_frame_total > 0 )
           i_frame_total = param->i_frame_total;
          param->i_frame_total = i_frame_total;

          //获取要求编码的帧数param->i_frame_total。

     3.   x264_t *x264_encoder_open   ( x264_param_t *param ), 在文件encoder.c中,对不正确的264_t结构体(h的类型是264_t * )参数进行修改,并对各结构体参数、编码、预测等需要的参数进行初始化。

  x264_t *x264_encoder_open   ( x264_param_t *param )
{
    x264_t *h = x264_malloc( sizeof( x264_t ) );   //分配空间并进行初始化,x264_malloc( )在common.c中。
    int i;

    memset( h, 0, sizeof( x264_t ) );    

    /* Create a copy of param */
    memcpy( &h->param, param, sizeof( x264_param_t ) );    //创建param的副本

             //memcpy原型:extern void *memcpy(void *dest, void *src, unsigned int count);


                  //用法:#include <string.h>, 功能:由src所指内存区域复制count个字节到dest所指内存区域。
                  //说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。

    if( x264_validate_parameters( h ) < 0 )   //   函数x264_validate_parameters( h )在encoder.c中,

                                                                   //   功能为判断参数是否有效,并对不合适的参数进行修改

    {
        x264_free( h );
        return NULL;
    }

    if( h->param.psz_cqm_file )
        if( x264_cqm_parse_file( h, h->param.psz_cqm_file ) < 0 )
        {
            x264_free( h );
            return NULL;
        }

............

}

  评论这张
 
阅读(1451)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018