zoukankan      html  css  js  c++  java
  • x264命令行工具(x264.exe)源码整体分析

    该命令行工具调用的是libx264,就是一个使用该库的示例程序
    X264命令行工具的源代码在x264中的位置如下图所示(红框里面的)。
    X264命令行工具的源代码的调用关系如下图所示。
    Additionally the x264opts and x264-params private options allows one to pass a list of key=value tuples as accepted by the libx264 x264_param_parse function.
    最关键的API包括:
    x264_param_default():设置参数集结构体x264_param_t的缺省值。
    x264_encoder_open():打开编码器。
    x264_encoder_headers():输出SPS,PPS,SEI等信息。
    x264_encoder_encode():编码输出一帧图像。
    x264_encoder_close():关闭编码器。
    循环中调用getopt_long()逐个解析输入的参数,并作相应的处理;
    parse()的流程:
    (1)调用x264_param_default()为存储参数的结构体x264_param_t赋默认值
    (2)调用x264_param_default_preset()设置preset,tune  
    (3)在一个大循环中调用getopt_long()逐个解析输入的参数,并作相应的处理。举几个例子:
    a)“-h”:调用help()打开帮助菜单。
    b)“-V”调用print_version_info()打印版本信息。
    c)对于长选项,调用x264_param_parse()进行处理。
    (4)调用select_input()解析输出文件格式(例如raw,flv,MP4…)
    (5)调用select_output()解析输入文件格式(例如yuv,y4m…)

    x264_param_default:
    1.  //码率控制模块 Rate Control  
    2.     param->rc.i_rc_method = X264_RC_CRF;  
    3.     param->rc.i_bitrate = 0;  
    4.     param->rc.f_rate_tolerance = 1.0;  
    5.     param->rc.i_vbv_max_bitrate = 0;  
    6.     param->rc.i_vbv_buffer_size = 0;  
    7.     param->rc.f_vbv_buffer_init = 0.9;  
    8.     param->rc.i_qp_constant = 23 + QP_BD_OFFSET;  
    9.     param->rc.f_rf_constant = 23;  
    10.     param->rc.i_qp_min = 0;  
    11.     param->rc.i_qp_max = QP_MAX;  
    12.     param->rc.i_qp_step = 4;  
    13.     param->rc.f_ip_factor = 1.4;  
    14.     param->rc.f_pb_factor = 1.3;  
    15.     param->rc.i_aq_mode = X264_AQ_VARIANCE;  
    16.     param->rc.f_aq_strength = 1.0;  
    17.     param->rc.i_lookahead = 40;  
    18.   
    19.     param->rc.b_stat_write = 0;  
    20.     param->rc.psz_stat_out = "x264_2pass.log";  
    21.     param->rc.b_stat_read = 0;  
    22.     param->rc.psz_stat_in = "x264_2pass.log";  
    23.     param->rc.f_qcompress = 0.6;  
    24.     param->rc.f_qblur = 0.5;  
    25.     param->rc.f_complexity_blur = 20;  
    26.     param->rc.i_zones = 0;  
    27.     param->rc.b_mb_tree = 1;  
    1. if( !strncasecmp( s, "zerolatency", 11 ) )  
    2.         {  
    3.             //zerolatency速度快  
    4.             param->rc.i_lookahead = 0;  
    5.             param->i_sync_lookahead = 0;  
    6.             param->i_bframe = 0;//不使用B帧  
    7.             param->b_sliced_threads = 1;  
    8.             param->b_vfr_input = 0;  
    9.             param->rc.b_mb_tree = 0;  
    10.         }  
    1. if( !strcasecmp( preset, "superfast" ) )  
    2.     {  
    3.         param->analyse.inter = X264_ANALYSE_I8x8|X264_ANALYSE_I4x4;  
    4.         param->analyse.i_me_method = X264_ME_DIA;//钻石模板  
    5.         param->analyse.i_subpel_refine = 1;//亚像素运动估计质量为1  
    6.         param->i_frame_reference = 1;  
    7.         param->analyse.b_mixed_references = 0;  
    8.         param->analyse.i_trellis = 0;  
    9.         param->rc.b_mb_tree = 0;  
    10.         param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;  
    11.         param->rc.i_lookahead = 0;  
    12.     }  
    cli_output_t:输出格式对应的结构体。输出格式一般为H.264裸流、FLV、MP4等。
    cli_input_t:输入格式对应的结构体。输入格式一般为纯YUV像素数据,Y4M格式数据等。
    cli_vid_filter_t:输入格式滤镜结构体。滤镜可以对输入数据做一些简单的处理,例如拉伸、裁剪等等(当然滤镜也可以不作任何处理,直接读取输入数据)。
    在x264的编码过程中,调用cli_vid_filter_t结构体的get_frame()读取YUV数据,
    调用cli_output_t的write_frame()写入数据。
    resize_filter中调用了libswscale类库中的sws_scale()对图像完成了拉伸工作。
    注:拉伸滤镜需要libswscale类库的支持。
    参考:
    http://blog.csdn.net/leixiaohua1020/article/details/45583217 本文仅高亮对自己有用的信息
  • 相关阅读:
    SQLite
    Cryptology-3DES(Triple DES) -1981 American
    C#-Tips
    Tool-Wireshark
    Tool-Capture Packet
    Windbg-Debugging Tools for Windows网上搜集资料整理
    图像处理中的卷积操作和高斯核
    TypeError: Dense_net() takes 0 positional arguments but 1 was given
    查找数组中的重复元素
    数组和向量的二分查找
  • 原文地址:https://www.cnblogs.com/elesos/p/7411313.html
Copyright © 2011-2022 走看看