2 * Copyright (C) 2022 Intel Corporation
3 * Author: He Junyan <junyan.he@intel.com>
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the0
17 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
21 #include <gst/check/gstcheck.h>
22 #include <gst/codecparsers/gsth265bitwriter.h>
24 #define DEFAULT_SCALING_LIST0 \
25 { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 }
26 #define SCALING_LIST0_4x4_0 \
27 { 7, 8, 12, 25, 16, 22, 17, 17, 16, 18, 26, 26, 26, 26, 26, 26 }
28 #define SCALING_LIST0_4x4_1 \
29 { 9, 8, 12, 25, 16, 22, 27, 17, 16, 38, 36, 26, 36, 26, 36, 26 }
31 #define DEFAULT_SCALING_LIST1 \
32 { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 16, \
33 17, 16, 17, 18, 17, 18, 18, 17, 18, 21, 19, 20, \
34 21, 20, 19, 21, 24, 22, 22, 24, 24, 22, 22, 24, \
35 25, 25, 27, 30, 27, 25, 25, 29, 31, 35, 35, 31, \
36 29, 36, 41, 44, 41, 36, 47, 54, 54, 47, 65, 70, \
38 #define DEFAULT_SCALING_LIST2 \
39 { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, \
40 17, 17, 17, 18, 18, 18, 18, 18, 18, 20, 20, 20, \
41 20, 20, 20, 20, 24, 24, 24, 24, 24, 24, 24, 24, \
42 25, 25, 25, 25, 25, 25, 25, 28, 28, 28, 28, 28, \
43 28, 33, 33, 33, 33, 33, 41, 41, 41, 41, 54, 54, \
45 #define SCALING_LIST_16x16_0 \
46 { 18, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, \
47 17, 17, 17, 18, 18, 18, 18, 18, 18, 20, 20, 20, \
48 21, 20, 20, 20, 24, 24, 27, 24, 24, 24, 24, 25, \
49 25, 25, 25, 25, 25, 25, 23, 28, 28, 28, 28, 28, \
50 28, 33, 33, 33, 33, 33, 21, 21, 51, 51, 54, 54, \
52 #define SCALING_LIST_16x16_1 \
53 { 10, 10, 16, 16, 16, 16, 16, 16, 16, 16, 17, 12, \
54 17, 16, 17, 18, 17, 18, 18, 17, 18, 21, 19, 20, \
55 21, 22, 39, 21, 24, 22, 22, 14, 14, 18, 22, 32, \
56 25, 25, 27, 30, 27, 21, 25, 29, 31, 35, 35, 31, \
57 29, 36, 41, 64, 41, 56, 43, 54, 54, 47, 65, 70, \
61 static const GstH265VPS vps = {
63 .base_layer_internal_flag = 1,
64 .base_layer_available_flag = 1,
65 .max_layers_minus1 = 0,
66 .max_sub_layers_minus1 = 0,
67 .temporal_id_nesting_flag = 1,
69 .profile_tier_level = {
73 .profile_compatibility_flag = { 0, 0, 0, 0, 1, },
75 .progressive_source_flag = 1,
76 .interlaced_source_flag = 0,
77 .non_packed_constraint_flag = 1,
78 .frame_only_constraint_flag = 1,
80 .max_12bit_constraint_flag = 1,
81 .max_10bit_constraint_flag = 1,
82 .max_8bit_constraint_flag = 0,
83 .max_422chroma_constraint_flag = 1,
84 .max_420chroma_constraint_flag = 0,
85 .max_monochrome_constraint_flag = 0,
86 .intra_constraint_flag = 0,
87 .one_picture_only_constraint_flag = 0,
88 .lower_bit_rate_constraint_flag = 1,
92 .sub_layer_profile_present_flag = { 0, },
93 .sub_layer_level_present_flag = { 0, },
96 .sub_layer_ordering_info_present_flag = 1,
97 .max_dec_pic_buffering_minus1 = { 5, },
98 .max_num_reorder_pics = { 2, },
99 .max_latency_increase_plus1 = { 0, },
102 .num_layer_sets_minus1 = 0,
104 .timing_info_present_flag = 1,
105 .num_units_in_tick = 1001,
107 .poc_proportional_to_timing_flag = 1,
108 .num_ticks_poc_diff_one_minus1 = 0,
110 .num_hrd_parameters = 1,
111 .hrd_layer_set_idx = 0,
112 .cprms_present_flag = 1,
114 .nal_hrd_parameters_present_flag = 0,
115 .vcl_hrd_parameters_present_flag = 1,
116 .sub_pic_hrd_params_present_flag = 0,
120 .cpb_size_du_scale = 0,
122 .initial_cpb_removal_delay_length_minus1 = 23,
123 .au_cpb_removal_delay_length_minus1 = 21,
124 .dpb_output_delay_length_minus1 = 23,
126 .fixed_pic_rate_general_flag = { 1, },
127 .fixed_pic_rate_within_cvs_flag = { 1, },
129 .elemental_duration_in_tc_minus1 = { 0, },
130 .low_delay_hrd_flag = { 0, },
131 .cpb_cnt_minus1 = { 0, },
133 .sublayer_hrd_params = {
134 { .bit_rate_value_minus1 = { 0, },
135 .cpb_size_value_minus1 = { 0, },
136 .cpb_size_du_value_minus1 = { 0, },
137 .bit_rate_du_value_minus1 = { 0, },
146 static const GstH265SPS sps = {
148 .max_sub_layers_minus1 = 0,
149 .temporal_id_nesting_flag = 1,
151 .profile_tier_level = {
155 .profile_compatibility_flag = { 0, 0, 0, 0, 1, },
157 .progressive_source_flag = 1,
158 .interlaced_source_flag = 0,
159 .non_packed_constraint_flag = 1,
160 .frame_only_constraint_flag = 1,
162 .max_12bit_constraint_flag = 1,
163 .max_10bit_constraint_flag = 1,
164 .max_8bit_constraint_flag = 0,
165 .max_422chroma_constraint_flag = 1,
166 .max_420chroma_constraint_flag = 0,
167 .max_monochrome_constraint_flag = 0,
168 .intra_constraint_flag = 0,
169 .one_picture_only_constraint_flag = 0,
170 .lower_bit_rate_constraint_flag = 1,
174 .sub_layer_profile_present_flag = { 0, },
175 .sub_layer_level_present_flag = { 0, },
178 .chroma_format_idc = 2,
179 .pic_width_in_luma_samples = 192,
180 .pic_height_in_luma_samples = 256,
181 .conformance_window_flag = 1,
182 .conf_win_left_offset = 0,
183 .conf_win_right_offset = 8,
184 .conf_win_top_offset = 0,
185 .conf_win_bottom_offset = 56,
186 .bit_depth_luma_minus8 = 0,
187 .bit_depth_chroma_minus8 = 0,
188 .log2_max_pic_order_cnt_lsb_minus4 = 4,
190 .sub_layer_ordering_info_present_flag = 1,
191 .max_dec_pic_buffering_minus1 = { 5, },
192 .max_num_reorder_pics = { 2, },
193 .max_latency_increase_plus1 = { 0, },
195 .log2_min_luma_coding_block_size_minus3 = 2,
196 .log2_diff_max_min_luma_coding_block_size = 1,
197 .log2_min_transform_block_size_minus2 = 0,
198 .log2_diff_max_min_transform_block_size = 3,
199 .max_transform_hierarchy_depth_inter = 3,
200 .max_transform_hierarchy_depth_intra = 3,
202 .scaling_list_enabled_flag = 1,
203 .scaling_list_data_present_flag = 1,
205 /* Set it manually. */
207 .scaling_list_dc_coef_minus8_16x16 = { 8, 15, 9, 12, 18, 8 },
208 .scaling_list_dc_coef_minus8_32x32 = { 8, 6 },
210 .scaling_lists_4x4 = {
212 DEFAULT_SCALING_LIST0,
214 DEFAULT_SCALING_LIST0,
218 .scaling_lists_8x8 = {
219 DEFAULT_SCALING_LIST1,
220 SCALING_LIST_16x16_0,
221 SCALING_LIST_16x16_0,
222 DEFAULT_SCALING_LIST2,
223 SCALING_LIST_16x16_1,
226 .scaling_lists_16x16 = {
227 DEFAULT_SCALING_LIST1,
228 SCALING_LIST_16x16_0,
229 DEFAULT_SCALING_LIST1,
230 DEFAULT_SCALING_LIST2,
231 SCALING_LIST_16x16_1,
232 DEFAULT_SCALING_LIST2
234 .scaling_lists_32x32 = {
235 DEFAULT_SCALING_LIST1,
236 DEFAULT_SCALING_LIST2
240 .amp_enabled_flag = 1,
241 .sample_adaptive_offset_enabled_flag = 1,
242 .pcm_enabled_flag = 1,
243 .pcm_sample_bit_depth_luma_minus1 = 7,
244 .pcm_sample_bit_depth_chroma_minus1 = 7,
245 .log2_min_pcm_luma_coding_block_size_minus3 = 2,
246 .log2_diff_max_min_pcm_luma_coding_block_size = 0,
247 .pcm_loop_filter_disabled_flag = 0,
249 .num_short_term_ref_pic_sets = 3,
250 .short_term_ref_pic_set = {
252 .inter_ref_pic_set_prediction_flag = 0,
255 .NumNegativePics = 0,
256 .DeltaPocS0 = { 0, },
257 .UsedByCurrPicS0 = { 0, },
259 .NumPositivePics = 1,
260 .DeltaPocS1 = { 3, },
261 .UsedByCurrPicS1 = { 1, },
264 .inter_ref_pic_set_prediction_flag = 0,
267 .NumNegativePics = 2,
268 .DeltaPocS0 = { -1, -3, },
269 .UsedByCurrPicS0 = { 1, 1, },
271 .NumPositivePics = 1,
272 .DeltaPocS1 = { 2, },
273 .UsedByCurrPicS1 = { 1, },
276 .inter_ref_pic_set_prediction_flag = 0,
279 .NumNegativePics = 3,
280 .DeltaPocS0 = { -1, -2, -4, },
281 .UsedByCurrPicS0 = { 1, 0, 1, },
283 .NumPositivePics = 2,
284 .DeltaPocS1 = { 2, 7, },
285 .UsedByCurrPicS1 = { 0, 1, },
289 .long_term_ref_pics_present_flag = 0,
291 .temporal_mvp_enabled_flag = 1,
292 .strong_intra_smoothing_enabled_flag = 0,
294 .vui_parameters_present_flag = 1,
296 .aspect_ratio_info_present_flag = 0,
298 .overscan_info_present_flag = 1,
299 .overscan_appropriate_flag = 0,
300 .video_signal_type_present_flag = 1,
302 .video_full_range_flag = 0,
303 .colour_description_present_flag = 0,
305 .chroma_loc_info_present_flag = 1,
306 .chroma_sample_loc_type_top_field = 0,
307 .chroma_sample_loc_type_bottom_field = 0,
309 .neutral_chroma_indication_flag = 0,
311 .frame_field_info_present_flag = 0,
312 .default_display_window_flag = 1,
313 .def_disp_win_left_offset = 0,
314 .def_disp_win_right_offset = 0,
315 .def_disp_win_top_offset = 0,
316 .def_disp_win_bottom_offset = 56,
318 .timing_info_present_flag = 1,
319 .num_units_in_tick = 1,
322 .poc_proportional_to_timing_flag = 0,
324 .hrd_parameters_present_flag = 1,
326 .nal_hrd_parameters_present_flag = 0,
327 .vcl_hrd_parameters_present_flag = 1,
328 .sub_pic_hrd_params_present_flag = 0,
333 .initial_cpb_removal_delay_length_minus1 = 31,
334 .au_cpb_removal_delay_length_minus1 = 23,
335 .dpb_output_delay_length_minus1 = 23,
337 .fixed_pic_rate_general_flag = { 1, },
338 .fixed_pic_rate_within_cvs_flag = { 1, },
339 .elemental_duration_in_tc_minus1 = { 0, },
340 .cpb_cnt_minus1 = { 0, },
342 .sublayer_hrd_params = {
344 .bit_rate_value_minus1 = { 108353, },
345 .cpb_size_value_minus1 = { 1602517, },
351 .bitstream_restriction_flag = 1,
352 .tiles_fixed_structure_flag = 0,
353 .motion_vectors_over_pic_boundaries_flag = 1,
354 .restricted_ref_pic_lists_flag = 0,
355 .min_spatial_segmentation_idc = 0,
356 .max_bytes_per_pic_denom = 0,
357 .max_bits_per_min_cu_denom = 0,
358 .log2_max_mv_length_horizontal = 15,
359 .log2_max_mv_length_vertical = 15,
362 .sps_extension_flag = 1,
363 .sps_range_extension_flag = 1,
364 .sps_multilayer_extension_flag = 0,
365 .sps_3d_extension_flag = 0,
366 .sps_scc_extension_flag = 0,
368 .sps_extension_params = {
369 .transform_skip_rotation_enabled_flag = 0,
370 .transform_skip_context_enabled_flag = 0,
371 .implicit_rdpcm_enabled_flag = 0,
372 .explicit_rdpcm_enabled_flag = 0,
373 .extended_precision_processing_flag = 0,
374 .intra_smoothing_disabled_flag = 0,
375 .high_precision_offsets_enabled_flag = 0,
376 .persistent_rice_adaptation_enabled_flag = 0,
377 .cabac_bypass_alignment_enabled_flag = 0,
380 .vps = (GstH265VPS *) &vps,
383 static const GstH265PPS pps = {
385 .dependent_slice_segments_enabled_flag = 1,
386 .output_flag_present_flag = 0,
387 .num_extra_slice_header_bits = 0,
388 .sign_data_hiding_enabled_flag = 1,
389 .cabac_init_present_flag = 0,
390 .num_ref_idx_l0_default_active_minus1 = 9,
391 .num_ref_idx_l1_default_active_minus1 = 4,
392 .init_qp_minus26 = -13,
393 .constrained_intra_pred_flag = 0,
394 .transform_skip_enabled_flag = 1,
395 .cu_qp_delta_enabled_flag = 1,
396 .diff_cu_qp_delta_depth = 0,
399 .slice_chroma_qp_offsets_present_flag = 0,
400 .weighted_pred_flag = 1,
401 .weighted_bipred_flag = 0,
402 .transquant_bypass_enabled_flag = 0,
403 .tiles_enabled_flag = 1,
404 .entropy_coding_sync_enabled_flag = 0,
405 .num_tile_columns_minus1 = 1,
406 .num_tile_rows_minus1 = 2,
407 .uniform_spacing_flag = 0,
408 .column_width_minus1 = { 2, },
409 .row_height_minus1 = { 1, 0 },
410 .loop_filter_across_tiles_enabled_flag = 1,
411 .loop_filter_across_slices_enabled_flag = 1,
412 .deblocking_filter_control_present_flag = 1,
413 .deblocking_filter_override_enabled_flag = 1,
414 .deblocking_filter_disabled_flag = 0,
415 .beta_offset_div2 = 3,
418 .scaling_list_data_present_flag = 1,
420 .scaling_list_dc_coef_minus8_16x16 = { 8, 8, 7, 15, 12, 8 },
421 .scaling_list_dc_coef_minus8_32x32 = { 8, 6 },
423 .scaling_lists_4x4 = {
424 DEFAULT_SCALING_LIST0,
429 DEFAULT_SCALING_LIST0,
431 .scaling_lists_8x8 = {
432 DEFAULT_SCALING_LIST1,
433 SCALING_LIST_16x16_0,
434 SCALING_LIST_16x16_0,
435 SCALING_LIST_16x16_1,
436 DEFAULT_SCALING_LIST2,
439 .scaling_lists_16x16 = {
440 SCALING_LIST_16x16_1,
441 DEFAULT_SCALING_LIST1,
442 SCALING_LIST_16x16_0,
443 SCALING_LIST_16x16_1,
444 DEFAULT_SCALING_LIST2,
445 SCALING_LIST_16x16_1,
447 .scaling_lists_32x32 = {
448 DEFAULT_SCALING_LIST1,
449 SCALING_LIST_16x16_0,
453 .lists_modification_present_flag = 0,
454 .log2_parallel_merge_level_minus2 = 3,
455 .slice_segment_header_extension_present_flag = 0,
456 .pps_extension_flag = 1,
457 .pps_range_extension_flag = 1,
458 .pps_multilayer_extension_flag = 0,
459 .pps_3d_extension_flag = 0,
460 .pps_scc_extension_flag = 0,
462 .pps_extension_params = {
463 .log2_max_transform_skip_block_size_minus2 = 0,
464 .cross_component_prediction_enabled_flag = 0,
465 .chroma_qp_offset_list_enabled_flag = 1,
466 .diff_cu_chroma_qp_offset_depth = 1,
467 .chroma_qp_offset_list_len_minus1 = 5,
468 .cb_qp_offset_list = { -2, -7, -1, 3, 4, 1 },
469 .cr_qp_offset_list = { -2, 6, 5, 6, 8, 9 },
470 .log2_sao_offset_scale_luma = 0,
471 .log2_sao_offset_scale_chroma = 0,
474 .sps = (GstH265SPS *) &sps,
477 static const GstH265SliceHdr slice_hdr = {
478 .first_slice_segment_in_pic_flag = 1,
480 .pic_order_cnt_lsb = 53,
481 .short_term_ref_pic_set_sps_flag = 1,
482 .short_term_ref_pic_set_idx = 2,
483 .temporal_mvp_enabled_flag = 1,
485 .sao_chroma_flag = 1,
486 .num_ref_idx_active_override_flag = 1,
487 .num_ref_idx_l0_active_minus1 = 3,
488 .num_ref_idx_l1_active_minus1 = 2,
489 .mvd_l1_zero_flag = 0,
490 .collocated_ref_idx = 1,
491 .five_minus_max_num_merge_cand = 1,
493 .cu_chroma_qp_offset_enabled_flag = 0,
494 .deblocking_filter_override_flag = 1,
495 .deblocking_filter_disabled_flag = 0,
496 .beta_offset_div2 = 5,
497 .tc_offset_div2 = -1,
498 .num_entry_point_offsets = 0,
500 .pps = (GstH265PPS *) &pps,
504 GST_START_TEST (test_h265_bitwriter_vps_sps_pps_slice_hdr)
506 GstH265ParserResult res;
509 GstH265Parser *const parser = gst_h265_parser_new ();
510 GstH265VPS vps_parsed;
511 GstH265SPS sps_parsed;
512 GstH265PPS pps_parsed;
513 GstH265SliceHdr slice_parsed;
514 guint8 header_data[2048] = { 0, };
515 guint8 header_nal[2048] = { 0, };
520 size = sizeof (header_data);
521 ret = gst_h265_bit_writer_vps (&vps, TRUE, header_data, &size);
522 fail_if (ret != GST_H265_BIT_WRITER_OK);
524 nal_size = sizeof (header_nal);
525 ret = gst_h265_bit_writer_convert_to_nal (4, FALSE, TRUE, FALSE,
526 header_data, size * 8, header_nal, &nal_size);
527 fail_if (ret != GST_H265_BIT_WRITER_OK);
528 fail_if (nal_size < size);
531 res = gst_h265_parser_identify_nalu (parser, header_nal, 0,
532 sizeof (header_nal), &nalu);
533 assert_equals_int (res, GST_H265_PARSER_NO_NAL_END);
535 res = gst_h265_parser_parse_vps (parser, &nalu, &vps_parsed);
536 assert_equals_int (res, GST_H265_PARSER_OK);
538 /* We can not do simply memcmp, the parser may set some default
539 value for the fields which are not used for writing. */
540 #define CHECK_FIELD(FIELD) fail_if(vps_parsed.FIELD != vps.FIELD)
542 CHECK_FIELD (base_layer_internal_flag);
543 CHECK_FIELD (base_layer_available_flag);
544 CHECK_FIELD (max_layers_minus1);
545 CHECK_FIELD (max_sub_layers_minus1);
546 CHECK_FIELD (temporal_id_nesting_flag);
547 CHECK_FIELD (profile_tier_level.profile_space);
548 CHECK_FIELD (profile_tier_level.tier_flag);
549 CHECK_FIELD (profile_tier_level.profile_idc);
550 CHECK_FIELD (profile_tier_level.profile_compatibility_flag[0]);
551 CHECK_FIELD (profile_tier_level.profile_compatibility_flag[1]);
552 CHECK_FIELD (profile_tier_level.profile_compatibility_flag[2]);
553 CHECK_FIELD (profile_tier_level.profile_compatibility_flag[3]);
554 CHECK_FIELD (profile_tier_level.profile_compatibility_flag[4]);
555 CHECK_FIELD (profile_tier_level.profile_compatibility_flag[5]);
556 CHECK_FIELD (profile_tier_level.progressive_source_flag);
557 CHECK_FIELD (profile_tier_level.interlaced_source_flag);
558 CHECK_FIELD (profile_tier_level.non_packed_constraint_flag);
559 CHECK_FIELD (profile_tier_level.frame_only_constraint_flag);
560 CHECK_FIELD (profile_tier_level.max_12bit_constraint_flag);
561 CHECK_FIELD (profile_tier_level.max_10bit_constraint_flag);
562 CHECK_FIELD (profile_tier_level.max_8bit_constraint_flag);
563 CHECK_FIELD (profile_tier_level.max_422chroma_constraint_flag);
564 CHECK_FIELD (profile_tier_level.max_420chroma_constraint_flag);
565 CHECK_FIELD (profile_tier_level.max_monochrome_constraint_flag);
566 CHECK_FIELD (profile_tier_level.intra_constraint_flag);
567 CHECK_FIELD (profile_tier_level.one_picture_only_constraint_flag);
568 CHECK_FIELD (profile_tier_level.lower_bit_rate_constraint_flag);
569 CHECK_FIELD (profile_tier_level.level_idc);
570 CHECK_FIELD (sub_layer_ordering_info_present_flag);
571 CHECK_FIELD (max_dec_pic_buffering_minus1[0]);
572 CHECK_FIELD (max_num_reorder_pics[0]);
573 CHECK_FIELD (max_latency_increase_plus1[0]);
574 CHECK_FIELD (max_layer_id);
575 CHECK_FIELD (num_layer_sets_minus1);
576 CHECK_FIELD (timing_info_present_flag);
577 CHECK_FIELD (num_units_in_tick);
578 CHECK_FIELD (time_scale);
579 CHECK_FIELD (poc_proportional_to_timing_flag);
580 CHECK_FIELD (num_ticks_poc_diff_one_minus1);
581 CHECK_FIELD (num_hrd_parameters);
582 CHECK_FIELD (hrd_layer_set_idx);
583 CHECK_FIELD (cprms_present_flag);
584 CHECK_FIELD (hrd_params.nal_hrd_parameters_present_flag);
585 CHECK_FIELD (hrd_params.vcl_hrd_parameters_present_flag);
586 CHECK_FIELD (hrd_params.sub_pic_hrd_params_present_flag);
587 CHECK_FIELD (hrd_params.bit_rate_scale);
588 CHECK_FIELD (hrd_params.cpb_size_scale);
589 CHECK_FIELD (hrd_params.cpb_size_du_scale);
590 CHECK_FIELD (hrd_params.initial_cpb_removal_delay_length_minus1);
591 CHECK_FIELD (hrd_params.au_cpb_removal_delay_length_minus1);
592 CHECK_FIELD (hrd_params.dpb_output_delay_length_minus1);
593 CHECK_FIELD (hrd_params.fixed_pic_rate_general_flag[0]);
594 CHECK_FIELD (hrd_params.fixed_pic_rate_within_cvs_flag[0]);
595 CHECK_FIELD (hrd_params.elemental_duration_in_tc_minus1[0]);
596 CHECK_FIELD (hrd_params.low_delay_hrd_flag[0]);
597 CHECK_FIELD (hrd_params.cpb_cnt_minus1[0]);
598 CHECK_FIELD (hrd_params.sublayer_hrd_params[0].bit_rate_value_minus1[0]);
599 CHECK_FIELD (hrd_params.sublayer_hrd_params[0].cpb_size_value_minus1[0]);
600 CHECK_FIELD (hrd_params.sublayer_hrd_params[0].cpb_size_du_value_minus1[0]);
601 CHECK_FIELD (hrd_params.sublayer_hrd_params[0].bit_rate_du_value_minus1[0]);
602 CHECK_FIELD (hrd_params.sublayer_hrd_params[0].cbr_flag[0]);
603 CHECK_FIELD (vps_extension);
606 memset (header_data, 0, sizeof (header_data));
607 memset (header_nal, 0, sizeof (header_nal));
609 size = sizeof (header_data);
610 ret = gst_h265_bit_writer_sps (&sps, TRUE, header_data, &size);
611 fail_if (ret != GST_H265_BIT_WRITER_OK);
613 nal_size = sizeof (header_nal);
614 ret = gst_h265_bit_writer_convert_to_nal (4, FALSE, TRUE, FALSE,
615 header_data, size * 8, header_nal, &nal_size);
616 fail_if (ret != GST_H265_BIT_WRITER_OK);
617 fail_if (nal_size < size);
620 res = gst_h265_parser_identify_nalu (parser, header_nal, 0,
621 sizeof (header_nal), &nalu);
622 assert_equals_int (res, GST_H265_PARSER_NO_NAL_END);
624 res = gst_h265_parser_parse_sps (parser, &nalu, &sps_parsed, TRUE);
625 assert_equals_int (res, GST_H265_PARSER_OK);
627 #define CHECK_FIELD(FIELD) fail_if(sps_parsed.FIELD != sps.FIELD)
629 CHECK_FIELD (max_sub_layers_minus1);
630 CHECK_FIELD (temporal_id_nesting_flag);
631 CHECK_FIELD (profile_tier_level.profile_space);
632 CHECK_FIELD (profile_tier_level.tier_flag);
633 CHECK_FIELD (profile_tier_level.profile_idc);
634 CHECK_FIELD (profile_tier_level.profile_compatibility_flag[0]);
635 CHECK_FIELD (profile_tier_level.profile_compatibility_flag[1]);
636 CHECK_FIELD (profile_tier_level.profile_compatibility_flag[2]);
637 CHECK_FIELD (profile_tier_level.profile_compatibility_flag[3]);
638 CHECK_FIELD (profile_tier_level.profile_compatibility_flag[4]);
639 CHECK_FIELD (profile_tier_level.profile_compatibility_flag[5]);
640 CHECK_FIELD (profile_tier_level.progressive_source_flag);
641 CHECK_FIELD (profile_tier_level.interlaced_source_flag);
642 CHECK_FIELD (profile_tier_level.non_packed_constraint_flag);
643 CHECK_FIELD (profile_tier_level.frame_only_constraint_flag);
644 CHECK_FIELD (profile_tier_level.max_12bit_constraint_flag);
645 CHECK_FIELD (profile_tier_level.max_10bit_constraint_flag);
646 CHECK_FIELD (profile_tier_level.max_8bit_constraint_flag);
647 CHECK_FIELD (profile_tier_level.max_422chroma_constraint_flag);
648 CHECK_FIELD (profile_tier_level.max_420chroma_constraint_flag);
649 CHECK_FIELD (profile_tier_level.max_monochrome_constraint_flag);
650 CHECK_FIELD (profile_tier_level.intra_constraint_flag);
651 CHECK_FIELD (profile_tier_level.one_picture_only_constraint_flag);
652 CHECK_FIELD (profile_tier_level.lower_bit_rate_constraint_flag);
653 CHECK_FIELD (profile_tier_level.level_idc);
654 CHECK_FIELD (chroma_format_idc);
655 CHECK_FIELD (pic_width_in_luma_samples);
656 CHECK_FIELD (pic_height_in_luma_samples);
657 CHECK_FIELD (conformance_window_flag);
658 CHECK_FIELD (conf_win_left_offset);
659 CHECK_FIELD (conf_win_right_offset);
660 CHECK_FIELD (conf_win_top_offset);
661 CHECK_FIELD (conf_win_bottom_offset);
662 CHECK_FIELD (bit_depth_luma_minus8);
663 CHECK_FIELD (bit_depth_chroma_minus8);
664 CHECK_FIELD (log2_max_pic_order_cnt_lsb_minus4);
665 CHECK_FIELD (sub_layer_ordering_info_present_flag);
666 CHECK_FIELD (max_dec_pic_buffering_minus1[0]);
667 CHECK_FIELD (max_num_reorder_pics[0]);
668 CHECK_FIELD (max_latency_increase_plus1[0]);
669 CHECK_FIELD (log2_min_luma_coding_block_size_minus3);
670 CHECK_FIELD (log2_diff_max_min_luma_coding_block_size);
671 CHECK_FIELD (log2_min_transform_block_size_minus2);
672 CHECK_FIELD (log2_diff_max_min_transform_block_size);
673 CHECK_FIELD (max_transform_hierarchy_depth_inter);
674 CHECK_FIELD (max_transform_hierarchy_depth_intra);
675 CHECK_FIELD (scaling_list_enabled_flag);
676 CHECK_FIELD (scaling_list_data_present_flag);
678 for (i = 0; i < 6; i++)
679 CHECK_FIELD (scaling_list.scaling_list_dc_coef_minus8_16x16[i]);
680 for (i = 0; i < 2; i++)
681 CHECK_FIELD (scaling_list.scaling_list_dc_coef_minus8_32x32[i]);
682 for (i = 0; i < 6; i++) {
683 for (j = 0; j < 16; j++)
684 CHECK_FIELD (scaling_list.scaling_lists_4x4[i][j]);
686 for (i = 0; i < 6; i++) {
687 for (j = 0; j < 64; j++)
688 CHECK_FIELD (scaling_list.scaling_lists_8x8[i][j]);
690 for (i = 0; i < 6; i++) {
691 for (j = 0; j < 64; j++)
692 CHECK_FIELD (scaling_list.scaling_lists_16x16[i][j]);
694 for (i = 0; i < 2; i++) {
695 for (j = 0; j < 64; j++)
696 CHECK_FIELD (scaling_list.scaling_lists_32x32[i][j]);
699 CHECK_FIELD (amp_enabled_flag);
700 CHECK_FIELD (sample_adaptive_offset_enabled_flag);
701 CHECK_FIELD (pcm_enabled_flag);
702 CHECK_FIELD (pcm_sample_bit_depth_luma_minus1);
703 CHECK_FIELD (pcm_sample_bit_depth_chroma_minus1);
704 CHECK_FIELD (log2_min_pcm_luma_coding_block_size_minus3);
705 CHECK_FIELD (log2_diff_max_min_pcm_luma_coding_block_size);
706 CHECK_FIELD (pcm_loop_filter_disabled_flag);
707 CHECK_FIELD (num_short_term_ref_pic_sets);
709 for (i = 0; i < 3; i++) {
710 CHECK_FIELD (short_term_ref_pic_set[i].inter_ref_pic_set_prediction_flag);
711 CHECK_FIELD (short_term_ref_pic_set[i].NumDeltaPocs);
712 CHECK_FIELD (short_term_ref_pic_set[i].NumNegativePics);
713 for (j = 0; j < sps_parsed.short_term_ref_pic_set[i].NumNegativePics; j++) {
714 CHECK_FIELD (short_term_ref_pic_set[i].DeltaPocS0[j]);
715 CHECK_FIELD (short_term_ref_pic_set[i].UsedByCurrPicS0[j]);
717 CHECK_FIELD (short_term_ref_pic_set[i].NumPositivePics);
718 for (j = 0; j < sps_parsed.short_term_ref_pic_set[i].NumPositivePics; j++) {
719 CHECK_FIELD (short_term_ref_pic_set[i].DeltaPocS1[j]);
720 CHECK_FIELD (short_term_ref_pic_set[i].UsedByCurrPicS1[j]);
724 CHECK_FIELD (long_term_ref_pics_present_flag);
725 CHECK_FIELD (temporal_mvp_enabled_flag);
726 CHECK_FIELD (strong_intra_smoothing_enabled_flag);
727 CHECK_FIELD (vui_parameters_present_flag);
728 CHECK_FIELD (vui_params.aspect_ratio_info_present_flag);
729 CHECK_FIELD (vui_params.overscan_info_present_flag);
730 CHECK_FIELD (vui_params.overscan_appropriate_flag);
731 CHECK_FIELD (vui_params.video_signal_type_present_flag);
732 CHECK_FIELD (vui_params.video_format);
733 CHECK_FIELD (vui_params.video_full_range_flag);
734 CHECK_FIELD (vui_params.colour_description_present_flag);
735 CHECK_FIELD (vui_params.chroma_loc_info_present_flag);
736 CHECK_FIELD (vui_params.chroma_sample_loc_type_top_field);
737 CHECK_FIELD (vui_params.chroma_sample_loc_type_bottom_field);
738 CHECK_FIELD (vui_params.neutral_chroma_indication_flag);
739 CHECK_FIELD (vui_params.field_seq_flag);
740 CHECK_FIELD (vui_params.frame_field_info_present_flag);
741 CHECK_FIELD (vui_params.default_display_window_flag);
742 CHECK_FIELD (vui_params.def_disp_win_left_offset);
743 CHECK_FIELD (vui_params.def_disp_win_right_offset);
744 CHECK_FIELD (vui_params.def_disp_win_top_offset);
745 CHECK_FIELD (vui_params.def_disp_win_bottom_offset);
746 CHECK_FIELD (vui_params.timing_info_present_flag);
747 CHECK_FIELD (vui_params.num_units_in_tick);
748 CHECK_FIELD (vui_params.time_scale);
749 CHECK_FIELD (vui_params.poc_proportional_to_timing_flag);
750 CHECK_FIELD (vui_params.hrd_parameters_present_flag);
751 CHECK_FIELD (vui_params.hrd_params.nal_hrd_parameters_present_flag);
752 CHECK_FIELD (vui_params.hrd_params.vcl_hrd_parameters_present_flag);
753 CHECK_FIELD (vui_params.hrd_params.sub_pic_hrd_params_present_flag);
754 CHECK_FIELD (vui_params.hrd_params.bit_rate_scale);
755 CHECK_FIELD (vui_params.hrd_params.cpb_size_scale);
756 CHECK_FIELD (vui_params.hrd_params.cpb_size_du_scale);
757 CHECK_FIELD (vui_params.hrd_params.initial_cpb_removal_delay_length_minus1);
758 CHECK_FIELD (vui_params.hrd_params.au_cpb_removal_delay_length_minus1);
759 CHECK_FIELD (vui_params.hrd_params.dpb_output_delay_length_minus1);
760 CHECK_FIELD (vui_params.hrd_params.fixed_pic_rate_general_flag[0]);
761 CHECK_FIELD (vui_params.hrd_params.fixed_pic_rate_within_cvs_flag[0]);
762 CHECK_FIELD (vui_params.hrd_params.elemental_duration_in_tc_minus1[0]);
763 CHECK_FIELD (vui_params.hrd_params.low_delay_hrd_flag[0]);
764 CHECK_FIELD (vui_params.hrd_params.cpb_cnt_minus1[0]);
766 (vui_params.hrd_params.sublayer_hrd_params[0].bit_rate_value_minus1[0]);
768 (vui_params.hrd_params.sublayer_hrd_params[0].cpb_size_value_minus1[0]);
769 CHECK_FIELD (vui_params.hrd_params.sublayer_hrd_params[0].
770 cpb_size_du_value_minus1[0]);
771 CHECK_FIELD (vui_params.hrd_params.sublayer_hrd_params[0].
772 bit_rate_du_value_minus1[0]);
773 CHECK_FIELD (vui_params.hrd_params.sublayer_hrd_params[0].cbr_flag[0]);
774 CHECK_FIELD (vui_params.bitstream_restriction_flag);
775 CHECK_FIELD (vui_params.tiles_fixed_structure_flag);
776 CHECK_FIELD (vui_params.motion_vectors_over_pic_boundaries_flag);
777 CHECK_FIELD (vui_params.restricted_ref_pic_lists_flag);
778 CHECK_FIELD (vui_params.min_spatial_segmentation_idc);
779 CHECK_FIELD (vui_params.max_bytes_per_pic_denom);
780 CHECK_FIELD (vui_params.max_bits_per_min_cu_denom);
781 CHECK_FIELD (vui_params.log2_max_mv_length_horizontal);
782 CHECK_FIELD (vui_params.log2_max_mv_length_vertical);
783 CHECK_FIELD (sps_extension_flag);
784 CHECK_FIELD (sps_range_extension_flag);
785 CHECK_FIELD (sps_multilayer_extension_flag);
786 CHECK_FIELD (sps_3d_extension_flag);
787 CHECK_FIELD (sps_scc_extension_flag);
788 CHECK_FIELD (sps_extension_params.transform_skip_rotation_enabled_flag);
789 CHECK_FIELD (sps_extension_params.transform_skip_context_enabled_flag);
790 CHECK_FIELD (sps_extension_params.implicit_rdpcm_enabled_flag);
791 CHECK_FIELD (sps_extension_params.explicit_rdpcm_enabled_flag);
792 CHECK_FIELD (sps_extension_params.extended_precision_processing_flag);
793 CHECK_FIELD (sps_extension_params.intra_smoothing_disabled_flag);
794 CHECK_FIELD (sps_extension_params.high_precision_offsets_enabled_flag);
795 CHECK_FIELD (sps_extension_params.persistent_rice_adaptation_enabled_flag);
796 CHECK_FIELD (sps_extension_params.cabac_bypass_alignment_enabled_flag);
799 memset (header_data, 0, sizeof (header_data));
800 memset (header_nal, 0, sizeof (header_nal));
802 size = sizeof (header_data);
803 ret = gst_h265_bit_writer_pps (&pps, TRUE, header_data, &size);
804 fail_if (ret != GST_H265_BIT_WRITER_OK);
806 nal_size = sizeof (header_nal);
807 ret = gst_h265_bit_writer_convert_to_nal (4, FALSE, TRUE, FALSE,
808 header_data, size * 8, header_nal, &nal_size);
809 fail_if (ret != GST_H265_BIT_WRITER_OK);
810 fail_if (nal_size < size);
813 res = gst_h265_parser_identify_nalu (parser, header_nal, 0,
814 sizeof (header_nal), &nalu);
815 assert_equals_int (res, GST_H265_PARSER_NO_NAL_END);
817 res = gst_h265_parser_parse_pps (parser, &nalu, &pps_parsed);
818 assert_equals_int (res, GST_H265_PARSER_OK);
820 #define CHECK_FIELD(FIELD) fail_if(pps_parsed.FIELD != pps.FIELD)
822 CHECK_FIELD (dependent_slice_segments_enabled_flag);
823 CHECK_FIELD (output_flag_present_flag);
824 CHECK_FIELD (num_extra_slice_header_bits);
825 CHECK_FIELD (sign_data_hiding_enabled_flag);
826 CHECK_FIELD (cabac_init_present_flag);
827 CHECK_FIELD (num_ref_idx_l0_default_active_minus1);
828 CHECK_FIELD (num_ref_idx_l1_default_active_minus1);
829 CHECK_FIELD (init_qp_minus26);
830 CHECK_FIELD (constrained_intra_pred_flag);
831 CHECK_FIELD (transform_skip_enabled_flag);
832 CHECK_FIELD (cu_qp_delta_enabled_flag);
833 CHECK_FIELD (diff_cu_qp_delta_depth);
834 CHECK_FIELD (cb_qp_offset);
835 CHECK_FIELD (cr_qp_offset);
836 CHECK_FIELD (slice_chroma_qp_offsets_present_flag);
837 CHECK_FIELD (weighted_pred_flag);
838 CHECK_FIELD (weighted_bipred_flag);
839 CHECK_FIELD (transquant_bypass_enabled_flag);
840 CHECK_FIELD (tiles_enabled_flag);
841 CHECK_FIELD (entropy_coding_sync_enabled_flag);
842 CHECK_FIELD (num_tile_columns_minus1);
843 CHECK_FIELD (num_tile_rows_minus1);
844 CHECK_FIELD (uniform_spacing_flag);
845 CHECK_FIELD (column_width_minus1[0]);
846 CHECK_FIELD (row_height_minus1[0]);
847 CHECK_FIELD (row_height_minus1[1]);
848 CHECK_FIELD (loop_filter_across_tiles_enabled_flag);
849 CHECK_FIELD (loop_filter_across_slices_enabled_flag);
850 CHECK_FIELD (deblocking_filter_control_present_flag);
851 CHECK_FIELD (deblocking_filter_override_enabled_flag);
852 CHECK_FIELD (deblocking_filter_disabled_flag);
853 CHECK_FIELD (beta_offset_div2);
854 CHECK_FIELD (tc_offset_div2);
855 CHECK_FIELD (scaling_list_data_present_flag);
857 for (i = 0; i < 6; i++)
858 CHECK_FIELD (scaling_list.scaling_list_dc_coef_minus8_16x16[i]);
859 for (i = 0; i < 2; i++)
860 CHECK_FIELD (scaling_list.scaling_list_dc_coef_minus8_32x32[i]);
861 for (i = 0; i < 6; i++) {
862 for (j = 0; j < 16; j++)
863 CHECK_FIELD (scaling_list.scaling_lists_4x4[i][j]);
865 for (i = 0; i < 6; i++) {
866 for (j = 0; j < 64; j++)
867 CHECK_FIELD (scaling_list.scaling_lists_8x8[i][j]);
869 for (i = 0; i < 6; i++) {
870 for (j = 0; j < 64; j++)
871 CHECK_FIELD (scaling_list.scaling_lists_16x16[i][j]);
873 for (i = 0; i < 2; i++) {
874 for (j = 0; j < 64; j++)
875 CHECK_FIELD (scaling_list.scaling_lists_32x32[i][j]);
878 CHECK_FIELD (lists_modification_present_flag);
879 CHECK_FIELD (log2_parallel_merge_level_minus2);
880 CHECK_FIELD (slice_segment_header_extension_present_flag);
881 CHECK_FIELD (pps_extension_flag);
882 CHECK_FIELD (pps_range_extension_flag);
883 CHECK_FIELD (pps_multilayer_extension_flag);
884 CHECK_FIELD (pps_3d_extension_flag);
885 CHECK_FIELD (pps_scc_extension_flag);
886 CHECK_FIELD (pps_extension_params.log2_max_transform_skip_block_size_minus2);
887 CHECK_FIELD (pps_extension_params.cross_component_prediction_enabled_flag);
888 CHECK_FIELD (pps_extension_params.chroma_qp_offset_list_enabled_flag);
889 CHECK_FIELD (pps_extension_params.diff_cu_chroma_qp_offset_depth);
890 CHECK_FIELD (pps_extension_params.chroma_qp_offset_list_len_minus1);
891 for (i = 0; i < 6; i++)
892 CHECK_FIELD (pps_extension_params.cb_qp_offset_list[i]);
893 for (i = 0; i < 6; i++)
894 CHECK_FIELD (pps_extension_params.cr_qp_offset_list[i]);
895 CHECK_FIELD (pps_extension_params.log2_sao_offset_scale_luma);
896 CHECK_FIELD (pps_extension_params.log2_sao_offset_scale_chroma);
899 memset (header_data, 0, sizeof (header_data));
900 memset (header_nal, 0, sizeof (header_nal));
902 size = sizeof (header_data);
903 ret = gst_h265_bit_writer_slice_hdr (&slice_hdr, TRUE,
904 GST_H265_NAL_SLICE_TRAIL_N, header_data, &size);
905 fail_if (ret != GST_H265_BIT_WRITER_OK);
907 nal_size = sizeof (header_nal);
908 ret = gst_h265_bit_writer_convert_to_nal (4, FALSE, TRUE, FALSE,
909 header_data, size * 8, header_nal, &nal_size);
910 fail_if (ret != GST_H265_BIT_WRITER_OK);
911 fail_if (nal_size < size);
914 res = gst_h265_parser_identify_nalu (parser, header_nal, 0,
915 sizeof (header_nal), &nalu);
916 assert_equals_int (res, GST_H265_PARSER_NO_NAL_END);
918 res = gst_h265_parser_parse_slice_hdr (parser, &nalu, &slice_parsed);
919 assert_equals_int (res, GST_H265_PARSER_OK);
921 #define CHECK_FIELD(FIELD) fail_if(slice_parsed.FIELD != slice_hdr.FIELD)
922 CHECK_FIELD (first_slice_segment_in_pic_flag);
924 CHECK_FIELD (pic_order_cnt_lsb);
925 CHECK_FIELD (short_term_ref_pic_set_sps_flag);
926 CHECK_FIELD (short_term_ref_pic_set_idx);
927 CHECK_FIELD (temporal_mvp_enabled_flag);
928 CHECK_FIELD (sao_luma_flag);
929 CHECK_FIELD (sao_chroma_flag);
930 CHECK_FIELD (num_ref_idx_active_override_flag);
931 CHECK_FIELD (num_ref_idx_l0_active_minus1);
932 CHECK_FIELD (num_ref_idx_l1_active_minus1);
933 CHECK_FIELD (mvd_l1_zero_flag);
934 CHECK_FIELD (collocated_ref_idx);
935 CHECK_FIELD (five_minus_max_num_merge_cand);
936 CHECK_FIELD (qp_delta);
937 CHECK_FIELD (deblocking_filter_override_flag);
938 CHECK_FIELD (cu_chroma_qp_offset_enabled_flag);
939 CHECK_FIELD (deblocking_filter_override_flag);
940 CHECK_FIELD (beta_offset_div2);
941 CHECK_FIELD (tc_offset_div2);
942 CHECK_FIELD (num_entry_point_offsets);
945 gst_h265_parser_free (parser);
951 h265bitwriter_suite (void)
953 Suite *s = suite_create ("H265 Parser library");
955 TCase *tc_chain = tcase_create ("general");
957 suite_add_tcase (s, tc_chain);
958 tcase_add_test (tc_chain, test_h265_bitwriter_vps_sps_pps_slice_hdr);
963 GST_CHECK_MAIN (h265bitwriter);