Coverage Report

Created: 2026-01-16 07:48

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ffmpeg/libavcodec/h264dec.c
Line
Count
Source
1
/*
2
 * H.26L/H.264/AVC/JVT/14496-10/... decoder
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 / MPEG-4 part10 codec.
25
 * @author Michael Niedermayer <michaelni@gmx.at>
26
 */
27
28
#define UNCHECKED_BITSTREAM_READER 1
29
30
#include "config_components.h"
31
32
#include "libavutil/attributes.h"
33
#include "libavutil/avassert.h"
34
#include "libavutil/emms.h"
35
#include "libavutil/imgutils.h"
36
#include "libavutil/mem.h"
37
#include "libavutil/opt.h"
38
#include "libavutil/thread.h"
39
#include "libavutil/video_enc_params.h"
40
41
#include "codec_internal.h"
42
#include "internal.h"
43
#include "error_resilience.h"
44
#include "avcodec.h"
45
#include "h264.h"
46
#include "h264dec.h"
47
#include "h2645_parse.h"
48
#include "h264data.h"
49
#include "h264_ps.h"
50
#include "golomb.h"
51
#include "hwaccel_internal.h"
52
#include "hwconfig.h"
53
#include "mpegutils.h"
54
#include "profiles.h"
55
#include "rectangle.h"
56
#include "libavutil/refstruct.h"
57
#include "thread.h"
58
#include "threadframe.h"
59
60
const uint16_t ff_h264_mb_sizes[4] = { 256, 384, 512, 768 };
61
62
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
63
0
{
64
0
    H264Context *h = avctx->priv_data;
65
0
    return h && h->ps.sps ? h->ps.sps->num_reorder_frames : 0;
66
0
}
67
68
static void h264_er_decode_mb(void *opaque, int ref, int mv_dir, int mv_type,
69
                              int (*mv)[2][4][2],
70
                              int mb_x, int mb_y, int mb_intra, int mb_skipped)
71
48.4M
{
72
48.4M
    const H264Context *h = opaque;
73
48.4M
    H264SliceContext *sl = &h->slice_ctx[0];
74
75
48.4M
    sl->mb_x = mb_x;
76
48.4M
    sl->mb_y = mb_y;
77
48.4M
    sl->mb_xy = mb_x + mb_y * h->mb_stride;
78
48.4M
    memset(sl->non_zero_count_cache, 0, sizeof(sl->non_zero_count_cache));
79
48.4M
    av_assert1(ref >= 0);
80
    /* FIXME: It is possible albeit uncommon that slice references
81
     * differ between slices. We take the easy approach and ignore
82
     * it for now. If this turns out to have any relevance in
83
     * practice then correct remapping should be added. */
84
48.4M
    if (ref >= sl->ref_count[0])
85
4.86M
        ref = 0;
86
48.4M
    if (!sl->ref_list[0][ref].data[0]) {
87
0
        av_log(h->avctx, AV_LOG_DEBUG, "Reference not available for error concealing\n");
88
0
        ref = 0;
89
0
    }
90
48.4M
    if ((sl->ref_list[0][ref].reference&3) != 3) {
91
218k
        av_log(h->avctx, AV_LOG_DEBUG, "Reference invalid\n");
92
218k
        return;
93
218k
    }
94
48.1M
    fill_rectangle(&h->cur_pic.ref_index[0][4 * sl->mb_xy],
95
48.1M
                   2, 2, 2, ref, 1);
96
48.1M
    fill_rectangle(&sl->ref_cache[0][scan8[0]], 4, 4, 8, ref, 1);
97
48.1M
    fill_rectangle(sl->mv_cache[0][scan8[0]], 4, 4, 8,
98
48.1M
                   pack16to32((*mv)[0][0][0], (*mv)[0][0][1]), 4);
99
48.1M
    sl->mb_mbaff =
100
48.1M
    sl->mb_field_decoding_flag = 0;
101
48.1M
    ff_h264_hl_decode_mb(h, &h->slice_ctx[0]);
102
48.1M
}
103
104
void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl,
105
                             int y, int height)
106
2.12M
{
107
2.12M
    AVCodecContext *avctx = h->avctx;
108
2.12M
    const AVFrame   *src  = h->cur_pic.f;
109
2.12M
    const AVPixFmtDescriptor *desc;
110
2.12M
    int offset[AV_NUM_DATA_POINTERS];
111
2.12M
    int vshift;
112
2.12M
    const int field_pic = h->picture_structure != PICT_FRAME;
113
114
2.12M
    if (!avctx->draw_horiz_band)
115
2.12M
        return;
116
117
0
    if (field_pic && h->first_field && !(avctx->slice_flags & SLICE_FLAG_ALLOW_FIELD))
118
0
        return;
119
120
0
    if (field_pic) {
121
0
        height <<= 1;
122
0
        y      <<= 1;
123
0
    }
124
125
0
    height = FFMIN(height, avctx->height - y);
126
127
0
    desc   = av_pix_fmt_desc_get(avctx->pix_fmt);
128
0
    vshift = desc->log2_chroma_h;
129
130
0
    offset[0] = y * src->linesize[0];
131
0
    offset[1] =
132
0
    offset[2] = (y >> vshift) * src->linesize[1];
133
0
    for (int i = 3; i < AV_NUM_DATA_POINTERS; i++)
134
0
        offset[i] = 0;
135
136
0
    emms_c();
137
138
0
    avctx->draw_horiz_band(avctx, src, offset,
139
0
                           y, h->picture_structure, height);
140
0
}
141
142
void ff_h264_free_tables(H264Context *h)
143
914k
{
144
914k
    int i;
145
146
914k
    av_freep(&h->intra4x4_pred_mode);
147
914k
    av_freep(&h->chroma_pred_mode_table);
148
914k
    av_freep(&h->cbp_table);
149
914k
    av_freep(&h->mvd_table[0]);
150
914k
    av_freep(&h->mvd_table[1]);
151
914k
    av_freep(&h->direct_table);
152
914k
    av_freep(&h->non_zero_count);
153
914k
    av_freep(&h->slice_table_base);
154
914k
    h->slice_table = NULL;
155
914k
    av_freep(&h->list_counts);
156
157
914k
    av_freep(&h->mb2b_xy);
158
914k
    av_freep(&h->mb2br_xy);
159
160
914k
    av_refstruct_pool_uninit(&h->qscale_table_pool);
161
914k
    av_refstruct_pool_uninit(&h->mb_type_pool);
162
914k
    av_refstruct_pool_uninit(&h->motion_val_pool);
163
914k
    av_refstruct_pool_uninit(&h->ref_index_pool);
164
165
914k
#if CONFIG_ERROR_RESILIENCE
166
914k
    av_freep(&h->er.mb_index2xy);
167
914k
    av_freep(&h->er.error_status_table);
168
914k
    av_freep(&h->er.er_temp_buffer);
169
914k
    av_freep(&h->dc_val_base);
170
914k
#endif
171
172
1.82M
    for (i = 0; i < h->nb_slice_ctx; i++) {
173
914k
        H264SliceContext *sl = &h->slice_ctx[i];
174
175
914k
        av_freep(&sl->bipred_scratchpad);
176
914k
        av_freep(&sl->edge_emu_buffer);
177
914k
        av_freep(&sl->top_borders[0]);
178
914k
        av_freep(&sl->top_borders[1]);
179
180
914k
        sl->bipred_scratchpad_allocated = 0;
181
914k
        sl->edge_emu_buffer_allocated   = 0;
182
914k
        sl->top_borders_allocated[0]    = 0;
183
914k
        sl->top_borders_allocated[1]    = 0;
184
914k
    }
185
914k
}
186
187
int ff_h264_alloc_tables(H264Context *h)
188
390k
{
189
390k
    ERContext *const er = &h->er;
190
390k
    const int big_mb_num = h->mb_stride * (h->mb_height + 1);
191
390k
    const int row_mb_num = 2*h->mb_stride*FFMAX(h->nb_slice_ctx, 1);
192
390k
    const int st_size = big_mb_num + h->mb_stride;
193
390k
    int x, y;
194
195
390k
    if (!FF_ALLOCZ_TYPED_ARRAY(h->intra4x4_pred_mode,     row_mb_num * 8)  ||
196
390k
        !FF_ALLOCZ_TYPED_ARRAY(h->non_zero_count,         big_mb_num)      ||
197
390k
        !FF_ALLOCZ_TYPED_ARRAY(h->slice_table_base,       st_size)         ||
198
390k
        !FF_ALLOCZ_TYPED_ARRAY(h->cbp_table,              big_mb_num)      ||
199
390k
        !FF_ALLOCZ_TYPED_ARRAY(h->chroma_pred_mode_table, big_mb_num)      ||
200
390k
        !FF_ALLOCZ_TYPED_ARRAY(h->mvd_table[0],           row_mb_num * 8)  ||
201
390k
        !FF_ALLOCZ_TYPED_ARRAY(h->mvd_table[1],           row_mb_num * 8)  ||
202
390k
        !FF_ALLOCZ_TYPED_ARRAY(h->direct_table,           big_mb_num * 4)  ||
203
390k
        !FF_ALLOCZ_TYPED_ARRAY(h->list_counts,            big_mb_num)      ||
204
390k
        !FF_ALLOCZ_TYPED_ARRAY(h->mb2b_xy,                big_mb_num)      ||
205
390k
        !FF_ALLOCZ_TYPED_ARRAY(h->mb2br_xy,               big_mb_num))
206
0
        return AVERROR(ENOMEM);
207
390k
    h->slice_ctx[0].intra4x4_pred_mode = h->intra4x4_pred_mode;
208
390k
    h->slice_ctx[0].mvd_table[0] = h->mvd_table[0];
209
390k
    h->slice_ctx[0].mvd_table[1] = h->mvd_table[1];
210
390k
    memset(h->slice_table_base, -1,
211
390k
           st_size * sizeof(*h->slice_table_base));
212
390k
    h->slice_table = h->slice_table_base + h->mb_stride * 2 + 1;
213
11.3M
    for (y = 0; y < h->mb_height; y++)
214
117M
        for (x = 0; x < h->mb_width; x++) {
215
106M
            const int mb_xy = x + y * h->mb_stride;
216
106M
            const int b_xy  = 4 * x + 4 * y * h->b_stride;
217
218
106M
            h->mb2b_xy[mb_xy]  = b_xy;
219
106M
            h->mb2br_xy[mb_xy] = 8 * (FMO ? mb_xy : (mb_xy % (2 * h->mb_stride)));
220
106M
        }
221
222
390k
    if (CONFIG_ERROR_RESILIENCE) {
223
390k
        const int er_size = h->mb_height * h->mb_stride * (4*sizeof(int) + 1);
224
390k
        int mb_array_size = h->mb_height * h->mb_stride;
225
390k
        int y_size  = (2 * h->mb_width + 1) * (2 * h->mb_height + 1);
226
390k
        int yc_size = y_size + 2 * big_mb_num;
227
228
        /* init ER */
229
390k
        er->avctx          = h->avctx;
230
390k
        er->decode_mb      = h264_er_decode_mb;
231
390k
        er->opaque         = h;
232
390k
        er->quarter_sample = 1;
233
234
390k
        er->mb_num      = h->mb_num;
235
390k
        er->mb_width    = h->mb_width;
236
390k
        er->mb_height   = h->mb_height;
237
390k
        er->mb_stride   = h->mb_stride;
238
390k
        er->b8_stride   = h->mb_width * 2 + 1;
239
240
        // error resilience code looks cleaner with this
241
390k
        if (!FF_ALLOCZ_TYPED_ARRAY(er->mb_index2xy,        h->mb_num + 1) ||
242
390k
            !FF_ALLOCZ_TYPED_ARRAY(er->error_status_table, mb_array_size) ||
243
390k
            !FF_ALLOCZ_TYPED_ARRAY(er->er_temp_buffer,     er_size)       ||
244
390k
            !FF_ALLOCZ_TYPED_ARRAY(h->dc_val_base,         yc_size))
245
0
            return AVERROR(ENOMEM); // ff_h264_free_tables will clean up for us
246
247
11.3M
        for (y = 0; y < h->mb_height; y++)
248
117M
            for (x = 0; x < h->mb_width; x++)
249
106M
                er->mb_index2xy[x + y * h->mb_width] = x + y * h->mb_stride;
250
251
390k
        er->mb_index2xy[h->mb_height * h->mb_width] = (h->mb_height - 1) *
252
390k
                                                      h->mb_stride + h->mb_width;
253
390k
        er->dc_val[0] = h->dc_val_base + h->mb_width * 2 + 2;
254
390k
        er->dc_val[1] = h->dc_val_base + y_size + h->mb_stride + 1;
255
390k
        er->dc_val[2] = er->dc_val[1] + big_mb_num;
256
714M
        for (int i = 0; i < yc_size; i++)
257
713M
            h->dc_val_base[i] = 1024;
258
390k
    }
259
260
390k
    return 0;
261
390k
}
262
263
/**
264
 * Init slice context
265
 */
266
void ff_h264_slice_context_init(H264Context *h, H264SliceContext *sl)
267
390k
{
268
390k
    sl->ref_cache[0][scan8[5]  + 1] =
269
390k
    sl->ref_cache[0][scan8[7]  + 1] =
270
390k
    sl->ref_cache[0][scan8[13] + 1] =
271
390k
    sl->ref_cache[1][scan8[5]  + 1] =
272
390k
    sl->ref_cache[1][scan8[7]  + 1] =
273
390k
    sl->ref_cache[1][scan8[13] + 1] = PART_NOT_AVAILABLE;
274
275
390k
    sl->er = &h->er;
276
390k
}
277
278
static int h264_init_pic(H264Picture *pic)
279
1.13M
{
280
1.13M
    pic->f = av_frame_alloc();
281
1.13M
    if (!pic->f)
282
0
        return AVERROR(ENOMEM);
283
284
1.13M
    pic->f_grain = av_frame_alloc();
285
1.13M
    if (!pic->f_grain)
286
0
        return AVERROR(ENOMEM);
287
288
1.13M
    return 0;
289
1.13M
}
290
291
static int h264_init_context(AVCodecContext *avctx, H264Context *h)
292
29.7k
{
293
29.7k
    int i, ret;
294
295
29.7k
    h->avctx                 = avctx;
296
29.7k
    h->cur_chroma_format_idc = -1;
297
298
29.7k
    h->width_from_caller     = avctx->width;
299
29.7k
    h->height_from_caller    = avctx->height;
300
301
29.7k
    h->workaround_bugs       = avctx->workaround_bugs;
302
29.7k
    h->flags                 = avctx->flags;
303
29.7k
    h->poc.prev_poc_msb      = 1 << 16;
304
29.7k
    h->recovery_frame        = -1;
305
29.7k
    h->frame_recovered       = 0;
306
29.7k
    h->poc.prev_frame_num    = -1;
307
29.7k
    h->sei.common.frame_packing.arrangement_cancel_flag = -1;
308
29.7k
    h->sei.common.unregistered.x264_build = -1;
309
310
29.7k
    h->next_outputed_poc = INT_MIN;
311
506k
    for (i = 0; i < FF_ARRAY_ELEMS(h->last_pocs); i++)
312
476k
        h->last_pocs[i] = INT_MIN;
313
314
29.7k
    ff_h264_sei_uninit(&h->sei);
315
316
29.7k
    if (avctx->active_thread_type & FF_THREAD_FRAME) {
317
0
        h->decode_error_flags_pool = av_refstruct_pool_alloc(sizeof(atomic_int), 0);
318
0
        if (!h->decode_error_flags_pool)
319
0
            return AVERROR(ENOMEM);
320
0
    }
321
322
29.7k
    h->nb_slice_ctx = (avctx->active_thread_type & FF_THREAD_SLICE) ? avctx->thread_count : 1;
323
29.7k
    h->slice_ctx = av_calloc(h->nb_slice_ctx, sizeof(*h->slice_ctx));
324
29.7k
    if (!h->slice_ctx) {
325
0
        h->nb_slice_ctx = 0;
326
0
        return AVERROR(ENOMEM);
327
0
    }
328
329
1.10M
    for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
330
1.07M
        if ((ret = h264_init_pic(&h->DPB[i])) < 0)
331
0
            return ret;
332
1.07M
    }
333
334
29.7k
    if ((ret = h264_init_pic(&h->cur_pic)) < 0)
335
0
        return ret;
336
337
29.7k
    if ((ret = h264_init_pic(&h->last_pic_for_ec)) < 0)
338
0
        return ret;
339
340
59.5k
    for (i = 0; i < h->nb_slice_ctx; i++)
341
29.7k
        h->slice_ctx[i].h264 = h;
342
343
29.7k
    return 0;
344
29.7k
}
345
346
static void h264_free_pic(H264Context *h, H264Picture *pic)
347
1.13M
{
348
1.13M
    ff_h264_unref_picture(pic);
349
1.13M
    av_frame_free(&pic->f);
350
1.13M
    av_frame_free(&pic->f_grain);
351
1.13M
}
352
353
static av_cold int h264_decode_end(AVCodecContext *avctx)
354
29.7k
{
355
29.7k
    H264Context *h = avctx->priv_data;
356
29.7k
    int i;
357
358
29.7k
    ff_h264_remove_all_refs(h);
359
29.7k
    ff_h264_free_tables(h);
360
361
1.10M
    for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
362
1.07M
        h264_free_pic(h, &h->DPB[i]);
363
1.07M
    }
364
29.7k
    memset(h->delayed_pic, 0, sizeof(h->delayed_pic));
365
366
29.7k
    h->cur_pic_ptr = NULL;
367
368
29.7k
    av_refstruct_pool_uninit(&h->decode_error_flags_pool);
369
370
29.7k
    av_freep(&h->slice_ctx);
371
29.7k
    h->nb_slice_ctx = 0;
372
373
29.7k
    ff_h264_sei_uninit(&h->sei);
374
29.7k
    ff_h264_ps_uninit(&h->ps);
375
376
29.7k
    ff_h2645_packet_uninit(&h->pkt);
377
378
29.7k
    h264_free_pic(h, &h->cur_pic);
379
29.7k
    h264_free_pic(h, &h->last_pic_for_ec);
380
381
29.7k
    return 0;
382
29.7k
}
383
384
static AVOnce h264_vlc_init = AV_ONCE_INIT;
385
386
static av_cold int h264_decode_init(AVCodecContext *avctx)
387
29.7k
{
388
29.7k
    H264Context *h = avctx->priv_data;
389
29.7k
    int ret;
390
391
29.7k
    ret = h264_init_context(avctx, h);
392
29.7k
    if (ret < 0)
393
0
        return ret;
394
395
29.7k
    ret = ff_thread_once(&h264_vlc_init, ff_h264_decode_init_vlc);
396
29.7k
    if (ret != 0) {
397
0
        av_log(avctx, AV_LOG_ERROR, "pthread_once has failed.");
398
0
        return AVERROR_UNKNOWN;
399
0
    }
400
401
29.7k
    if (!avctx->internal->is_copy) {
402
29.7k
        if (avctx->extradata_size > 0 && avctx->extradata) {
403
474
            ret = ff_h264_decode_extradata(avctx->extradata, avctx->extradata_size,
404
474
                                           &h->ps, &h->is_avc, &h->nal_length_size,
405
474
                                           avctx->err_recognition, avctx);
406
474
           if (ret < 0) {
407
173
               int explode = avctx->err_recognition & AV_EF_EXPLODE;
408
173
               av_log(avctx, explode ? AV_LOG_ERROR: AV_LOG_WARNING,
409
173
                      "Error decoding the extradata\n");
410
173
               if (explode) {
411
13
                   return ret;
412
13
               }
413
160
               ret = 0;
414
160
           }
415
474
        }
416
29.7k
    }
417
418
29.7k
    if (h->ps.sps && h->ps.sps->bitstream_restriction_flag &&
419
0
        h->avctx->has_b_frames < h->ps.sps->num_reorder_frames) {
420
0
        h->avctx->has_b_frames = h->ps.sps->num_reorder_frames;
421
0
    }
422
423
29.7k
    ff_h264_flush_change(h);
424
425
29.7k
    if (h->enable_er < 0 && (avctx->active_thread_type & FF_THREAD_SLICE))
426
0
        h->enable_er = 0;
427
428
29.7k
    if (h->enable_er && (avctx->active_thread_type & FF_THREAD_SLICE)) {
429
0
        av_log(avctx, AV_LOG_WARNING,
430
0
               "Error resilience with slice threads is enabled. It is unsafe and unsupported and may crash. "
431
0
               "Use it at your own risk\n");
432
0
    }
433
434
29.7k
    return 0;
435
29.7k
}
436
437
/**
438
 * instantaneous decoder refresh.
439
 */
440
static void idr(H264Context *h)
441
1.22M
{
442
1.22M
    int i;
443
1.22M
    ff_h264_remove_all_refs(h);
444
1.22M
    h->poc.prev_frame_num        =
445
1.22M
    h->poc.prev_frame_num_offset = 0;
446
1.22M
    h->poc.prev_poc_msb          = 1<<16;
447
1.22M
    h->poc.prev_poc_lsb          = -1;
448
20.9M
    for (i = 0; i < FF_ARRAY_ELEMS(h->last_pocs); i++)
449
19.6M
        h->last_pocs[i] = INT_MIN;
450
1.22M
}
451
452
/* forget old pics after a seek */
453
void ff_h264_flush_change(H264Context *h)
454
561k
{
455
561k
    int i, j;
456
457
561k
    h->next_outputed_poc = INT_MIN;
458
561k
    h->prev_interlaced_frame = 1;
459
561k
    idr(h);
460
461
561k
    h->poc.prev_frame_num = -1;
462
561k
    if (h->cur_pic_ptr) {
463
311k
        h->cur_pic_ptr->reference = 0;
464
329k
        for (j=i=0; h->delayed_pic[i]; i++)
465
17.0k
            if (h->delayed_pic[i] != h->cur_pic_ptr)
466
12.2k
                h->delayed_pic[j++] = h->delayed_pic[i];
467
311k
        h->delayed_pic[j] = NULL;
468
311k
    }
469
561k
    ff_h264_unref_picture(&h->last_pic_for_ec);
470
471
561k
    h->first_field = 0;
472
561k
    h->recovery_frame = -1;
473
561k
    h->frame_recovered = 0;
474
561k
    h->current_slice = 0;
475
561k
    h->mmco_reset = 1;
476
561k
}
477
478
static av_cold void h264_decode_flush(AVCodecContext *avctx)
479
493k
{
480
493k
    H264Context *h = avctx->priv_data;
481
493k
    int i;
482
483
493k
    memset(h->delayed_pic, 0, sizeof(h->delayed_pic));
484
485
493k
    ff_h264_flush_change(h);
486
493k
    ff_h264_sei_uninit(&h->sei);
487
488
18.2M
    for (i = 0; i < H264_MAX_PICTURE_COUNT; i++)
489
17.7M
        ff_h264_unref_picture(&h->DPB[i]);
490
493k
    h->cur_pic_ptr = NULL;
491
493k
    ff_h264_unref_picture(&h->cur_pic);
492
493
493k
    h->mb_y = 0;
494
493k
    h->non_gray = 0;
495
496
493k
    ff_h264_free_tables(h);
497
493k
    h->context_initialized = 0;
498
499
493k
    if (FF_HW_HAS_CB(avctx, flush))
500
0
        FF_HW_SIMPLE_CALL(avctx, flush);
501
493k
}
502
503
static int get_last_needed_nal(H264Context *h)
504
0
{
505
0
    int nals_needed = 0;
506
0
    int slice_type = 0;
507
0
    int picture_intra_only = 1;
508
0
    int first_slice = 0;
509
0
    int i, ret;
510
511
0
    for (i = 0; i < h->pkt.nb_nals; i++) {
512
0
        H2645NAL *nal = &h->pkt.nals[i];
513
0
        GetBitContext gb;
514
515
        /* packets can sometimes contain multiple PPS/SPS,
516
         * e.g. two PAFF field pictures in one packet, or a demuxer
517
         * which splits NALs strangely if so, when frame threading we
518
         * can't start the next thread until we've read all of them */
519
0
        switch (nal->type) {
520
0
        case H264_NAL_SPS:
521
0
        case H264_NAL_PPS:
522
0
            nals_needed = i;
523
0
            break;
524
0
        case H264_NAL_DPA:
525
0
        case H264_NAL_IDR_SLICE:
526
0
        case H264_NAL_SLICE:
527
0
            ret = init_get_bits8(&gb, nal->data + 1, nal->size - 1);
528
0
            if (ret < 0) {
529
0
                av_log(h->avctx, AV_LOG_ERROR, "Invalid zero-sized VCL NAL unit\n");
530
0
                if (h->avctx->err_recognition & AV_EF_EXPLODE)
531
0
                    return ret;
532
533
0
                break;
534
0
            }
535
0
            if (!get_ue_golomb_long(&gb) ||  // first_mb_in_slice
536
0
                !first_slice ||
537
0
                first_slice != nal->type)
538
0
                nals_needed = i;
539
0
            slice_type = get_ue_golomb_31(&gb);
540
0
            if (slice_type > 9)
541
0
                slice_type = 0;
542
0
            if (slice_type > 4)
543
0
                slice_type -= 5;
544
545
0
            slice_type = ff_h264_golomb_to_pict_type[slice_type];
546
0
            picture_intra_only &= (slice_type & 3) == AV_PICTURE_TYPE_I;
547
0
            if (!first_slice)
548
0
                first_slice = nal->type;
549
0
        }
550
0
    }
551
552
0
    h->picture_intra_only = picture_intra_only;
553
554
0
    return nals_needed;
555
0
}
556
557
static void debug_green_metadata(const H264SEIGreenMetaData *gm, void *logctx)
558
0
{
559
0
    av_log(logctx, AV_LOG_DEBUG, "Green Metadata Info SEI message\n");
560
0
    av_log(logctx, AV_LOG_DEBUG, "  green_metadata_type: %d\n", gm->green_metadata_type);
561
562
0
    if (gm->green_metadata_type == 0) {
563
0
        av_log(logctx, AV_LOG_DEBUG, "  green_metadata_period_type: %d\n", gm->period_type);
564
565
0
        if (gm->period_type == 2)
566
0
            av_log(logctx, AV_LOG_DEBUG, "  green_metadata_num_seconds: %d\n", gm->num_seconds);
567
0
        else if (gm->period_type == 3)
568
0
            av_log(logctx, AV_LOG_DEBUG, "  green_metadata_num_pictures: %d\n", gm->num_pictures);
569
570
0
        av_log(logctx, AV_LOG_DEBUG, "  SEI GREEN Complexity Metrics: %f %f %f %f\n",
571
0
               (float)gm->percent_non_zero_macroblocks/255,
572
0
               (float)gm->percent_intra_coded_macroblocks/255,
573
0
               (float)gm->percent_six_tap_filtering/255,
574
0
               (float)gm->percent_alpha_point_deblocking_instance/255);
575
576
0
    } else if (gm->green_metadata_type == 1) {
577
0
        av_log(logctx, AV_LOG_DEBUG, "  xsd_metric_type: %d\n", gm->xsd_metric_type);
578
579
0
        if (gm->xsd_metric_type == 0)
580
0
            av_log(logctx, AV_LOG_DEBUG, "  xsd_metric_value: %f\n",
581
0
                   (float)gm->xsd_metric_value/100);
582
0
    }
583
0
}
584
585
static int decode_nal_units(H264Context *h, AVBufferRef *buf_ref,
586
                            const uint8_t *buf, int buf_size)
587
2.43M
{
588
2.43M
    AVCodecContext *const avctx = h->avctx;
589
2.43M
    int nals_needed = 0; ///< number of NALs that need decoding before the next frame thread starts
590
2.43M
    int idr_cleared=0;
591
2.43M
    int i, ret = 0;
592
593
2.43M
    h->has_slice = 0;
594
2.43M
    h->nal_unit_type= 0;
595
596
2.43M
    if (!(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS)) {
597
2.43M
        h->current_slice = 0;
598
2.43M
        if (!h->first_field) {
599
2.10M
            h->cur_pic_ptr = NULL;
600
2.10M
            ff_h264_sei_uninit(&h->sei);
601
2.10M
        }
602
2.43M
    }
603
604
2.43M
    if (h->nal_length_size == 4) {
605
12.6k
        if (buf_size > 8 && AV_RB32(buf) == 1 && AV_RB32(buf+5) > (unsigned)buf_size) {
606
10
            h->is_avc = 0;
607
12.6k
        }else if(buf_size > 3 && AV_RB32(buf) > 1 && AV_RB32(buf) <= (unsigned)buf_size)
608
49
            h->is_avc = 1;
609
12.6k
    }
610
611
2.43M
    ret = ff_h2645_packet_split(&h->pkt, buf, buf_size, avctx, h->nal_length_size,
612
2.43M
                                avctx->codec_id, !!h->is_avc * H2645_FLAG_IS_NALFF);
613
2.43M
    if (ret < 0) {
614
40.1k
        av_log(avctx, AV_LOG_ERROR,
615
40.1k
               "Error splitting the input into NAL units.\n");
616
40.1k
        return ret;
617
40.1k
    }
618
619
2.39M
    if (avctx->active_thread_type & FF_THREAD_FRAME)
620
0
        nals_needed = get_last_needed_nal(h);
621
2.39M
    if (nals_needed < 0)
622
0
        return nals_needed;
623
624
8.15M
    for (i = 0; i < h->pkt.nb_nals; i++) {
625
5.89M
        H2645NAL *nal = &h->pkt.nals[i];
626
5.89M
        int max_slice_ctx, err;
627
628
5.89M
        if (avctx->skip_frame >= AVDISCARD_NONREF &&
629
344k
            nal->ref_idc == 0 && nal->type != H264_NAL_SEI)
630
57.6k
            continue;
631
632
        // FIXME these should stop being context-global variables
633
5.83M
        h->nal_ref_idc   = nal->ref_idc;
634
5.83M
        h->nal_unit_type = nal->type;
635
636
5.83M
        err = 0;
637
5.83M
        switch (nal->type) {
638
1.10M
        case H264_NAL_IDR_SLICE:
639
1.10M
            if ((nal->data[1] & 0xFC) == 0x98) {
640
2.38k
                av_log(h->avctx, AV_LOG_ERROR, "Invalid inter IDR frame\n");
641
2.38k
                h->next_outputed_poc = INT_MIN;
642
2.38k
                ret = -1;
643
2.38k
                goto end;
644
2.38k
            }
645
1.10M
            if(!idr_cleared) {
646
667k
                idr(h); // FIXME ensure we don't lose some frames if there is reordering
647
667k
            }
648
1.10M
            idr_cleared = 1;
649
1.10M
            h->has_recovery_point = 1;
650
3.23M
        case H264_NAL_SLICE:
651
3.23M
            h->has_slice = 1;
652
653
3.23M
            if ((err = ff_h264_queue_decode_slice(h, nal))) {
654
1.28M
                H264SliceContext *sl = h->slice_ctx + h->nb_slice_ctx_queued;
655
1.28M
                sl->ref_count[0] = sl->ref_count[1] = 0;
656
1.28M
                break;
657
1.28M
            }
658
659
1.94M
            if (h->current_slice == 1) {
660
1.85M
                if (avctx->active_thread_type & FF_THREAD_FRAME &&
661
0
                    i >= nals_needed && !h->setup_finished && h->cur_pic_ptr) {
662
0
                    ff_thread_finish_setup(avctx);
663
0
                    h->setup_finished = 1;
664
0
                }
665
666
1.85M
                if (h->avctx->hwaccel &&
667
0
                    (ret = FF_HW_CALL(h->avctx, start_frame, buf_ref,
668
0
                                      buf, buf_size)) < 0)
669
0
                    goto end;
670
1.85M
            }
671
672
1.94M
            max_slice_ctx = avctx->hwaccel ? 1 : h->nb_slice_ctx;
673
1.94M
            if (h->nb_slice_ctx_queued == max_slice_ctx) {
674
1.88M
                if (h->avctx->hwaccel) {
675
0
                    ret = FF_HW_CALL(avctx, decode_slice, nal->raw_data, nal->raw_size);
676
0
                    h->nb_slice_ctx_queued = 0;
677
0
                } else
678
1.88M
                    ret = ff_h264_execute_decode_slices(h);
679
1.88M
                if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
680
49.3k
                    goto end;
681
1.88M
            }
682
1.89M
            break;
683
1.89M
        case H264_NAL_DPA:
684
92.1k
        case H264_NAL_DPB:
685
111k
        case H264_NAL_DPC:
686
111k
            avpriv_request_sample(avctx, "data partitioning");
687
111k
            break;
688
231k
        case H264_NAL_SEI:
689
231k
            if (h->setup_finished) {
690
0
                avpriv_request_sample(avctx, "Late SEI");
691
0
                break;
692
0
            }
693
231k
            ret = ff_h264_sei_decode(&h->sei, &nal->gb, &h->ps, avctx);
694
231k
            h->has_recovery_point = h->has_recovery_point || h->sei.recovery_point.recovery_frame_cnt != -1;
695
231k
            if (avctx->debug & FF_DEBUG_GREEN_MD)
696
0
                debug_green_metadata(&h->sei.green_metadata, h->avctx);
697
231k
            if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
698
3.57k
                goto end;
699
227k
            break;
700
430k
        case H264_NAL_SPS: {
701
430k
            GetBitContext tmp_gb = nal->gb;
702
430k
            if (FF_HW_HAS_CB(avctx, decode_params)) {
703
0
                ret = FF_HW_CALL(avctx, decode_params,
704
0
                                 nal->type, nal->raw_data, nal->raw_size);
705
0
                if (ret < 0)
706
0
                    goto end;
707
0
            }
708
430k
            if (ff_h264_decode_seq_parameter_set(&tmp_gb, avctx, &h->ps, 0) >= 0)
709
148k
                break;
710
281k
            av_log(h->avctx, AV_LOG_DEBUG,
711
281k
                   "SPS decoding failure, trying again with the complete NAL\n");
712
281k
            init_get_bits8(&tmp_gb, nal->raw_data + 1, nal->raw_size - 1);
713
281k
            if (ff_h264_decode_seq_parameter_set(&tmp_gb, avctx, &h->ps, 0) >= 0)
714
23.9k
                break;
715
257k
            ff_h264_decode_seq_parameter_set(&nal->gb, avctx, &h->ps, 1);
716
257k
            break;
717
281k
        }
718
532k
        case H264_NAL_PPS:
719
532k
            if (FF_HW_HAS_CB(avctx, decode_params)) {
720
0
                ret = FF_HW_CALL(avctx, decode_params,
721
0
                                 nal->type, nal->raw_data, nal->raw_size);
722
0
                if (ret < 0)
723
0
                    goto end;
724
0
            }
725
532k
            ret = ff_h264_decode_picture_parameter_set(&nal->gb, avctx, &h->ps,
726
532k
                                                       nal->size_bits);
727
532k
            if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
728
3.80k
                goto end;
729
528k
            break;
730
528k
        case H264_NAL_AUD:
731
33.9k
        case H264_NAL_END_SEQUENCE:
732
73.8k
        case H264_NAL_END_STREAM:
733
81.3k
        case H264_NAL_FILLER_DATA:
734
720k
        case H264_NAL_SPS_EXT:
735
722k
        case H264_NAL_AUXILIARY_SLICE:
736
722k
            break;
737
572k
        default:
738
572k
            av_log(avctx, AV_LOG_DEBUG, "Unknown NAL code: %d (%d bits)\n",
739
572k
                   nal->type, nal->size_bits);
740
5.83M
        }
741
742
5.77M
        if (err < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE)) {
743
74.0k
            av_log(h->avctx, AV_LOG_ERROR, "decode_slice_header error\n");
744
74.0k
            ret = err;
745
74.0k
            goto end;
746
74.0k
        }
747
5.77M
    }
748
749
2.26M
    ret = ff_h264_execute_decode_slices(h);
750
2.26M
    if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
751
0
        goto end;
752
753
    // set decode_error_flags to allow users to detect concealed decoding errors
754
2.26M
    if ((ret < 0 || h->er.error_occurred) && h->cur_pic_ptr) {
755
1.33M
        if (h->cur_pic_ptr->decode_error_flags) {
756
            /* Frame-threading in use */
757
0
            atomic_int *decode_error = h->cur_pic_ptr->decode_error_flags;
758
            /* Using atomics here is not supposed to provide synchronisation;
759
             * they are merely used to allow to set decode_error from both
760
             * decoding threads in case of coded slices. */
761
0
            atomic_fetch_or_explicit(decode_error, FF_DECODE_ERROR_DECODE_SLICES,
762
0
                                     memory_order_relaxed);
763
0
        } else
764
1.33M
            h->cur_pic_ptr->f->decode_error_flags |= FF_DECODE_ERROR_DECODE_SLICES;
765
1.33M
    }
766
767
2.26M
    ret = 0;
768
2.39M
end:
769
770
2.39M
#if CONFIG_ERROR_RESILIENCE
771
    /*
772
     * FIXME: Error handling code does not seem to support interlaced
773
     * when slices span multiple rows
774
     * The ff_er_add_slice calls don't work right for bottom
775
     * fields; they cause massive erroneous error concealing
776
     * Error marking covers both fields (top and bottom).
777
     * This causes a mismatched s->error_count
778
     * and a bad error table. Further, the error count goes to
779
     * INT_MAX when called for bottom field, because mb_y is
780
     * past end by one (callers fault) and resync_mb_y != 0
781
     * causes problems for the first MB line, too.
782
     */
783
2.39M
    if (!FIELD_PICTURE(h) && h->current_slice && h->enable_er) {
784
785
1.18M
        H264SliceContext *sl = h->slice_ctx;
786
1.18M
        int use_last_pic = h->last_pic_for_ec.f->buf[0] && !sl->ref_count[0];
787
1.18M
        int decode_error_flags = 0;
788
789
1.18M
        ff_h264_set_erpic(&h->er.cur_pic, h->cur_pic_ptr);
790
791
1.18M
        if (use_last_pic) {
792
163k
            ff_h264_set_erpic(&h->er.last_pic, &h->last_pic_for_ec);
793
163k
            sl->ref_list[0][0].parent = &h->last_pic_for_ec;
794
163k
            memcpy(sl->ref_list[0][0].data, h->last_pic_for_ec.f->data, sizeof(sl->ref_list[0][0].data));
795
163k
            memcpy(sl->ref_list[0][0].linesize, h->last_pic_for_ec.f->linesize, sizeof(sl->ref_list[0][0].linesize));
796
163k
            sl->ref_list[0][0].reference = h->last_pic_for_ec.reference;
797
1.01M
        } else if (sl->ref_count[0]) {
798
767k
            ff_h264_set_erpic(&h->er.last_pic, sl->ref_list[0][0].parent);
799
767k
        } else
800
249k
            ff_h264_set_erpic(&h->er.last_pic, NULL);
801
802
1.18M
        if (sl->ref_count[1])
803
767k
            ff_h264_set_erpic(&h->er.next_pic, sl->ref_list[1][0].parent);
804
805
1.18M
        ff_er_frame_end(&h->er, &decode_error_flags);
806
1.18M
        if (decode_error_flags) {
807
117k
            if (h->cur_pic_ptr->decode_error_flags) {
808
0
                atomic_int *decode_error = h->cur_pic_ptr->decode_error_flags;
809
0
                atomic_fetch_or_explicit(decode_error, decode_error_flags,
810
0
                                         memory_order_relaxed);
811
0
            } else
812
117k
                h->cur_pic_ptr->f->decode_error_flags |= decode_error_flags;
813
117k
        }
814
1.18M
        if (use_last_pic)
815
163k
            memset(&sl->ref_list[0][0], 0, sizeof(sl->ref_list[0][0]));
816
1.18M
    }
817
2.39M
#endif /* CONFIG_ERROR_RESILIENCE */
818
    /* clean up */
819
2.39M
    if (h->cur_pic_ptr && !h->droppable && h->has_slice) {
820
837k
        ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX,
821
837k
                                  h->picture_structure == PICT_BOTTOM_FIELD);
822
837k
    }
823
824
2.39M
    return (ret < 0) ? ret : buf_size;
825
2.26M
}
826
827
static int h264_export_enc_params(AVFrame *f, const H264Picture *p)
828
274k
{
829
274k
    AVVideoEncParams *par;
830
274k
    unsigned int nb_mb = p->mb_height * p->mb_width;
831
274k
    unsigned int x, y;
832
833
274k
    par = av_video_enc_params_create_side_data(f, AV_VIDEO_ENC_PARAMS_H264, nb_mb);
834
274k
    if (!par)
835
0
        return AVERROR(ENOMEM);
836
837
274k
    par->qp = p->pps->init_qp;
838
839
274k
    par->delta_qp[1][0] = p->pps->chroma_qp_index_offset[0];
840
274k
    par->delta_qp[1][1] = p->pps->chroma_qp_index_offset[0];
841
274k
    par->delta_qp[2][0] = p->pps->chroma_qp_index_offset[1];
842
274k
    par->delta_qp[2][1] = p->pps->chroma_qp_index_offset[1];
843
844
4.93M
    for (y = 0; y < p->mb_height; y++)
845
49.7M
        for (x = 0; x < p->mb_width; x++) {
846
45.0M
            const unsigned int block_idx = y * p->mb_width + x;
847
45.0M
            const unsigned int     mb_xy = y * p->mb_stride + x;
848
45.0M
            AVVideoBlockParams *b = av_video_enc_params_block(par, block_idx);
849
850
45.0M
            b->src_x = x * 16;
851
45.0M
            b->src_y = y * 16;
852
45.0M
            b->w     = 16;
853
45.0M
            b->h     = 16;
854
855
45.0M
            b->delta_qp = p->qscale_table[mb_xy] - par->qp;
856
45.0M
        }
857
858
274k
    return 0;
859
274k
}
860
861
static int output_frame(H264Context *h, AVFrame *dst, H264Picture *srcp)
862
693k
{
863
693k
    int ret;
864
865
693k
    ret = av_frame_ref(dst, srcp->needs_fg ? srcp->f_grain : srcp->f);
866
693k
    if (ret < 0)
867
0
        return ret;
868
869
693k
    if (srcp->needs_fg && (ret = av_frame_copy_props(dst, srcp->f)) < 0)
870
0
        return ret;
871
872
693k
    if (srcp->decode_error_flags) {
873
0
        atomic_int *decode_error = srcp->decode_error_flags;
874
        /* The following is not supposed to provide synchronisation at all:
875
         * given that srcp has already finished decoding, decode_error
876
         * has already been set to its final value. */
877
0
        dst->decode_error_flags |= atomic_load_explicit(decode_error, memory_order_relaxed);
878
0
    }
879
880
693k
    av_dict_set(&dst->metadata, "stereo_mode", ff_h264_sei_stereo_mode(&h->sei.common.frame_packing), 0);
881
882
693k
    if (srcp->sei_recovery_frame_cnt == 0)
883
3.30k
        dst->flags |= AV_FRAME_FLAG_KEY;
884
885
693k
    if (h->avctx->export_side_data & AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS) {
886
274k
        ret = h264_export_enc_params(dst, srcp);
887
274k
        if (ret < 0)
888
0
            goto fail;
889
274k
    }
890
891
693k
    if (!(h->avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN))
892
693k
        av_frame_remove_side_data(dst, AV_FRAME_DATA_FILM_GRAIN_PARAMS);
893
894
693k
    return 0;
895
0
fail:
896
0
    av_frame_unref(dst);
897
0
    return ret;
898
693k
}
899
900
static int is_avcc_extradata(const uint8_t *buf, int buf_size)
901
2.39k
{
902
2.39k
    int cnt= buf[5]&0x1f;
903
2.39k
    const uint8_t *p= buf+6;
904
2.39k
    if (!cnt)
905
10
        return 0;
906
2.54k
    while(cnt--){
907
2.54k
        int nalsize= AV_RB16(p) + 2;
908
2.54k
        if(nalsize > buf_size - (p-buf) || (p[2] & 0x9F) != 7)
909
2.38k
            return 0;
910
160
        p += nalsize;
911
160
    }
912
0
    cnt = *(p++);
913
0
    if(!cnt)
914
0
        return 0;
915
0
    while(cnt--){
916
0
        int nalsize= AV_RB16(p) + 2;
917
0
        if(nalsize > buf_size - (p-buf) || (p[2] & 0x9F) != 8)
918
0
            return 0;
919
0
        p += nalsize;
920
0
    }
921
0
    return 1;
922
0
}
923
924
static int finalize_frame(H264Context *h, AVFrame *dst, H264Picture *out, int *got_frame)
925
701k
{
926
701k
    int ret;
927
928
701k
    if (((h->avctx->flags & AV_CODEC_FLAG_OUTPUT_CORRUPT) ||
929
701k
         (h->avctx->flags2 & AV_CODEC_FLAG2_SHOW_ALL) ||
930
701k
         out->recovered)) {
931
932
693k
        if (h->skip_gray > 0 &&
933
0
            h->non_gray && out->gray &&
934
0
            !(h->avctx->flags2 & AV_CODEC_FLAG2_SHOW_ALL)
935
693k
        )
936
0
            return 0;
937
938
693k
        if (!h->avctx->hwaccel &&
939
693k
            (out->field_poc[0] == INT_MAX ||
940
672k
             out->field_poc[1] == INT_MAX)
941
693k
           ) {
942
181k
            int p;
943
181k
            AVFrame *f = out->f;
944
181k
            int field = out->field_poc[0] == INT_MAX;
945
181k
            uint8_t *dst_data[4];
946
181k
            int linesizes[4];
947
181k
            const uint8_t *src_data[4];
948
949
181k
            av_log(h->avctx, AV_LOG_DEBUG, "Duplicating field %d to fill missing\n", field);
950
951
908k
            for (p = 0; p<4; p++) {
952
727k
                dst_data[p] = f->data[p] + (field^1)*f->linesize[p];
953
727k
                src_data[p] = f->data[p] +  field   *f->linesize[p];
954
727k
                linesizes[p] = 2*f->linesize[p];
955
727k
            }
956
957
181k
            av_image_copy(dst_data, linesizes, src_data, linesizes,
958
181k
                          f->format, f->width, f->height>>1);
959
181k
        }
960
961
693k
        ret = output_frame(h, dst, out);
962
693k
        if (ret < 0)
963
0
            return ret;
964
965
693k
        *got_frame = 1;
966
967
693k
        if (CONFIG_MPEGVIDEODEC) {
968
693k
            ff_print_debug_info2(h->avctx, dst,
969
693k
                                 out->mb_type,
970
693k
                                 out->qscale_table,
971
693k
                                 out->motion_val,
972
693k
                                 out->mb_width, out->mb_height, out->mb_stride, 1);
973
693k
        }
974
693k
    }
975
976
701k
    return 0;
977
701k
}
978
979
static int send_next_delayed_frame(H264Context *h, AVFrame *dst_frame,
980
                                   int *got_frame, int buf_index)
981
32.9k
{
982
32.9k
    int ret, i, out_idx;
983
32.9k
    H264Picture *out;
984
985
32.9k
    h->cur_pic_ptr = NULL;
986
32.9k
    h->first_field = 0;
987
988
41.3k
    while (h->delayed_pic[0]) {
989
17.2k
        out = h->delayed_pic[0];
990
17.2k
        out_idx = 0;
991
17.2k
        for (i = 1;
992
29.5k
             h->delayed_pic[i] &&
993
16.6k
             !(h->delayed_pic[i]->f->flags & AV_FRAME_FLAG_KEY) &&
994
12.5k
             !h->delayed_pic[i]->mmco_reset;
995
17.2k
             i++)
996
12.2k
            if (h->delayed_pic[i]->poc < out->poc) {
997
1.50k
                out     = h->delayed_pic[i];
998
1.50k
                out_idx = i;
999
1.50k
            }
1000
1001
66.6k
        for (i = out_idx; h->delayed_pic[i]; i++)
1002
49.3k
            h->delayed_pic[i] = h->delayed_pic[i + 1];
1003
1004
17.2k
        if (out) {
1005
17.2k
            h->frame_recovered |= out->recovered;
1006
17.2k
            out->recovered |= h->frame_recovered & FRAME_RECOVERED_SEI;
1007
1008
17.2k
            out->reference &= ~DELAYED_PIC_REF;
1009
17.2k
            ret = finalize_frame(h, dst_frame, out, got_frame);
1010
17.2k
            if (ret < 0)
1011
0
                return ret;
1012
17.2k
            if (*got_frame)
1013
8.95k
                break;
1014
17.2k
        }
1015
17.2k
    }
1016
1017
32.9k
    return buf_index;
1018
32.9k
}
1019
1020
static int h264_decode_frame(AVCodecContext *avctx, AVFrame *pict,
1021
                             int *got_frame, AVPacket *avpkt)
1022
2.46M
{
1023
2.46M
    const uint8_t *buf = avpkt->data;
1024
2.46M
    int buf_size       = avpkt->size;
1025
2.46M
    H264Context *h     = avctx->priv_data;
1026
2.46M
    int buf_index;
1027
2.46M
    int ret;
1028
1029
2.46M
    h->flags = avctx->flags;
1030
2.46M
    h->setup_finished = 0;
1031
2.46M
    h->nb_slice_ctx_queued = 0;
1032
1033
2.46M
    ff_h264_unref_picture(&h->last_pic_for_ec);
1034
1035
    /* end of stream, output what is still in the buffers */
1036
2.46M
    if (buf_size == 0)
1037
28.9k
        return send_next_delayed_frame(h, pict, got_frame, 0);
1038
1039
2.43M
    if (av_packet_get_side_data(avpkt, AV_PKT_DATA_NEW_EXTRADATA, NULL)) {
1040
0
        size_t side_size;
1041
0
        uint8_t *side = av_packet_get_side_data(avpkt, AV_PKT_DATA_NEW_EXTRADATA, &side_size);
1042
0
        ff_h264_decode_extradata(side, side_size,
1043
0
                                 &h->ps, &h->is_avc, &h->nal_length_size,
1044
0
                                 avctx->err_recognition, avctx);
1045
0
    }
1046
2.43M
    if (h->is_avc && buf_size >= 9 && buf[0]==1 && buf[2]==0 && (buf[4]&0xFC)==0xFC) {
1047
2.39k
        if (is_avcc_extradata(buf, buf_size))
1048
0
            return ff_h264_decode_extradata(buf, buf_size,
1049
0
                                            &h->ps, &h->is_avc, &h->nal_length_size,
1050
0
                                            avctx->err_recognition, avctx);
1051
2.39k
    }
1052
1053
2.43M
    buf_index = decode_nal_units(h, avpkt->buf, buf, buf_size);
1054
2.43M
    if (buf_index < 0)
1055
173k
        return AVERROR_INVALIDDATA;
1056
1057
2.26M
    if (!h->cur_pic_ptr && h->nal_unit_type == H264_NAL_END_SEQUENCE) {
1058
4.07k
        av_assert0(buf_index <= buf_size);
1059
4.07k
        return send_next_delayed_frame(h, pict, got_frame, buf_index);
1060
4.07k
    }
1061
1062
2.25M
    if (!(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS) && (!h->cur_pic_ptr || !h->has_slice)) {
1063
667k
        if (avctx->skip_frame >= AVDISCARD_NONREF ||
1064
592k
            buf_size >= 4 && !memcmp("Q264", buf, 4))
1065
75.2k
            return buf_size;
1066
592k
        av_log(avctx, AV_LOG_ERROR, "no frame!\n");
1067
592k
        return AVERROR_INVALIDDATA;
1068
667k
    }
1069
1070
1.59M
    if (!(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS) ||
1071
1.59M
        (h->mb_y >= h->mb_height && h->mb_height)) {
1072
1.59M
        if ((ret = ff_h264_field_end(h, &h->slice_ctx[0], 0)) < 0)
1073
1.75k
            return ret;
1074
1075
        /* Wait for second field. */
1076
1.59M
        if (h->next_output_pic) {
1077
684k
            ret = finalize_frame(h, pict, h->next_output_pic, got_frame);
1078
684k
            if (ret < 0)
1079
0
                return ret;
1080
684k
        }
1081
1.59M
    }
1082
1083
1.59M
    av_assert0(pict->buf[0] || !*got_frame);
1084
1085
1.59M
    ff_h264_unref_picture(&h->last_pic_for_ec);
1086
1087
1.59M
    return buf_size;
1088
1.59M
}
1089
1090
#define OFFSET(x) offsetof(H264Context, x)
1091
#define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
1092
#define VDX VD | AV_OPT_FLAG_EXPORT
1093
static const AVOption h264_options[] = {
1094
    { "is_avc", "is avc", OFFSET(is_avc), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, VDX },
1095
    { "nal_length_size", "nal_length_size", OFFSET(nal_length_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 4, VDX },
1096
    { "enable_er", "Enable error resilience on damaged frames (unsafe)", OFFSET(enable_er), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VD },
1097
    { "x264_build", "Assume this x264 version if no x264 version found in any SEI", OFFSET(x264_build), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VD },
1098
    { "skip_gray", "Do not return gray gap frames", OFFSET(skip_gray), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, VD },
1099
    { "noref_gray", "Avoid using gray gap frames as references", OFFSET(noref_gray), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, VD },
1100
    { NULL },
1101
};
1102
1103
static const AVClass h264_class = {
1104
    .class_name = "H264 Decoder",
1105
    .item_name  = av_default_item_name,
1106
    .option     = h264_options,
1107
    .version    = LIBAVUTIL_VERSION_INT,
1108
};
1109
1110
const FFCodec ff_h264_decoder = {
1111
    .p.name                = "h264",
1112
    CODEC_LONG_NAME("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
1113
    .p.type                = AVMEDIA_TYPE_VIDEO,
1114
    .p.id                  = AV_CODEC_ID_H264,
1115
    .priv_data_size        = sizeof(H264Context),
1116
    .init                  = h264_decode_init,
1117
    .close                 = h264_decode_end,
1118
    FF_CODEC_DECODE_CB(h264_decode_frame),
1119
    .p.capabilities        = AV_CODEC_CAP_DR1 |
1120
                             AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS |
1121
                             AV_CODEC_CAP_FRAME_THREADS,
1122
    .hw_configs            = (const AVCodecHWConfigInternal *const []) {
1123
#if CONFIG_H264_DXVA2_HWACCEL
1124
                               HWACCEL_DXVA2(h264),
1125
#endif
1126
#if CONFIG_H264_D3D11VA_HWACCEL
1127
                               HWACCEL_D3D11VA(h264),
1128
#endif
1129
#if CONFIG_H264_D3D11VA2_HWACCEL
1130
                               HWACCEL_D3D11VA2(h264),
1131
#endif
1132
#if CONFIG_H264_D3D12VA_HWACCEL
1133
                               HWACCEL_D3D12VA(h264),
1134
#endif
1135
#if CONFIG_H264_NVDEC_HWACCEL
1136
                               HWACCEL_NVDEC(h264),
1137
#endif
1138
#if CONFIG_H264_VAAPI_HWACCEL
1139
                               HWACCEL_VAAPI(h264),
1140
#endif
1141
#if CONFIG_H264_VDPAU_HWACCEL
1142
                               HWACCEL_VDPAU(h264),
1143
#endif
1144
#if CONFIG_H264_VIDEOTOOLBOX_HWACCEL
1145
                               HWACCEL_VIDEOTOOLBOX(h264),
1146
#endif
1147
#if CONFIG_H264_VULKAN_HWACCEL
1148
                               HWACCEL_VULKAN(h264),
1149
#endif
1150
                               NULL
1151
                           },
1152
    .caps_internal         = FF_CODEC_CAP_EXPORTS_CROPPING |
1153
                             FF_CODEC_CAP_INIT_CLEANUP,
1154
    .flush                 = h264_decode_flush,
1155
    UPDATE_THREAD_CONTEXT(ff_h264_update_thread_context),
1156
    UPDATE_THREAD_CONTEXT_FOR_USER(ff_h264_update_thread_context_for_user),
1157
    .p.profiles            = NULL_IF_CONFIG_SMALL(ff_h264_profiles),
1158
    .p.priv_class          = &h264_class,
1159
};