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_param_t结构的更多相关文章

  1. x264_param_t结构体参数分析

    转自:http://blog.chinaunix.net/uid-17053077-id-1987955.html 参考网上的一些资料,结合个人的理解,对x264中x264_param_t结构体作了初 ...

  2. x264_param_t结构体解释,设置及对应函数位置

    typedef struct x264_param_t {   /* CPU 标志位 */   unsigned int cpu;   int i_threads; /* 并行编码多帧 */   in ...

  3. x264源代码 概述 框架分析 架构分析

    函数背景色 函数在图中以方框的形式表现出来.不同的背景色标志了该函数不同的作用: 白色背景的函数:不加区分的普通内部函数. 浅红背景的函数:libx264类库的接口函数(API). 粉红色背景函数:滤 ...

  4. x264源代码简单分析:x264命令行工具(x264.exe)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  5. x264源代码简单分析:概述

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  6. x264阅读记录-1

    x264阅读记录-1 采用x264版本是x264-snapshot-20060316-2245. 1. main函数 x264的main函数位于x264.c中,下面是main函数调用情况: (1)_s ...

  7. 视频x264编码浅析

    声明 x264_param_t 结构体变量: x264_param_t params; x264_param_default_preset(&params, "ultrafast&q ...

  8. x264源代码学习1:概述与架构分析

    函数背景色 函数在图中以方框的形式表现出来.不同的背景色标志了该函数不同的作用: 白色背景的函数:不加区分的普通内部函数. 浅红背景的函数:libx264类库的接口函数(API). 粉红色背景函数:滤 ...

  9. x264代码剖析(三):主函数main()、解析函数parse()与编码函数encode()

    x264代码剖析(三):主函数main().解析函数parse()与编码函数encode() x264的入口函数为main().main()函数首先调用parse()解析输入的參数,然后调用encod ...

随机推荐

  1. 问题-RZ安装后报错“RzBorder.pas”

    错误象现:[Error] RzBorder.pas(1429): Number of elements differs from declaration [Fatal Error] RzEdit.pa ...

  2. Oracle- 初识

    我一直没用过ORACLE.今天总算装上了,说一下我装的过程,感觉还是有点折腾的. 一.我装的是ORACLE 9版本,从网上下载的总大小1.3G.是三个压缩包. 首先我解压三个压缩包后,使用UltraI ...

  3. Wix#可以直接写C#代码来生成Wix的MSI安装文

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Wix#可以直接写C#代码来生成Wix的MSI安装文.

  4. Mac下安装cocos2d-x环境

    安装后xcode之后,下载cocos2dx压缩包,解压 通过中断cd到cocos2dx文件夹内 输入下行命令 sudo ./install-templates-xcode.sh 执行成功后打开xcod ...

  5. Override ListView getAdapter造成的后果

    近期工作中,发现了一个bug,是和ListView Adapter有关的.产生了FC,描写叙述信息大约是 "The content of the adapter has changed bu ...

  6. log4j.properties文件配置--官方文档

    Default Initialization Procedure The log4j library does not make any assumptions about its environme ...

  7. 常用工具之stunnel

    The stunnel program is designed to work as an SSL encryption wrapper between remote client and local ...

  8. POJ1329题

    Circle Through Three Points Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 20000/10000K (Jav ...

  9. springmvc 双亲上下文导致的 No mapping found for HTTP request

    今天搭建spring mvc ,结果发出请求总是No mapping found for HTTP request with URI [******] 于是开始排查了半天,后来在网上搜到了双亲上下文的 ...

  10. Java基础知识强化之IO流笔记55:IO流练习之 自定义类模拟LineNumberReader的获取行号功能案例

    1. 自定义类模拟LineNumberReader的获取行号功能案例 2. 代码实现: (1)MyBufferedReader.java: package cn.itcast_08; import j ...