7 #ifndef PACKAGER_MEDIA_CODECS_H265_PARSER_H_ 8 #define PACKAGER_MEDIA_CODECS_H265_PARSER_H_ 14 #include "packager/media/codecs/h26x_bit_reader.h" 21 enum H265SliceType { kBSlice = 0, kPSlice = 1, kISlice = 2 };
23 const int kMaxRefPicSetCount = 16;
29 bool ExtractResolutionFromSps(
const H265Sps& sps,
30 uint32_t* coded_width,
31 uint32_t* coded_height,
32 uint32_t* pixel_width,
33 uint32_t* pixel_height);
36 int delta_poc_s0[kMaxRefPicSetCount];
37 int delta_poc_s1[kMaxRefPicSetCount];
38 bool used_by_curr_pic_s0[kMaxRefPicSetCount];
39 bool used_by_curr_pic_s1[kMaxRefPicSetCount];
41 int num_negative_pics;
42 int num_positive_pics;
47 enum { kExtendedSar = 255 };
49 bool aspect_ratio_info_present_flag =
false;
50 int aspect_ratio_idc = 0;
54 bool bitstream_restriction_flag =
false;
55 int min_spatial_segmentation_idc = 0;
67 int pic_parameter_set_id = 0;
68 int seq_parameter_set_id = 0;
70 bool dependent_slice_segments_enabled_flag =
false;
71 bool output_flag_present_flag =
false;
72 int num_extra_slice_header_bits = 0;
73 bool sign_data_hiding_enabled_flag =
false;
74 bool cabac_init_present_flag =
false;
76 int num_ref_idx_l0_default_active_minus1 = 0;
77 int num_ref_idx_l1_default_active_minus1 = 0;
78 int init_qp_minus26 = 0;
79 bool constrained_intra_pred_flag =
false;
80 bool transform_skip_enabled_flag =
false;
82 bool cu_qp_delta_enabled_flag = 0;
83 int diff_cu_qp_delta_depth = 0;
87 bool slice_chroma_qp_offsets_present_flag =
false;
88 bool weighted_pred_flag =
false;
89 bool weighted_bipred_flag =
false;
90 bool transquant_bypass_enabled_flag =
false;
91 bool tiles_enabled_flag =
false;
92 bool entropy_coding_sync_enabled_flag =
false;
94 int num_tile_columns_minus1 = 0;
95 int num_tile_rows_minus1 = 0;
96 bool uniform_spacing_flag =
true;
97 std::vector<int> column_width_minus1;
98 std::vector<int> row_height_minus1;
99 bool loop_filter_across_tiles_enabled_flag =
true;
101 bool loop_filter_across_slices_enabled_flag =
false;
102 bool deblocking_filter_control_present_flag =
false;
103 bool deblocking_filter_override_enabled_flag =
false;
104 bool deblocking_filter_disabled_flag =
false;
105 int beta_offset_div2 = 0;
106 int tc_offset_div2 = 0;
108 bool scaling_list_data_present_flag =
false;
111 bool lists_modification_present_flag =
false;
112 int log2_parallel_merge_level_minus2 = 0;
113 bool slice_segment_header_extension_present_flag =
false;
116 bool chroma_qp_offset_list_enabled_flag =
false;
125 int GetPicSizeInCtbsY()
const;
126 int GetChromaArrayType()
const;
131 int video_parameter_set_id = 0;
132 int max_sub_layers_minus1 = 0;
133 bool temporal_id_nesting_flag =
false;
138 int general_profile_tier_level_data[12] = {};
140 int seq_parameter_set_id = 0;
142 int chroma_format_idc = 0;
143 bool separate_colour_plane_flag =
false;
144 int pic_width_in_luma_samples = 0;
145 int pic_height_in_luma_samples = 0;
147 bool conformance_window_flag =
false;
148 int conf_win_left_offset = 0;
149 int conf_win_right_offset = 0;
150 int conf_win_top_offset = 0;
151 int conf_win_bottom_offset = 0;
153 int bit_depth_luma_minus8 = 0;
154 int bit_depth_chroma_minus8 = 0;
155 int log2_max_pic_order_cnt_lsb_minus4 = 0;
157 bool sub_layer_ordering_info_present_flag =
false;
158 int max_dec_pic_buffering_minus1[8];
159 int max_num_reorder_pics[8];
160 int max_latency_increase_plus1[8];
162 int log2_min_luma_coding_block_size_minus3 = 0;
163 int log2_diff_max_min_luma_coding_block_size = 0;
164 int log2_min_luma_transform_block_size_minus2 = 0;
165 int log2_diff_max_min_luma_transform_block_size = 0;
166 int max_transform_hierarchy_depth_inter = 0;
167 int max_transform_hierarchy_depth_intra = 0;
169 bool scaling_list_enabled_flag =
false;
170 bool scaling_list_data_present_flag =
false;
173 bool amp_enabled_flag =
false;
174 bool sample_adaptive_offset_enabled_flag =
false;
175 bool pcm_enabled_flag =
false;
176 int pcm_sample_bit_depth_luma_minus1 = 0;
177 int pcm_sample_bit_depth_chroma_minus1 = 0;
178 int log2_min_pcm_luma_coding_block_size_minus3 = 0;
179 int log2_diff_max_min_pcm_luma_coding_block_size = 0;
180 bool pcm_loop_filter_disabled_flag =
false;
182 int num_short_term_ref_pic_sets = 0;
183 std::vector<H265ReferencePictureSet> st_ref_pic_sets;
185 bool long_term_ref_pic_present_flag =
false;
186 int num_long_term_ref_pics = 0;
187 std::vector<int> lt_ref_pic_poc_lsb;
188 std::vector<bool> used_by_curr_pic_lt_flag;
190 bool temporal_mvp_enabled_flag =
false;
191 bool strong_intra_smoothing_enabled_flag =
false;
193 bool vui_parameters_present =
false;
203 bool ref_pic_list_modification_flag_l0 =
false;
204 std::vector<int> list_entry_l0;
206 bool ref_pic_list_modification_flag_l1 =
false;
207 std::vector<int> list_entry_l1;
215 bool delta_poc_msb_present_flag;
216 int delta_poc_msb_cycle_lt;
220 int used_by_curr_pic_lt = 0;
229 size_t header_bit_size = 0;
231 bool first_slice_segment_in_pic_flag =
false;
232 bool no_output_of_prior_pics_flag =
false;
233 int pic_parameter_set_id = 0;
235 bool dependent_slice_segment_flag =
false;
236 int segment_address = 0;
238 bool pic_output_flag =
true;
239 int colour_plane_id = 0;
240 int slice_pic_order_cnt_lsb = 0;
242 bool short_term_ref_pic_set_sps_flag =
false;
244 int short_term_ref_pic_set_idx = 0;
246 int num_long_term_sps = 0;
247 int num_long_term_pics = 0;
248 std::vector<LongTermPicsInfo> long_term_pics_info;
250 bool slice_temporal_mvp_enabled_flag =
false;
251 bool slice_sao_luma_flag =
false;
252 bool slice_sao_chroma_flag =
false;
254 bool num_ref_idx_active_override_flag =
false;
255 int num_ref_idx_l0_active_minus1 = 0;
256 int num_ref_idx_l1_active_minus1 = 0;
260 bool mvd_l1_zero_flag =
false;
261 bool cabac_init_flag =
false;
262 bool collocated_from_l0 =
true;
263 int collocated_ref_idx = 0;
265 int five_minus_max_num_merge_cand = 0;
266 int slice_qp_delta = 0;
267 int slice_cb_qp_offset = 0;
268 int slice_cr_qp_offset = 0;
270 bool cu_chroma_qp_offset_enabled_flag =
false;
271 bool deblocking_filter_override_flag =
false;
272 bool slice_deblocking_filter_disabled_flag =
false;
273 int slice_beta_offset_div2 = 0;
274 int slice_tc_offset_div2 = 0;
275 bool slice_loop_filter_across_slices_enabled_flag =
false;
277 int num_entry_point_offsets = 0;
278 int offset_len_minus1 = 0;
279 std::vector<int> entry_point_offset_minus1;
304 Result ParsePps(
const Nalu& nalu,
int* pps_id);
307 Result ParseSps(
const Nalu& nalu,
int* sps_id);
310 const H265Pps* GetPps(
int pps_id);
312 const H265Sps* GetSps(
int sps_id);
315 Result ParseVuiParameters(
int max_num_sub_layers_minus1,
319 Result ParseReferencePictureSet(
320 int num_short_term_ref_pic_sets,
322 const std::vector<H265ReferencePictureSet>& ref_pic_sets,
326 Result SkipReferencePictureListModification(
329 int num_pic_total_curr,
332 Result SkipPredictionWeightTablePart(
int num_ref_idx_minus1,
333 int chroma_array_type,
336 Result SkipPredictionWeightTable(
bool is_b_slice,
341 Result ReadProfileTierLevel(
bool profile_present,
342 int max_num_sub_layers_minus1,
348 Result SkipHrdParameters(
int max_num_sub_layers_minus1,
H26xBitReader* br);
350 Result SkipSubLayerHrdParameters(
int cpb_cnt_minus1,
351 bool sub_pic_hdr_params_present_flag,
356 typedef std::map<int, std::unique_ptr<H265Sps>> SpsById;
357 typedef std::map<int, std::unique_ptr<H265Pps>> PpsById;
359 SpsById active_spses_;
360 PpsById active_ppses_;
368 #endif // PACKAGER_MEDIA_CODECS_H265_PARSER_H_
All the methods that are virtual are virtual for mocking.