一. 结构体介绍

2018-12-08  本文已影响0人  对着天说晚安
  1. x264_nal_t结构体
typedef struct x264_nal_t
{
    int i_ref_idc;  /* nal_priority_e */
    int i_type;     /* nal_unit_type_e */
    int b_long_startcode;
    int i_first_mb; /* If this NAL is a slice, the index of the first MB in the slice. */
    int i_last_mb;  /* If this NAL is a slice, the index of the last MB in the slice. */

    /* Size of payload (including any padding) in bytes. */
    int     i_payload;
    /* If param->b_annexb is set, Annex-B bytestream with startcode.
     * Otherwise, startcode is replaced with a 4-byte size.
     * This size is the size used in mp4/similar muxing; it is equal to i_payload-4 */
    uint8_t *p_payload;

    /* Size of padding in bytes. */
    int i_padding;
} x264_nal_t;

i_ref_idc:nal_t的优先级。其包含的几个优先级的定义如下:

enum nal_priority_e
{
    NAL_PRIORITY_DISPOSABLE = 0,  // 00
    NAL_PRIORITY_LOW        = 1,  // 01
    NAL_PRIORITY_HIGH       = 2,  // 10
    NAL_PRIORITY_HIGHEST    = 3,  // 11
};

i_type:nal_t的类型。包括SPS,PPS,SS等信息,其类型信息的定义如下:

enum nal_unit_type_e
{
    NAL_UNKNOWN     = 0,                        // 00000
    NAL_SLICE       = 1,                        // 00001
    NAL_SLICE_DPA   = 2,                        // 00010
    NAL_SLICE_DPB   = 3,                        // 00011
    NAL_SLICE_DPC   = 4,                        // 00100
    NAL_SLICE_IDR   = 5,    /* ref_idc != 0 */  // 00101
    NAL_SEI         = 6,    /* ref_idc == 0 */  // 00110
    NAL_SPS         = 7,                        // 00111
    NAL_PPS         = 8,                        // 01000
    NAL_AUD         = 9,                        // 01001
    NAL_FILLER      = 12,                       // 01100
    /* ref_idc == 0 for 6,9,10,11,12 */
};

b_long_startcode:最长的开始编码,有可能是3或者4,这是由于nal的首部是以000001或者00000001开始的,包含3字节或者两个字节。
i_payload,p_payload,i_padding:待观察其使用。

上一篇下一篇

猜你喜欢

热点阅读