h264parser: GStreamer Bad Plugins 1.0 Library Reference Manual

## h264parser h264parser |

## Functions

#define | GST_H264_IS_P_SLICE()
#define | GST_H264_IS_B_SLICE()
#define | GST_H264_IS_I_SLICE()
#define | GST_H264_IS_SP_SLICE()
#define | GST_H264_IS_SI_SLICE()
GstH264ParserResult | gst_h264_parser_identify_nalu ()
GstH264ParserResult | gst_h264_parser_identify_nalu_avc ()
GstH264ParserResult | gst_h264_parser_parse_nal ()
GstH264ParserResult | gst_h264_parser_parse_slice_hdr ()
GstH264ParserResult | gst_h264_parser_parse_sps ()
GstH264ParserResult | gst_h264_parser_parse_pps ()
GstH264ParserResult | gst_h264_parser_parse_sei ()
GstH264NalParser * | gst_h264_nal_parser_new ()
void | gst_h264_nal_parser_free ()
GstH264ParserResult | gst_h264_parse_sps ()
GstH264ParserResult | gst_h264_parse_pps ()
void | gst_h264_pps_clear ()
void | gst_h264_quant_matrix_8x8_get_zigzag_from_raster ()
void | gst_h264_quant_matrix_8x8_get_raster_from_zigzag ()
void | gst_h264_quant_matrix_4x4_get_zigzag_from_raster ()
void | gst_h264_quant_matrix_4x4_get_raster_from_zigzag ()
void | gst_h264_video_calculate_framerate ()

## Types and Values

#define | GST_H264_MAX_SPS_COUNT
#define | GST_H264_MAX_PPS_COUNT
enum | GstH264NalUnitType
enum | GstH264ParserResult
enum | GstH264SEIPayloadType
enum | GstH264SEIPicStructType
enum | GstH264SliceType
struct | GstH264NalParser
struct | GstH264NalUnit
struct | GstH264SPS
struct | GstH264PPS
struct | GstH264HRDParams
struct | GstH264VUIParams
struct | GstH264DecRefPicMarking
struct | GstH264RefPicMarking
struct | GstH264PredWeightTable
struct | GstH264SliceHdr
struct | GstH264ClockTimestamp
struct | GstH264PicTiming
struct | GstH264BufferingPeriod
struct | GstH264SEIMessage

## Includes

    #include <gst/codecparsers/gsth264parser.h>

## Description

## Functions

### GST_H264_IS_P_SLICE()

    #define GST_H264_IS_P_SLICE(slice)  (((slice)->type % 5) == GST_H264_P_SLICE)

### GST_H264_IS_B_SLICE()

    #define GST_H264_IS_B_SLICE(slice)  (((slice)->type % 5) == GST_H264_B_SLICE)

### GST_H264_IS_I_SLICE()

    #define GST_H264_IS_I_SLICE(slice)  (((slice)->type % 5) == GST_H264_I_SLICE)

### GST_H264_IS_SP_SLICE()

    #define GST_H264_IS_SP_SLICE(slice) (((slice)->type % 5) == GST_H264_SP_SLICE)

### GST_H264_IS_SI_SLICE()

    #define GST_H264_IS_SI_SLICE(slice) (((slice)->type % 5) == GST_H264_SI_SLICE)

### gst_h264_parser_identify_nalu ()

    GstH264ParserResult
    gst_h264_parser_identify_nalu (GstH264NalParser *nalparser,
                                   const guint8 *data,
                                   guint offset,
                                   gsize size,
                                   GstH264NalUnit *nalu);

### gst_h264_parser_identify_nalu_avc ()

    GstH264ParserResult
    gst_h264_parser_identify_nalu_avc (GstH264NalParser *nalparser,
                                       const guint8 *data,
                                       guint offset,
                                       gsize size,
                                       guint8 nal_length_size,
                                       GstH264NalUnit *nalu);

### gst_h264_parser_parse_nal ()

    GstH264ParserResult
    gst_h264_parser_parse_nal (GstH264NalParser *nalparser,
                               GstH264NalUnit *nalu);

### gst_h264_parser_parse_slice_hdr ()

    GstH264ParserResult
    gst_h264_parser_parse_slice_hdr (GstH264NalParser *nalparser,
                                     GstH264NalUnit *nalu,
                                     GstH264SliceHdr *slice,
                                     gboolean parse_pred_weight_table,
                                     gboolean parse_dec_ref_pic_marking);

### gst_h264_parser_parse_sps ()

    GstH264ParserResult
    gst_h264_parser_parse_sps (GstH264NalParser *nalparser,
                               GstH264NalUnit *nalu,
                               GstH264SPS *sps,
                               gboolean parse_vui_params);

### gst_h264_parser_parse_pps ()

    GstH264ParserResult
    gst_h264_parser_parse_pps (GstH264NalParser *nalparser,
                               GstH264NalUnit *nalu,
                               GstH264PPS *pps);

### gst_h264_parser_parse_sei ()

    GstH264ParserResult
    gst_h264_parser_parse_sei (GstH264NalParser *nalparser,
                               GstH264NalUnit *nalu,
                               GArray **messages);

### gst_h264_nal_parser_new ()

    GstH264NalParser *
    gst_h264_nal_parser_new (void);

### gst_h264_nal_parser_free ()

    void
    gst_h264_nal_parser_free (GstH264NalParser *nalparser);

### gst_h264_parse_sps ()

    GstH264ParserResult
    gst_h264_parse_sps (GstH264NalUnit *nalu,
                        GstH264SPS *sps,
                        gboolean parse_vui_params);

### gst_h264_parse_pps ()

    GstH264ParserResult
    gst_h264_parse_pps (GstH264NalParser *nalparser,
                        GstH264NalUnit *nalu,
                        GstH264PPS *pps);

### gst_h264_pps_clear ()

    void
    gst_h264_pps_clear (GstH264PPS *pps);

### gst_h264_quant_matrix_8x8_get_zigzag_from_raster ()

    void
    gst_h264_quant_matrix_8x8_get_zigzag_from_raster
                                   (guint8 out_quant[64],
                                    const guint8 quant[64]);

### gst_h264_quant_matrix_8x8_get_raster_from_zigzag ()

    void
    gst_h264_quant_matrix_8x8_get_raster_from_zigzag
                                   (guint8 out_quant[64],
                                    const guint8 quant[64]);

### gst_h264_quant_matrix_4x4_get_zigzag_from_raster ()

    void
    gst_h264_quant_matrix_4x4_get_zigzag_from_raster
                                   (guint8 out_quant[16],
                                    const guint8 quant[16]);

### gst_h264_quant_matrix_4x4_get_raster_from_zigzag ()

    void
    gst_h264_quant_matrix_4x4_get_raster_from_zigzag
                                   (guint8 out_quant[16],
                                    const guint8 quant[16]);

### gst_h264_video_calculate_framerate ()

    void
    gst_h264_video_calculate_framerate (const GstH264SPS *sps,
                                        guint field_pic_flag,
                                        guint pic_struct,
                                        gint *fps_num,
                                        gint *fps_den);

## Types and Values

### GST_H264_MAX_SPS_COUNT

    #define GST_H264_MAX_SPS_COUNT   32

### GST_H264_MAX_PPS_COUNT

    #define GST_H264_MAX_PPS_COUNT   256

### enum GstH264NalUnitType

#### Members

GST_H264_NAL_UNKNOWN |  |
GST_H264_NAL_SLICE |  |
GST_H264_NAL_SLICE_DPA |  |
GST_H264_NAL_SLICE_DPB |  |
GST_H264_NAL_SLICE_DPC |  |
GST_H264_NAL_SLICE_IDR |  |
GST_H264_NAL_SEI |  |
GST_H264_NAL_SPS |  |
GST_H264_NAL_PPS |  |
GST_H264_NAL_AU_DELIMITER |  |
GST_H264_NAL_SEQ_END |  |
GST_H264_NAL_STREAM_END |  |
GST_H264_NAL_FILLER_DATA |  |
GST_H264_NAL_SPS_EXT |  |
GST_H264_NAL_PREFIX_UNIT |  |
GST_H264_NAL_SUBSET_SPS |  |
GST_H264_NAL_DEPTH_SPS |  |
GST_H264_NAL_SLICE_AUX |  |
GST_H264_NAL_SLICE_EXT |  |
GST_H264_NAL_SLICE_DEPTH |  |

### enum GstH264ParserResult

#### Members

GST_H264_PARSER_OK |  |
GST_H264_PARSER_BROKEN_DATA |  |
GST_H264_PARSER_BROKEN_LINK |  |
GST_H264_PARSER_ERROR |  |
GST_H264_PARSER_NO_NAL |  |
GST_H264_PARSER_NO_NAL_END |  |

### enum GstH264SEIPayloadType

#### Members

GST_H264_SEI_BUF_PERIOD |  |
GST_H264_SEI_PIC_TIMING |  |
GST_H264_SEI_RECOVERY_POINT |  |
GST_H264_SEI_STEREO_VIDEO_INFO |  |
GST_H264_SEI_FRAME_PACKING |  |

### enum GstH264SEIPicStructType

#### Members

GST_H264_SEI_PIC_STRUCT_FRAME |  |
GST_H264_SEI_PIC_STRUCT_TOP_FIELD |  |
GST_H264_SEI_PIC_STRUCT_BOTTOM_FIELD |  |
GST_H264_SEI_PIC_STRUCT_TOP_BOTTOM |  |
GST_H264_SEI_PIC_STRUCT_BOTTOM_TOP |  |
GST_H264_SEI_PIC_STRUCT_TOP_BOTTOM_TOP |  |
GST_H264_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM |  |
GST_H264_SEI_PIC_STRUCT_FRAME_DOUBLING |  |
GST_H264_SEI_PIC_STRUCT_FRAME_TRIPLING |  |

### enum GstH264SliceType

#### Members

GST_H264_P_SLICE |  |
GST_H264_B_SLICE |  |
GST_H264_I_SLICE |  |
GST_H264_SP_SLICE |  |
GST_H264_SI_SLICE |  |
GST_H264_S_P_SLICE |  |
GST_H264_S_B_SLICE |  |
GST_H264_S_I_SLICE |  |
GST_H264_S_SP_SLICE |  |
GST_H264_S_SI_SLICE |  |

### struct GstH264NalParser

    struct GstH264NalParser {
    };

### struct GstH264NalUnit

    struct GstH264NalUnit {
      guint16 ref_idc;
      guint16 type;

      /* calculated values */
      guint8 idr_pic_flag;
      guint size;
      guint offset;
      guint sc_offset;
      gboolean valid;

      guint8 *data;

      guint8 header_bytes;
      guint8 extension_type;
      union {
        GstH264NalUnitExtensionMVC mvc;
      } extension;
    };

### struct GstH264SPS

    struct GstH264SPS {
      gint id;

      guint8 profile_idc;
      guint8 constraint_set0_flag;
      guint8 constraint_set1_flag;
      guint8 constraint_set2_flag;
      guint8 constraint_set3_flag;
      guint8 constraint_set4_flag;
      guint8 constraint_set5_flag;
      guint8 level_idc;

      guint8 chroma_format_idc;
      guint8 separate_colour_plane_flag;
      guint8 bit_depth_luma_minus8;
      guint8 bit_depth_chroma_minus8;
      guint8 qpprime_y_zero_transform_bypass_flag;

      guint8 scaling_matrix_present_flag;
      guint8 scaling_lists_4x4[6][16];
      guint8 scaling_lists_8x8[6][64];

      guint8 log2_max_frame_num_minus4;
      guint8 pic_order_cnt_type;

      /* if pic_order_cnt_type == 0 */
      guint8 log2_max_pic_order_cnt_lsb_minus4;

      /* else if pic_order_cnt_type == 1 */
      guint8 delta_pic_order_always_zero_flag;
      gint32 offset_for_non_ref_pic;
      gint32 offset_for_top_to_bottom_field;
      guint8 num_ref_frames_in_pic_order_cnt_cycle;
      gint32 offset_for_ref_frame[255];

      guint32 num_ref_frames;
      guint8 gaps_in_frame_num_value_allowed_flag;
      guint32 pic_width_in_mbs_minus1;
      guint32 pic_height_in_map_units_minus1;
      guint8 frame_mbs_only_flag;

      guint8 mb_adaptive_frame_field_flag;

      guint8 direct_8x8_inference_flag;

      guint8 frame_cropping_flag;

      /* if frame_cropping_flag */
      guint32 frame_crop_left_offset;
      guint32 frame_crop_right_offset;
      guint32 frame_crop_top_offset;
      guint32 frame_crop_bottom_offset;

      guint8 vui_parameters_present_flag;
      /* if vui_parameters_present_flag */
      GstH264VUIParams vui_parameters;

      /* calculated values */
      guint8 chroma_array_type;
      guint32 max_frame_num;
      gint width, height;
      gint crop_rect_width, crop_rect_height;
      gint crop_rect_x, crop_rect_y;
      gint fps_num_removed, fps_den_removed; /* FIXME: remove */
      gboolean valid;

      /* Subset SPS extensions */
      guint8 extension_type;
      union {
        GstH264SPSExtMVC mvc;
      } extension;
    };

### struct GstH264PPS

    struct GstH264PPS {
      gint id;

      GstH264SPS *sequence;

      guint8 entropy_coding_mode_flag;
      guint8 pic_order_present_flag;

      guint32 num_slice_groups_minus1;

      /* if num_slice_groups_minus1 > 0 */
      guint8 slice_group_map_type;
      /* and if slice_group_map_type == 0 */
      guint32 run_length_minus1[8];
      /* or if slice_group_map_type == 2 */
      guint32 top_left[8];
      guint32 bottom_right[8];
      /* or if slice_group_map_type == (3, 4, 5) */
      guint8 slice_group_change_direction_flag;
      guint32 slice_group_change_rate_minus1;
      /* or if slice_group_map_type == 6 */
      guint32 pic_size_in_map_units_minus1;
      guint8 *slice_group_id;

      guint8 num_ref_idx_l0_active_minus1;
      guint8 num_ref_idx_l1_active_minus1;
      guint8 weighted_pred_flag;
      guint8 weighted_bipred_idc;
      gint8 pic_init_qp_minus26;
      gint8 pic_init_qs_minus26;
      gint8 chroma_qp_index_offset;
      guint8 deblocking_filter_control_present_flag;
      guint8 constrained_intra_pred_flag;
      guint8 redundant_pic_cnt_present_flag;

      guint8 transform_8x8_mode_flag;

      guint8 scaling_lists_4x4[6][16];
      guint8 scaling_lists_8x8[6][64];

      guint8 second_chroma_qp_index_offset;

      gboolean valid;
    };

### struct GstH264HRDParams

    struct GstH264HRDParams {
      guint8 cpb_cnt_minus1;
      guint8 bit_rate_scale;
      guint8 cpb_size_scale;

      guint32 bit_rate_value_minus1[32];
      guint32 cpb_size_value_minus1[32];
      guint8 cbr_flag[32];

      guint8 initial_cpb_removal_delay_length_minus1;
      guint8 cpb_removal_delay_length_minus1;
      guint8 dpb_output_delay_length_minus1;
      guint8 time_offset_length;
    };

### struct GstH264VUIParams

    struct GstH264VUIParams {
      guint8 aspect_ratio_info_present_flag;
      guint8 aspect_ratio_idc;
      /* if aspect_ratio_idc == 255 */
      guint16 sar_width;
      guint16 sar_height;

      guint8 overscan_info_present_flag;
      /* if overscan_info_present_flag */
      guint8 overscan_appropriate_flag;

      guint8 video_signal_type_present_flag;
      guint8 video_format;
      guint8 video_full_range_flag;
      guint8 colour_description_present_flag;
      guint8 colour_primaries;
      guint8 transfer_characteristics;
      guint8 matrix_coefficients;

      guint8 chroma_loc_info_present_flag;
      guint8 chroma_sample_loc_type_top_field;
      guint8 chroma_sample_loc_type_bottom_field;

      guint8 timing_info_present_flag;
      /* if timing_info_present_flag */
      guint32 num_units_in_tick;
      guint32 time_scale;
      guint8 fixed_frame_rate_flag;

      guint8 nal_hrd_parameters_present_flag;
      /* if nal_hrd_parameters_present_flag */
      GstH264HRDParams nal_hrd_parameters;

      guint8 vcl_hrd_parameters_present_flag;
      /* if vcl_hrd_parameters_present_flag */
      GstH264HRDParams vcl_hrd_parameters;

      guint8 low_delay_hrd_flag;
      guint8 pic_struct_present_flag;

      guint8 bitstream_restriction_flag;
      /*  if bitstream_restriction_flag */
      guint8 motion_vectors_over_pic_boundaries_flag;
      guint32 max_bytes_per_pic_denom;
      guint32 max_bits_per_mb_denom;
      guint32 log2_max_mv_length_horizontal;
      guint32 log2_max_mv_length_vertical;
      guint32 num_reorder_frames;
      guint32 max_dec_frame_buffering;

      /* calculated values */
      guint par_n;
      guint par_d;
    };

### struct GstH264DecRefPicMarking

    struct GstH264DecRefPicMarking {
      /* if slice->nal_unit.IdrPicFlag */
      guint8 no_output_of_prior_pics_flag;
      guint8 long_term_reference_flag;

      guint8 adaptive_ref_pic_marking_mode_flag;
      GstH264RefPicMarking ref_pic_marking[10];
      guint8 n_ref_pic_marking;
    };

### struct GstH264RefPicMarking

    struct GstH264RefPicMarking {
      guint8 memory_management_control_operation;

      guint32 difference_of_pic_nums_minus1;
      guint32 long_term_pic_num;
      guint32 long_term_frame_idx;
      guint32 max_long_term_frame_idx_plus1;
    };

### struct GstH264PredWeightTable

    struct GstH264PredWeightTable {
      guint8 luma_log2_weight_denom;
      guint8 chroma_log2_weight_denom;

      gint16 luma_weight_l0[32];
      gint8 luma_offset_l0[32];

      /* if seq->ChromaArrayType != 0 */
      gint16 chroma_weight_l0[32][2];
      gint8 chroma_offset_l0[32][2];

      /* if slice->slice_type % 5 == 1 */
      gint16 luma_weight_l1[32];
      gint8 luma_offset_l1[32];

      /* and if seq->ChromaArrayType != 0 */
      gint16 chroma_weight_l1[32][2];
      gint8 chroma_offset_l1[32][2];
    };

### struct GstH264SliceHdr

    struct GstH264SliceHdr {
      guint32 first_mb_in_slice;
      guint32 type;
      GstH264PPS *pps;

      /* if seq->separate_colour_plane_flag */
      guint8 colour_plane_id;

      guint16 frame_num;

      guint8 field_pic_flag;
      guint8 bottom_field_flag;

      /* if nal_unit.type == 5 */
      guint16 idr_pic_id;

      /* if seq->pic_order_cnt_type == 0 */
      guint16 pic_order_cnt_lsb;
      /* if seq->pic_order_present_flag && !field_pic_flag */
      gint32 delta_pic_order_cnt_bottom;

      gint32 delta_pic_order_cnt[2];
      guint8 redundant_pic_cnt;

      /* if slice_type == B_SLICE */
      guint8 direct_spatial_mv_pred_flag;

      guint8 num_ref_idx_l0_active_minus1;
      guint8 num_ref_idx_l1_active_minus1;

      guint8 ref_pic_list_modification_flag_l0;
      guint8 n_ref_pic_list_modification_l0;
      GstH264RefPicListModification ref_pic_list_modification_l0[32];
      guint8 ref_pic_list_modification_flag_l1;
      guint8 n_ref_pic_list_modification_l1;
      GstH264RefPicListModification ref_pic_list_modification_l1[32];

      GstH264PredWeightTable pred_weight_table;
      /* if nal_unit.ref_idc != 0 */
      GstH264DecRefPicMarking dec_ref_pic_marking;

      guint8 cabac_init_idc;
      gint8 slice_qp_delta;
      gint8 slice_qs_delta;

      guint8 disable_deblocking_filter_idc;
      gint8 slice_alpha_c0_offset_div2;
      gint8 slice_beta_offset_div2;

      guint16 slice_group_change_cycle;

      /* calculated values */
      guint32 max_pic_num;
      gboolean valid;

      /* Size of the slice_header() in bits */
      guint header_size;

      /* Number of emulation prevention bytes (EPB) in this slice_header() */
      guint n_emulation_prevention_bytes;
    };

### struct GstH264ClockTimestamp

    struct GstH264ClockTimestamp {
      guint8 ct_type;
      guint8 nuit_field_based_flag;
      guint8 counting_type;
      guint8 discontinuity_flag;
      guint8 cnt_dropped_flag;
      guint8 n_frames;

      guint8 seconds_flag;
      guint8 seconds_value;

      guint8 minutes_flag;
      guint8 minutes_value;

      guint8 hours_flag;
      guint8 hours_value;

      guint32 time_offset;
    };

### struct GstH264PicTiming

    struct GstH264PicTiming {
      guint32 cpb_removal_delay;
      guint32 dpb_output_delay;

      guint8 pic_struct_present_flag;
      /* if pic_struct_present_flag */
      guint8 pic_struct;

      guint8 clock_timestamp_flag[3];
      GstH264ClockTimestamp clock_timestamp[3];
    };

### struct GstH264BufferingPeriod

    struct GstH264BufferingPeriod {
      GstH264SPS *sps;

      /* seq->vui_parameters->nal_hrd_parameters_present_flag */
      guint32 nal_initial_cpb_removal_delay[32];
      guint32 nal_initial_cpb_removal_delay_offset[32];

      /* seq->vui_parameters->vcl_hrd_parameters_present_flag */
      guint32 vcl_initial_cpb_removal_delay[32];
      guint32 vcl_initial_cpb_removal_delay_offset[32];
    };

### struct GstH264SEIMessage

    struct GstH264SEIMessage {
      GstH264SEIPayloadType payloadType;

      union {
        GstH264BufferingPeriod buffering_period;
        GstH264PicTiming pic_timing;
        GstH264RecoveryPoint recovery_point;
        GstH264StereoVideoInfo stereo_video_info;
        GstH264FramePacking frame_packing;
        /* ... could implement more */
      } payload;
    };