typedef struct
{
/* (CPU 标志位)/
unsigned int cpu;
int i_threads; / (并行编码多帧) divide(分, 划分) each(每一) frame(帧) into multiple(多个的) slices(片), encode(编码) in parallel(平行的,并行的) /
//把每一帧分成多个片,并行编码
/ 视频属性 /
int i_width; / 宽度/
int i_height; / 高度/
int i_csp; / (支持i420,色彩空间) CSP of encoded bitstream, only i420 supported /
int i_level_idc; / level值的设置 /
int i_frame_total; / 编码帧的总数, 默认 0 */
/* Vui参数集视频可用性信息视频标准化选项 标准第311页*/
struct
{
/* they will be reduced(减少的,简化的) to be 0 < x <= 65535 and prime(主要的; 基本的) */
int i_sar_height; /* 标准313页 句法元素sar_width表示样点高宽比的垂直尺寸(以任意单位) */
int i_sar_width; /* 标准313页 句法元素sar_height表示样点高宽比的水平尺寸(以与句法元素sar_width相同的任意单位) 设置长宽比 */
int i_overscan; /* 过扫描线,默认"undef"(不设置),可选项:show(观看)/crop(去除) 0=undef, 1=no overscan, 2=overscan */
/* see h264 annex(附录) E for the values of the following */
int i_vidformat; /* 视频格式,默认"undef",component/pal/ntsc/secam/mac/undef */
int b_fullrange; /* Specify full range samples setting,默认"off",可选项:off/on */
int i_colorprim; /* 原始色度格式,默认"undef",可选项:undef/bt709/bt470m/bt470bg,smpte170m/smpte240m/film */
int i_transfer; /* 转换方式,默认"undef",可选项:undef/bt709/bt470m/bt470bg/linear,log100/log316/smpte170m/smpte240m */
int i_colmatrix; /* 色度矩阵设置,默认"undef",undef/bt709/fcc/bt470bg,smpte170m/smpte240m/GBR/YCgCo */
int i_chroma_loc; /* 色度样本指定,范围0~5,默认0 both top & bottom */
} vui;
int i_fps_num;
int i_fps_den;//i_fps_den
/*
这两个参数是由fps帧率确定的,赋值的过程见下:
{ float fps;
if( sscanf( value, "%d/%d", &p->i_fps_num, &p->i_fps_den ) == 2 )
;
else if( sscanf( value, "%f", &fps ) )
{
p->i_fps_num = (int)(fps * 1000 + .5);
p->i_fps_den = 1000;
}
else
b_error = 1;
}
输入的Value的值就是fps。
*/
/* (流参数)Bitstream parameters */
int i_frame_reference; /* 参考帧最大数目 */
int i_keyint_max; /* 在此间隔设置IDR关键帧(每过多少帧设置一个IDR帧) Force an IDR keyframe at this interval */
int i_keyint_min; /* 场景切换少于此值编码为I帧, 而不是 IDR帧Scenecuts closer together than this are coded as I, not IDR. */
int i_scenecut_threshold; /* 控制多怎样插入I帧how aggressively to insert extra I frames */
int i_bframe; /* 在两个参考帧之间B帧的数目how many b-frame between 2 references pictures */
int b_bframe_adaptive;/* 自适应B帧判定 */
int i_bframe_bias;/*控制插入B帧判定,范围-100~+100,越高越容易插入B帧,默认0*/
int b_bframe_pyramid; /* 允许部分B为参考帧,可选值为0,1,2 Keep some B-frames as references */
//pyramid:金字塔
/*去方块滤波器需要的参数,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] idem(同上) ;beta:贝塔,希腊字母中的第二个字母*/
/*熵编码 */
int b_cabac; //CABAC,基于上下文的自适应二进制算术熵编码
int i_cabac_init_idc; //_idc:id cabac
int i_cqm_preset; /* 自定义量化矩阵(CQM),初始化量化模式为flat */ //preset:预置,预先布置,事先调整
char *psz_cqm_file; /* JM format读取JM格式的外部量化矩阵文件,自动忽略其他—cqm 选项 JM format */
uint8_t cqm_4iy[16]; /* used only if i_cqm_preset == X264_CQM_CUSTOM */
uint8_t cqm_4ic[16]; //???
uint8_t cqm_4py[16];
uint8_t cqm_4pc[16];
uint8_t cqm_8iy[64];
uint8_t cqm_8py[64];
/* Log */
void (*pf_log)( void *, int i_level, const char *psz, va_list );/* 函数指针?common.c中h->param.pf_log( h->param.p_log_private, i_level, psz_fmt, arg ) */
void *p_log_private;//private:私有的
int i_log_level;//前面定义了4个,估计是要用它们来赋值(X264_LOG_NONE X264_LOG_ERROR X264_LOG_WARNING X264_LOG_INFO X264_LOG_DEBUG)
int b_visualize;//visualize:设想, 想像, 构想
/* 编码分析参数Encoder analyser parameters */
struct
{
unsigned int intra; /* 帧间分区intra partitions */
unsigned int inter; /* 帧内分区inter partitions */
int b_transform_8x8; /* 帧间分区 */
int b_weighted_bipred; /* 为b帧隐式加权implicit weighting for B-frames */
int i_direct_mv_pred; /* 时间空间队运动预测spatial vs temporal mv prediction */
int i_chroma_qp_offset; /*色度量化步长偏移量 */
int i_me_method; /* motion(运动) estimation(估计) algorithm(算法,运算法则) to use (X264_ME_*) */
int i_me_range; /* integer pixel motion estimation search range (from predicted(预测的) mv) 整像素运动估计搜索范围,从预测的mv*/
int i_mv_range; /* maximum length of a mv (in pixels) */
int i_subpel_refine; /* subpixel(子像素) motion(运动) estimation(估计) quality(质量) */
int b_bidir_me; /* jointly(共同地,联合地) optimize(使最优化) both MVs in B-frames */
int b_chroma_me; /* chroma(色度) ME(运动估计) for subpel(子像素) and mode(模式) decision(判断,结果) in P-frames */
int b_bframe_rdo; /* RD based mode decision for B-frames */
int b_mixed_references; /* allow each mb partition in P-frames to have it's own reference number */
int i_trellis; /* trellis RD quantization */
int b_fast_pskip; /* early SKIP detection on P-frames */
int b_dct_decimate; /* transform coefficient thresholding on P-frames */
int i_noise_reduction; /* adaptive pseudo-deadzone (假的-死的区域) ;zero:区域 ;reduction:减少, 缩小*/
int b_psnr; /* 计算和打印PSNR信息 || Do we compute PSNR stats雕塑 (save a few % of cpu) */
} analyse;//分析, 分解, 解释
/*
--deadzone-inter <整数> 设置inter模式下,亮度死区量化值,范围0~32,默认21。
--deadzone-intra <整数> 设置intra模式下,亮度死区量化值,范围0~32,默认11。
http://bbs.chinavideo.org/viewthread.php?tid=6769&extra=page%3D3
量化公式:z=(Y*MF+f)>>qbits;其中,Y为变换后的残差值,MF为量化系数,f为量化死区系数,经验值f=1<<qbits /3(intra)或1<<qbits/6(inter),而21和11正是根据这个经验值转换而来。
只是X264把51个qp等级下的量化值,用查表的方式,提前计算好,将量化公式与x264量化公式对照,就可知道21、11的来历
*/
/* Rate control parameters 速率控制参数 */
struct
{
int i_rc_method; /* X264_RC_* method:方法, 办法 */
int i_qp_constant; /* 0-51 constant:常数,常量*/
int i_qp_min; /* 允许的最小量化值 || min allowed QP value */
int i_qp_max; /* 允许的最大量化值 || max allowed QP value */
int i_qp_step; /* 帧间最大量化步长 || max QP step between frames */
int i_bitrate; //设置平均码率
int i_rf_constant; /* 1pass VBR, nominal(名义上的) QP */ //constant:常数
float f_rate_tolerance;//tolerance:偏差
int i_vbv_max_bitrate;/*平均码率模式下,最大瞬时码率,默认0(与-B设置相同) */
int i_vbv_buffer_size;/*码率控制缓冲区的大小,单位kbit,默认0 */
float f_vbv_buffer_init;/* <=1: fraction of buffer_size. >1: kbit码率控制缓冲区数据保留的最大数据量与缓冲区大小之比,范围0~1.0,默认0.9*/
float f_ip_factor;//factor:因子, 因数,要素
float f_pb_factor;
/* 2pass */
int b_stat_write; /* Enable(使能够) stat writing in psz_stat_out */
char *psz_stat_out;
int b_stat_read; /* Read stat from psz_stat_in and use it */
char *psz_stat_in;
/* 2pass params (same as ffmpeg ones) */
char *psz_rc_eq; /* 2 pass rate control equation 等式 */
float f_qcompress; /* 0.0 => cbr, 1.0 => constant qp */
float f_qblur; /* 时间上模糊量化 || temporally blur quants(数量,量化) */
float f_complexity_blur; /* 时间上模糊复杂性 || temporally(时间的) blur(模糊) complexity(复杂性) */
x264_zone_t *zones; /* ratecontrol overrides(忽略;覆盖) */
int i_zones; /* sumber(总数) of zone_t's */
char *psz_zones; /* 指定区的另一种方法 || alternate(代替的) method(方法) of specifying(指定) zones(区域) */
} rc;
/* Muxing parameters */
int b_aud; /* 生成访问单元分隔符 generate(生成) access(访问,入口,入门,入径;通道;使用途径;) unit(单元) delimiters(定界符,分隔符) */
int b_repeat_headers; /* 在每个关键帧前放置SPS/PPS || put SPS/PPS before each keyframe */
int i_sps_id; /* SPS 和 PPS id 号 || SPS and PPS id number */
} x264_param_t;