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

0人阅读 评论(0) 收藏 举报
分类:

本博客转载于: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;
查看评论

Python全栈工程师-第2周

Python全栈工程师-第2周
  • 2017年09月15日 17:31

x264重要结构体详细说明(4): x264_t

本博客转载于:http://nkwavelet.blog.163.com/blog/static/227756038201431010539683/ x264_t是一个控制X264编码的...
  • Explorer_day
  • Explorer_day
  • 2016-08-18 11:21:46
  • 1445

x264重要结构体详细说明(3): x264_sps_t、x264_pps_t

本博客转载于:http://nkwavelet.blog.163.com/blog/static/227756038201431095653355/ /***************...
  • Explorer_day
  • Explorer_day
  • 2016-08-18 11:18:57
  • 762

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

本博客转载于:http://nkwavelet.blog.163.com/blog/static/2277560382013102010375030/ 结构体x264_param_t...
  • Explorer_day
  • Explorer_day
  • 2016-08-18 11:12:04
  • 1578

X264编码

前面讲到了关于NAL打包成RTP后进行发送,那么这些NAL应该怎么得到呢?当然如果有现成的H264数据就可以直接用了,但是一般我们的摄像头采集的数据都不是H264格式的,那就需要编码。而且在我们这个项...
  • chenchong_219
  • chenchong_219
  • 2014-07-20 20:45:38
  • 9554

x264中比特流的存储结构

在未包含熵编码时,这涉及到3个结构体 NAL单元的数据结构: typedef struct {   int i_ref_idc;    //指该NAL单元的优先级     int i_type...
  • cy_weiyi
  • cy_weiyi
  • 2015-05-08 17:18:50
  • 388

x264的nal分析

NAL nal_unit_type中的1(非IDR图像的编码条带)、2(编码条带数据分割块A)、3(编码条带数据分割块B)、4(编码条带数据分割块C)、5(IDR图像的编码条带)种类型...
  • xiaojun111111
  • xiaojun111111
  • 2014-07-18 00:07:40
  • 969

【H264】x264头文件结构体详解

/***************************************************************************** * x264.h: x264 publi...
  • Jammg
  • Jammg
  • 2016-12-03 11:02:37
  • 2450

x264参数 中文说明

参数及结构 typedef struct {     int     i_csp;       //色彩空间参数 ,X264只支持I420     int     i_stride[4];...
  • zhubosa
  • zhubosa
  • 2016-05-05 12:10:23
  • 1148

ffmpeg调用x264编码器的过程分析

该文将以X264编码器为例,解释说明FFMPEG是怎么调用第三方编码器来进行编码的。     所有编码器和解码器都是在avcodec_register_all()函数中注册的。从中可以找到视频的...
  • wishfly
  • wishfly
  • 2016-04-08 18:29:50
  • 1736
    个人资料
    持之以恒
    等级:
    访问量: 223
    积分: 134
    排名: 116万+
    文章分类
    文章存档