1 /*
2 * H.26L/H.264/AVC/JVT/14496-10/... parameter set decoding
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 /**
23 * @file
24 * H.264 / AVC / MPEG4 part10 parameter set decoding.
25 * @author Michael Niedermayer <michaelni@gmx.at>
26 */
27
28 #include <inttypes.h>
29
36
37 #define MAX_LOG2_MAX_FRAME_NUM (12 + 4)
38 #define MIN_LOG2_MAX_FRAME_NUM 4
39
40 #define QP(qP, depth) ((qP) + 6 * ((depth) - 8))
41
42 #define CHROMA_QP_TABLE_END(d) \
43 QP(0, d), QP(1, d), QP(2, d), QP(3, d), QP(4, d), QP(5, d), \
44 QP(6, d), QP(7, d), QP(8, d), QP(9, d), QP(10, d), QP(11, d), \
45 QP(12, d), QP(13, d), QP(14, d), QP(15, d), QP(16, d), QP(17, d), \
46 QP(18, d), QP(19, d), QP(20, d), QP(21, d), QP(22, d), QP(23, d), \
47 QP(24, d), QP(25, d), QP(26, d), QP(27, d), QP(28, d), QP(29, d), \
48 QP(29, d), QP(30, d), QP(31, d), QP(32, d), QP(32, d), QP(33, d), \
49 QP(34, d), QP(34, d), QP(35, d), QP(35, d), QP(36, d), QP(36, d), \
50 QP(37, d), QP(37, d), QP(37, d), QP(38, d), QP(38, d), QP(38, d), \
51 QP(39, d), QP(39, d), QP(39, d), QP(39, d)
52
55 { 0, 1, 2, 3, 4, 5,
57 { 0, 1, 2, 3, 4, 5,
58 6, 7, 8, 9, 10, 11,
60 { 0, 1, 2, 3, 4, 5,
61 6, 7, 8, 9, 10, 11,
62 12,13,14,15, 16, 17,
64 { 0, 1, 2, 3, 4, 5,
65 6, 7, 8, 9, 10, 11,
66 12,13,14,15, 16, 17,
67 18,19,20,21, 22, 23,
69 { 0, 1, 2, 3, 4, 5,
70 6, 7, 8, 9, 10, 11,
71 12,13,14,15, 16, 17,
72 18,19,20,21, 22, 23,
73 24,25,26,27, 28, 29,
75 { 0, 1, 2, 3, 4, 5,
76 6, 7, 8, 9, 10, 11,
77 12,13,14,15, 16, 17,
78 18,19,20,21, 22, 23,
79 24,25,26,27, 28, 29,
80 30,31,32,33, 34, 35,
82 };
83
85 { 6, 13, 20, 28, 13, 20, 28, 32,
86 20, 28, 32, 37, 28, 32, 37, 42 },
87 { 10, 14, 20, 24, 14, 20, 24, 27,
88 20, 24, 27, 30, 24, 27, 30, 34 }
89 };
90
92 { 6, 10, 13, 16, 18, 23, 25, 27,
93 10, 11, 16, 18, 23, 25, 27, 29,
94 13, 16, 18, 23, 25, 27, 29, 31,
95 16, 18, 23, 25, 27, 29, 31, 33,
96 18, 23, 25, 27, 29, 31, 33, 36,
97 23, 25, 27, 29, 31, 33, 36, 38,
98 25, 27, 29, 31, 33, 36, 38, 40,
99 27, 29, 31, 33, 36, 38, 40, 42 },
100 { 9, 13, 15, 17, 19, 21, 22, 24,
101 13, 13, 17, 19, 21, 22, 24, 25,
102 15, 17, 19, 21, 22, 24, 25, 27,
103 17, 19, 21, 22, 24, 25, 27, 28,
104 19, 21, 22, 24, 25, 27, 28, 30,
105 21, 22, 24, 25, 27, 28, 30, 32,
106 22, 24, 25, 27, 28, 30, 32, 33,
107 24, 25, 27, 28, 30, 32, 33, 35 }
108 };
109
111 {
112 int cpb_count, i;
114
115 if (cpb_count > 32
U) {
118 }
119
122 for (i = 0; i < cpb_count; i++) {
126 }
132 return 0;
133 }
134
136 {
137 int aspect_ratio_info_present_flag;
138 unsigned int aspect_ratio_idc;
139
140 aspect_ratio_info_present_flag =
get_bits1(&h->
gb);
141
142 if (aspect_ratio_info_present_flag) {
149 } else {
152 }
153 } else {
156 }
157
158 if (
get_bits1(&h->
gb))
/* overscan_info_present_flag */
160
165
177 }
178 }
179
180 /* chroma_location_info_present_flag */
182 /* chroma_sample_location_type_top_field */
185 }
186
189 return 0;
190 }
191
198 "time_scale/num_units_in_tick invalid or unsupported (%"PRIu32"/%"PRIu32")\n",
201 }
203 }
204
218 return 0;
221 get_bits1(&h->
gb);
/* motion_vectors_over_pic_boundaries_flag */
228
232 }
233
235 /* max_dec_frame_buffering || max_dec_frame_buffering > 16 */) {
237 "Clipping illegal num_reorder_frames %d\n",
241 }
242 }
243
248 }
249
250 return 0;
251 }
252
256 {
257 int i, last = 8, next = 8;
259 if (!
get_bits1(&h->
gb))
/* matrix not written, we use the predicted one */
260 memcpy(factors, fallback_list, size *
sizeof(
uint8_t));
261 else
262 for (i = 0; i <
size; i++) {
263 if (next)
265 if (!i && !next) { /* matrix not written, we use the preset one */
266 memcpy(factors, jvt_list, size *
sizeof(
uint8_t));
267 break;
268 }
269 last = factors[scan[i]] = next ? next : last;
270 }
271 }
272
274 PPS *pps,
int is_sps,
277 {
284 };
301 }
302 }
303 }
304 }
305
307 {
308 int profile_idc, level_idc, constraint_set_flags = 0;
309 unsigned int sps_id;
310 int i, log2_max_frame_num_minus4;
312
314 constraint_set_flags |=
get_bits1(&h->
gb) << 0;
// constraint_set0_flag
315 constraint_set_flags |=
get_bits1(&h->
gb) << 1;
// constraint_set1_flag
316 constraint_set_flags |=
get_bits1(&h->
gb) << 2;
// constraint_set2_flag
317 constraint_set_flags |=
get_bits1(&h->
gb) << 3;
// constraint_set3_flag
318 constraint_set_flags |=
get_bits1(&h->
gb) << 4;
// constraint_set4_flag
319 constraint_set_flags |=
get_bits1(&h->
gb) << 5;
// constraint_set5_flag
323
327 }
329 if (!sps)
331
338
343
347 sps->
profile_idc == 244 ||
// High444 Predictive profile
349 sps->
profile_idc == 83 ||
// Scalable Constrained High profile (SVC)
350 sps->
profile_idc == 86 ||
// Scalable High Intra profile (SVC)
351 sps->
profile_idc == 118 ||
// Stereo High profile (MVC)
352 sps->
profile_idc == 128 ||
// Multiview High profile (MVC)
353 sps->
profile_idc == 138 ||
// Multiview Depth High profile (MVCD)
359 goto fail;
364 goto fail;
365 }
366 }
371 "Different chroma and luma bit depth");
372 goto fail;
373 }
378 goto fail;
379 }
383 } else {
387 }
388
393 "log2_max_frame_num_minus4 out of range (0-12): %d\n",
394 log2_max_frame_num_minus4);
395 goto fail;
396 }
398
400
401 if (sps->
poc_type == 0) {
// FIXME #define
403 if (t>12) {
405 goto fail;
406 }
408 }
else if (sps->
poc_type == 1) {
// FIXME #define
413
418 goto fail;
419 }
420
425 goto fail;
426 }
427
435 goto fail;
436 }
440 if ((
unsigned)sps->
mb_width >= INT_MAX / 16 ||
441 (
unsigned)sps->
mb_height >= INT_MAX / 16 ||
445 goto fail;
446 }
447
451 else
453
455
456 #ifndef ALLOW_INTERLACE
459 "MBAFF support not included; enable it at compile-time.\n");
460 #endif
469
472 "values are l:%d r:%d t:%d b:%d\n",
473 crop_left, crop_right, crop_top, crop_bottom);
474
479 } else {
483 int step_x = 1 << hsub;
485
490 "Reducing left cropping to %d "
491 "chroma samples to preserve alignment.\n",
492 crop_left);
493 }
494
495 if (crop_left > (unsigned)INT_MAX / 4 / step_x ||
496 crop_right > (unsigned)INT_MAX / 4 / step_x ||
497 crop_top > (unsigned)INT_MAX / 4 / step_y ||
498 crop_bottom> (unsigned)INT_MAX / 4 / step_y ||
499 (crop_left + crop_right ) * step_x >= width ||
500 (crop_top + crop_bottom) * step_y >= height
501 ) {
502 av_log(h->
avctx,
AV_LOG_ERROR,
"crop values invalid %d %d %d %d / %d %d\n", crop_left, crop_right, crop_top, crop_bottom, width, height);
503 goto fail;
504 }
505
510 }
511 } else {
517 }
518
522 if (ret < 0)
523 goto fail;
524 }
525
528
530 static const char csp[4][5] = { "Gray", "420", "422", "444" };
532 "sps:%u profile:%d/%d poc:%d ref:%d %dx%d %s %s crop:%u/%u/%u/%u %s %s %"PRId32"/%"PRId32" b%d reo:%d\n",
547 );
548 }
550
553
554 return 0;
555
556 fail:
558 return -1;
559 }
560
562 {
563 int i;
564 const int max_qp = 51 + 6 * (depth - 8);
565 for (i = 0; i < max_qp + 1; i++)
568 }
569
571 {
574
575 if ((profile_idc == 66 || profile_idc == 77 ||
578 "Current profile doesn't provide more RBSP data in PPS, skipping\n");
579 return 0;
580 }
581
582 return 1;
583 }
584
586 {
590 int qp_bd_offset;
591 int bits_left;
592
596 }
597
599 if (!pps)
605 goto fail;
606 }
611 "Invalid luma bit depth=%d\n",
613 goto fail;
616 "Unimplemented luma bit depth=%d\n",
618 goto fail;
619 }
620
628 case 0:
629 #if 0
630 | for (i = 0; i <= num_slice_groups_minus1; i++) | | |
631 | run_length[i] |1 |ue(
v) |
632 #endif
633 break;
634 case 2:
635 #if 0
636 | for (i = 0; i < num_slice_groups_minus1; i++) { | | |
637 | top_left_mb[i] |1 |ue(
v) |
638 | bottom_right_mb[i] |1 |ue(
v) |
639 | } | | |
640 #endif
641 break;
642 case 3:
643 case 4:
644 case 5:
645 #if 0
646 | slice_group_change_direction_flag |1 |
u(1) |
647 | slice_group_change_rate_minus1 |1 |ue(
v) |
648 #endif
649 break;
650 case 6:
651 #if 0
652 | slice_group_id_cnt_minus1 |1 |ue(
v) |
653 | for (i = 0; i <= slice_group_id_cnt_minus1; i++)| | |
654 | slice_group_id[i] |1 |
u(
v) |
655 #endif
656 break;
657 }
658 }
663 goto fail;
664 }
665
674
676 // contents of sps/pps can change even if id doesn't, so reinit
682
688 // second_chroma_qp_index_offset
690 } else {
692 }
693
698
701 "pps:%u sps:%u %s slice_groups:%d ref:%u/%u %s qp:%d/%d/%d/%d %s %s %s %s\n",
703 pps->
cabac ?
"CABAC" :
"CAVLC",
712 }
713
716 return 0;
717
718 fail:
720 return -1;
721 }