h264_ps.c 30.4 KB
Newer Older
1 2 3 4
/*
 * H.26L/H.264/AVC/JVT/14496-10/... parameter set decoding
 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
 *
5
 * This file is part of Libav.
6
 *
7
 * Libav is free software; you can redistribute it and/or
8 9 10 11
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
12
 * Libav is distributed in the hope that it will be useful,
13 14 15 16 17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with Libav; if not, write to the Free Software
19 20 21 22
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

/**
23
 * @file
24 25 26 27
 * H.264 / AVC / MPEG4 part10 parameter set decoding.
 * @author Michael Niedermayer <michaelni@gmx.at>
 */

28 29
#include <inttypes.h>

30
#include "libavutil/imgutils.h"
31
#include "internal.h"
32
#include "mathops.h"
33 34
#include "avcodec.h"
#include "h264.h"
35
#include "h264data.h"
36 37
#include "golomb.h"

38 39 40
#define MAX_LOG2_MAX_FRAME_NUM    (12 + 4)
#define MIN_LOG2_MAX_FRAME_NUM    4

41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
static const AVRational pixel_aspect[17] = {
    {   0,  1 },
    {   1,  1 },
    {  12, 11 },
    {  10, 11 },
    {  16, 11 },
    {  40, 33 },
    {  24, 11 },
    {  20, 11 },
    {  32, 11 },
    {  80, 33 },
    {  18, 11 },
    {  15, 11 },
    {  64, 33 },
    { 160, 99 },
    {   4,  3 },
    {   3,  2 },
    {   2,  1 },
59 60
};

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
static const uint8_t default_scaling4[2][16] = {
    {  6, 13, 20, 28, 13, 20, 28, 32,
      20, 28, 32, 37, 28, 32, 37, 42 },
    { 10, 14, 20, 24, 14, 20, 24, 27,
      20, 24, 27, 30, 24, 27, 30, 34 }
};

static const uint8_t default_scaling8[2][64] = {
    {  6, 10, 13, 16, 18, 23, 25, 27,
      10, 11, 16, 18, 23, 25, 27, 29,
      13, 16, 18, 23, 25, 27, 29, 31,
      16, 18, 23, 25, 27, 29, 31, 33,
      18, 23, 25, 27, 29, 31, 33, 36,
      23, 25, 27, 29, 31, 33, 36, 38,
      25, 27, 29, 31, 33, 36, 38, 40,
      27, 29, 31, 33, 36, 38, 40, 42 },
    {  9, 13, 15, 17, 19, 21, 22, 24,
      13, 13, 17, 19, 21, 22, 24, 25,
      15, 17, 19, 21, 22, 24, 25, 27,
      17, 19, 21, 22, 24, 25, 27, 28,
      19, 21, 22, 24, 25, 27, 28, 30,
      21, 22, 24, 25, 27, 28, 30, 32,
      22, 24, 25, 27, 28, 30, 32, 33,
      24, 25, 27, 28, 30, 32, 33, 35 }
};

87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
/* maximum number of MBs in the DPB for a given level */
static const int level_max_dpb_mbs[][2] = {
    { 10, 396       },
    { 11, 900       },
    { 12, 2376      },
    { 13, 2376      },
    { 20, 2376      },
    { 21, 4752      },
    { 22, 8100      },
    { 30, 8100      },
    { 31, 18000     },
    { 32, 20480     },
    { 40, 32768     },
    { 41, 32768     },
    { 42, 34816     },
    { 50, 110400    },
    { 51, 184320    },
    { 52, 184320    },
};

107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
static void remove_pps(H264ParamSets *s, int id)
{
    if (s->pps_list[id] && s->pps == (const PPS*)s->pps_list[id]->data)
        s->pps = NULL;
    av_buffer_unref(&s->pps_list[id]);
}

static void remove_sps(H264ParamSets *s, int id)
{
    int i;
    if (s->sps_list[id]) {
        if (s->sps == (SPS*)s->sps_list[id]->data)
            s->sps = NULL;

        /* drop all PPS that depend on this SPS */
        for (i = 0; i < FF_ARRAY_ELEMS(s->pps_list); i++)
            if (s->pps_list[i] && ((PPS*)s->pps_list[i]->data)->sps_id == id)
                remove_pps(s, i);
    }
    av_buffer_unref(&s->sps_list[id]);
}

static inline int decode_hrd_parameters(GetBitContext *gb, AVCodecContext *avctx,
                                        SPS *sps)
131
{
132
    int cpb_count, i;
133
    cpb_count = get_ue_golomb_31(gb) + 1;
134

135
    if (cpb_count > 32U) {
136
        av_log(avctx, AV_LOG_ERROR, "cpb_count %d invalid\n", cpb_count);
137
        return AVERROR_INVALIDDATA;
138 139
    }

140 141
    get_bits(gb, 4); /* bit_rate_scale */
    get_bits(gb, 4); /* cpb_size_scale */
142
    for (i = 0; i < cpb_count; i++) {
143 144 145 146 147 148 149 150
        get_ue_golomb_long(gb); /* bit_rate_value_minus1 */
        get_ue_golomb_long(gb); /* cpb_size_value_minus1 */
        get_bits1(gb);          /* cbr_flag */
    }
    sps->initial_cpb_removal_delay_length = get_bits(gb, 5) + 1;
    sps->cpb_removal_delay_length         = get_bits(gb, 5) + 1;
    sps->dpb_output_delay_length          = get_bits(gb, 5) + 1;
    sps->time_offset_length               = get_bits(gb, 5);
151
    sps->cpb_cnt                          = cpb_count;
152 153 154
    return 0;
}

155 156
static inline int decode_vui_parameters(GetBitContext *gb, AVCodecContext *avctx,
                                        SPS *sps)
157
{
158 159 160
    int aspect_ratio_info_present_flag;
    unsigned int aspect_ratio_idc;

161
    aspect_ratio_info_present_flag = get_bits1(gb);
162

163
    if (aspect_ratio_info_present_flag) {
164
        aspect_ratio_idc = get_bits(gb, 8);
165
        if (aspect_ratio_idc == EXTENDED_SAR) {
166 167
            sps->sar.num = get_bits(gb, 16);
            sps->sar.den = get_bits(gb, 16);
168 169 170
        } else if (aspect_ratio_idc < FF_ARRAY_ELEMS(pixel_aspect)) {
            sps->sar = pixel_aspect[aspect_ratio_idc];
        } else {
171
            av_log(avctx, AV_LOG_ERROR, "illegal aspect ratio\n");
172
            return AVERROR_INVALIDDATA;
173
        }
174 175 176
    } else {
        sps->sar.num =
        sps->sar.den = 0;
177 178
    }

179 180
    if (get_bits1(gb))      /* overscan_info_present_flag */
        get_bits1(gb);      /* overscan_appropriate_flag */
181

182
    sps->video_signal_type_present_flag = get_bits1(gb);
183
    if (sps->video_signal_type_present_flag) {
184 185
        get_bits(gb, 3);                 /* video_format */
        sps->full_range = get_bits1(gb); /* video_full_range_flag */
186

187
        sps->colour_description_present_flag = get_bits1(gb);
188
        if (sps->colour_description_present_flag) {
189 190 191
            sps->color_primaries = get_bits(gb, 8); /* colour_primaries */
            sps->color_trc       = get_bits(gb, 8); /* transfer_characteristics */
            sps->colorspace      = get_bits(gb, 8); /* matrix_coefficients */
192
            if (sps->color_primaries >= AVCOL_PRI_NB)
193
                sps->color_primaries = AVCOL_PRI_UNSPECIFIED;
194
            if (sps->color_trc >= AVCOL_TRC_NB)
195
                sps->color_trc = AVCOL_TRC_UNSPECIFIED;
196
            if (sps->colorspace >= AVCOL_SPC_NB)
197
                sps->colorspace = AVCOL_SPC_UNSPECIFIED;
198 199 200
        }
    }

201
    /* chroma_location_info_present_flag */
202
    if (get_bits1(gb)) {
203
        /* chroma_sample_location_type_top_field */
204 205
        avctx->chroma_sample_location = get_ue_golomb(gb) + 1;
        get_ue_golomb(gb);  /* chroma_sample_location_type_bottom_field */
206 207
    }

208
    sps->timing_info_present_flag = get_bits1(gb);
209
    if (sps->timing_info_present_flag) {
210 211
        sps->num_units_in_tick = get_bits_long(gb, 32);
        sps->time_scale        = get_bits_long(gb, 32);
212
        if (!sps->num_units_in_tick || !sps->time_scale) {
213
            av_log(avctx, AV_LOG_ERROR,
214
                   "time_scale/num_units_in_tick invalid or unsupported (%"PRIu32"/%"PRIu32")\n",
215
                   sps->time_scale, sps->num_units_in_tick);
216
            return AVERROR_INVALIDDATA;
217
        }
218
        sps->fixed_frame_rate_flag = get_bits1(gb);
219 220
    }

221
    sps->nal_hrd_parameters_present_flag = get_bits1(gb);
222
    if (sps->nal_hrd_parameters_present_flag)
223
        if (decode_hrd_parameters(gb, avctx, sps) < 0)
224
            return AVERROR_INVALIDDATA;
225
    sps->vcl_hrd_parameters_present_flag = get_bits1(gb);
226
    if (sps->vcl_hrd_parameters_present_flag)
227
        if (decode_hrd_parameters(gb, avctx, sps) < 0)
228
            return AVERROR_INVALIDDATA;
229 230
    if (sps->nal_hrd_parameters_present_flag ||
        sps->vcl_hrd_parameters_present_flag)
231 232
        get_bits1(gb);     /* low_delay_hrd_flag */
    sps->pic_struct_present_flag = get_bits1(gb);
233

234
    sps->bitstream_restriction_flag = get_bits1(gb);
235
    if (sps->bitstream_restriction_flag) {
236 237 238 239 240 241 242 243 244
        get_bits1(gb);     /* motion_vectors_over_pic_boundaries_flag */
        get_ue_golomb(gb); /* max_bytes_per_pic_denom */
        get_ue_golomb(gb); /* max_bits_per_mb_denom */
        get_ue_golomb(gb); /* log2_max_mv_length_horizontal */
        get_ue_golomb(gb); /* log2_max_mv_length_vertical */
        sps->num_reorder_frames = get_ue_golomb(gb);
        get_ue_golomb(gb); /*max_dec_frame_buffering*/

        if (get_bits_left(gb) < 0) {
245 246
            sps->num_reorder_frames         = 0;
            sps->bitstream_restriction_flag = 0;
247 248
        }

249 250
        if (sps->num_reorder_frames > 16U
            /* max_dec_frame_buffering || max_dec_frame_buffering > 16 */) {
251
            av_log(avctx, AV_LOG_ERROR,
252 253 254
                   "Clipping illegal num_reorder_frames %d\n",
                   sps->num_reorder_frames);
            sps->num_reorder_frames = 16;
255
            return AVERROR_INVALIDDATA;
256 257
        }
    }
258 259 260
    if (get_bits_left(gb) < 0) {
        av_log(avctx, AV_LOG_ERROR,
               "Overread VUI by %d bits\n", -get_bits_left(gb));
261 262
        return AVERROR_INVALIDDATA;
    }
263 264 265 266

    return 0;
}

267
static void decode_scaling_list(GetBitContext *gb, uint8_t *factors, int size,
268 269 270
                                const uint8_t *jvt_list,
                                const uint8_t *fallback_list)
{
271
    int i, last = 8, next = 8;
272
    const uint8_t *scan = size == 16 ? ff_zigzag_scan : ff_zigzag_direct;
273
    if (!get_bits1(gb)) /* matrix not written, we use the predicted one */
274
        memcpy(factors, fallback_list, size * sizeof(uint8_t));
275
    else
276 277
        for (i = 0; i < size; i++) {
            if (next)
278
                next = (last + get_se_golomb(gb)) & 0xff;
279 280 281 282 283
            if (!i && !next) { /* matrix not written, we use the preset one */
                memcpy(factors, jvt_list, size * sizeof(uint8_t));
                break;
            }
            last = factors[scan[i]] = next ? next : last;
284 285 286
        }
}

287
static void decode_scaling_matrices(GetBitContext *gb, SPS *sps,
288 289 290 291
                                    PPS *pps, int is_sps,
                                    uint8_t(*scaling_matrix4)[16],
                                    uint8_t(*scaling_matrix8)[64])
{
292 293 294 295 296
    int fallback_sps = !is_sps && sps->scaling_matrix_present;
    const uint8_t *fallback[4] = {
        fallback_sps ? sps->scaling_matrix4[0] : default_scaling4[0],
        fallback_sps ? sps->scaling_matrix4[3] : default_scaling4[1],
        fallback_sps ? sps->scaling_matrix8[0] : default_scaling8[0],
297
        fallback_sps ? sps->scaling_matrix8[3] : default_scaling8[1]
298
    };
299
    if (get_bits1(gb)) {
300
        sps->scaling_matrix_present |= is_sps;
301 302 303 304 305 306
        decode_scaling_list(gb, scaling_matrix4[0], 16, default_scaling4[0], fallback[0]);        // Intra, Y
        decode_scaling_list(gb, scaling_matrix4[1], 16, default_scaling4[0], scaling_matrix4[0]); // Intra, Cr
        decode_scaling_list(gb, scaling_matrix4[2], 16, default_scaling4[0], scaling_matrix4[1]); // Intra, Cb
        decode_scaling_list(gb, scaling_matrix4[3], 16, default_scaling4[1], fallback[1]);        // Inter, Y
        decode_scaling_list(gb, scaling_matrix4[4], 16, default_scaling4[1], scaling_matrix4[3]); // Inter, Cr
        decode_scaling_list(gb, scaling_matrix4[5], 16, default_scaling4[1], scaling_matrix4[4]); // Inter, Cb
307
        if (is_sps || pps->transform_8x8_mode) {
308
            decode_scaling_list(gb, scaling_matrix8[0], 64, default_scaling8[0], fallback[2]); // Intra, Y
309
            if (sps->chroma_format_idc == 3) {
310 311
                decode_scaling_list(gb, scaling_matrix8[1], 64, default_scaling8[0], scaling_matrix8[0]); // Intra, Cr
                decode_scaling_list(gb, scaling_matrix8[2], 64, default_scaling8[0], scaling_matrix8[1]); // Intra, Cb
312
            }
313
            decode_scaling_list(gb, scaling_matrix8[3], 64, default_scaling8[1], fallback[3]); // Inter, Y
314
            if (sps->chroma_format_idc == 3) {
315 316
                decode_scaling_list(gb, scaling_matrix8[4], 64, default_scaling8[1], scaling_matrix8[3]); // Inter, Cr
                decode_scaling_list(gb, scaling_matrix8[5], 64, default_scaling8[1], scaling_matrix8[4]); // Inter, Cb
317
            }
318 319 320 321
        }
    }
}

322 323
int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx,
                                     H264ParamSets *ps)
324
{
325
    AVBufferRef *sps_buf;
326
    int profile_idc, level_idc, constraint_set_flags = 0;
327
    unsigned int sps_id;
328
    int i, log2_max_frame_num_minus4;
329 330
    SPS *sps;

331 332 333 334 335 336 337 338 339 340
    profile_idc           = get_bits(gb, 8);
    constraint_set_flags |= get_bits1(gb) << 0;   // constraint_set0_flag
    constraint_set_flags |= get_bits1(gb) << 1;   // constraint_set1_flag
    constraint_set_flags |= get_bits1(gb) << 2;   // constraint_set2_flag
    constraint_set_flags |= get_bits1(gb) << 3;   // constraint_set3_flag
    constraint_set_flags |= get_bits1(gb) << 4;   // constraint_set4_flag
    constraint_set_flags |= get_bits1(gb) << 5;   // constraint_set5_flag
    skip_bits(gb, 2);                             // reserved_zero_2bits
    level_idc = get_bits(gb, 8);
    sps_id    = get_ue_golomb_31(gb);
341

342
    if (sps_id >= MAX_SPS_COUNT) {
343
        av_log(avctx, AV_LOG_ERROR, "sps_id %u out of range\n", sps_id);
344
        return AVERROR_INVALIDDATA;
345
    }
346 347 348

    sps_buf = av_buffer_allocz(sizeof(*sps));
    if (!sps_buf)
349
        return AVERROR(ENOMEM);
350
    sps = (SPS*)sps_buf->data;
351

352
    sps->sps_id               = sps_id;
353 354
    sps->time_offset_length   = 24;
    sps->profile_idc          = profile_idc;
355
    sps->constraint_set_flags = constraint_set_flags;
356
    sps->level_idc            = level_idc;
357 358 359 360 361

    memset(sps->scaling_matrix4, 16, sizeof(sps->scaling_matrix4));
    memset(sps->scaling_matrix8, 16, sizeof(sps->scaling_matrix8));
    sps->scaling_matrix_present = 0;

362 363 364 365 366 367 368 369 370 371 372
    if (sps->profile_idc == 100 ||  // High profile
        sps->profile_idc == 110 ||  // High10 profile
        sps->profile_idc == 122 ||  // High422 profile
        sps->profile_idc == 244 ||  // High444 Predictive profile
        sps->profile_idc ==  44 ||  // Cavlc444 profile
        sps->profile_idc ==  83 ||  // Scalable Constrained High profile (SVC)
        sps->profile_idc ==  86 ||  // Scalable High Intra profile (SVC)
        sps->profile_idc == 118 ||  // Stereo High profile (MVC)
        sps->profile_idc == 128 ||  // Multiview High profile (MVC)
        sps->profile_idc == 138 ||  // Multiview Depth High profile (MVCD)
        sps->profile_idc == 144) {  // old High444 profile
373
        sps->chroma_format_idc = get_ue_golomb_31(gb);
374
        if (sps->chroma_format_idc > 3) {
375
            avpriv_request_sample(avctx, "chroma_format_idc %u",
376
                                  sps->chroma_format_idc);
377
            goto fail;
378
        } else if (sps->chroma_format_idc == 3) {
379
            sps->residual_color_transform_flag = get_bits1(gb);
380
        }
381 382
        sps->bit_depth_luma   = get_ue_golomb(gb) + 8;
        sps->bit_depth_chroma = get_ue_golomb(gb) + 8;
383
        if (sps->bit_depth_chroma != sps->bit_depth_luma) {
384
            avpriv_request_sample(avctx,
385 386 387
                                  "Different chroma and luma bit depth");
            goto fail;
        }
388 389
        sps->transform_bypass = get_bits1(gb);
        decode_scaling_matrices(gb, sps, NULL, 1,
390 391 392 393 394
                                sps->scaling_matrix4, sps->scaling_matrix8);
    } else {
        sps->chroma_format_idc = 1;
        sps->bit_depth_luma    = 8;
        sps->bit_depth_chroma  = 8;
395 396
    }

397
    log2_max_frame_num_minus4 = get_ue_golomb(gb);
398 399
    if (log2_max_frame_num_minus4 < MIN_LOG2_MAX_FRAME_NUM - 4 ||
        log2_max_frame_num_minus4 > MAX_LOG2_MAX_FRAME_NUM - 4) {
400
        av_log(avctx, AV_LOG_ERROR,
401 402
               "log2_max_frame_num_minus4 out of range (0-12): %d\n",
               log2_max_frame_num_minus4);
403
        goto fail;
404 405 406
    }
    sps->log2_max_frame_num = log2_max_frame_num_minus4 + 4;

407
    sps->poc_type = get_ue_golomb_31(gb);
408

409
    if (sps->poc_type == 0) { // FIXME #define
410
        sps->log2_max_poc_lsb = get_ue_golomb(gb) + 4;
411
    } else if (sps->poc_type == 1) { // FIXME #define
412 413 414 415
        sps->delta_pic_order_always_zero_flag = get_bits1(gb);
        sps->offset_for_non_ref_pic           = get_se_golomb(gb);
        sps->offset_for_top_to_bottom_field   = get_se_golomb(gb);
        sps->poc_cycle_length                 = get_ue_golomb(gb);
416

417 418
        if ((unsigned)sps->poc_cycle_length >=
            FF_ARRAY_ELEMS(sps->offset_for_ref_frame)) {
419
            av_log(avctx, AV_LOG_ERROR,
420
                   "poc_cycle_length overflow %d\n", sps->poc_cycle_length);
421 422 423
            goto fail;
        }

424
        for (i = 0; i < sps->poc_cycle_length; i++)
425
            sps->offset_for_ref_frame[i] = get_se_golomb(gb);
426
    } else if (sps->poc_type != 2) {
427
        av_log(avctx, AV_LOG_ERROR, "illegal POC type %d\n", sps->poc_type);
428 429 430
        goto fail;
    }

431
    sps->ref_frame_count = get_ue_golomb_31(gb);
432
    if (sps->ref_frame_count > H264_MAX_PICTURE_COUNT - 2 ||
433
        sps->ref_frame_count >= 32U) {
434
        av_log(avctx, AV_LOG_ERROR,
435
               "too many reference frames %d\n", sps->ref_frame_count);
436 437
        goto fail;
    }
438 439 440
    sps->gaps_in_frame_num_allowed_flag = get_bits1(gb);
    sps->mb_width                       = get_ue_golomb(gb) + 1;
    sps->mb_height                      = get_ue_golomb(gb) + 1;
441 442 443
    if ((unsigned)sps->mb_width  >= INT_MAX / 16 ||
        (unsigned)sps->mb_height >= INT_MAX / 16 ||
        av_image_check_size(16 * sps->mb_width,
444 445
                            16 * sps->mb_height, 0, avctx)) {
        av_log(avctx, AV_LOG_ERROR, "mb_width/height overflow\n");
446 447 448
        goto fail;
    }

449
    sps->frame_mbs_only_flag = get_bits1(gb);
450
    if (!sps->frame_mbs_only_flag)
451
        sps->mb_aff = get_bits1(gb);
452
    else
453
        sps->mb_aff = 0;
454

455
    sps->direct_8x8_inference_flag = get_bits1(gb);
456
    if (!sps->frame_mbs_only_flag && !sps->direct_8x8_inference_flag) {
457
        av_log(avctx, AV_LOG_ERROR,
458
               "This stream was generated by a broken encoder, invalid 8x8 inference\n");
459 460
        goto fail;
    }
461 462

#ifndef ALLOW_INTERLACE
463
    if (sps->mb_aff)
464
        av_log(avctx, AV_LOG_ERROR,
465
               "MBAFF support not included; enable it at compile-time.\n");
466
#endif
467
    sps->crop = get_bits1(gb);
468
    if (sps->crop) {
469 470 471 472
        unsigned int crop_left   = get_ue_golomb(gb);
        unsigned int crop_right  = get_ue_golomb(gb);
        unsigned int crop_top    = get_ue_golomb(gb);
        unsigned int crop_bottom = get_ue_golomb(gb);
A
Anton Khirnov 已提交
473

474 475
        if (avctx->flags2 & AV_CODEC_FLAG2_IGNORE_CROP) {
            av_log(avctx, AV_LOG_DEBUG, "discarding sps cropping, original "
476
                                           "values are l:%d r:%d t:%d b:%d\n",
477
                   crop_left, crop_right, crop_top, crop_bottom);
478 479 480 481 482

            sps->crop_left   =
            sps->crop_right  =
            sps->crop_top    =
            sps->crop_bottom = 0;
A
Anton Khirnov 已提交
483
        } else {
484 485 486
            int vsub   = (sps->chroma_format_idc == 1) ? 1 : 0;
            int hsub   = (sps->chroma_format_idc == 1 ||
                          sps->chroma_format_idc == 2) ? 1 : 0;
A
Anton Khirnov 已提交
487 488 489 490
            int step_x = 1 << hsub;
            int step_y = (2 - sps->frame_mbs_only_flag) << vsub;

            if (crop_left & (0x1F >> (sps->bit_depth_luma > 8)) &&
491
                !(avctx->flags & AV_CODEC_FLAG_UNALIGNED)) {
A
Anton Khirnov 已提交
492
                crop_left &= ~(0x1F >> (sps->bit_depth_luma > 8));
493
                av_log(avctx, AV_LOG_WARNING,
494
                       "Reducing left cropping to %d "
A
Anton Khirnov 已提交
495 496 497 498
                       "chroma samples to preserve alignment.\n",
                       crop_left);
            }

499 500 501 502 503 504
            if (INT_MAX / step_x             <= crop_left               ||
                INT_MAX / step_x - crop_left <= crop_right              ||
                16 * sps->mb_width <= step_x * (crop_left + crop_right) ||
                INT_MAX / step_y             <= crop_top                ||
                INT_MAX / step_y - crop_top  <= crop_bottom             ||
                16 * sps->mb_height <= step_y * (crop_top + crop_bottom)) {
505 506
                av_log(avctx, AV_LOG_WARNING, "Invalid crop parameters\n");
                if (avctx->err_recognition & AV_EF_EXPLODE)
507 508 509 510
                    goto fail;
                crop_left = crop_right = crop_top = crop_bottom = 0;
            }

A
Anton Khirnov 已提交
511 512 513 514
            sps->crop_left   = crop_left   * step_x;
            sps->crop_right  = crop_right  * step_x;
            sps->crop_top    = crop_top    * step_y;
            sps->crop_bottom = crop_bottom * step_y;
515
        }
516 517 518 519 520 521
    } else {
        sps->crop_left   =
        sps->crop_right  =
        sps->crop_top    =
        sps->crop_bottom =
        sps->crop        = 0;
522 523
    }

524
    sps->vui_parameters_present_flag = get_bits1(gb);
525
    if (sps->vui_parameters_present_flag) {
526 527
        int ret = decode_vui_parameters(gb, avctx, sps);
        if (ret < 0 && avctx->err_recognition & AV_EF_EXPLODE)
528
            goto fail;
529
    }
530

531 532 533 534 535 536 537 538 539 540 541 542 543
    /* if the maximum delay is not stored in the SPS, derive it based on the
     * level */
    if (!sps->bitstream_restriction_flag) {
        sps->num_reorder_frames = MAX_DELAYED_PIC_COUNT - 1;
        for (i = 0; i < FF_ARRAY_ELEMS(level_max_dpb_mbs); i++) {
            if (level_max_dpb_mbs[i][0] == sps->level_idc) {
                sps->num_reorder_frames = FFMIN(level_max_dpb_mbs[i][1] / (sps->mb_width * sps->mb_height),
                                                sps->num_reorder_frames);
                break;
            }
        }
    }

544 545
    if (!sps->sar.den)
        sps->sar.den = 1;
546

547
    if (avctx->debug & FF_DEBUG_PICT_INFO) {
548
        static const char csp[4][5] = { "Gray", "420", "422", "444" };
549
        av_log(avctx, AV_LOG_DEBUG,
550
               "sps:%u profile:%d/%d poc:%d ref:%d %dx%d %s %s crop:%u/%u/%u/%u %s %s %"PRId32"/%"PRId32"\n",
551 552 553 554 555 556 557 558 559
               sps_id, sps->profile_idc, sps->level_idc,
               sps->poc_type,
               sps->ref_frame_count,
               sps->mb_width, sps->mb_height,
               sps->frame_mbs_only_flag ? "FRM" : (sps->mb_aff ? "MB-AFF" : "PIC-AFF"),
               sps->direct_8x8_inference_flag ? "8B8" : "",
               sps->crop_left, sps->crop_right,
               sps->crop_top, sps->crop_bottom,
               sps->vui_parameters_present_flag ? "VUI" : "",
560
               csp[sps->chroma_format_idc],
561
               sps->timing_info_present_flag ? sps->num_units_in_tick : 0,
562
               sps->timing_info_present_flag ? sps->time_scale : 0);
563 564
    }

565 566 567 568 569 570 571 572 573 574
    /* check if this is a repeat of an already parsed SPS, then keep the
     * original one.
     * otherwise drop all PPSes that depend on it */
    if (ps->sps_list[sps_id] &&
        !memcmp(ps->sps_list[sps_id]->data, sps_buf->data, sps_buf->size)) {
        av_buffer_unref(&sps_buf);
    } else {
        remove_sps(ps, sps_id);
        ps->sps_list[sps_id] = sps_buf;
    }
575

576
    return 0;
577

578
fail:
579
    av_buffer_unref(&sps_buf);
580
    return AVERROR_INVALIDDATA;
581 582
}

583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652
static void init_dequant8_coeff_table(PPS *pps, const SPS *sps)
{
    int i, j, q, x;
    const int max_qp = 51 + 6 * (sps->bit_depth_luma - 8);

    for (i = 0; i < 6; i++) {
        pps->dequant8_coeff[i] = pps->dequant8_buffer[i];
        for (j = 0; j < i; j++)
            if (!memcmp(pps->scaling_matrix8[j], pps->scaling_matrix8[i],
                        64 * sizeof(uint8_t))) {
                pps->dequant8_coeff[i] = pps->dequant8_buffer[j];
                break;
            }
        if (j < i)
            continue;

        for (q = 0; q < max_qp + 1; q++) {
            int shift = ff_h264_quant_div6[q];
            int idx   = ff_h264_quant_rem6[q];
            for (x = 0; x < 64; x++)
                pps->dequant8_coeff[i][q][(x >> 3) | ((x & 7) << 3)] =
                    ((uint32_t)ff_h264_dequant8_coeff_init[idx][ff_h264_dequant8_coeff_init_scan[((x >> 1) & 12) | (x & 3)]] *
                     pps->scaling_matrix8[i][x]) << shift;
        }
    }
}

static void init_dequant4_coeff_table(PPS *pps, const SPS *sps)
{
    int i, j, q, x;
    const int max_qp = 51 + 6 * (sps->bit_depth_luma - 8);
    for (i = 0; i < 6; i++) {
        pps->dequant4_coeff[i] = pps->dequant4_buffer[i];
        for (j = 0; j < i; j++)
            if (!memcmp(pps->scaling_matrix4[j], pps->scaling_matrix4[i],
                        16 * sizeof(uint8_t))) {
                pps->dequant4_coeff[i] = pps->dequant4_buffer[j];
                break;
            }
        if (j < i)
            continue;

        for (q = 0; q < max_qp + 1; q++) {
            int shift = ff_h264_quant_div6[q] + 2;
            int idx   = ff_h264_quant_rem6[q];
            for (x = 0; x < 16; x++)
                pps->dequant4_coeff[i][q][(x >> 2) | ((x << 2) & 0xF)] =
                    ((uint32_t)ff_h264_dequant4_coeff_init[idx][(x & 1) + ((x >> 2) & 1)] *
                     pps->scaling_matrix4[i][x]) << shift;
        }
    }
}

static void init_dequant_tables(PPS *pps, const SPS *sps)
{
    int i, x;
    init_dequant4_coeff_table(pps, sps);
    if (pps->transform_8x8_mode)
        init_dequant8_coeff_table(pps, sps);
    if (sps->transform_bypass) {
        for (i = 0; i < 6; i++)
            for (x = 0; x < 16; x++)
                pps->dequant4_coeff[i][0][x] = 1 << 6;
        if (pps->transform_8x8_mode)
            for (i = 0; i < 6; i++)
                for (x = 0; x < 64; x++)
                    pps->dequant8_coeff[i][0][x] = 1 << 6;
    }
}

653
static void build_qp_table(PPS *pps, int t, int index, const int depth)
654 655
{
    int i;
656 657 658 659
    const int max_qp = 51 + 6 * (depth - 8);
    for (i = 0; i < max_qp + 1; i++)
        pps->chroma_qp_table[t][i] =
            ff_h264_chroma_qp[depth - 8][av_clip(i + index, 0, max_qp)];
660 661
}

662 663
int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avctx,
                                         H264ParamSets *ps, int bit_length)
664
{
665 666 667
    AVBufferRef *pps_buf;
    SPS *sps;
    unsigned int pps_id = get_ue_golomb(gb);
668
    PPS *pps;
669
    int qp_bd_offset;
670
    int bits_left;
671
    int ret;
672

673
    if (pps_id >= MAX_PPS_COUNT) {
674
        av_log(avctx, AV_LOG_ERROR, "pps_id %u out of range\n", pps_id);
675
        return AVERROR_INVALIDDATA;
676 677
    }

678 679
    pps_buf = av_buffer_allocz(sizeof(*pps));
    if (!pps_buf)
680
        return AVERROR(ENOMEM);
681 682 683
    pps = (PPS*)pps_buf->data;

    pps->sps_id = get_ue_golomb_31(gb);
684
    if ((unsigned)pps->sps_id >= MAX_SPS_COUNT ||
685 686
        !ps->sps_list[pps->sps_id]) {
        av_log(avctx, AV_LOG_ERROR, "sps_id %u out of range\n", pps->sps_id);
687
        ret = AVERROR_INVALIDDATA;
688 689
        goto fail;
    }
690
    sps = (SPS*)ps->sps_list[pps->sps_id]->data;
691 692

    if (sps->bit_depth_luma > 10) {
693
        av_log(avctx, AV_LOG_ERROR,
694 695
               "Unimplemented luma bit depth=%d (max=10)\n",
               sps->bit_depth_luma);
696 697
        ret = AVERROR_PATCHWELCOME;
        goto fail;
698
    }
699

700 701 702
    pps->cabac             = get_bits1(gb);
    pps->pic_order_present = get_bits1(gb);
    pps->slice_group_count = get_ue_golomb(gb) + 1;
703
    if (pps->slice_group_count > 1) {
704 705
        pps->mb_slice_group_map_type = get_ue_golomb(gb);
        av_log(avctx, AV_LOG_ERROR, "FMO not supported\n");
706
        switch (pps->mb_slice_group_map_type) {
707 708
        case 0:
#if 0
709 710
    |       for (i = 0; i <= num_slice_groups_minus1; i++)  |   |      |
    |           run_length[i]                               |1  |ue(v) |
711 712 713 714
#endif
            break;
        case 2:
#if 0
715 716 717 718
    |       for (i = 0; i < num_slice_groups_minus1; i++) { |   |      |
    |           top_left_mb[i]                              |1  |ue(v) |
    |           bottom_right_mb[i]                          |1  |ue(v) |
    |       }                                               |   |      |
719 720 721 722 723 724
#endif
            break;
        case 3:
        case 4:
        case 5:
#if 0
725 726
    |       slice_group_change_direction_flag               |1  |u(1)  |
    |       slice_group_change_rate_minus1                  |1  |ue(v) |
727 728 729 730
#endif
            break;
        case 6:
#if 0
731 732 733
    |       slice_group_id_cnt_minus1                       |1  |ue(v) |
    |       for (i = 0; i <= slice_group_id_cnt_minus1; i++)|   |      |
    |           slice_group_id[i]                           |1  |u(v)  |
734 735 736 737
#endif
            break;
        }
    }
738 739
    pps->ref_count[0] = get_ue_golomb(gb) + 1;
    pps->ref_count[1] = get_ue_golomb(gb) + 1;
740
    if (pps->ref_count[0] - 1 > 32 - 1 || pps->ref_count[1] - 1 > 32 - 1) {
741
        av_log(avctx, AV_LOG_ERROR, "reference overflow (pps)\n");
742
        ret = AVERROR_INVALIDDATA;
743 744 745
        goto fail;
    }

746 747
    qp_bd_offset = 6 * (sps->bit_depth_luma - 8);

748 749 750 751 752 753 754 755
    pps->weighted_pred                        = get_bits1(gb);
    pps->weighted_bipred_idc                  = get_bits(gb, 2);
    pps->init_qp                              = get_se_golomb(gb) + 26 + qp_bd_offset;
    pps->init_qs                              = get_se_golomb(gb) + 26 + qp_bd_offset;
    pps->chroma_qp_index_offset[0]            = get_se_golomb(gb);
    pps->deblocking_filter_parameters_present = get_bits1(gb);
    pps->constrained_intra_pred               = get_bits1(gb);
    pps->redundant_pic_cnt_present            = get_bits1(gb);
756 757

    pps->transform_8x8_mode = 0;
758
    memcpy(pps->scaling_matrix4, sps->scaling_matrix4,
759
           sizeof(pps->scaling_matrix4));
760
    memcpy(pps->scaling_matrix8, sps->scaling_matrix8,
761
           sizeof(pps->scaling_matrix8));
762

763
    bits_left = bit_length - get_bits_count(gb);
764
    if (bits_left && (bits_left > 8 ||
765 766 767
                      show_bits(gb, bits_left) != 1 << (bits_left - 1))) {
        pps->transform_8x8_mode = get_bits1(gb);
        decode_scaling_matrices(gb, sps, pps, 0,
768 769
                                pps->scaling_matrix4, pps->scaling_matrix8);
        // second_chroma_qp_index_offset
770
        pps->chroma_qp_index_offset[1] = get_se_golomb(gb);
771
    } else {
772
        pps->chroma_qp_index_offset[1] = pps->chroma_qp_index_offset[0];
773 774
    }

775
    build_qp_table(pps, 0, pps->chroma_qp_index_offset[0],
776
                   sps->bit_depth_luma);
777
    build_qp_table(pps, 1, pps->chroma_qp_index_offset[1],
778
                   sps->bit_depth_luma);
779 780 781

    init_dequant_tables(pps, sps);

782 783
    if (pps->chroma_qp_index_offset[0] != pps->chroma_qp_index_offset[1])
        pps->chroma_qp_diff = 1;
784

785 786
    if (avctx->debug & FF_DEBUG_PICT_INFO) {
        av_log(avctx, AV_LOG_DEBUG,
787
               "pps:%u sps:%u %s slice_groups:%d ref:%u/%u %s qp:%d/%d/%d/%d %s %s %s %s\n",
788 789 790 791 792 793 794 795 796
               pps_id, pps->sps_id,
               pps->cabac ? "CABAC" : "CAVLC",
               pps->slice_group_count,
               pps->ref_count[0], pps->ref_count[1],
               pps->weighted_pred ? "weighted" : "",
               pps->init_qp, pps->init_qs, pps->chroma_qp_index_offset[0], pps->chroma_qp_index_offset[1],
               pps->deblocking_filter_parameters_present ? "LPAR" : "",
               pps->constrained_intra_pred ? "CONSTR" : "",
               pps->redundant_pic_cnt_present ? "REDU" : "",
797
               pps->transform_8x8_mode ? "8x8DCT" : "");
798 799
    }

800 801 802
    remove_pps(ps, pps_id);
    ps->pps_list[pps_id] = pps_buf;

803
    return 0;
804

805
fail:
806
    av_buffer_unref(&pps_buf);
807
    return ret;
808
}