h264parser

h264parser

Functions

Types and Values

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;
};