转)x264重要结构体详细说明(2): x264_image_t、x264_picture_t、x264_nal_t

转自:http://nkwavelet.blog.163.com/blog/static/2277560382013102923912753/

/********************************************************************************************

x264_image_t 结构用于存放一帧图像实际像素数据。该结构体定义在x264.h中

*********************************************************************************************/

typedef struct

{

int     i_csp;           // 设置彩色空间,通常取值 X264_CSP_I420,所有可能取值定义在x264.h中

int     i_plane;        //  图像平面个数,例如彩色空间是YUV420格式的,此处取值3

int     i_stride[4];    // 每个图像平面的跨度,也就是每一行数据的字节数

uint8_t *plane[4];   //  每个图像平面存放数据的起始地址, plane[0]是Y平面,

// plane[1]和plane[2]分别代表U和V平面

}  x264_image_t;

/********************************************************************************************

x264_picture_t 结构体描述一视频帧的特征,该结构体定义在x264.h中。

*********************************************************************************************/

typedef struct

{

int   i_type;           // 帧的类型,取值有X264_TYPE_KEYFRAME、X264_TYPE_P、

// X264_TYPE_AUTO等。初始化为auto,则在编码过程自行控制。

int   i_qpplus1;     // 此参数减1代表当前帧的量化参数值

int   i_pic_struct; // 帧的结构类型,表示是帧还是场,是逐行还是隔行,

// 取值为枚举值 pic_struct_e,定义在x264.h中

int   b_keyframe; // 输出:是否是关键帧

int64_t   i_pts;    // 一帧的显示时间戳

int64_t   i_dts;     // 输出:解码时间戳。当一帧的pts非常接近0时,该dts值可能为负。

/* 编码器参数设置,如果为NULL则表示继续使用前一帧的设置。某些参数

(例如aspect ratio) 由于收到H264本身的限制,只能每隔一个GOP才能改变。

这种情况下,如果想让这些改变的参数立即生效,则必须强制生成一个IDR帧。*/

x264_param_t    *param;

x264_image_t     img;          // 存放一帧图像的真实数据

x264_image_properties_t    prop;

x264_hrd_t    hrd_timing;     // 输出:HRD时间信息,仅当i_nal_hrd设置了才有效

void    *opaque;                     // 私有数据存放区,将输入数据拷贝到输出帧中

} x264_picture_t ;

/****************************************************************************************************************

x264_nal_t中的数据在下一次调用x264_encoder_encode之后就无效了,因此必须在调用

x264_encoder_encode 或 x264_encoder_headers 之前使用或拷贝其中的数据。

*****************************************************************************************************************/

typedef struct

{

int  i_ref_idc;        // Nal的优先级

int  i_type;           // Nal的类型

int  b_long_startcode; // 是否采用长前缀码0x00000001

int  i_first_mb;       // 如果Nal为一条带,则表示该条带第一个宏块的指数

int  i_last_mb;        // 如果Nal为一条带,则表示该条带最后一个宏块的指数

int  i_payload;        // payload 的字节大小

uint8_t *p_payload;    // 存放编码后的数据,已经封装成Nal单元

} x264_nal_t;

/****************************************************************************************************************

cli_opt_t结构体主要记录一些与编码关系较小的设置信息,其变量可通过读取main()的参数获得。

*****************************************************************************************************************/

typedef struct

{

int   b_progress;     // bool类型的变量,用来控制是否显示编码进度。取值为0或1。

int   i_seek;             // 整数类型 表示开始从哪一帧开始编码。

// 因为不一定从文件的第一帧开始编码,这是可以控制的。

/* hnd_t(hnd=handle)是一个空指针, 定义在x264cli.h 中。void *在C语言里空指针是有几个

特性的,它是一个一般化指针,可以指向任何一种类型,但却不能解引用,需要解引

用的时候,需要进行强制转换。采用空指针的策略,是为了声明变量的简便和统一。 */

hnd_t   hin;              // 指向输入yuv文件的指针

hnd_t  hout;            // 指向编码过后生成的文件的指针。

/* 一个指向文件类型的指针,它是文本文件,其每一行的格式是 :framenum frametye

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

FILE   *qpfile;

} cli_opt_t;

时间: 2024-10-07 18:58:39

转)x264重要结构体详细说明(2): x264_image_t、x264_picture_t、x264_nal_t的相关文章

(转)x264重要结构体详细说明(1): x264_param_t

结构体x264_param_t是x264中最重要的结构体之一,主要用于初始化编码器.以下给出了几乎每一个参数的含义,对这些参数的注释有的是参考了网上的资料,有的是自己的理解,还有的是对源代码的翻译,由于本人水平有限,错误难免,请高手指正. /* 结构体x264_param_t定义在x264.h中 */ typedef struct x264_param_t { /* CPU 标志位 */ unsigned int cpu; int  i_threads;                 // 并

file_operations结构体解析 1

注:学了这么长时间了,还没有好好看看 file_operations机构体,这其中还有很多的东西,当你学着学着的时候,就会用到这里面的一些系统调用对应的函数了,我在网上搜索之后,记录如下,一边将来查看..... 前沿:这些东西估计对你有用 linux驱动程序中最重要的涉及3个重要的内核数据结构,分别为file_operations,file和inode. 在linux中inode结构用于表示文件,而file结构则表示打开的文件的描述,因为对于单个文件而言可能会有许多个表示打开的文件的描述符,因而

C语言 - 结构体(struct)比特字段(:) 详细解释

结构体(struct)比特字段(:) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26722511 结构体(struct)能够使用位字段(:), 节省空间, 例如以下面代码, 结构体a中的, 第一个变量x占用1个字符, y占用2个字符, z占用33个字符(越界); 可是sizeof()会自己主动补齐, 如x+y一共占用4个字节, z占用8个字节, 所以结构体占用12个字节; 当使用加法运算时, 会初始化为0; 代码

x264中重要结构体参数解释,参数设置,函数说明 <转>

x264中重要结构体参数解释http://www.usr.cc/thread-51995-1-3.htmlx264参数设置http://www.usr.cc/thread-51996-1-3.html x264中重要结构体参数解释typedef struct x264_param_t{/* CPU 标志位 */unsigned int cpu;int         i_threads;       /* 并行编码多帧 */int         b_deterministic; /*是否允许非

c的详细学习(10)结构体与共用体的学习(二)

在c语言中,结构体数据类型与共用体数据类型都属于构造类型.共用体与结构体数据类型在定义上十分相似,但它们在存储空间的占用分配上有本质的区别.结构体变量是各种类型数据的集合,各成员占据不同的存储空间,而共用体变量的所有成员占用相同的存储空间,在某一时刻只有一个成员起作用. (1)共用体类型的定义 定义共用体类型的一般形式: union 共用体类型名 { 数据类型  成员名1; 数据类型  成员名2; 数据类型  成员名3; ...... }; 以上定义了一个名为data的共用体类型.它说明该类型由

结构体所占内存大小

结构体所占内存大小划分原则: 1.划分字节,按照当前结构体中,字节数最大的类型作为划分单元.[这里面还有一些前提.下面的例子会详细说到] 2.以矩形块儿的形式划分. #include <stdio.h> /**划分示意图: 最小单元是 double所以 这个 地方按照8个字节作为最小单元来划分. */ struct student1 { double avgMark; int ID; }; /**划分示意图: 最小单元不能是数组这个地方的最小单元是 1个字节 */ struct student

进击的雨燕-------------类和结构体

类和结构体是人们构建代码所用的一种通用且灵活的构造体.我们可以使用完全相同的语法规则来为类和结构体定义属性(常量.变量)和添加方法,从而扩展类和结构体的功能. 与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意通常一个类的实例被称为对象.然而在 Swift 中,类和结构体的关系要比在其他语言中更加的密切,本章中所讨论的大部分功能都可以用在类和结构体上.因此,我

结构体和类

结构是值类型,但在语法上常常当做类来处理 struct typeNum { public string a="hello"; public string b="world"; } 如果仅需要一个小的数据结构,可以考虑用结构,因为结构在性能上比类略佳. 结构不支持继承,在使用前必须先初始化结构是会影响性能的值类型,但根据使用结构的方式,这种影响可能是正面的,也可能是负面的. 正面的影响是为结构分配内存时,速度非常快,因 为它们将内联或者保存在栈中.在结构超出了作用域被

结构体指针之 段错误 具体解释(segmentation fault)

一个网友问了我一个问题.一个C程序执行出现了段错误,这个问题非常好.非常多刚開始学习的人都easy犯这个错误,详细代码例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 这个编译没有问题,可是执行是段错误    Segmentation fault 由于你定义了一个结构体指针p.用来指向此类