重要结构体

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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • FFmpeg X264编码参数 目录 码率控制 1 X264的preset和tune 2 编码延时建议...
    古则阅读 29,666评论 1 15
  • 相关 x264编码示例 源码分析 h264编码原理复杂,参数众多。为了方便使用无论x264还是其他编码的实现框架,...
    Don_阅读 2,162评论 0 1
  • 原文地址:http://blog.csdn.net/yipie/article/details/7912291 摘...
    冬的天阅读 7,164评论 1 6
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,723评论 0 33
  • 我走进寄畅园 你走进寄畅园 你看了看我 我看了看你 你笑着和我打招呼 "你肯定是外地来的" 我笑了 很坚定地说 "...
    cloud18阅读 134评论 0 0