diff options
author | Anton Khirnov <anton@khirnov.net> | 2016-05-18 09:40:33 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2016-06-21 11:13:29 +0200 |
commit | f638b67e5790735f34620bf82025c9b9d6fc7216 (patch) | |
tree | ad69a1e8304a70e74bc6d57f83cd8c28d7cdae77 /libavcodec/h264dec.h | |
parent | 4e2f6212483ae1b2a4043cddf0a1cb001b476abc (diff) | |
download | ffmpeg-f638b67e5790735f34620bf82025c9b9d6fc7216.tar.gz |
h264: move the parameter set definitions to a new header file
The PS parsing code is independent from the decoder, so it makes more
sense for it to have its own separate header.
Diffstat (limited to 'libavcodec/h264dec.h')
-rw-r--r-- | libavcodec/h264dec.h | 122 |
1 files changed, 1 insertions, 121 deletions
diff --git a/libavcodec/h264dec.h b/libavcodec/h264dec.h index e79257ea36..fbe68c1dc3 100644 --- a/libavcodec/h264dec.h +++ b/libavcodec/h264dec.h @@ -35,6 +35,7 @@ #include "cabac.h" #include "error_resilience.h" #include "h264_parse.h" +#include "h264_ps.h" #include "h264_sei.h" #include "h2645_parse.h" #include "h264chroma.h" @@ -50,9 +51,6 @@ #define H264_MAX_PICTURE_COUNT 32 -#define MAX_SPS_COUNT 32 -#define MAX_PPS_COUNT 256 - #define MAX_MMCO_COUNT 66 #define MAX_DELAYED_PIC_COUNT 16 @@ -99,117 +97,11 @@ #define CHROMA422(h) (h->ps.sps->chroma_format_idc == 2) #define CHROMA444(h) (h->ps.sps->chroma_format_idc == 3) -#define EXTENDED_SAR 255 - #define MB_TYPE_REF0 MB_TYPE_ACPRED // dirty but it fits in 16 bit #define MB_TYPE_8x8DCT 0x01000000 #define IS_REF0(a) ((a) & MB_TYPE_REF0) #define IS_8x8DCT(a) ((a) & MB_TYPE_8x8DCT) -#define QP_MAX_NUM (51 + 2 * 6) // The maximum supported qp - -/** - * Sequence parameter set - */ -typedef struct SPS { - unsigned int sps_id; - int profile_idc; - int level_idc; - int chroma_format_idc; - int transform_bypass; ///< qpprime_y_zero_transform_bypass_flag - int log2_max_frame_num; ///< log2_max_frame_num_minus4 + 4 - int poc_type; ///< pic_order_cnt_type - int log2_max_poc_lsb; ///< log2_max_pic_order_cnt_lsb_minus4 - int delta_pic_order_always_zero_flag; - int offset_for_non_ref_pic; - int offset_for_top_to_bottom_field; - int poc_cycle_length; ///< num_ref_frames_in_pic_order_cnt_cycle - int ref_frame_count; ///< num_ref_frames - int gaps_in_frame_num_allowed_flag; - int mb_width; ///< pic_width_in_mbs_minus1 + 1 - int mb_height; ///< pic_height_in_map_units_minus1 + 1 - int frame_mbs_only_flag; - int mb_aff; ///< mb_adaptive_frame_field_flag - int direct_8x8_inference_flag; - int crop; ///< frame_cropping_flag - - /* those 4 are already in luma samples */ - unsigned int crop_left; ///< frame_cropping_rect_left_offset - unsigned int crop_right; ///< frame_cropping_rect_right_offset - unsigned int crop_top; ///< frame_cropping_rect_top_offset - unsigned int crop_bottom; ///< frame_cropping_rect_bottom_offset - int vui_parameters_present_flag; - AVRational sar; - int video_signal_type_present_flag; - int full_range; - int colour_description_present_flag; - enum AVColorPrimaries color_primaries; - enum AVColorTransferCharacteristic color_trc; - enum AVColorSpace colorspace; - int timing_info_present_flag; - uint32_t num_units_in_tick; - uint32_t time_scale; - int fixed_frame_rate_flag; - short offset_for_ref_frame[256]; // FIXME dyn aloc? - int bitstream_restriction_flag; - int num_reorder_frames; - int scaling_matrix_present; - uint8_t scaling_matrix4[6][16]; - uint8_t scaling_matrix8[6][64]; - int nal_hrd_parameters_present_flag; - int vcl_hrd_parameters_present_flag; - int pic_struct_present_flag; - int time_offset_length; - int cpb_cnt; ///< See H.264 E.1.2 - int initial_cpb_removal_delay_length; ///< initial_cpb_removal_delay_length_minus1 + 1 - int cpb_removal_delay_length; ///< cpb_removal_delay_length_minus1 + 1 - int dpb_output_delay_length; ///< dpb_output_delay_length_minus1 + 1 - int bit_depth_luma; ///< bit_depth_luma_minus8 + 8 - int bit_depth_chroma; ///< bit_depth_chroma_minus8 + 8 - int residual_color_transform_flag; ///< residual_colour_transform_flag - int constraint_set_flags; ///< constraint_set[0-3]_flag -} SPS; - -/** - * Picture parameter set - */ -typedef struct PPS { - unsigned int sps_id; - int cabac; ///< entropy_coding_mode_flag - int pic_order_present; ///< pic_order_present_flag - int slice_group_count; ///< num_slice_groups_minus1 + 1 - int mb_slice_group_map_type; - unsigned int ref_count[2]; ///< num_ref_idx_l0/1_active_minus1 + 1 - int weighted_pred; ///< weighted_pred_flag - int weighted_bipred_idc; - int init_qp; ///< pic_init_qp_minus26 + 26 - int init_qs; ///< pic_init_qs_minus26 + 26 - int chroma_qp_index_offset[2]; - int deblocking_filter_parameters_present; ///< deblocking_filter_parameters_present_flag - int constrained_intra_pred; ///< constrained_intra_pred_flag - int redundant_pic_cnt_present; ///< redundant_pic_cnt_present_flag - int transform_8x8_mode; ///< transform_8x8_mode_flag - uint8_t scaling_matrix4[6][16]; - uint8_t scaling_matrix8[6][64]; - uint8_t chroma_qp_table[2][64]; ///< pre-scaled (with chroma_qp_index_offset) version of qp_table - int chroma_qp_diff; - - uint32_t dequant4_buffer[6][QP_MAX_NUM + 1][16]; - uint32_t dequant8_buffer[6][QP_MAX_NUM + 1][64]; - uint32_t(*dequant4_coeff[6])[16]; - uint32_t(*dequant8_coeff[6])[64]; -} PPS; - -typedef struct H264ParamSets { - AVBufferRef *sps_list[MAX_SPS_COUNT]; - AVBufferRef *pps_list[MAX_PPS_COUNT]; - - /* currently active parameters sets */ - const PPS *pps; - // FIXME this should properly be const - SPS *sps; -} H264ParamSets; - /** * Memory management control operation opcode. */ @@ -626,18 +518,6 @@ typedef struct H264Context { extern const uint16_t ff_h264_mb_sizes[4]; /** - * Decode SPS - */ -int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, - H264ParamSets *ps); - -/** - * Decode PPS - */ -int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avctx, - H264ParamSets *ps, int bit_length); - -/** * Reconstruct bitstream slice_type. */ int ff_h264_get_slice_type(const H264SliceContext *sl); |