x264中重要结构体说明

news/2024/7/4 9:41:51

首先解释一下cli_opt_t的这个_t代表结构图可能是type的意思。同时还有很多i_ b_等作为前缀的变量,其中的I_表示int类型的变量 b表示bool类型的。依次类推。

正式进入主题。

typedef struct {

    int b_progress;

    int i_seek;

    hnd_t hin;

    hnd_t hout;

    FILE *qpfile;

cli_opt_t;

此结构体是记录一些与编码关系较小的设置信息的opt=option。结构体内部的变量都可以通过读取main()的参数获得。也就是argv

b_progress表示一个bool类型的变量,看参数帮助 也就是x264--help你会知道,他是用来控制是否显示编码进度的一个东西。取值为0,1.

 

I_seek 整数类型 表示开始从哪一帧编码。因为不一定从这个文件的第一帧开始编码,这是可以控制的。

 

Hnd_t(hnd=handle)是一个空指针, void *C语言里空指针是有几个特性的,他是一个一般化指针,可以指向任何一种类型,但却不能解引用,需要解引用的时候,需要进行强制转换。采用空指针的策略,应该是为了声明变量的简便和统一。

Hin 指向输入yuv文件的指针。

Hout 指向编码过后生成的文件的指针。

 

Qpfile 是一个指向文件类型的指针,他是文本文件,其每一行的格式是framenum frametype QP

用于强制指定某些帧或者全部帧的帧类型和QP(quant param量化参数)的值。

 

x264_param_default( &param );

这部分设置编码参数的缺省值

附结构体param中部分变量的意义:

    param->i_csp          = X264_CSP_I420; // 设置输入的视频采样的格式

param->vui.i_sar_width = 0;  //VUI:video usability information

    param->i_fps_num       = 10; //帧率

    param->i_fps_den       = 1;  //用两个整型的数的比值,来表示帧率

 

    /* Encoder parameters */

    param->i_frame_reference = 1; //参考帧的最大帧数。

    param->i_bframe = 0;          //两个参考帧之间的B帧数目。

    param->b_deblocking_filter = 1; //去块效应相关

 

    param->b_cabac = 0;            //cabac的开关

    param->i_cabac_init_idc = -1;

 

    param->rc.b_cbr = 1;           //constant bitrate 恒定码率控制模式

    param->rc.i_bitrate = 0;       //默认的码率

    param->rc.i_rc_buffer_size = 0;   //buffer的大小

    param->rc.i_rc_init_buffer = 0;   //

param->rc.i_rc_sens = 100;       ///* rate control sensitivity

 

param->rc.i_rc_method = X264_RC_NONE;  //码率控制,CQP(恒定质量)、//CRF(恒定码率)、ABR(平均码率)

param->rc.i_qp_constant = 26; //qp的初始值,最大最小的qp值,

    param->rc.i_qp_min = 10;           //最小的qp值

    param->rc.i_qp_max = 51;          //最大的qp值

param->rc.i_qp_step = 4;       //qp[步长step。

    param->rc.f_ip_factor = 1.4;  //ip--i帧p帧的qp的差值

    param->rc.f_pb_factor = 1.3;  //pb--p帧b帧的qp的差值

 

/* Log */ //整个param的一个log文件

 

    /*analyse */

param->analyse.intra = X264_ANALYSE_I4x4 | X264_ANALYSE_I8x8;  

//桢内分析

param->analyse.inter = X264_ANALYSE_I4x4 | X264_ANALYSE_I8x8                           |X264_ANALYSE_PSUB16x16 | X264_ANALYSE_BSUB16x16;

//桢间分析

param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_SPATIAL;

//预测模式

param->analyse.i_me_method = X264_ME_HEX;      //运动估计模式

param->analyse.i_me_range = 16;              //运动估计范围

    param->analyse.i_subpel_refine = 5;

    param->analyse.b_chroma_me = 1;

    param->analyse.i_mv_range_thread = -1;

    param->analyse.i_mv_range = -1; // set from level_idc

    param->analyse.i_direct_8x8_inference = -1; // set from level_idc

    param->analyse.i_chroma_qp_offset = 0;

    param->analyse.b_fast_pskip = 1;

    param->analyse.b_dct_decimate = 1;

    param->analyse.i_luma_deadzone[0] = 21;

    param->analyse.i_luma_deadzone[1] = 11;

    param->analyse.b_psnr = 1;

    param->analyse.b_ssim = 1;

 

    param->i_cqm_preset = X264_CQM_FLAT;  //自定义量化矩阵(CQM),初始化量化模式为flat

 

 typedef struct

{

    /* In: force picture type (if not auto)

     *     If x264 encoding parameters are violated in the forcing of picture types,

     *     x264 will correct the input picture type and log a warning.

     *     The quality of frametype decisions may suffer if a great deal of fine-grained

     *     mixing of auto and forced frametypes is done.

     * Out: type of the picture encoded */

    int     i_type;

    /* In: force quantizer for > 0 */

    int     i_qpplus1;

    /* In: user pts, Out: pts of encoded picture (user)*/

    int64_t i_pts;

 

    /* In: raw data */

    x264_image_t img;

x264_picture_t;

具体的含义理解参考了read_frame_yuv()x264_picture_alloc();

I_type 指明被编码图像的类型,有X264_TYPE_AUTO X264_TYPE_IDR         X264_TYPE_I X264_TYPE_P X264_TYPE_BREF X264_TYPE_B可供选择,初始化为AUTO,说明由x264在编码过程中自行控制。

I_qpplus1 :此参数减1代表当前画面的量化参数值。

I_pts program time stamp 程序时间戳,指示这幅画面编码的时间戳。

Img :存放真正一副图像的原始数据。

 

typedef struct

{

    int     i_csp;

    int     i_plane;

    int     i_stride[4];

    uint8_t *plane[4];

x264_image_t;

 

Csp: color space parameter 色彩空间参数 X264只支持I420

i_Plane 代表色彩空间的个数。一般为3YUV,初始化为


http://www.niftyadmin.cn/n/3613237.html

相关文章

ARM存储管理单元MMU和存储保护单元MPU

MMU提供的一个关键服务是,能使各个任务作为独立的程序在其自己的私有存储空间运行.地址转换过程允许运行的多个程序使用相同的虚拟地址,而各自存储在物理存储器的不同位置.区域可以是活跃的,也可以是睡眠的:活跃区域包含当前系统正在使用的代码或数据;睡眠区域包含当前不使用,但…

静态页转换平台(StaticPol)-静态页生成终极解决方案

我本身非常不喜欢写文字材料,但是这个东西相信是很多人都需要的,把心得写出来和大家分享一下,也好让大家都努力PP,以助于尽快完善这个东东,早日贴出来供大家下载使用。 为什么要生成静态页? 这个问题咱们就…

五线电阻触摸屏的工作原理

在触摸屏的四个端点RT,RB,LT,LB四个顶点,均加入一个均匀电场,使其下层(氧化铟)ITO GLASS上布满一个均匀电压,上层为收接讯号装置,当笔或手指按压外表上任一点时&#xff…

jQuery学习笔记:Ajax(二)

接上篇“jQuery学习笔记:Ajax(一)”。3、jQuery.get(url,[data],[callback],[type])通过远程 HTTP GET 请求载入信息。这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。返回值 XML…

四线电阻触摸屏与五线电阻触摸屏的区别和技术比较

项目 OneTouch -4W四线电阻 OneTouch -5W五线电阻 物理结构 1、屏幕的最底层为一般玻璃板 2、玻璃上有两层 ITO Film,上层用以读取y轴电压值,下层用以读取x轴电压值,两层film紧密靠在一起,镀有ITO的面相对&a…

LED和LCD的区别

LED是发光二极管Light Emitting Diode的英文缩写。 LED应用可分为两大类:一是LED单管应用,包括背光源LED,红外线LED等;另外就是LED显示屏,目前,中国在LED基础材料制造方面与国际还存在着一定的差距&#xf…

MacOS配置新安装的Python环境变量

MacOS配置新安装的Python环境变量官网下载.pkg默认安装配置环境1. 打开终端2. 输入命令3. 编辑.bash_profile文件4. 配置环境变量5. 检查Python版本使用总结官网下载.pkg默认安装 在python官网中下载需要的.pkg包,默认安装即可(3.9版本为例)…

LCD液晶屏的分类知识

摘要:介绍LCD的分类、选型、背光及一些指标,详细讨论触屏的类别和具体实现。关键词:LCD;触摸屏 一、概述 液晶的发现可追溯到19世纪末,1888年被奥地利植物学家发现。它是一种在一定温度范围内呈现既不同于固态、液态…