参数及结构

typedef struct
{
    int     i_csp;       //色彩空间参数 ,X264只支持I420
    int     i_stride[4]; //对应于各个色彩分量的跨度
    uint8_t *plane[4];   //对应于各个色彩分量的数据
} x264_image_t;

#define    X264_RC_CQP                  0--->恒定质量
#define    X264_RC_CRF                  1--->恒定码率
#define    X264_RC_ABR                  2--->平均码率

typedef struct

    int i_ref_idc;    //指该NAL单元的优先级  
    int i_type;       //指该NAL单元的类型  
    int b_long_startcode; // 是否采用长前缀码0x00000001   
    int i_first_mb; /* If this NAL is a slice, the index of the first MB in the slice. */
    int i_last_mb;  /* If this NAL is a slice, the index of the last MB in the slice. */
    int i_payload;     //该nal单元包含的字节数
    uint8_t *p_payload;//该NAL单元存储数据的开始地
}
 x264_nal_t;
/****************************************************************************************************************
x264_nal_t中的数据在下一次调用x264_encoder_encode之后就无效了,因此必须在调用
x264_encoder_encode 或 x264_encoder_headers 之前使用或拷贝其中的数据。
*****************************************************************************************************************/

typedef struct x264_param_t
{  
unsigned int cpu;                  // CPU 标志位 
int  i_threads;                 // 并行编码多帧; 线程数,为0则自动多线程编码
int  b_sliced_threads;          // 如果为false,则一个slice只编码成一个NALU;// 否则有几个线程,在编码成几个NALU。缺省为true。
int  b_deterministic; // 是否允许非确定性时线程优化
int  b_cpu_independent; // 强制采用典型行为,而不是采用独立于cpu的优化算法
int  i_sync_lookahead; // 线程超前缓存帧数
/* 视频属性 */
int  i_width; // 视频图像的宽
int  i_height; // 视频图像的高
int  i_csp;         // 编码比特流的CSP,仅支持i420,色彩空间设置
int  i_level_idc; // 指明作用的level值,可能与编码复杂度有关
int  i_frame_total; // 编码帧的总数, 默认 0
/* hrd : hypothetical reference decoder (假定参考解码器) , 检验编码器产生的符合
  该标准的NAL单元流或字节流的偏差值。蓝光视频、电视广播及其它特殊领域有此要求 */
int  i_nal_hrd;
////////////////* vui参数集 : 视频可用性信息、视频标准化选项 *////////////////////
struct
{
    /* 宽高比的两个值相对互素,且在(0,  65535] 之间 */
 int  i_sar_height;    // 样本宽高比的高度
int  i_sar_width;    // 样本宽高比的宽度
/* 0=undef, 1=no overscan, 2=overscan 过扫描线,
    默认"undef"(不设置),可选项:show(观看) / crop(去除) */
int  i_overscan;
/* 以下的值可以参见H264附录E */
int  i_vidformat;    // 视频在编码/数字化之前是什么类型,默认"undef".
                                    // 取值有:Component, PAL, NTSC, SECAM, MAC 等
int  b_fullrange;           // 样本亮度和色度的计算方式,默认"off",可选项:off/on
int  i_colorprim;           // 原始色度格式,默认"undef"
int  i_transfer;            // 转换方式,默认"undef"
int  i_colmatrix;           // 设置从RGB计算得到亮度和色度所用的矩阵系数,默认"undef"
int  i_chroma_loc;          // 设置色度采样位置,范围0~5,默认0
} vui;
////////////////* 比特流参数 */////////////////////////////
int  i_frame_reference;         // 最大参考帧数目
int  i_dpb_size;                // Decoded picture buffer size
int  i_keyint_max;              // 设定IDR帧之间的最间隔,在此间隔设置IDR关键帧
int  i_keyint_min;              // 设定IDR帧之间的最小间隔, 场景切换小于此值编码位I帧, 而不是 IDR帧.
int  i_scenecut_threshold;      // 场景切换阈值,插入I帧
int  b_intra_refresh;           // 是否使用周期帧内刷新替代IDR帧
int  i_bframe;                  // 两个参考帧之间的B帧数目
int  i_bframe_adaptive;         // 自适应B帧判定, 可选取值:X264_B_ADAPT_FAST等
int  i_bframe_bias;             // 控制B帧替代P帧的概率,范围-100 ~ +100,
                                // 该值越高越容易插入B帧,默认0.
int  i_bframe_pyramid;          // 允许部分B帧为参考帧,
                                // 可选取值:0=off,  1=strict hierarchical,  2=normal
int  b_open_gop;                // Close GOP是指帧间的预测都是在GOP中进行的。
                                // 使用Open GOP,后一个GOP会参考前一个GOP的信息
int  b_bluray_compat;           // 支持蓝光碟
/* 去块滤波器需要的参数, alpha和beta是去块滤波器参数 */
int  b_deblocking_filter;               // 去块滤波开关
int  i_deblocking_filter_alphac0;       // [-6, 6] -6 light filter, 6 strong
int  i_deblocking_filter_beta;          // [-6, 6] 同上
int  b_cabac;                           // 自适应算术编码cabac开关
int  i_cabac_init_idc;                  // 给出算术编码初始化时表格的选择
int  b_interlaced;                      // 隔行扫描
int  b_constrained_intra;               // 
 /* 量化 */
int  i_cqm_preset;              // 自定义量化矩阵(CQM), 初始化量化模式为flat
char *psz_cqm_file;             // 读取JM格式的外部量化矩阵文件,忽略其他cqm选项
uint8_t  cqm_4iy[16];           // used only if i_cqm_preset == X264_CQM_CUSTOM  
uint8_t  cqm_4py[16];
uint8_t  cqm_4ic[16];
uint8_t  cqm_4pc[16];
uint8_t  cqm_8iy[64];
uint8_t  cqm_8py[64];
uint8_t  cqm_8ic[64];
uint8_t  cqm_8pc[64];
/* 日志 */
void  (*pf_log)( void *, int i_level, const char *psz, va_list );     // 日志函数
void  *p_log_private;           // 
int    i_log_level;             // 日志级别,不需要打印编码信息时直接注释掉即可
int    b_visualize;             // 是否显示日志
char   *psz_dump_yuv;           //  重建帧的文件名
/* 编码分析参数 */
struct
{
unsigned int intra;             //  帧内分区
unsigned int inter;             //  帧间分区
int  b_transform_8x8;           // 
int  i_weighted_pred;           // P帧权重
int  b_weighted_bipred;         // B帧隐式加权
int  i_direct_mv_pred;          // 时间空间运动向量预测模式
int  i_chroma_qp_offset;        // 色度量化步长偏移量
int  i_me_method;               // 运动估计算法 (X264_ME_*)
int  i_me_range;                // 整像素运动估计搜索范围 (from predicted mv) 
int  i_mv_range;                // 运动矢量最大长度. -1 = auto, based on level
int  i_mv_range_thread;         // 线程之间的最小运动向量缓冲.  -1 = auto, based on number of threads.
int  i_subpel_refine;           // 亚像素运动估计质量
int  b_chroma_me;               // 亚像素色度运动估计和P帧的模式选择
int  b_mixed_references;        // 允许每个宏块的分区有它自己的参考号
int  i_trellis;                 // Trellis量化提高效率,对每个8x8的块寻找合适的量化值,需要CABAC,
                                // 0 :即关闭  1:只在最后编码时使用  2:在所有模式决策上启用
int  b_fast_pskip;              // 快速P帧跳过检测
int  b_dct_decimate;            // P帧变换系数阈值
int  i_noise_reduction;         // 自适应伪盲区
int  b_psy;                     // Psy优化开关,可能会增强细节
float  f_psy_rd;                // Psy RD强度
float  f_psy_trellis;           // Psy Trellis强度
int  i_luma_deadzone[2];        // 亮度量化中使用的盲区大小,{ 帧间, 帧内 }
int  b_psnr;                    // 计算和打印PSNR信息
int  b_ssim;                    // 计算和打印SSIM信息
} analyse;
/* 码率控制参数 */
struct
{
int  i_rc_method;               // 码率控制方式 : X264_RC_CQP恒定质量,  
                                // X264_RC_CRF恒定码率,  X264_RC_ABR平均码率
int  i_qp_constant;             // 指定P帧的量化值,0 - 51,0表示无损
int  i_qp_min;                  // 允许的最小量化值,默认10
int  i_qp_max;                  // 允许的最大量化值,默认51
int  i_qp_step;                 // 量化步长,即相邻两帧之间量化值之差的最大值
int   i_bitrate;                // 平均码率大小
float  f_rf_constant;           // 1pass VBR, nominal QP. 实际质量,值越大图像越花,越小越清晰
float  f_rf_constant_max;       // 最大码率因子,该选项仅在使用CRF并开启VBV时有效,
                                // 图像质量的最大值,可能会导致VBV下溢。
float  f_rate_tolerance;        // 允许的误差
int    i_vbv_max_bitrate;       // 平均码率模式下,最大瞬时码率,默认0
int    i_vbv_buffer_size;       // 码率控制缓冲区的大小,单位kbit,默认0
float  f_vbv_buffer_init;       // 设置码率控制缓冲区(VBV)缓冲达到多满(百分比),才开始回放,
                                // 范围0~1.0,默认0.9
float  f_ip_factor;             // I帧和P帧之间的量化因子(QP)比值,默认1.4
float  f_pb_factor;             // P帧和B帧之间的量化因子(QP)比值,默认1.3
int   i_aq_mode;                // 自适应量化(AQ)模式。 0:关闭AQ  
                                // 1:允许AQ在整个视频中和帧内重新分配码
                                // 2:自方差AQ(实验阶段),尝试逐帧调整强度
float  f_aq_strength;           // AQ强度,减少平趟和纹理区域的块效应和模糊度
/* MBTree File是一个临时文件,记录了每个P帧中每个MB被参考的情况。
  目前mbtree只处理P帧的MB,同时也不支持b_pyramid. */
int   b_mb_tree;                // 是否开启基于macroblock的qp控制方法
int   i_lookahead;              // 决定mbtree向前预测的帧数
/* 2pass */
int   b_stat_write;             // 是否将统计数据写入到文件psz_stat_out中
char  *psz_stat_out;            // 输出文件用于保存第一次编码统计数据
int   b_stat_read;              // 是否从文件psz_stat_in中读入统计数据
char  *psz_stat_in;             // 输入文件存有第一次编码的统计数据
/* 2pass params (same as ffmpeg ones) */
float  f_qcompress;             // 量化曲线(quantizer curve)压缩因子。
                                // 0.0 => 恒定比特率,1.0 => 恒定量化值。
float  f_qblur;                 // 时间上模糊量化,减少QP的波动(after curve compression)
float  f_complexity_blur;       // 时间上模糊复杂性,减少QP的波动(before curve compression)
x264_zone_t *zones;             // 码率控制覆盖
int    i_zones;                 // number of zone_t's
char  *psz_zones;               // 指定区的另一种方法
} rc;
/* Muxing复用参数 */
int  b_aud;                     // 生成访问单元分隔符
int  b_repeat_headers;          // 是否复制sps和pps放在每个关键帧的前面
int  b_annexb;                  // 值为true,则NALU之前是4字节前缀码0x00000001;
                                // 值为false,则NALU之前的4个字节为NALU长度
int  i_sps_id;                  // sps和pps的id号
int  b_vfr_input;               // VFR输入。1 :时间基和时间戳用于码率控制  0 :仅帧率用于码率控制
uint32_t  i_fps_num;            // 帧率的分子
uint32_t  i_fps_den;            // 帧率的分母
uint32_t  i_timebase_num;       // 时间基的分子
uint32_t  i_timebase_den;       // 时间基的分母
/* 以某个预设模式将输入流(隔行,恒定帧率)标记为软交错(soft telecine)。默认none. 可用预设有:
  none, 22, 32, 64, double, triple, euro.  使用除none以外任一预设,都会连带开启--pic-struct */
int  b_pulldown;
int  b_pic_struct;              // 强制在Picture Timing SEI传送pic_struct. 默认是未开启
/* 将视频流标记为交错(隔行),哪怕并非为交错式编码。可用于编码蓝光兼容的25p和30p视频。默认是未开启 */
int b_fake_interlaced;
/* 条带参数 */
int  i_slice_max_size;          // 每个slice的最大字节数,包括预计的NAL开销
int  i_slice_max_mbs;           // 每个slice的最大宏块数,重写i_slice_count
int  i_slice_count;             // 每帧slice的数目,每个slice必须是矩形
} x264_param_t;

x264参数的更多相关文章

  1. (转)x264参数中文详解(X264 Settings)

    0 解释x264命令可选项的用途和使用方法.同执行 x264 --fullhelp 显示顺序.本文主要翻译:mewiki.project357.com/wiki/X264_Settings,同时参考d ...

  2. x264中重要结构体参数解释,参数设置,函数说明 <转>

    x264中重要结构体参数解释http://www.usr.cc/thread-51995-1-3.htmlx264参数设置http://www.usr.cc/thread-51996-1-3.html ...

  3. x264 - 高品质 H.264 编码器

    转自:http://www.5i01.cn/topicdetail.php?f=510&t=3735840&r=18&last=48592660 H.264 / MPEG-4 ...

  4. x264 亮度信号8x8帧内预测模式

    1 该模式的8个预测方向与4x4帧内预测模式一样. 2 该模式只有High profile及更高的Profile的才有可能使用,Baseline.Main Profile.Preset为ultrafa ...

  5. x264 n-th pass编码时候Stats文件的含义

    x264 n-th pass(一般是2pass)编码时所用的文件包括下述x264参数生成.stats文件 options: 1280x816 fps=2997/125 timebase=125/299 ...

  6. (转)x264源码分析(1):main、parse、encode、x264_encoder_open函数代码分析

    转自:http://nkwavelet.blog.163.com/blog/static/2277560382013103010312144/ x264版本:   x264-snapshot-2014 ...

  7. (转)x264重要结构体详细说明(1): x264_param_t

    结构体x264_param_t是x264中最重要的结构体之一,主要用于初始化编码器.以下给出了几乎每一个参数的含义,对这些参数的注释有的是参考了网上的资料,有的是自己的理解,还有的是对源代码的翻译,由 ...

  8. X264码率控制总结

    ABR,CQP,CRF X264显式支持的一趟码率控制方法有:ABR, CQP, CRF. 缺省方法是CRF.这三种方式的优先级是ABR > CQP > CRF. if ( bitrate ...

  9. X264使用指南

    x264是一个开源的H.264视频编码器库.是目前最好的有损视频编码器. 基本用法是 x264 [options]-o outfile infile 主页: http://www.videolan.o ...

随机推荐

  1. java基础常见问题和eclipse常用快捷键

    一.java常用库 java.lang中 StringBuffer,StringBuilder,System,Runtime,Math java.util Date,Calendar,Random j ...

  2. git使用(二)----创建版本库

    创建版本库(操作都是在linux环境下) 什么是版本库呢?版本库又名仓库,英文名repository,其实就是一个目录,可以进行增删查改 创建一个目录,这里在根目录下创建一个git_home目录mkd ...

  3. PHP二维数组如何根据某个字段排序

    分享下PHP二维数组如何根据某个字段排序的方法. 从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条. 本文记录的要实现的功能类似于 ...

  4. SQL 创建索引,语法

    索引介绍.及原理 主键,唯一索引 聚集索引的关系 当数据库表的数据太过庞大,的时候我们能够通过加入索引的形式解决. 聚集索引:数据的实际存储顺序与我们做索引的顺序是一致的,这样的索引我们将它成为聚集索 ...

  5. JS中split用法和数组中元素的删除

    JS中split用法 <script language="javascript"> function spli(){ datastr="2,2,3,5,6,6 ...

  6. jsp报源码

    刚在get的一个姿势.在参数后面加负号即爆出源码. w7oami 表哥解释道其原理如下: 1.用了@file_get_contents 函数 2.cdn 或者负载均衡 才导致爆出源码.

  7. 【C#】获取桌面分辨率宽高(是否包含任务栏)

    原文转自:http://120.77.66.71/blog/?p=176 在使用WPF进行桌面APP开发时,通常需要用到屏幕分辨率以及屏幕的宽高进行界面的自适应显示. C#中,类SystemParam ...

  8. mysql插入、更新与删除

    数据库增删改查都是要熟练掌握的. 这部分就来看看前面3个比较简单的部分,增,删,改. 插入数据 为表的所有字段插入数据 insert into table_name (column_list) val ...

  9. C语言 · 寂寞的数

    算法训练 寂寞的数   时间限制:1.0s   内存限制:256.0MB      问题描述 道德经曰:一生二,二生三,三生万物. 对于任意正整数n,我们定义d(n)的值为为n加上组成n的各个数字的和 ...

  10. Makefile 编译动态库文件及链接动态库

    本文为原创文章,转载请指明该文链接 文件目录结构如下 dynamiclibapp.c Makefile comm/inc/apue.h comm/errorhandle.c dynamiclib/Ma ...