美文网首页
重要结构体

重要结构体

作者: ai___believe | 来源:发表于2017-03-08 17:18 被阅读69次

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;

相关文章

  • 重要结构体

    typedef struct{/* (CPU 标志位)/unsigned int cpu;int ...

  • FFMPEG4.1源码分析 重要的结构体及层级结构

    1 FFMPEG中的重要结构体 1.1 结构体分类 FFMPEG中结构体很多。最关键的结构体可以分成以下几类: 1...

  • go结构体(struct)和方法(method)

    结构体(struct) go中没有对象这一概念,所以采用了结构体的概念,结构体在go中有着非常重要的位置。结构体是...

  • swift的class和struct

    相对于 Objective-C 中的结构体,Swift 对结构体的使用比重大了很多,结构体成为了实现面向对象的重要...

  • Swift 中的 struct 和 class

    相对于 Objective-C 中的结构体,Swift 对结构体的使用比重大了很多,结构体成为了实现面向对象的重要...

  • Swift 中的 struct 和 class

    相对于 Objective-C 中的结构体,Swift 对结构体的使用比重大了很多,结构体成为了实现面向对象的重要...

  • 进度条

    整个实现中,最重要的是 WriteCounter 这个结构体,这个结构体下的 Write(p []byte) 方法...

  • FFmpeg结构体: AVPacket

    AVPacket 是什么? AVPacket是存储压缩编码数据相关信息的结构体 重要的变量在AVPacket结构体...

  • go学习文档-结构(struct)--方法(method)

    一、结构 1、结构体类似于Java中 无方法的类。 2、结构体是值类型,值类型,值类型!!重要的事情强调好几遍!!...

  • 我所理解的Block:1、Block简析

    1、Block 本质上是一个struct结构体,在这个结构体中,最重要的成员是一个函数(当然除函数外还有其他重要的...

网友评论

      本文标题:重要结构体

      本文链接:https://www.haomeiwen.com/subject/knabgttx.html