1 /*
2 * HEVC Parameter Set decoding
3 *
4 * Copyright (C) 2012 - 2103 Guillaume Martres
5 * Copyright (C) 2012 - 2103 Mickael Raulet
6 * Copyright (C) 2012 - 2013 Gildas Cocherel
7 * Copyright (C) 2013 Vittorio Giovara
8 *
9 * This file is part of FFmpeg.
10 *
11 * FFmpeg is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public
13 * License as published by the Free Software Foundation; either
14 * version 2.1 of the License, or (at your option) any later version.
15 *
16 * FFmpeg is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
20 *
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with FFmpeg; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 */
25
29
31 16, 16, 16, 16, 17, 18, 21, 24,
32 16, 16, 16, 16, 17, 19, 22, 25,
33 16, 16, 17, 18, 20, 22, 25, 29,
34 16, 16, 18, 21, 24, 27, 31, 36,
35 17, 17, 20, 24, 30, 35, 41, 47,
36 18, 19, 22, 27, 35, 44, 54, 65,
37 21, 22, 25, 31, 41, 54, 70, 88,
38 24, 25, 29, 36, 47, 65, 88, 115
39 };
40
42 16, 16, 16, 16, 17, 18, 20, 24,
43 16, 16, 16, 17, 18, 20, 24, 25,
44 16, 16, 17, 18, 20, 24, 25, 28,
45 16, 17, 18, 20, 24, 25, 28, 33,
46 17, 18, 20, 24, 25, 28, 33, 41,
47 18, 20, 24, 25, 28, 33, 41, 54,
48 20, 24, 25, 28, 33, 41, 54, 71,
49 24, 25, 28, 33, 41, 54, 71, 91
50 };
51
53 { 0, 1 },
54 { 1, 1 },
55 { 12, 11 },
56 { 10, 11 },
57 { 16, 11 },
58 { 40, 33 },
59 { 24, 11 },
60 { 20, 11 },
61 { 32, 11 },
62 { 80, 33 },
63 { 18, 11 },
64 { 15, 11 },
65 { 64, 33 },
66 { 160, 99 },
67 { 4, 3 },
68 { 3, 2 },
69 { 2, 1 },
70 };
71
73 const HEVCSPS *sps,
int is_slice_header)
74 {
77 int delta_poc;
78 int k0 = 0;
79 int k1 = 0;
80 int k = 0;
81 int i;
82
84
87
88 if (rps_predict) {
90 int delta_rps;
91 unsigned abs_delta_rps;
94
95 if (is_slice_header) {
99 "Invalid value of delta_idx in slice header RPS: %d > %d.\n",
102 }
104 } else
106
109 if (abs_delta_rps < 1 || abs_delta_rps > 32768) {
111 "Invalid value of abs_delta_rps: %d\n",
112 abs_delta_rps);
114 }
115 delta_rps = (1 - (delta_rps_sign << 1)) * abs_delta_rps;
118
119 if (!used)
121
122 if (used || use_delta_flag) {
123 if (i < rps_ridx->num_delta_pocs)
124 delta_poc = delta_rps + rps_ridx->
delta_poc[i];
125 else
126 delta_poc = delta_rps;
128 if (delta_poc < 0)
129 k0++;
130 else
131 k1++;
132 k++;
133 }
134 }
135
138 // sort in increasing order (smallest first)
140 int used, tmp;
144 for (k = i - 1; k >= 0; k--) {
146 if (delta_poc < tmp) {
151 }
152 }
153 }
154 }
156 int used;
158 // flip the negative values to largest first
166 k--;
167 }
168 }
169 } else {
170 unsigned int prev, nb_positive_pics;
173
178 }
179
182 prev = 0;
185 prev -= delta_poc;
188 }
189 prev = 0;
190 for (i = 0; i < nb_positive_pics; i++) {
192 prev += delta_poc;
195 }
196 }
197 }
198 return 0;
199 }
200
201
203 {
204 int i;
207
209 return -1;
210
222 else
224
225 for (i = 0; i < 32; i++)
231
232 skip_bits(gb, 16);
// XXX_reserved_zero_44bits[0..15]
233 skip_bits(gb, 16);
// XXX_reserved_zero_44bits[16..31]
234 skip_bits(gb, 12);
// XXX_reserved_zero_44bits[32..43]
235
236 return 0;
237 }
238
240 {
241 int i;
247 return -1;
248 }
249
251
252 for (i = 0; i < max_num_sub_layers - 1; i++) {
255 }
256
257 if (max_num_sub_layers - 1> 0)
258 for (i = max_num_sub_layers - 1; i < 8; i++)
259 skip_bits(gb, 2);
// reserved_zero_2bits[i]
260 for (i = 0; i < max_num_sub_layers - 1; i++) {
264 "PTL information for sublayer %i too short\n", i);
265 return -1;
266 }
270 "Not enough data for sublayer %i level_idc\n", i);
271 return -1;
272 } else
274 }
275 }
276
277 return 0;
278 }
279
281 int subpic_params_present)
282 {
284 int i;
285
286 for (i = 0; i < nb_cpb; i++) {
289
290 if (subpic_params_present) {
293 }
295 }
296 }
297
299 int max_sublayers)
300 {
302 int nal_params_present = 0, vcl_params_present = 0;
303 int subpic_params_present = 0;
304 int i;
305
306 if (common_inf_present) {
309
310 if (nal_params_present || vcl_params_present) {
312
313 if (subpic_params_present) {
315 skip_bits(gb, 5);
// du_cpb_removal_delay_increment_length_minus1
316 skip_bits(gb, 1);
// sub_pic_cpb_params_in_pic_timing_sei_flag
317 skip_bits(gb, 5);
// dpb_output_delay_du_length_minus1
318 }
319
322
323 if (subpic_params_present)
325
326 skip_bits(gb, 5);
// initial_cpb_removal_delay_length_minus1
327 skip_bits(gb, 5);
// au_cpb_removal_delay_length_minus1
328 skip_bits(gb, 5);
// dpb_output_delay_length_minus1
329 }
330 }
331
332 for (i = 0; i < max_sublayers; i++) {
333 int low_delay = 0;
334 unsigned int nb_cpb = 1;
336
337 if (!fixed_rate)
339
340 if (fixed_rate)
342 else
344
345 if (!low_delay) {
347 if (nb_cpb < 1 || nb_cpb > 32) {
350 }
351 }
352
353 if (nal_params_present)
355 if (vcl_params_present)
357 }
358 return 0;
359 }
360
362 {
363 int i,j;
365 int vps_id = 0;
368
369 if (!vps_buf)
372
374
378 goto err;
379 }
380
381 if (
get_bits(gb, 2) != 3) {
// vps_reserved_three_2bits
383 goto err;
384 }
385
389
390 if (
get_bits(gb, 16) != 0xffff) {
// vps_reserved_ffff_16bits
392 goto err;
393 }
394
398 goto err;
399 }
400
402 goto err;
403
405
411
415 goto err;
416 }
421 goto err;
422 }
423 }
424
429 goto err;
430 }
431
434 skip_bits(gb, 1);
// layer_id_included_flag[i][j]
435
445 int common_inf_present = 1;
446
448 if (i)
451 }
452 }
454
458 goto err;
459 }
460
463 return 0;
464
465 err:
468 }
469
471 {
475 int sar_present, alt = 0;
476
478
480 if (sar_present) {
483 vui->
sar = vui_sar[sar_idx];
484 else if (sar_idx == 255) {
487 } else
489 "Unknown SAR index: %u.\n", sar_idx);
490 }
491
495
507
508 // Set invalid values to "unspecified"
515 }
516 }
517
522 }
523
527
531 } else
533 // Backup context in case an alternate header is detected
534 memcpy(&backup, gb, sizeof(backup));
535
537 //TODO: * 2 is only valid for 420
542
546 "discarding vui default display window, "
547 "original values are l:%u r:%u t:%u b:%u\n",
552
557 }
558 }
559
561
564 // The alternate syntax seem to have timing info located
565 // at where def_disp_win is normally located
567 "Strange VUI timing information, retrying...\n");
570 memcpy(gb, &backup, sizeof(backup));
571 alt = 1;
572 }
575 if (alt) {
578 }
585 }
586
597 }
598 }
599
601 {
602 int matrixId;
603
604 for (matrixId = 0; matrixId < 6; matrixId++) {
605 // 4x4 default is 16
606 memset(sl->
sl[0][matrixId], 16, 16);
607 sl->
sl_dc[0][matrixId] = 16;
// default for 16x16
608 sl->
sl_dc[1][matrixId] = 16;
// default for 32x32
609 }
628 }
629
631 {
633 uint8_t scaling_list_pred_mode_flag;
634 int32_t scaling_list_dc_coef[2][6];
635 int size_id, matrix_id, pos;
636 int i;
637
638 for (size_id = 0; size_id < 4; size_id++)
639 for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
640 scaling_list_pred_mode_flag =
get_bits1(gb);
641 if (!scaling_list_pred_mode_flag) {
643 /* Only need to handle non-zero delta. Zero means default,
644 * which should already be in the arrays. */
645 if (delta) {
646 // Copy from previous array.
647 if (matrix_id < delta) {
649 "Invalid delta in scaling list data: %d.\n", delta);
651 }
652
653 memcpy(sl->
sl[size_id][matrix_id],
654 sl->
sl[size_id][matrix_id - delta],
655 size_id > 0 ? 64 : 16);
656 if (size_id > 1)
657 sl->
sl_dc[size_id - 2][matrix_id] = sl->
sl_dc[size_id - 2][matrix_id -
delta];
658 }
659 } else {
660 int next_coef, coef_num;
661 int32_t scaling_list_delta_coef;
662
663 next_coef = 8;
664 coef_num =
FFMIN(64, 1 << (4 + (size_id << 1)));
665 if (size_id > 1) {
666 scaling_list_dc_coef[size_id - 2][matrix_id] =
get_se_golomb(gb) + 8;
667 next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
668 sl->
sl_dc[size_id - 2][matrix_id] = next_coef;
669 }
670 for (i = 0; i < coef_num; i++) {
671 if (size_id == 0)
674 else
677
679 next_coef = (next_coef + scaling_list_delta_coef + 256) % 256;
680 sl->
sl[size_id][matrix_id][pos] = next_coef;
681 }
682 }
683 }
684
686 for (i = 0; i < 64; i++) {
687 sl->
sl[3][1][i] = sl->
sl[2][1][i];
688 sl->
sl[3][2][i] = sl->
sl[2][2][i];
689 sl->
sl[3][4][i] = sl->
sl[2][4][i];
690 sl->
sl[3][5][i] = sl->
sl[2][5][i];
691 }
696 }
697
698
699 return 0;
700 }
701
703 {
707 unsigned int sps_id = 0;
708 int log2_diff_max_min_transform_block_size;
709 int bit_depth_chroma,
start, vui_present, sublayer_ordering_info;
710 int i;
711
714
715 if (!sps_buf)
718
720
721 // Coded parameters
722
727 goto err;
728 }
729
734 goto err;
735 }
736
742 goto err;
743 }
744
746
748 goto err;
749
754 goto err;
755 }
756
758
761
764
769 goto err;
770
771 if (
get_bits1(gb)) {
// pic_conformance_flag
772 //TODO: * 2 is only valid for 420
777
780 "discarding sps conformance window, "
781 "original values are l:%u r:%u t:%u b:%u\n",
786
791 }
793 }
794
799 "Luma bit depth (%d) is different from chroma bit depth (%d), "
800 "this is unsupported.\n",
803 goto err;
804 }
805
807 case 8:
812 break;
813 case 9:
818 break;
819 case 10:
824 break;
825 case 12:
830 break;
831 default:
833 "4:2:0, 4:2:2, 4:4:4 supports are currently specified for 8, 10 and 12 bits.\n");
835 goto err;
836 }
837
839 if (!desc) {
841 goto err;
842 }
843
847
849
855 goto err;
856 }
857
868 goto err;
869 }
876 goto err;
877 }
879 }
880 }
881
882 if (!sublayer_ordering_info) {
883 for (i = 0; i <
start; i++) {
887 }
888 }
889
896
900 goto err;
901 }
902
906 goto err;
907 }
908
912 goto err;
913 }
914
915 if (log2_diff_max_min_transform_block_size < 0 || log2_diff_max_min_transform_block_size > 30) {
916 av_log(s->
avctx,
AV_LOG_ERROR,
"Invalid value %d for log2_diff_max_min_transform_block_size", log2_diff_max_min_transform_block_size);
918 goto err;
919 }
920
923
927
930 if (ret < 0)
931 goto err;
932 }
933 }
934
937
947 "PCM bit depth (%d) is greater than normal bit depth (%d)\n",
950 goto err;
951 }
952
954 }
955
961 goto err;
962 }
965 sps, 0)) < 0)
966 goto err;
967 }
968
975 goto err;
976 }
980 }
981 }
982
987 if (vui_present)
989
990 if (
get_bits1(gb)) {
// sps_extension_flag
991 int sps_extension_flag[1];
992 for (i = 0; i < 1; i++)
994 skip_bits(gb, 7);
//sps_extension_7bits = get_bits(gb, 7);
995 if (sps_extension_flag[0]) {
996 int extended_precision_processing_flag;
997 int high_precision_offsets_enabled_flag;
998 int cabac_bypass_alignment_enabled_flag;
999
1003
1005
1006 extended_precision_processing_flag =
get_bits1(gb);
1007 if (extended_precision_processing_flag)
1009 "extended_precision_processing_flag not yet implemented\n");
1010
1012 high_precision_offsets_enabled_flag =
get_bits1(gb);
1013 if (high_precision_offsets_enabled_flag)
1015 "high_precision_offsets_enabled_flag not yet implemented\n");
1016
1018
1019 cabac_bypass_alignment_enabled_flag =
get_bits1(gb);
1020 if (cabac_bypass_alignment_enabled_flag)
1022 "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1023 }
1024 }
1030 }
1035 "chroma samples to preserve alignment.\n",
1037 }
1047 goto err;
1048 }
1050 "Displaying the whole video surface.\n");
1055 }
1056
1057 // Inferred parameters
1061
1065
1073
1075
1079 goto err;
1080 }
1081
1084 goto err;
1085 }
1089 "log2_ctb_size %d differs from the bounds of any known profile\n",
1092 goto err;
1093 }
1097 goto err;
1098 }
1102 goto err;
1103 }
1106 "max transform block size out of range: %d\n",
1108 goto err;
1109 }
1110
1114 goto err;
1115 }
1116
1119 "Parsed SPS: id %d; coded wxh: %dx%d; "
1120 "cropped wxh: %dx%d; pix_fmt: %s.\n",
1124 }
1125
1126 /* check if this is a repeat of an already parsed SPS, then keep the
1127 * original one.
1128 * otherwise drop all PPSes that depend on it */
1132 } else {
1136 }
1142 }
1145 }
1146
1147 return 0;
1148
1149 err:
1152 }
1153
1155 {
1157
1168
1170 }
1171
1174 int i;
1175
1178 }
1186 "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1188 }
1193 "cb_qp_offset_list not tested yet.\n");
1194 }
1198 "cb_qp_offset_list not tested yet.\n");
1199 }
1200 }
1201 }
1204
1205 return(0);
1206 }
1207
1209 {
1212 int pic_area_in_ctbs;
1213 int log2_diff_ctb_min_tb_size;
1214 int i, j, x,
y, ctb_addr_rs, tile_id;
1216 unsigned int pps_id = 0;
1217
1220
1221 if (!pps)
1223
1226 if (!pps_buf) {
1229 }
1230
1232
1233 // Default values
1242
1243 // Coded parameters
1248 goto err;
1249 }
1254 goto err;
1255 }
1259 goto err;
1260 }
1262
1266
1268
1270
1273
1275
1278
1283
1289 goto err;
1290 }
1291
1297 goto err;
1298 }
1304 goto err;
1305 }
1307
1310
1314
1323 goto err;
1324 }
1330 goto err;
1331 }
1332
1337 goto err;
1338 }
1339
1342 uint64_t sum = 0;
1346 }
1350 goto err;
1351 }
1353
1354 sum = 0;
1358 }
1362 goto err;
1363 }
1365 }
1367 }
1368
1370
1382 goto err;
1383 }
1388 goto err;
1389 }
1390 }
1391 }
1392
1397 if (ret < 0)
1398 goto err;
1399 }
1406 goto err;
1407 }
1408
1410
1411 if (
get_bits1(gb)) {
// pps_extension_present_flag
1412 int pps_range_extensions_flag =
get_bits1(gb);
1413 /* int pps_extension_7bits = */ get_bits(gb, 7);
1416 goto err;
1417 }
1418 }
1419
1420 // Inferred parameters
1426 goto err;
1427 }
1428
1433 }
1436 goto err;
1437 }
1438
1442 }
1443
1447 }
1448 }
1449
1453
1457
1460 j++;
1462 }
1463
1464 /**
1465 * 6.5
1466 */
1468
1476 goto err;
1477 }
1478
1479 for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
1480 int tb_x = ctb_addr_rs % sps->
ctb_width;
1481 int tb_y = ctb_addr_rs / sps->
ctb_width;
1482 int tile_x = 0;
1483 int tile_y = 0;
1485
1487 if (tb_x < pps->col_bd[i + 1]) {
1488 tile_x = i;
1489 break;
1490 }
1491 }
1492
1494 if (tb_y < pps->row_bd[i + 1]) {
1495 tile_y = i;
1496 break;
1497 }
1498 }
1499
1500 for (i = 0; i < tile_x; i++)
1502 for (i = 0; i < tile_y; i++)
1504
1506 tb_x - pps->
col_bd[tile_x];
1507
1510 }
1511
1514 for (y = pps->
row_bd[j]; y < pps->row_bd[j + 1]; y++)
1515 for (x = pps->
col_bd[i]; x < pps->col_bd[i + 1]; x++)
1517
1521 goto err;
1522 }
1523
1527
1530 for (y = 0; y < sps->
tb_mask+2; y++) {
1533 }
1534 for (y = 0; y < sps->
tb_mask+1; y++) {
1535 for (x = 0; x < sps->
tb_mask+1; x++) {
1536 int tb_x = x >> log2_diff_ctb_min_tb_size;
1537 int tb_y = y >> log2_diff_ctb_min_tb_size;
1538 int ctb_addr_rs = sps->
ctb_width * tb_y + tb_x;
1540 (log2_diff_ctb_min_tb_size * 2);
1541 for (i = 0; i < log2_diff_ctb_min_tb_size; i++) {
1543 val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
1544 }
1546 }
1547 }
1548
1552 goto err;
1553 }
1554
1557
1558 return 0;
1559
1560 err:
1563 }