GCC Code Coverage Report
Directory: ../../../ffmpeg/ Exec Total Coverage
File: src/libavcodec/utils.c Lines: 943 1285 73.4 %
Date: 2021-01-20 23:14:43 Branches: 682 987 69.1 %

Line Branch Exec Source
1
/*
2
 * utils for libavcodec
3
 * Copyright (c) 2001 Fabrice Bellard
4
 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
5
 *
6
 * This file is part of FFmpeg.
7
 *
8
 * FFmpeg is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU Lesser General Public
10
 * License as published by the Free Software Foundation; either
11
 * version 2.1 of the License, or (at your option) any later version.
12
 *
13
 * FFmpeg is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16
 * Lesser General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU Lesser General Public
19
 * License along with FFmpeg; if not, write to the Free Software
20
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
 */
22
23
/**
24
 * @file
25
 * utils.
26
 */
27
28
#include "config.h"
29
#include "libavutil/attributes.h"
30
#include "libavutil/avassert.h"
31
#include "libavutil/avstring.h"
32
#include "libavutil/bprint.h"
33
#include "libavutil/channel_layout.h"
34
#include "libavutil/crc.h"
35
#include "libavutil/frame.h"
36
#include "libavutil/hwcontext.h"
37
#include "libavutil/internal.h"
38
#include "libavutil/mathematics.h"
39
#include "libavutil/mem_internal.h"
40
#include "libavutil/pixdesc.h"
41
#include "libavutil/imgutils.h"
42
#include "libavutil/samplefmt.h"
43
#include "libavutil/dict.h"
44
#include "libavutil/thread.h"
45
#include "avcodec.h"
46
#include "decode.h"
47
#include "hwconfig.h"
48
#include "libavutil/opt.h"
49
#include "mpegvideo.h"
50
#include "thread.h"
51
#include "frame_thread_encoder.h"
52
#include "internal.h"
53
#include "packet_internal.h"
54
#include "put_bits.h"
55
#include "raw.h"
56
#include "bytestream.h"
57
#include "version.h"
58
#include <stdlib.h>
59
#include <stdarg.h>
60
#include <stdatomic.h>
61
#include <limits.h>
62
#include <float.h>
63
#if CONFIG_ICONV
64
# include <iconv.h>
65
#endif
66
67
#include "libavutil/ffversion.h"
68
const char av_codec_ffversion[] = "FFmpeg version " FFMPEG_VERSION;
69
70
static AVMutex codec_mutex = AV_MUTEX_INITIALIZER;
71
72
134089
void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
73
{
74
134089
    uint8_t **p = ptr;
75
134089
    if (min_size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE) {
76
        av_freep(p);
77
        *size = 0;
78
        return;
79
    }
80
134089
    if (!ff_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE, 1))
81
105968
        memset(*p + min_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
82
}
83
84
483
void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size)
85
{
86
483
    uint8_t **p = ptr;
87
483
    if (min_size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE) {
88
        av_freep(p);
89
        *size = 0;
90
        return;
91
    }
92
483
    if (!ff_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE, 1))
93
374
        memset(*p, 0, min_size + AV_INPUT_BUFFER_PADDING_SIZE);
94
}
95
96
6264888
int av_codec_is_encoder(const AVCodec *codec)
97
{
98


6264888
    return codec && (codec->encode_sub || codec->encode2 || codec->receive_packet);
99
}
100
101
11316135
int av_codec_is_decoder(const AVCodec *codec)
102
{
103

11316135
    return codec && (codec->decode || codec->receive_frame);
104
}
105
106
29285
int ff_set_dimensions(AVCodecContext *s, int width, int height)
107
{
108
29285
    int ret = av_image_check_size2(width, height, s->max_pixels, AV_PIX_FMT_NONE, 0, s);
109
110
29285
    if (ret < 0)
111
        width = height = 0;
112
113
29285
    s->coded_width  = width;
114
29285
    s->coded_height = height;
115
29285
    s->width        = AV_CEIL_RSHIFT(width,  s->lowres);
116
29285
    s->height       = AV_CEIL_RSHIFT(height, s->lowres);
117
118
29285
    return ret;
119
}
120
121
2480
int ff_set_sar(AVCodecContext *avctx, AVRational sar)
122
{
123
2480
    int ret = av_image_check_sar(avctx->width, avctx->height, sar);
124
125
2480
    if (ret < 0) {
126
14
        av_log(avctx, AV_LOG_WARNING, "ignoring invalid SAR: %d/%d\n",
127
               sar.num, sar.den);
128
14
        avctx->sample_aspect_ratio = (AVRational){ 0, 1 };
129
14
        return ret;
130
    } else {
131
2466
        avctx->sample_aspect_ratio = sar;
132
    }
133
2466
    return 0;
134
}
135
136
20552
int ff_side_data_update_matrix_encoding(AVFrame *frame,
137
                                        enum AVMatrixEncoding matrix_encoding)
138
{
139
    AVFrameSideData *side_data;
140
    enum AVMatrixEncoding *data;
141
142
20552
    side_data = av_frame_get_side_data(frame, AV_FRAME_DATA_MATRIXENCODING);
143
20552
    if (!side_data)
144
20552
        side_data = av_frame_new_side_data(frame, AV_FRAME_DATA_MATRIXENCODING,
145
                                           sizeof(enum AVMatrixEncoding));
146
147
20552
    if (!side_data)
148
        return AVERROR(ENOMEM);
149
150
20552
    data  = (enum AVMatrixEncoding*)side_data->data;
151
20552
    *data = matrix_encoding;
152
153
20552
    return 0;
154
}
155
156
8470
void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
157
                               int linesize_align[AV_NUM_DATA_POINTERS])
158
{
159
    int i;
160
8470
    int w_align = 1;
161
8470
    int h_align = 1;
162
8470
    AVPixFmtDescriptor const *desc = av_pix_fmt_desc_get(s->pix_fmt);
163
164
8470
    if (desc) {
165
8470
        w_align = 1 << desc->log2_chroma_w;
166
8470
        h_align = 1 << desc->log2_chroma_h;
167
    }
168
169


8470
    switch (s->pix_fmt) {
170
7562
    case AV_PIX_FMT_YUV420P:
171
    case AV_PIX_FMT_YUYV422:
172
    case AV_PIX_FMT_YVYU422:
173
    case AV_PIX_FMT_UYVY422:
174
    case AV_PIX_FMT_YUV422P:
175
    case AV_PIX_FMT_YUV440P:
176
    case AV_PIX_FMT_YUV444P:
177
    case AV_PIX_FMT_GBRP:
178
    case AV_PIX_FMT_GBRAP:
179
    case AV_PIX_FMT_GRAY8:
180
    case AV_PIX_FMT_GRAY16BE:
181
    case AV_PIX_FMT_GRAY16LE:
182
    case AV_PIX_FMT_YUVJ420P:
183
    case AV_PIX_FMT_YUVJ422P:
184
    case AV_PIX_FMT_YUVJ440P:
185
    case AV_PIX_FMT_YUVJ444P:
186
    case AV_PIX_FMT_YUVA420P:
187
    case AV_PIX_FMT_YUVA422P:
188
    case AV_PIX_FMT_YUVA444P:
189
    case AV_PIX_FMT_YUV420P9LE:
190
    case AV_PIX_FMT_YUV420P9BE:
191
    case AV_PIX_FMT_YUV420P10LE:
192
    case AV_PIX_FMT_YUV420P10BE:
193
    case AV_PIX_FMT_YUV420P12LE:
194
    case AV_PIX_FMT_YUV420P12BE:
195
    case AV_PIX_FMT_YUV420P14LE:
196
    case AV_PIX_FMT_YUV420P14BE:
197
    case AV_PIX_FMT_YUV420P16LE:
198
    case AV_PIX_FMT_YUV420P16BE:
199
    case AV_PIX_FMT_YUVA420P9LE:
200
    case AV_PIX_FMT_YUVA420P9BE:
201
    case AV_PIX_FMT_YUVA420P10LE:
202
    case AV_PIX_FMT_YUVA420P10BE:
203
    case AV_PIX_FMT_YUVA420P16LE:
204
    case AV_PIX_FMT_YUVA420P16BE:
205
    case AV_PIX_FMT_YUV422P9LE:
206
    case AV_PIX_FMT_YUV422P9BE:
207
    case AV_PIX_FMT_YUV422P10LE:
208
    case AV_PIX_FMT_YUV422P10BE:
209
    case AV_PIX_FMT_YUV422P12LE:
210
    case AV_PIX_FMT_YUV422P12BE:
211
    case AV_PIX_FMT_YUV422P14LE:
212
    case AV_PIX_FMT_YUV422P14BE:
213
    case AV_PIX_FMT_YUV422P16LE:
214
    case AV_PIX_FMT_YUV422P16BE:
215
    case AV_PIX_FMT_YUVA422P9LE:
216
    case AV_PIX_FMT_YUVA422P9BE:
217
    case AV_PIX_FMT_YUVA422P10LE:
218
    case AV_PIX_FMT_YUVA422P10BE:
219
    case AV_PIX_FMT_YUVA422P12LE:
220
    case AV_PIX_FMT_YUVA422P12BE:
221
    case AV_PIX_FMT_YUVA422P16LE:
222
    case AV_PIX_FMT_YUVA422P16BE:
223
    case AV_PIX_FMT_YUV440P10LE:
224
    case AV_PIX_FMT_YUV440P10BE:
225
    case AV_PIX_FMT_YUV440P12LE:
226
    case AV_PIX_FMT_YUV440P12BE:
227
    case AV_PIX_FMT_YUV444P9LE:
228
    case AV_PIX_FMT_YUV444P9BE:
229
    case AV_PIX_FMT_YUV444P10LE:
230
    case AV_PIX_FMT_YUV444P10BE:
231
    case AV_PIX_FMT_YUV444P12LE:
232
    case AV_PIX_FMT_YUV444P12BE:
233
    case AV_PIX_FMT_YUV444P14LE:
234
    case AV_PIX_FMT_YUV444P14BE:
235
    case AV_PIX_FMT_YUV444P16LE:
236
    case AV_PIX_FMT_YUV444P16BE:
237
    case AV_PIX_FMT_YUVA444P9LE:
238
    case AV_PIX_FMT_YUVA444P9BE:
239
    case AV_PIX_FMT_YUVA444P10LE:
240
    case AV_PIX_FMT_YUVA444P10BE:
241
    case AV_PIX_FMT_YUVA444P12LE:
242
    case AV_PIX_FMT_YUVA444P12BE:
243
    case AV_PIX_FMT_YUVA444P16LE:
244
    case AV_PIX_FMT_YUVA444P16BE:
245
    case AV_PIX_FMT_GBRP9LE:
246
    case AV_PIX_FMT_GBRP9BE:
247
    case AV_PIX_FMT_GBRP10LE:
248
    case AV_PIX_FMT_GBRP10BE:
249
    case AV_PIX_FMT_GBRP12LE:
250
    case AV_PIX_FMT_GBRP12BE:
251
    case AV_PIX_FMT_GBRP14LE:
252
    case AV_PIX_FMT_GBRP14BE:
253
    case AV_PIX_FMT_GBRP16LE:
254
    case AV_PIX_FMT_GBRP16BE:
255
    case AV_PIX_FMT_GBRAP12LE:
256
    case AV_PIX_FMT_GBRAP12BE:
257
    case AV_PIX_FMT_GBRAP16LE:
258
    case AV_PIX_FMT_GBRAP16BE:
259
7562
        w_align = 16; //FIXME assume 16 pixel per macroblock
260
7562
        h_align = 16 * 2; // interlaced needs 2 macroblocks height
261
7562
        break;
262
26
    case AV_PIX_FMT_YUV411P:
263
    case AV_PIX_FMT_YUVJ411P:
264
    case AV_PIX_FMT_UYYVYY411:
265
26
        w_align = 32;
266
26
        h_align = 16 * 2;
267
26
        break;
268
21
    case AV_PIX_FMT_YUV410P:
269
21
        if (s->codec_id == AV_CODEC_ID_SVQ1) {
270
10
            w_align = 64;
271
10
            h_align = 64;
272
        }
273
21
        break;
274
34
    case AV_PIX_FMT_RGB555:
275
34
        if (s->codec_id == AV_CODEC_ID_RPZA) {
276
1
            w_align = 4;
277
1
            h_align = 4;
278
        }
279
34
        if (s->codec_id == AV_CODEC_ID_INTERPLAY_VIDEO) {
280
1
            w_align = 8;
281
1
            h_align = 8;
282
        }
283
34
        break;
284
121
    case AV_PIX_FMT_PAL8:
285
    case AV_PIX_FMT_BGR8:
286
    case AV_PIX_FMT_RGB8:
287
121
        if (s->codec_id == AV_CODEC_ID_SMC ||
288
120
            s->codec_id == AV_CODEC_ID_CINEPAK) {
289
2
            w_align = 4;
290
2
            h_align = 4;
291
        }
292
121
        if (s->codec_id == AV_CODEC_ID_JV ||
293
120
            s->codec_id == AV_CODEC_ID_INTERPLAY_VIDEO) {
294
2
            w_align = 8;
295
2
            h_align = 8;
296
        }
297
121
        break;
298
72
    case AV_PIX_FMT_BGR24:
299
72
        if ((s->codec_id == AV_CODEC_ID_MSZH) ||
300
71
            (s->codec_id == AV_CODEC_ID_ZLIB)) {
301
6
            w_align = 4;
302
6
            h_align = 4;
303
        }
304
72
        break;
305
193
    case AV_PIX_FMT_RGB24:
306
193
        if (s->codec_id == AV_CODEC_ID_CINEPAK) {
307
6
            w_align = 4;
308
6
            h_align = 4;
309
        }
310
193
        break;
311
441
    default:
312
441
        break;
313
    }
314
315
8470
    if (s->codec_id == AV_CODEC_ID_IFF_ILBM) {
316
2
        w_align = FFMAX(w_align, 8);
317
    }
318
319
8470
    *width  = FFALIGN(*width, w_align);
320
8470
    *height = FFALIGN(*height, h_align);
321

8470
    if (s->codec_id == AV_CODEC_ID_H264 || s->lowres ||
322

7943
        s->codec_id == AV_CODEC_ID_VP5  || s->codec_id == AV_CODEC_ID_VP6 ||
323

7935
        s->codec_id == AV_CODEC_ID_VP6F || s->codec_id == AV_CODEC_ID_VP6A
324
    ) {
325
        // some of the optimized chroma MC reads one line too much
326
        // which is also done in mpeg decoders with lowres > 0
327
539
        *height += 2;
328
329
        // H.264 uses edge emulation for out of frame motion vectors, for this
330
        // it requires a temporary area large enough to hold a 21x21 block,
331
        // increasing witdth ensure that the temporary area is large enough,
332
        // the next rounded up width is 32
333
539
        *width = FFMAX(*width, 32);
334
    }
335
336
42350
    for (i = 0; i < 4; i++)
337
33880
        linesize_align[i] = STRIDE_ALIGN;
338
8470
}
339
340
void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height)
341
{
342
    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(s->pix_fmt);
343
    int chroma_shift = desc->log2_chroma_w;
344
    int linesize_align[AV_NUM_DATA_POINTERS];
345
    int align;
346
347
    avcodec_align_dimensions2(s, width, height, linesize_align);
348
    align               = FFMAX(linesize_align[0], linesize_align[3]);
349
    linesize_align[1] <<= chroma_shift;
350
    linesize_align[2] <<= chroma_shift;
351
    align               = FFMAX3(align, linesize_align[1], linesize_align[2]);
352
    *width              = FFALIGN(*width, align);
353
}
354
355
1
int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos)
356
{
357

1
    if (pos <= AVCHROMA_LOC_UNSPECIFIED || pos >= AVCHROMA_LOC_NB)
358
        return AVERROR(EINVAL);
359
1
    pos--;
360
361
1
    *xpos = (pos&1) * 128;
362
1
    *ypos = ((pos>>1)^(pos<4)) * 128;
363
364
1
    return 0;
365
}
366
367
1
enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos)
368
{
369
    int pos, xout, yout;
370
371
1
    for (pos = AVCHROMA_LOC_UNSPECIFIED + 1; pos < AVCHROMA_LOC_NB; pos++) {
372

1
        if (avcodec_enum_to_chroma_pos(&xout, &yout, pos) == 0 && xout == xpos && yout == ypos)
373
1
            return pos;
374
    }
375
    return AVCHROMA_LOC_UNSPECIFIED;
376
}
377
378
int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels,
379
                             enum AVSampleFormat sample_fmt, const uint8_t *buf,
380
                             int buf_size, int align)
381
{
382
    int ch, planar, needed_size, ret = 0;
383
384
    needed_size = av_samples_get_buffer_size(NULL, nb_channels,
385
                                             frame->nb_samples, sample_fmt,
386
                                             align);
387
    if (buf_size < needed_size)
388
        return AVERROR(EINVAL);
389
390
    planar = av_sample_fmt_is_planar(sample_fmt);
391
    if (planar && nb_channels > AV_NUM_DATA_POINTERS) {
392
        if (!(frame->extended_data = av_mallocz_array(nb_channels,
393
                                                sizeof(*frame->extended_data))))
394
            return AVERROR(ENOMEM);
395
    } else {
396
        frame->extended_data = frame->data;
397
    }
398
399
    if ((ret = av_samples_fill_arrays(frame->extended_data, &frame->linesize[0],
400
                                      (uint8_t *)(intptr_t)buf, nb_channels, frame->nb_samples,
401
                                      sample_fmt, align)) < 0) {
402
        if (frame->extended_data != frame->data)
403
            av_freep(&frame->extended_data);
404
        return ret;
405
    }
406
    if (frame->extended_data != frame->data) {
407
        for (ch = 0; ch < AV_NUM_DATA_POINTERS; ch++)
408
            frame->data[ch] = frame->extended_data[ch];
409
    }
410
411
    return ret;
412
}
413
414
14
void ff_color_frame(AVFrame *frame, const int c[4])
415
{
416
14
    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format);
417
    int p, y;
418
419
14
    av_assert0(desc->flags & AV_PIX_FMT_FLAG_PLANAR);
420
421
56
    for (p = 0; p<desc->nb_components; p++) {
422
42
        uint8_t *dst = frame->data[p];
423

42
        int is_chroma = p == 1 || p == 2;
424
42
        int bytes  = is_chroma ? AV_CEIL_RSHIFT(frame->width,  desc->log2_chroma_w) : frame->width;
425
42
        int height = is_chroma ? AV_CEIL_RSHIFT(frame->height, desc->log2_chroma_h) : frame->height;
426
42
        if (desc->comp[0].depth >= 9) {
427
            ((uint16_t*)dst)[0] = c[p];
428
            av_memcpy_backptr(dst + 2, 2, bytes - 2);
429
            dst += frame->linesize[p];
430
            for (y = 1; y < height; y++) {
431
                memcpy(dst, frame->data[p], 2*bytes);
432
                dst += frame->linesize[p];
433
            }
434
        } else {
435
18666
            for (y = 0; y < height; y++) {
436
18624
                memset(dst, c[p], bytes);
437
18624
                dst += frame->linesize[p];
438
            }
439
        }
440
    }
441
14
}
442
443
46948
int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size)
444
{
445
    int i;
446
447
1380108
    for (i = 0; i < count; i++) {
448
1333160
        int r = func(c, (char *)arg + i * size);
449
1333160
        if (ret)
450
28403
            ret[i] = r;
451
    }
452
46948
    emms_c();
453
46948
    return 0;
454
}
455
456
6852
int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int jobnr, int threadnr), void *arg, int *ret, int count)
457
{
458
    int i;
459
460
210094
    for (i = 0; i < count; i++) {
461
203242
        int r = func(c, arg, i, 0);
462
203242
        if (ret)
463
50
            ret[i] = r;
464
    }
465
6852
    emms_c();
466
6852
    return 0;
467
}
468
469
1362
enum AVPixelFormat avpriv_find_pix_fmt(const PixelFormatTag *tags,
470
                                       unsigned int fourcc)
471
{
472
12588
    while (tags->pix_fmt >= 0) {
473
12390
        if (tags->fourcc == fourcc)
474
1164
            return tags->pix_fmt;
475
11226
        tags++;
476
    }
477
198
    return AV_PIX_FMT_NONE;
478
}
479
480
#if FF_API_CODEC_GET_SET
481
MAKE_ACCESSORS(AVCodecContext, codec, AVRational, pkt_timebase)
482
MAKE_ACCESSORS(AVCodecContext, codec, const AVCodecDescriptor *, codec_descriptor)
483
MAKE_ACCESSORS(AVCodecContext, codec, int, lowres)
484
MAKE_ACCESSORS(AVCodecContext, codec, int, seek_preroll)
485
MAKE_ACCESSORS(AVCodecContext, codec, uint16_t*, chroma_intra_matrix)
486
487
unsigned av_codec_get_codec_properties(const AVCodecContext *codec)
488
{
489
    return codec->properties;
490
}
491
492
int av_codec_get_max_lowres(const AVCodec *codec)
493
{
494
    return codec->max_lowres;
495
}
496
#endif
497
498
164609
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec){
499
164609
    return !!(codec->caps_internal & FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM);
500
}
501
502
21123
static int64_t get_bit_rate(AVCodecContext *ctx)
503
{
504
    int64_t bit_rate;
505
    int bits_per_sample;
506
507
21123
    switch (ctx->codec_type) {
508
17635
    case AVMEDIA_TYPE_VIDEO:
509
    case AVMEDIA_TYPE_DATA:
510
    case AVMEDIA_TYPE_SUBTITLE:
511
    case AVMEDIA_TYPE_ATTACHMENT:
512
17635
        bit_rate = ctx->bit_rate;
513
17635
        break;
514
3488
    case AVMEDIA_TYPE_AUDIO:
515
3488
        bits_per_sample = av_get_bits_per_sample(ctx->codec_id);
516
3488
        if (bits_per_sample) {
517
2091
            bit_rate = ctx->sample_rate * (int64_t)ctx->channels;
518
2091
            if (bit_rate > INT64_MAX / bits_per_sample) {
519
                bit_rate = 0;
520
            } else
521
2091
                bit_rate *= bits_per_sample;
522
        } else
523
1397
            bit_rate = ctx->bit_rate;
524
3488
        break;
525
    default:
526
        bit_rate = 0;
527
        break;
528
    }
529
21123
    return bit_rate;
530
}
531
532
533
24665
static void ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec)
534
{
535

24665
    if (!(codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE) && codec->init)
536
13018
        ff_mutex_lock(&codec_mutex);
537
24665
}
538
539
24665
static void ff_unlock_avcodec(const AVCodec *codec)
540
{
541

24665
    if (!(codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE) && codec->init)
542
13018
        ff_mutex_unlock(&codec_mutex);
543
24665
}
544
545
18668
int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
546
{
547
18668
    int ret = 0;
548
18668
    int codec_init_ok = 0;
549
18668
    AVDictionary *tmp = NULL;
550
    const AVPixFmtDescriptor *pixdesc;
551
    AVCodecInternal *avci;
552
553
18668
    if (avcodec_is_open(avctx))
554
        return 0;
555
556

18668
    if (!codec && !avctx->codec) {
557
        av_log(avctx, AV_LOG_ERROR, "No codec provided to avcodec_open2()\n");
558
        return AVERROR(EINVAL);
559
    }
560

18668
    if (codec && avctx->codec && codec != avctx->codec) {
561
        av_log(avctx, AV_LOG_ERROR, "This AVCodecContext was allocated for %s, "
562
                                    "but %s passed to avcodec_open2()\n", avctx->codec->name, codec->name);
563
        return AVERROR(EINVAL);
564
    }
565
18668
    if (!codec)
566
2
        codec = avctx->codec;
567
568

18668
    if (avctx->extradata_size < 0 || avctx->extradata_size >= FF_MAX_EXTRADATA_SIZE)
569
        return AVERROR(EINVAL);
570
571
18668
    if (options)
572
18590
        av_dict_copy(&tmp, *options, 0);
573
574
18668
    ff_lock_avcodec(avctx, codec);
575
576
18668
    avci = av_mallocz(sizeof(*avci));
577
18668
    if (!avci) {
578
        ret = AVERROR(ENOMEM);
579
        goto end;
580
    }
581
18668
    avctx->internal = avci;
582
583
18668
    avci->to_free = av_frame_alloc();
584
18668
    avci->compat_decode_frame = av_frame_alloc();
585
18668
    avci->compat_encode_packet = av_packet_alloc();
586
18668
    avci->buffer_frame = av_frame_alloc();
587
18668
    avci->buffer_pkt = av_packet_alloc();
588
18668
    avci->es.in_frame = av_frame_alloc();
589
18668
    avci->ds.in_pkt = av_packet_alloc();
590
18668
    avci->last_pkt_props = av_packet_alloc();
591

18668
    if (!avci->compat_decode_frame || !avci->compat_encode_packet ||
592

18668
        !avci->buffer_frame || !avci->buffer_pkt          ||
593

18668
        !avci->es.in_frame  || !avci->ds.in_pkt           ||
594

18668
        !avci->to_free      || !avci->last_pkt_props) {
595
        ret = AVERROR(ENOMEM);
596
        goto free_and_end;
597
    }
598
599
18668
    avci->skip_samples_multiplier = 1;
600
601
18668
    if (codec->priv_data_size > 0) {
602
13263
        if (!avctx->priv_data) {
603
6600
            avctx->priv_data = av_mallocz(codec->priv_data_size);
604
6600
            if (!avctx->priv_data) {
605
                ret = AVERROR(ENOMEM);
606
                goto free_and_end;
607
            }
608
6600
            if (codec->priv_class) {
609
1696
                *(const AVClass **)avctx->priv_data = codec->priv_class;
610
1696
                av_opt_set_defaults(avctx->priv_data);
611
            }
612
        }
613

13263
        if (codec->priv_class && (ret = av_opt_set_dict(avctx->priv_data, &tmp)) < 0)
614
            goto free_and_end;
615
    } else {
616
5405
        avctx->priv_data = NULL;
617
    }
618
18668
    if ((ret = av_opt_set_dict(avctx, &tmp)) < 0)
619
        goto free_and_end;
620
621

18668
    if (avctx->codec_whitelist && av_match_list(codec->name, avctx->codec_whitelist, ',') <= 0) {
622
        av_log(avctx, AV_LOG_ERROR, "Codec (%s) not on whitelist \'%s\'\n", codec->name, avctx->codec_whitelist);
623
        ret = AVERROR(EINVAL);
624
        goto free_and_end;
625
    }
626
627
    // only call ff_set_dimensions() for non H.264/VP6F/DXV codecs so as not to overwrite previously setup dimensions
628


18668
    if (!(avctx->coded_width && avctx->coded_height && avctx->width && avctx->height &&
629

194
          (avctx->codec_id == AV_CODEC_ID_H264 || avctx->codec_id == AV_CODEC_ID_VP6F || avctx->codec_id == AV_CODEC_ID_DXV))) {
630

18657
        if (avctx->coded_width && avctx->coded_height)
631
193
            ret = ff_set_dimensions(avctx, avctx->coded_width, avctx->coded_height);
632

18464
        else if (avctx->width && avctx->height)
633
11140
            ret = ff_set_dimensions(avctx, avctx->width, avctx->height);
634
18657
        if (ret < 0)
635
            goto free_and_end;
636
    }
637
638


18668
    if ((avctx->coded_width || avctx->coded_height || avctx->width || avctx->height)
639
11344
        && (  av_image_check_size2(avctx->coded_width, avctx->coded_height, avctx->max_pixels, AV_PIX_FMT_NONE, 0, avctx) < 0
640
11344
           || av_image_check_size2(avctx->width,       avctx->height,       avctx->max_pixels, AV_PIX_FMT_NONE, 0, avctx) < 0)) {
641
        av_log(avctx, AV_LOG_WARNING, "Ignoring invalid width/height values\n");
642
        ff_set_dimensions(avctx, 0, 0);
643
    }
644
645

18668
    if (avctx->width > 0 && avctx->height > 0) {
646
11344
        if (av_image_check_sar(avctx->width, avctx->height,
647
                               avctx->sample_aspect_ratio) < 0) {
648
            av_log(avctx, AV_LOG_WARNING, "ignoring invalid SAR: %u/%u\n",
649
                   avctx->sample_aspect_ratio.num,
650
                   avctx->sample_aspect_ratio.den);
651
            avctx->sample_aspect_ratio = (AVRational){ 0, 1 };
652
        }
653
    }
654
655
    /* if the decoder init function was already called previously,
656
     * free the already allocated subtitle_header before overwriting it */
657
18668
    if (av_codec_is_decoder(codec))
658
12671
        av_freep(&avctx->subtitle_header);
659
660

18668
    if (avctx->channels > FF_SANE_NB_CHANNELS || avctx->channels < 0) {
661
        av_log(avctx, AV_LOG_ERROR, "Too many or invalid channels: %d\n", avctx->channels);
662
        ret = AVERROR(EINVAL);
663
        goto free_and_end;
664
    }
665
18668
    if (av_codec_is_decoder(codec) &&
666
12671
        codec->type == AVMEDIA_TYPE_AUDIO &&
667
2764
        !(codec->capabilities & AV_CODEC_CAP_CHANNEL_CONF) &&
668
1805
        avctx->channels == 0) {
669
        av_log(avctx, AV_LOG_ERROR, "Decoder requires channel count but channels not set\n");
670
        ret = AVERROR(EINVAL);
671
        goto free_and_end;
672
    }
673
674
18668
    if (avctx->sample_rate < 0) {
675
        av_log(avctx, AV_LOG_ERROR, "Invalid sample rate: %d\n", avctx->sample_rate);
676
        ret = AVERROR(EINVAL);
677
        goto free_and_end;
678
    }
679
18668
    if (avctx->block_align < 0) {
680
        av_log(avctx, AV_LOG_ERROR, "Invalid block align: %d\n", avctx->block_align);
681
        ret = AVERROR(EINVAL);
682
        goto free_and_end;
683
    }
684
685
#if FF_API_THREAD_SAFE_CALLBACKS
686
FF_DISABLE_DEPRECATION_WARNINGS
687
18668
    if ((avctx->thread_type & FF_THREAD_FRAME) &&
688
18602
        avctx->get_buffer2 != avcodec_default_get_buffer2 &&
689
5769
        !avctx->thread_safe_callbacks) {
690
        av_log(avctx, AV_LOG_WARNING, "Requested frame threading with a "
691
               "custom get_buffer2() implementation which is not marked as "
692
               "thread safe. This is not supported anymore, make your "
693
               "callback thread-safe.\n");
694
    }
695
FF_ENABLE_DEPRECATION_WARNINGS
696
#endif
697
698
18668
    avctx->codec = codec;
699

18668
    if ((avctx->codec_type == AVMEDIA_TYPE_UNKNOWN || avctx->codec_type == codec->type) &&
700
18668
        avctx->codec_id == AV_CODEC_ID_NONE) {
701
        avctx->codec_type = codec->type;
702
        avctx->codec_id   = codec->id;
703
    }
704

18668
    if (avctx->codec_id != codec->id || (avctx->codec_type != codec->type
705
                                         && avctx->codec_type != AVMEDIA_TYPE_ATTACHMENT)) {
706
        av_log(avctx, AV_LOG_ERROR, "Codec type or id mismatches\n");
707
        ret = AVERROR(EINVAL);
708
        goto free_and_end;
709
    }
710
18668
    avctx->frame_number = 0;
711
18668
    avctx->codec_descriptor = avcodec_descriptor_get(avctx->codec_id);
712
713
18668
    if ((avctx->codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) &&
714
7
        avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) {
715
        const char *codec_string = av_codec_is_encoder(codec) ? "encoder" : "decoder";
716
        const AVCodec *codec2;
717
        av_log(avctx, AV_LOG_ERROR,
718
               "The %s '%s' is experimental but experimental codecs are not enabled, "
719
               "add '-strict %d' if you want to use it.\n",
720
               codec_string, codec->name, FF_COMPLIANCE_EXPERIMENTAL);
721
        codec2 = av_codec_is_encoder(codec) ? avcodec_find_encoder(codec->id) : avcodec_find_decoder(codec->id);
722
        if (!(codec2->capabilities & AV_CODEC_CAP_EXPERIMENTAL))
723
            av_log(avctx, AV_LOG_ERROR, "Alternatively use the non experimental %s '%s'.\n",
724
                codec_string, codec2->name);
725
        ret = AVERROR_EXPERIMENTAL;
726
        goto free_and_end;
727
    }
728
729
18668
    if (avctx->codec_type == AVMEDIA_TYPE_AUDIO &&
730

3903
        (!avctx->time_base.num || !avctx->time_base.den)) {
731
2780
        avctx->time_base.num = 1;
732
2780
        avctx->time_base.den = avctx->sample_rate;
733
    }
734
735
    if (!HAVE_THREADS)
736
        av_log(avctx, AV_LOG_WARNING, "Warning: not compiled with thread support, using thread emulation\n");
737
738
18668
    if (CONFIG_FRAME_THREAD_ENCODER && av_codec_is_encoder(avctx->codec)) {
739
5997
        ff_unlock_avcodec(codec); //we will instantiate a few encoders thus kick the counter to prevent false detection of a problem
740
5997
        ret = ff_frame_thread_encoder_init(avctx, options ? *options : NULL);
741
5997
        ff_lock_avcodec(avctx, codec);
742
5997
        if (ret < 0)
743
            goto free_and_end;
744
    }
745
746
18668
    if (av_codec_is_decoder(avctx->codec)) {
747
12671
        ret = ff_decode_bsfs_init(avctx);
748
12671
        if (ret < 0)
749
            goto free_and_end;
750
    }
751
752
18668
    if (HAVE_THREADS
753

18668
        && !(avci->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))) {
754
18650
        ret = ff_thread_init(avctx);
755
18650
        if (ret < 0) {
756
            goto free_and_end;
757
        }
758
    }
759
    if (!HAVE_THREADS && !(codec->capabilities & AV_CODEC_CAP_AUTO_THREADS))
760
        avctx->thread_count = 1;
761
762

18668
    if (avctx->codec->max_lowres < avctx->lowres || avctx->lowres < 0) {
763
        av_log(avctx, AV_LOG_WARNING, "The maximum value for lowres supported by the decoder is %d\n",
764
               avctx->codec->max_lowres);
765
        avctx->lowres = avctx->codec->max_lowres;
766
    }
767
768
18668
    if (av_codec_is_encoder(avctx->codec)) {
769
        int i;
770
#if FF_API_CODED_FRAME
771
FF_DISABLE_DEPRECATION_WARNINGS
772
5997
        avctx->coded_frame = av_frame_alloc();
773
5997
        if (!avctx->coded_frame) {
774
            ret = AVERROR(ENOMEM);
775
            goto free_and_end;
776
        }
777
FF_ENABLE_DEPRECATION_WARNINGS
778
#endif
779
780

5997
        if (avctx->time_base.num <= 0 || avctx->time_base.den <= 0) {
781
            av_log(avctx, AV_LOG_ERROR, "The encoder timebase is not set.\n");
782
            ret = AVERROR(EINVAL);
783
            goto free_and_end;
784
        }
785
786
5997
        if (avctx->codec->sample_fmts) {
787
1151
            for (i = 0; avctx->codec->sample_fmts[i] != AV_SAMPLE_FMT_NONE; i++) {
788
1151
                if (avctx->sample_fmt == avctx->codec->sample_fmts[i])
789
1139
                    break;
790

15
                if (avctx->channels == 1 &&
791
3
                    av_get_planar_sample_fmt(avctx->sample_fmt) ==
792
3
                    av_get_planar_sample_fmt(avctx->codec->sample_fmts[i])) {
793
                    avctx->sample_fmt = avctx->codec->sample_fmts[i];
794
                    break;
795
                }
796
            }
797
1139
            if (avctx->codec->sample_fmts[i] == AV_SAMPLE_FMT_NONE) {
798
                char buf[128];
799
                snprintf(buf, sizeof(buf), "%d", avctx->sample_fmt);
800
                av_log(avctx, AV_LOG_ERROR, "Specified sample format %s is invalid or not supported\n",
801
                       (char *)av_x_if_null(av_get_sample_fmt_name(avctx->sample_fmt), buf));
802
                ret = AVERROR(EINVAL);
803
                goto free_and_end;
804
            }
805
        }
806
5997
        if (avctx->codec->pix_fmts) {
807
2076
            for (i = 0; avctx->codec->pix_fmts[i] != AV_PIX_FMT_NONE; i++)
808
2076
                if (avctx->pix_fmt == avctx->codec->pix_fmts[i])
809
697
                    break;
810
697
            if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_NONE
811
                && !((avctx->codec_id == AV_CODEC_ID_MJPEG || avctx->codec_id == AV_CODEC_ID_LJPEG)
812
                     && avctx->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL)) {
813
                char buf[128];
814
                snprintf(buf, sizeof(buf), "%d", avctx->pix_fmt);
815
                av_log(avctx, AV_LOG_ERROR, "Specified pixel format %s is invalid or not supported\n",
816
                       (char *)av_x_if_null(av_get_pix_fmt_name(avctx->pix_fmt), buf));
817
                ret = AVERROR(EINVAL);
818
                goto free_and_end;
819
            }
820
697
            if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ420P ||
821
675
                avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ411P ||
822
675
                avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ422P ||
823
671
                avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ440P ||
824
671
                avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ444P)
825
34
                avctx->color_range = AVCOL_RANGE_JPEG;
826
        }
827
5997
        if (avctx->codec->supported_samplerates) {
828
103
            for (i = 0; avctx->codec->supported_samplerates[i] != 0; i++)
829
103
                if (avctx->sample_rate == avctx->codec->supported_samplerates[i])
830
44
                    break;
831
44
            if (avctx->codec->supported_samplerates[i] == 0) {
832
                av_log(avctx, AV_LOG_ERROR, "Specified sample rate %d is not supported\n",
833
                       avctx->sample_rate);
834
                ret = AVERROR(EINVAL);
835
                goto free_and_end;
836
            }
837
        }
838
5997
        if (avctx->sample_rate < 0) {
839
            av_log(avctx, AV_LOG_ERROR, "Specified sample rate %d is not supported\n",
840
                    avctx->sample_rate);
841
            ret = AVERROR(EINVAL);
842
            goto free_and_end;
843
        }
844
5997
        if (avctx->codec->channel_layouts) {
845
42
            if (!avctx->channel_layout) {
846
                av_log(avctx, AV_LOG_WARNING, "Channel layout not specified\n");
847
            } else {
848
58
                for (i = 0; avctx->codec->channel_layouts[i] != 0; i++)
849
58
                    if (avctx->channel_layout == avctx->codec->channel_layouts[i])
850
42
                        break;
851
42
                if (avctx->codec->channel_layouts[i] == 0) {
852
                    char buf[512];
853
                    av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout);
854
                    av_log(avctx, AV_LOG_ERROR, "Specified channel layout '%s' is not supported\n", buf);
855
                    ret = AVERROR(EINVAL);
856
                    goto free_and_end;
857
                }
858
            }
859
        }
860

7112
        if (avctx->channel_layout && avctx->channels) {
861
1115
            int channels = av_get_channel_layout_nb_channels(avctx->channel_layout);
862
1115
            if (channels != avctx->channels) {
863
                char buf[512];
864
                av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout);
865
                av_log(avctx, AV_LOG_ERROR,
866
                       "Channel layout '%s' with %d channels does not match number of specified channels %d\n",
867
                       buf, channels, avctx->channels);
868
                ret = AVERROR(EINVAL);
869
                goto free_and_end;
870
            }
871
4882
        } else if (avctx->channel_layout) {
872
16
            avctx->channels = av_get_channel_layout_nb_channels(avctx->channel_layout);
873
        }
874
5997
        if (avctx->channels < 0) {
875
            av_log(avctx, AV_LOG_ERROR, "Specified number of channels %d is not supported\n",
876
                    avctx->channels);
877
            ret = AVERROR(EINVAL);
878
            goto free_and_end;
879
        }
880
5997
        if(avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
881
4827
            pixdesc = av_pix_fmt_desc_get(avctx->pix_fmt);
882
4827
            if (    avctx->bits_per_raw_sample < 0
883

4827
                || (avctx->bits_per_raw_sample > 8 && pixdesc->comp[0].depth <= 8)) {
884
                av_log(avctx, AV_LOG_WARNING, "Specified bit depth %d not possible with the specified pixel formats depth %d\n",
885
                    avctx->bits_per_raw_sample, pixdesc->comp[0].depth);
886
                avctx->bits_per_raw_sample = pixdesc->comp[0].depth;
887
            }
888

4827
            if (avctx->width <= 0 || avctx->height <= 0) {
889
                av_log(avctx, AV_LOG_ERROR, "dimensions not set\n");
890
                ret = AVERROR(EINVAL);
891
                goto free_and_end;
892
            }
893
        }
894

5997
        if (   (avctx->codec_type == AVMEDIA_TYPE_VIDEO || avctx->codec_type == AVMEDIA_TYPE_AUDIO)
895

5966
            && avctx->bit_rate>0 && avctx->bit_rate<1000) {
896
            av_log(avctx, AV_LOG_WARNING, "Bitrate %"PRId64" is extremely low, maybe you mean %"PRId64"k\n", avctx->bit_rate, avctx->bit_rate);
897
        }
898
899
5997
        if (!avctx->rc_initial_buffer_occupancy)
900
5996
            avctx->rc_initial_buffer_occupancy = avctx->rc_buffer_size * 3LL / 4;
901
902

5997
        if (avctx->ticks_per_frame && avctx->time_base.num &&
903
5966
            avctx->ticks_per_frame > INT_MAX / avctx->time_base.num) {
904
            av_log(avctx, AV_LOG_ERROR,
905
                   "ticks_per_frame %d too large for the timebase %d/%d.",
906
                   avctx->ticks_per_frame,
907
                   avctx->time_base.num,
908
                   avctx->time_base.den);
909
            goto free_and_end;
910
        }
911
912
5997
        if (avctx->hw_frames_ctx) {
913
            AVHWFramesContext *frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data;
914
            if (frames_ctx->format != avctx->pix_fmt) {
915
                av_log(avctx, AV_LOG_ERROR,
916
                       "Mismatching AVCodecContext.pix_fmt and AVHWFramesContext.format\n");
917
                ret = AVERROR(EINVAL);
918
                goto free_and_end;
919
            }
920
            if (avctx->sw_pix_fmt != AV_PIX_FMT_NONE &&
921
                avctx->sw_pix_fmt != frames_ctx->sw_format) {
922
                av_log(avctx, AV_LOG_ERROR,
923
                       "Mismatching AVCodecContext.sw_pix_fmt (%s) "
924
                       "and AVHWFramesContext.sw_format (%s)\n",
925
                       av_get_pix_fmt_name(avctx->sw_pix_fmt),
926
                       av_get_pix_fmt_name(frames_ctx->sw_format));
927
                ret = AVERROR(EINVAL);
928
                goto free_and_end;
929
            }
930
            avctx->sw_pix_fmt = frames_ctx->sw_format;
931
        }
932
    }
933
934
18668
    avctx->pts_correction_num_faulty_pts =
935
18668
    avctx->pts_correction_num_faulty_dts = 0;
936
18668
    avctx->pts_correction_last_pts =
937
18668
    avctx->pts_correction_last_dts = INT64_MIN;
938
939
18668
    if (   !CONFIG_GRAY && avctx->flags & AV_CODEC_FLAG_GRAY
940
        && avctx->codec_descriptor->type == AVMEDIA_TYPE_VIDEO)
941
        av_log(avctx, AV_LOG_WARNING,
942
               "gray decoding requested but not enabled at configuration time\n");
943
18668
    if (avctx->flags2 & AV_CODEC_FLAG2_EXPORT_MVS) {
944
5
        avctx->export_side_data |= AV_CODEC_EXPORT_DATA_MVS;
945
    }
946
947

18668
    if (   avctx->codec->init && (!(avctx->active_thread_type&FF_THREAD_FRAME)
948
30
        || avci->frame_thread_encoder)) {
949
13601
        ret = avctx->codec->init(avctx);
950
13601
        if (ret < 0) {
951
8
            codec_init_ok = -1;
952
8
            goto free_and_end;
953
        }
954
13593
        codec_init_ok = 1;
955
    }
956
957
18660
    ret=0;
958
959
18660
    if (av_codec_is_decoder(avctx->codec)) {
960
12663
        if (!avctx->bit_rate)
961
8512
            avctx->bit_rate = get_bit_rate(avctx);
962
        /* validate channel layout from the decoder */
963
12663
        if (avctx->channel_layout) {
964
1676
            int channels = av_get_channel_layout_nb_channels(avctx->channel_layout);
965
1676
            if (!avctx->channels)
966
16
                avctx->channels = channels;
967
1660
            else if (channels != avctx->channels) {
968
                char buf[512];
969
7
                av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout);
970
7
                av_log(avctx, AV_LOG_WARNING,
971
                       "Channel layout '%s' with %d channels does not match specified number of channels %d: "
972
                       "ignoring specified channel layout\n",
973
                       buf, channels, avctx->channels);
974
7
                avctx->channel_layout = 0;
975
            }
976
        }
977

12663
        if (avctx->channels && avctx->channels < 0 ||
978
12663
            avctx->channels > FF_SANE_NB_CHANNELS) {
979
            ret = AVERROR(EINVAL);
980
            goto free_and_end;
981
        }
982
12663
        if (avctx->bits_per_coded_sample < 0) {
983
            ret = AVERROR(EINVAL);
984
            goto free_and_end;
985
        }
986
12663
        if (avctx->sub_charenc) {
987
6
            if (avctx->codec_type != AVMEDIA_TYPE_SUBTITLE) {
988
                av_log(avctx, AV_LOG_ERROR, "Character encoding is only "
989
                       "supported with subtitles codecs\n");
990
                ret = AVERROR(EINVAL);
991
                goto free_and_end;
992
6
            } else if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB) {
993
                av_log(avctx, AV_LOG_WARNING, "Codec '%s' is bitmap-based, "
994
                       "subtitles character encoding will be ignored\n",
995
                       avctx->codec_descriptor->name);
996
                avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_DO_NOTHING;
997
            } else {
998
                /* input character encoding is set for a text based subtitle
999
                 * codec at this point */
1000
6
                if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_AUTOMATIC)
1001
6
                    avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_PRE_DECODER;
1002
1003
6
                if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_PRE_DECODER) {
1004
#if CONFIG_ICONV
1005
6
                    iconv_t cd = iconv_open("UTF-8", avctx->sub_charenc);
1006
6
                    if (cd == (iconv_t)-1) {
1007
                        ret = AVERROR(errno);
1008
                        av_log(avctx, AV_LOG_ERROR, "Unable to open iconv context "
1009
                               "with input character encoding \"%s\"\n", avctx->sub_charenc);
1010
                        goto free_and_end;
1011
                    }
1012
6
                    iconv_close(cd);
1013
#else
1014
                    av_log(avctx, AV_LOG_ERROR, "Character encoding subtitles "
1015
                           "conversion needs a libavcodec built with iconv support "
1016
                           "for this codec\n");
1017
                    ret = AVERROR(ENOSYS);
1018
                    goto free_and_end;
1019
#endif
1020
                }
1021
            }
1022
        }
1023
1024
#if FF_API_AVCTX_TIMEBASE
1025

12663
        if (avctx->framerate.num > 0 && avctx->framerate.den > 0)
1026
4635
            avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1}));
1027
#endif
1028
    }
1029

18660
    if (codec->priv_data_size > 0 && avctx->priv_data && codec->priv_class) {
1030
3885
        av_assert0(*(const AVClass **)avctx->priv_data == codec->priv_class);
1031
    }
1032
1033
18660
end:
1034
18668
    ff_unlock_avcodec(codec);
1035
18668
    if (options) {
1036
18590
        av_dict_free(options);
1037
18590
        *options = tmp;
1038
    }
1039
1040
18668
    return ret;
1041
8
free_and_end:
1042

8
    if (avctx->codec && avctx->codec->close &&
1043
6
        (codec_init_ok > 0 || (codec_init_ok < 0 &&
1044
6
         avctx->codec->caps_internal & FF_CODEC_CAP_INIT_CLEANUP)))
1045
        avctx->codec->close(avctx);
1046
1047
8
    if (HAVE_THREADS && avci->thread_ctx)
1048
        ff_thread_free(avctx);
1049
1050

8
    if (codec->priv_class && avctx->priv_data)
1051
        av_opt_free(avctx->priv_data);
1052
8
    av_opt_free(avctx);
1053
1054
8
    if (av_codec_is_encoder(avctx->codec)) {
1055
#if FF_API_CODED_FRAME
1056
FF_DISABLE_DEPRECATION_WARNINGS
1057
        av_frame_free(&avctx->coded_frame);
1058
FF_ENABLE_DEPRECATION_WARNINGS
1059
#endif
1060
        av_freep(&avctx->extradata);
1061
        avctx->extradata_size = 0;
1062
    }
1063
1064
8
    av_dict_free(&tmp);
1065
8
    av_freep(&avctx->priv_data);
1066
8
    av_freep(&avctx->subtitle_header);
1067
1068
8
    av_frame_free(&avci->to_free);
1069
8
    av_frame_free(&avci->compat_decode_frame);
1070
8
    av_frame_free(&avci->buffer_frame);
1071
8
    av_packet_free(&avci->compat_encode_packet);
1072
8
    av_packet_free(&avci->buffer_pkt);
1073
8
    av_packet_free(&avci->last_pkt_props);
1074
1075
8
    av_packet_free(&avci->ds.in_pkt);
1076
8
    av_frame_free(&avci->es.in_frame);
1077
8
    av_bsf_free(&avci->bsf);
1078
1079
8
    av_buffer_unref(&avci->pool);
1080
8
    av_freep(&avci);
1081
8
    avctx->internal = NULL;
1082
8
    avctx->codec = NULL;
1083
8
    goto end;
1084
}
1085
1086
28
void avcodec_flush_buffers(AVCodecContext *avctx)
1087
{
1088
28
    AVCodecInternal *avci = avctx->internal;
1089
1090
28
    if (av_codec_is_encoder(avctx->codec)) {
1091
        int caps = avctx->codec->capabilities;
1092
1093
        if (!(caps & AV_CODEC_CAP_ENCODER_FLUSH)) {
1094
            // Only encoders that explicitly declare support for it can be
1095
            // flushed. Otherwise, this is a no-op.
1096
            av_log(avctx, AV_LOG_WARNING, "Ignoring attempt to flush encoder "
1097
                   "that doesn't support it\n");
1098
            return;
1099
        }
1100
1101
        // We haven't implemented flushing for frame-threaded encoders.
1102
        av_assert0(!(caps & AV_CODEC_CAP_FRAME_THREADS));
1103
    }
1104
1105
28
    avci->draining      = 0;
1106
28
    avci->draining_done = 0;
1107
28
    avci->nb_draining_errors = 0;
1108
28
    av_frame_unref(avci->buffer_frame);
1109
28
    av_frame_unref(avci->compat_decode_frame);
1110
28
    av_packet_unref(avci->compat_encode_packet);
1111
28
    av_packet_unref(avci->buffer_pkt);
1112
1113
28
    av_packet_unref(avci->last_pkt_props);
1114
28
    avpriv_packet_list_free(&avci->pkt_props,
1115
                            &avci->pkt_props_tail);
1116
1117
28
    av_frame_unref(avci->es.in_frame);
1118
28
    av_packet_unref(avci->ds.in_pkt);
1119
1120
28
    if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME)
1121
        ff_thread_flush(avctx);
1122
28
    else if (avctx->codec->flush)
1123
        avctx->codec->flush(avctx);
1124
1125
28
    avctx->pts_correction_last_pts =
1126
28
    avctx->pts_correction_last_dts = INT64_MIN;
1127
1128
28
    if (av_codec_is_decoder(avctx->codec))
1129
28
        av_bsf_flush(avci->bsf);
1130
1131
28
    if (!avctx->refcounted_frames)
1132
28
        av_frame_unref(avci->to_free);
1133
}
1134
1135
7022
void avsubtitle_free(AVSubtitle *sub)
1136
{
1137
    int i;
1138
1139
7729
    for (i = 0; i < sub->num_rects; i++) {
1140
707
        av_freep(&sub->rects[i]->data[0]);
1141
707
        av_freep(&sub->rects[i]->data[1]);
1142
707
        av_freep(&sub->rects[i]->data[2]);
1143
707
        av_freep(&sub->rects[i]->data[3]);
1144
707
        av_freep(&sub->rects[i]->text);
1145
707
        av_freep(&sub->rects[i]->ass);
1146
707
        av_freep(&sub->rects[i]);
1147
    }
1148
1149
7022
    av_freep(&sub->rects);
1150
1151
7022
    memset(sub, 0, sizeof(*sub));
1152
7022
}
1153
1154
63962
av_cold int avcodec_close(AVCodecContext *avctx)
1155
{
1156
    int i;
1157
1158
63962
    if (!avctx)
1159
        return 0;
1160
1161
63962
    if (avcodec_is_open(avctx)) {
1162
18660
        if (CONFIG_FRAME_THREAD_ENCODER &&
1163

18660
            avctx->internal->frame_thread_encoder && avctx->thread_count > 1) {
1164
18
            ff_frame_thread_encoder_free(avctx);
1165
        }
1166
18660
        if (HAVE_THREADS && avctx->internal->thread_ctx)
1167
28
            ff_thread_free(avctx);
1168

18660
        if (avctx->codec && avctx->codec->close)
1169
6091
            avctx->codec->close(avctx);
1170
18660
        avctx->internal->byte_buffer_size = 0;
1171
18660
        av_freep(&avctx->internal->byte_buffer);
1172
18660
        av_frame_free(&avctx->internal->to_free);
1173
18660
        av_frame_free(&avctx->internal->compat_decode_frame);
1174
18660
        av_frame_free(&avctx->internal->buffer_frame);
1175
18660
        av_packet_free(&avctx->internal->compat_encode_packet);
1176
18660
        av_packet_free(&avctx->internal->buffer_pkt);
1177
18660
        av_packet_free(&avctx->internal->last_pkt_props);
1178
18660
        avpriv_packet_list_free(&avctx->internal->pkt_props,
1179
18660
                                &avctx->internal->pkt_props_tail);
1180
1181
18660
        av_packet_free(&avctx->internal->ds.in_pkt);
1182
18660
        av_frame_free(&avctx->internal->es.in_frame);
1183
1184
18660
        av_buffer_unref(&avctx->internal->pool);
1185
1186

18660
        if (avctx->hwaccel && avctx->hwaccel->uninit)
1187
            avctx->hwaccel->uninit(avctx);
1188
18660
        av_freep(&avctx->internal->hwaccel_priv_data);
1189
1190
18660
        av_bsf_free(&avctx->internal->bsf);
1191
1192
18660
        av_freep(&avctx->internal);
1193
    }
1194
1195
64356
    for (i = 0; i < avctx->nb_coded_side_data; i++)
1196
394
        av_freep(&avctx->coded_side_data[i].data);
1197
63962
    av_freep(&avctx->coded_side_data);
1198
63962
    avctx->nb_coded_side_data = 0;
1199
1200
63962
    av_buffer_unref(&avctx->hw_frames_ctx);
1201
63962
    av_buffer_unref(&avctx->hw_device_ctx);
1202
1203

63962
    if (avctx->priv_data && avctx->codec && avctx->codec->priv_class)
1204
4060
        av_opt_free(avctx->priv_data);
1205
63962
    av_opt_free(avctx);
1206
63962
    av_freep(&avctx->priv_data);
1207
63962
    if (av_codec_is_encoder(avctx->codec)) {
1208
6019
        av_freep(&avctx->extradata);
1209
#if FF_API_CODED_FRAME
1210
FF_DISABLE_DEPRECATION_WARNINGS
1211
6019
        av_frame_free(&avctx->coded_frame);
1212
FF_ENABLE_DEPRECATION_WARNINGS
1213
#endif
1214
    }
1215
63962
    avctx->codec = NULL;
1216
63962
    avctx->active_thread_type = 0;
1217
1218
63962
    return 0;
1219
}
1220
1221
16216
const char *avcodec_get_name(enum AVCodecID id)
1222
{
1223
    const AVCodecDescriptor *cd;
1224
    const AVCodec *codec;
1225
1226
16216
    if (id == AV_CODEC_ID_NONE)
1227
154
        return "none";
1228
16062
    cd = avcodec_descriptor_get(id);
1229
16062
    if (cd)
1230
16060
        return cd->name;
1231
2
    av_log(NULL, AV_LOG_WARNING, "Codec 0x%x is not in the full list.\n", id);
1232
2
    codec = avcodec_find_decoder(id);
1233
2
    if (codec)
1234
        return codec->name;
1235
2
    codec = avcodec_find_encoder(id);
1236
2
    if (codec)
1237
        return codec->name;
1238
2
    return "unknown_codec";
1239
}
1240
1241
#if FF_API_TAG_STRING
1242
size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag)
1243
{
1244
    int i, len, ret = 0;
1245
1246
#define TAG_PRINT(x)                                              \
1247
    (((x) >= '0' && (x) <= '9') ||                                \
1248
     ((x) >= 'a' && (x) <= 'z') || ((x) >= 'A' && (x) <= 'Z') ||  \
1249
     ((x) == '.' || (x) == ' ' || (x) == '-' || (x) == '_'))
1250
1251
    for (i = 0; i < 4; i++) {
1252
        len = snprintf(buf, buf_size,
1253
                       TAG_PRINT(codec_tag & 0xFF) ? "%c" : "[%d]", codec_tag & 0xFF);
1254
        buf        += len;
1255
        buf_size    = buf_size > len ? buf_size - len : 0;
1256
        ret        += len;
1257
        codec_tag >>= 8;
1258
    }
1259
    return ret;
1260
}
1261
#endif
1262
1263
12614
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
1264
{
1265
    const char *codec_type;
1266
    const char *codec_name;
1267
12614
    const char *profile = NULL;
1268
    int64_t bitrate;
1269
12614
    int new_line = 0;
1270
    AVRational display_aspect_ratio;
1271
12614
    const char *separator = enc->dump_separator ? (const char *)enc->dump_separator : ", ";
1272
1273

12614
    if (!buf || buf_size <= 0)
1274
3
        return;
1275
12614
    codec_type = av_get_media_type_string(enc->codec_type);
1276
12614
    codec_name = avcodec_get_name(enc->codec_id);
1277
12614
    profile = avcodec_profile_name(enc->codec_id, enc->profile);
1278
1279
12614
    snprintf(buf, buf_size, "%s: %s", codec_type ? codec_type : "unknown",
1280
             codec_name);
1281
12614
    buf[0] ^= 'a' ^ 'A'; /* first letter in uppercase */
1282
1283

12614
    if (enc->codec && strcmp(enc->codec->name, codec_name))
1284
1
        snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", enc->codec->name);
1285
1286
12614
    if (profile)
1287
1552
        snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", profile);
1288
12614
    if (   enc->codec_type == AVMEDIA_TYPE_VIDEO
1289
9795
        && av_log_get_level() >= AV_LOG_VERBOSE
1290
        && enc->refs)
1291
        snprintf(buf + strlen(buf), buf_size - strlen(buf),
1292
                 ", %d reference frame%s",
1293
                 enc->refs, enc->refs > 1 ? "s" : "");
1294
1295
12614
    if (enc->codec_tag)
1296
7298
        snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s / 0x%04X)",
1297
7298
                 av_fourcc2str(enc->codec_tag), enc->codec_tag);
1298
1299

12614
    switch (enc->codec_type) {
1300
9795
    case AVMEDIA_TYPE_VIDEO:
1301
        {
1302
9795
            char detail[256] = "(";
1303
1304
9795
            av_strlcat(buf, separator, buf_size);
1305
1306
77
            snprintf(buf + strlen(buf), buf_size - strlen(buf),
1307
9795
                 "%s", enc->pix_fmt == AV_PIX_FMT_NONE ? "none" :
1308
9718
                     av_get_pix_fmt_name(enc->pix_fmt));
1309

9795
            if (enc->bits_per_raw_sample && enc->pix_fmt != AV_PIX_FMT_NONE &&
1310
3411
                enc->bits_per_raw_sample < av_pix_fmt_desc_get(enc->pix_fmt)->comp[0].depth)
1311
9
                av_strlcatf(detail, sizeof(detail), "%d bpc, ", enc->bits_per_raw_sample);
1312
9795
            if (enc->color_range != AVCOL_RANGE_UNSPECIFIED)
1313
4481
                av_strlcatf(detail, sizeof(detail), "%s, ",
1314
                            av_color_range_name(enc->color_range));
1315
1316
9795
            if (enc->colorspace != AVCOL_SPC_UNSPECIFIED ||
1317
9268
                enc->color_primaries != AVCOL_PRI_UNSPECIFIED ||
1318
9268
                enc->color_trc != AVCOL_TRC_UNSPECIFIED) {
1319
542
                if (enc->colorspace != (int)enc->color_primaries ||
1320
147
                    enc->colorspace != (int)enc->color_trc) {
1321
421
                    new_line = 1;
1322
421
                    av_strlcatf(detail, sizeof(detail), "%s/%s/%s, ",
1323
                                av_color_space_name(enc->colorspace),
1324
                                av_color_primaries_name(enc->color_primaries),
1325
                                av_color_transfer_name(enc->color_trc));
1326
                } else
1327
121
                    av_strlcatf(detail, sizeof(detail), "%s, ",
1328
                                av_get_colorspace_name(enc->colorspace));
1329
            }
1330
1331
9795
            if (enc->field_order != AV_FIELD_UNKNOWN) {
1332
5190
                const char *field_order = "progressive";
1333
5190
                if (enc->field_order == AV_FIELD_TT)
1334
99
                    field_order = "top first";
1335
5091
                else if (enc->field_order == AV_FIELD_BB)
1336
34
                    field_order = "bottom first";
1337
5057
                else if (enc->field_order == AV_FIELD_TB)
1338
317
                    field_order = "top coded first (swapped)";
1339
4740
                else if (enc->field_order == AV_FIELD_BT)
1340
72
                    field_order = "bottom coded first (swapped)";
1341
1342
5190
                av_strlcatf(detail, sizeof(detail), "%s, ", field_order);
1343
            }
1344
1345
9795
            if (av_log_get_level() >= AV_LOG_VERBOSE &&
1346
                enc->chroma_sample_location != AVCHROMA_LOC_UNSPECIFIED)
1347
                av_strlcatf(detail, sizeof(detail), "%s, ",
1348
                            av_chroma_location_name(enc->chroma_sample_location));
1349
1350
9795
            if (strlen(detail) > 1) {
1351
6011
                detail[strlen(detail) - 2] = 0;
1352
6011
                av_strlcatf(buf, buf_size, "%s)", detail);
1353
            }
1354
        }
1355
1356
9795
        if (enc->width) {
1357
9789
            av_strlcat(buf, new_line ? separator : ", ", buf_size);
1358
1359
9789
            snprintf(buf + strlen(buf), buf_size - strlen(buf),
1360
                     "%dx%d",
1361
                     enc->width, enc->height);
1362
1363
9789
            if (av_log_get_level() >= AV_LOG_VERBOSE &&
1364
                (enc->width != enc->coded_width ||
1365
                 enc->height != enc->coded_height))
1366
                snprintf(buf + strlen(buf), buf_size - strlen(buf),
1367
                         " (%dx%d)", enc->coded_width, enc->coded_height);
1368
1369
9789
            if (enc->sample_aspect_ratio.num) {
1370
1217
                av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den,
1371
1217
                          enc->width * (int64_t)enc->sample_aspect_ratio.num,
1372
1217
                          enc->height * (int64_t)enc->sample_aspect_ratio.den,
1373
                          1024 * 1024);
1374
1217
                snprintf(buf + strlen(buf), buf_size - strlen(buf),
1375
                         " [SAR %d:%d DAR %d:%d]",
1376
                         enc->sample_aspect_ratio.num, enc->sample_aspect_ratio.den,
1377
                         display_aspect_ratio.num, display_aspect_ratio.den);
1378
            }
1379
9789
            if (av_log_get_level() >= AV_LOG_DEBUG) {
1380
                int g = av_gcd(enc->time_base.num, enc->time_base.den);
1381
                snprintf(buf + strlen(buf), buf_size - strlen(buf),
1382
                         ", %d/%d",
1383
                         enc->time_base.num / g, enc->time_base.den / g);
1384
            }
1385
        }
1386
9795
        if (encode) {
1387
4844
            snprintf(buf + strlen(buf), buf_size - strlen(buf),
1388
                     ", q=%d-%d", enc->qmin, enc->qmax);
1389
        } else {
1390
4951
            if (enc->properties & FF_CODEC_PROPERTY_CLOSED_CAPTIONS)
1391
2
                snprintf(buf + strlen(buf), buf_size - strlen(buf),
1392
                         ", Closed Captions");
1393
4951
            if (enc->properties & FF_CODEC_PROPERTY_LOSSLESS)
1394
19
                snprintf(buf + strlen(buf), buf_size - strlen(buf),
1395
                         ", lossless");
1396
        }
1397
9795
        break;
1398
2666
    case AVMEDIA_TYPE_AUDIO:
1399
2666
        av_strlcat(buf, separator, buf_size);
1400
1401
2666
        if (enc->sample_rate) {
1402
2664
            snprintf(buf + strlen(buf), buf_size - strlen(buf),
1403
                     "%d Hz, ", enc->sample_rate);
1404
        }
1405
2666
        av_get_channel_layout_string(buf + strlen(buf), buf_size - strlen(buf), enc->channels, enc->channel_layout);
1406
2666
        if (enc->sample_fmt != AV_SAMPLE_FMT_NONE) {
1407
2665
            snprintf(buf + strlen(buf), buf_size - strlen(buf),
1408
                     ", %s", av_get_sample_fmt_name(enc->sample_fmt));
1409
        }
1410
2666
        if (   enc->bits_per_raw_sample > 0
1411
372
            && enc->bits_per_raw_sample != av_get_bytes_per_sample(enc->sample_fmt) * 8)
1412
117
            snprintf(buf + strlen(buf), buf_size - strlen(buf),
1413
                     " (%d bit)", enc->bits_per_raw_sample);
1414
2666
        if (av_log_get_level() >= AV_LOG_VERBOSE) {
1415
4
            if (enc->initial_padding)
1416
2
                snprintf(buf + strlen(buf), buf_size - strlen(buf),
1417
                         ", delay %d", enc->initial_padding);
1418
4
            if (enc->trailing_padding)
1419
                snprintf(buf + strlen(buf), buf_size - strlen(buf),
1420
                         ", padding %d", enc->trailing_padding);
1421
        }
1422
2666
        break;
1423
64
    case AVMEDIA_TYPE_DATA:
1424
64
        if (av_log_get_level() >= AV_LOG_DEBUG) {
1425
            int g = av_gcd(enc->time_base.num, enc->time_base.den);
1426
            if (g)
1427
                snprintf(buf + strlen(buf), buf_size - strlen(buf),
1428
                         ", %d/%d",
1429
                         enc->time_base.num / g, enc->time_base.den / g);
1430
        }
1431
64
        break;
1432
86
    case AVMEDIA_TYPE_SUBTITLE:
1433
86
        if (enc->width)
1434
17
            snprintf(buf + strlen(buf), buf_size - strlen(buf),
1435
                     ", %dx%d", enc->width, enc->height);
1436
86
        break;
1437
3
    default:
1438
3
        return;
1439
    }
1440
12611
    if (encode) {
1441
6125
        if (enc->flags & AV_CODEC_FLAG_PASS1)
1442
            snprintf(buf + strlen(buf), buf_size - strlen(buf),
1443
                     ", pass 1");
1444
6125
        if (enc->flags & AV_CODEC_FLAG_PASS2)
1445
            snprintf(buf + strlen(buf), buf_size - strlen(buf),
1446
                     ", pass 2");
1447
    }
1448
12611
    bitrate = get_bit_rate(enc);
1449
12611
    if (bitrate != 0) {
1450
8227
        snprintf(buf + strlen(buf), buf_size - strlen(buf),
1451
                 ", %"PRId64" kb/s", bitrate / 1000);
1452
4384
    } else if (enc->rc_max_rate > 0) {
1453
        snprintf(buf + strlen(buf), buf_size - strlen(buf),
1454
                 ", max. %"PRId64" kb/s", enc->rc_max_rate / 1000);
1455
    }
1456
}
1457
1458
const char *av_get_profile_name(const AVCodec *codec, int profile)
1459
{
1460
    const AVProfile *p;
1461
    if (profile == FF_PROFILE_UNKNOWN || !codec->profiles)
1462
        return NULL;
1463
1464
    for (p = codec->profiles; p->profile != FF_PROFILE_UNKNOWN; p++)
1465
        if (p->profile == profile)
1466
            return p->name;
1467
1468
    return NULL;
1469
}
1470
1471
12623
const char *avcodec_profile_name(enum AVCodecID codec_id, int profile)
1472
{
1473
12623
    const AVCodecDescriptor *desc = avcodec_descriptor_get(codec_id);
1474
    const AVProfile *p;
1475
1476

12623
    if (profile == FF_PROFILE_UNKNOWN || !desc || !desc->profiles)
1477
11054
        return NULL;
1478
1479
4148
    for (p = desc->profiles; p->profile != FF_PROFILE_UNKNOWN; p++)
1480
4138
        if (p->profile == profile)
1481
1559
            return p->name;
1482
1483
10
    return NULL;
1484
}
1485
1486
6058
unsigned avcodec_version(void)
1487
{
1488
    av_assert0(AV_CODEC_ID_PCM_S8_PLANAR==65563);
1489
    av_assert0(AV_CODEC_ID_ADPCM_G722==69660);
1490
    av_assert0(AV_CODEC_ID_SRT==94216);
1491
    av_assert0(LIBAVCODEC_VERSION_MICRO >= 100);
1492
1493
6058
    return LIBAVCODEC_VERSION_INT;
1494
}
1495
1496
6058
const char *avcodec_configuration(void)
1497
{
1498
6058
    return FFMPEG_CONFIGURATION;
1499
}
1500
1501
const char *avcodec_license(void)
1502
{
1503
#define LICENSE_PREFIX "libavcodec license: "
1504
    return &LICENSE_PREFIX FFMPEG_LICENSE[sizeof(LICENSE_PREFIX) - 1];
1505
}
1506
1507
808740
int av_get_exact_bits_per_sample(enum AVCodecID codec_id)
1508
{
1509

808740
    switch (codec_id) {
1510
1025
    case AV_CODEC_ID_8SVX_EXP:
1511
    case AV_CODEC_ID_8SVX_FIB:
1512
    case AV_CODEC_ID_ADPCM_ARGO:
1513
    case AV_CODEC_ID_ADPCM_CT:
1514
    case AV_CODEC_ID_ADPCM_IMA_ALP:
1515
    case AV_CODEC_ID_ADPCM_IMA_AMV:
1516
    case AV_CODEC_ID_ADPCM_IMA_APC:
1517
    case AV_CODEC_ID_ADPCM_IMA_APM:
1518
    case AV_CODEC_ID_ADPCM_IMA_EA_SEAD:
1519
    case AV_CODEC_ID_ADPCM_IMA_OKI:
1520
    case AV_CODEC_ID_ADPCM_IMA_WS:
1521
    case AV_CODEC_ID_ADPCM_IMA_SSI:
1522
    case AV_CODEC_ID_ADPCM_G722:
1523
    case AV_CODEC_ID_ADPCM_YAMAHA:
1524
    case AV_CODEC_ID_ADPCM_AICA:
1525
1025
        return 4;
1526
9708
    case AV_CODEC_ID_DSD_LSBF:
1527
    case AV_CODEC_ID_DSD_MSBF:
1528
    case AV_CODEC_ID_DSD_LSBF_PLANAR:
1529
    case AV_CODEC_ID_DSD_MSBF_PLANAR:
1530
    case AV_CODEC_ID_PCM_ALAW:
1531
    case AV_CODEC_ID_PCM_MULAW:
1532
    case AV_CODEC_ID_PCM_VIDC:
1533
    case AV_CODEC_ID_PCM_S8:
1534
    case AV_CODEC_ID_PCM_S8_PLANAR:
1535
    case AV_CODEC_ID_PCM_U8:
1536
    case AV_CODEC_ID_SDX2_DPCM:
1537
    case AV_CODEC_ID_DERF_DPCM:
1538
9708
        return 8;
1539
325253
    case AV_CODEC_ID_PCM_S16BE:
1540
    case AV_CODEC_ID_PCM_S16BE_PLANAR:
1541
    case AV_CODEC_ID_PCM_S16LE:
1542
    case AV_CODEC_ID_PCM_S16LE_PLANAR:
1543
    case AV_CODEC_ID_PCM_U16BE:
1544
    case AV_CODEC_ID_PCM_U16LE:
1545
325253
        return 16;
1546
38145
    case AV_CODEC_ID_PCM_S24DAUD:
1547
    case AV_CODEC_ID_PCM_S24BE:
1548
    case AV_CODEC_ID_PCM_S24LE:
1549
    case AV_CODEC_ID_PCM_S24LE_PLANAR:
1550
    case AV_CODEC_ID_PCM_U24BE:
1551
    case AV_CODEC_ID_PCM_U24LE:
1552
38145
        return 24;
1553
16601
    case AV_CODEC_ID_PCM_S32BE:
1554
    case AV_CODEC_ID_PCM_S32LE:
1555
    case AV_CODEC_ID_PCM_S32LE_PLANAR:
1556
    case AV_CODEC_ID_PCM_U32BE:
1557
    case AV_CODEC_ID_PCM_U32LE:
1558
    case AV_CODEC_ID_PCM_F32BE:
1559
    case AV_CODEC_ID_PCM_F32LE:
1560
    case AV_CODEC_ID_PCM_F24LE:
1561
    case AV_CODEC_ID_PCM_F16LE:
1562
16601
        return 32;
1563
20782
    case AV_CODEC_ID_PCM_F64BE:
1564
    case AV_CODEC_ID_PCM_F64LE:
1565
    case AV_CODEC_ID_PCM_S64BE:
1566
    case AV_CODEC_ID_PCM_S64LE:
1567
20782
        return 64;
1568
397226
    default:
1569
397226
        return 0;
1570
    }
1571
}
1572
1573
16
enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be)
1574
{
1575
    static const enum AVCodecID map[][2] = {
1576
        [AV_SAMPLE_FMT_U8  ] = { AV_CODEC_ID_PCM_U8,    AV_CODEC_ID_PCM_U8    },
1577
        [AV_SAMPLE_FMT_S16 ] = { AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S16BE },
1578
        [AV_SAMPLE_FMT_S32 ] = { AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_S32BE },
1579
        [AV_SAMPLE_FMT_FLT ] = { AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_F32BE },
1580
        [AV_SAMPLE_FMT_DBL ] = { AV_CODEC_ID_PCM_F64LE, AV_CODEC_ID_PCM_F64BE },
1581
        [AV_SAMPLE_FMT_U8P ] = { AV_CODEC_ID_PCM_U8,    AV_CODEC_ID_PCM_U8    },
1582
        [AV_SAMPLE_FMT_S16P] = { AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S16BE },
1583
        [AV_SAMPLE_FMT_S32P] = { AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_S32BE },
1584
        [AV_SAMPLE_FMT_S64P] = { AV_CODEC_ID_PCM_S64LE, AV_CODEC_ID_PCM_S64BE },
1585
        [AV_SAMPLE_FMT_FLTP] = { AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_F32BE },
1586
        [AV_SAMPLE_FMT_DBLP] = { AV_CODEC_ID_PCM_F64LE, AV_CODEC_ID_PCM_F64BE },
1587
    };
1588

16
    if (fmt < 0 || fmt >= FF_ARRAY_ELEMS(map))
1589
        return AV_CODEC_ID_NONE;
1590

16
    if (be < 0 || be > 1)
1591
16
        be = AV_NE(1, 0);
1592
16
    return map[fmt][be];
1593
}
1594
1595
323622
int av_get_bits_per_sample(enum AVCodecID codec_id)
1596
{
1597

323622
    switch (codec_id) {
1598
3
    case AV_CODEC_ID_ADPCM_SBPRO_2:
1599
3
        return 2;
1600
3
    case AV_CODEC_ID_ADPCM_SBPRO_3:
1601
3
        return 3;
1602
64
    case AV_CODEC_ID_ADPCM_SBPRO_4:
1603
    case AV_CODEC_ID_ADPCM_IMA_WAV:
1604
    case AV_CODEC_ID_ADPCM_IMA_QT:
1605
    case AV_CODEC_ID_ADPCM_SWF:
1606
    case AV_CODEC_ID_ADPCM_MS:
1607
64
        return 4;
1608
323552
    default:
1609
323552
        return av_get_exact_bits_per_sample(codec_id);
1610
    }
1611
}
1612
1613
479323
static int get_audio_frame_duration(enum AVCodecID id, int sr, int ch, int ba,
1614
                                    uint32_t tag, int bits_per_coded_sample, int64_t bitrate,
1615
                                    uint8_t * extradata, int frame_size, int frame_bytes)
1616
{
1617
479323
    int bps = av_get_exact_bits_per_sample(id);
1618

479323
    int framecount = (ba > 0 && frame_bytes / ba > 0) ? frame_bytes / ba : 1;
1619
1620
    /* codecs with an exact constant bits per sample */
1621


479323
    if (bps > 0 && ch > 0 && frame_bytes > 0 && ch < 32768 && bps < 32768)
1622
89158
        return (frame_bytes * 8LL) / (bps * ch);
1623
390165
    bps = bits_per_coded_sample;
1624
1625
    /* codecs with a fixed packet duration */
1626



390165
    switch (id) {
1627
2
    case AV_CODEC_ID_ADPCM_ADX:    return   32;
1628
4
    case AV_CODEC_ID_ADPCM_IMA_QT: return   64;
1629
600
    case AV_CODEC_ID_ADPCM_EA_XAS: return  128;
1630
3933
    case AV_CODEC_ID_AMR_NB:
1631
    case AV_CODEC_ID_EVRC:
1632
    case AV_CODEC_ID_GSM:
1633
    case AV_CODEC_ID_QCELP:
1634
3933
    case AV_CODEC_ID_RA_288:       return  160;
1635
    case AV_CODEC_ID_AMR_WB:
1636
    case AV_CODEC_ID_GSM_MS:       return  320;
1637
    case AV_CODEC_ID_MP1:          return  384;
1638
3274
    case AV_CODEC_ID_ATRAC1:       return  512;
1639
2756
    case AV_CODEC_ID_ATRAC9:
1640
    case AV_CODEC_ID_ATRAC3:
1641
2756
        if (framecount > INT_MAX/1024)
1642
            return 0;
1643
2756
        return 1024 * framecount;
1644
813
    case AV_CODEC_ID_ATRAC3P:      return 2048;
1645
1843
    case AV_CODEC_ID_MP2:
1646
1843
    case AV_CODEC_ID_MUSEPACK7:    return 1152;
1647
343
    case AV_CODEC_ID_AC3:          return 1536;
1648
    }
1649
1650
376597
    if (sr > 0) {
1651
        /* calc from sample rate */
1652
47010
        if (id == AV_CODEC_ID_TTA)
1653
1
            return 256 * sr / 245;
1654
47009
        else if (id == AV_CODEC_ID_DST)
1655
            return 588 * sr / 44100;
1656
1657
47009
        if (ch > 0) {
1658
            /* calc from sample rate and channels */
1659
47009
            if (id == AV_CODEC_ID_BINKAUDIO_DCT) {
1660
65
                if (sr / 22050 > 22)
1661
                    return 0;
1662
65
                return (480 << (sr / 22050)) / ch;
1663
            }
1664
        }
1665
1666
46944
        if (id == AV_CODEC_ID_MP3)
1667
2690
            return sr <= 24000 ? 576 : 1152;
1668
    }
1669
1670
373841
    if (ba > 0) {
1671
        /* calc from block_align */
1672
17298
        if (id == AV_CODEC_ID_SIPR) {
1673

6972
            switch (ba) {
1674
3250
            case 20: return 160;
1675
1706
            case 19: return 144;
1676
1680
            case 29: return 288;
1677
336
            case 37: return 480;
1678
            }
1679
10326
        } else if (id == AV_CODEC_ID_ILBC) {
1680
            switch (ba) {
1681
            case 38: return 160;
1682
            case 50: return 240;
1683
            }
1684
        }
1685
    }
1686
1687
366869
    if (frame_bytes > 0) {
1688
        /* calc from frame_bytes only */
1689
364191
        if (id == AV_CODEC_ID_TRUESPEECH)
1690
12
            return 240 * (frame_bytes / 32);
1691
364179
        if (id == AV_CODEC_ID_NELLYMOSER)
1692
1698
            return 256 * (frame_bytes / 64);
1693
362481
        if (id == AV_CODEC_ID_RA_144)
1694
756
            return 160 * (frame_bytes / 20);
1695
1696
361725
        if (bps > 0) {
1697
            /* calc from frame_bytes and bits_per_coded_sample */
1698

13394
            if (id == AV_CODEC_ID_ADPCM_G726 || id == AV_CODEC_ID_ADPCM_G726LE)
1699
22
                return frame_bytes * 8 / bps;
1700
        }
1701
1702

361703
        if (ch > 0 && ch < INT_MAX/16) {
1703
            /* calc from frame_bytes and channels */
1704




34744
            switch (id) {
1705
            case AV_CODEC_ID_FASTAUDIO:
1706
                return frame_bytes / (40 * ch) * 256;
1707
            case AV_CODEC_ID_ADPCM_IMA_MOFLEX:
1708
                return (frame_bytes - 4 * ch) / (128 * ch) * 256;
1709
36
            case AV_CODEC_ID_ADPCM_AFC:
1710
36
                return frame_bytes / (9 * ch) * 16;
1711
33
            case AV_CODEC_ID_ADPCM_PSX:
1712
            case AV_CODEC_ID_ADPCM_DTK:
1713
33
                return frame_bytes / (16 * ch) * 28;
1714
452
            case AV_CODEC_ID_ADPCM_4XM:
1715
            case AV_CODEC_ID_ADPCM_IMA_DAT4:
1716
            case AV_CODEC_ID_ADPCM_IMA_ISS:
1717
452
                return (frame_bytes - 4 * ch) * 2 / ch;
1718
1601
            case AV_CODEC_ID_ADPCM_IMA_SMJPEG:
1719
1601
                return (frame_bytes - 4) * 2 / ch;
1720
            case AV_CODEC_ID_ADPCM_IMA_AMV:
1721
                return (frame_bytes - 8) * 2;
1722
1792
            case AV_CODEC_ID_ADPCM_THP:
1723
            case AV_CODEC_ID_ADPCM_THP_LE:
1724
1792
                if (extradata)
1725
1767
                    return frame_bytes * 14 / (8 * ch);
1726
25
                break;
1727
111
            case AV_CODEC_ID_ADPCM_XA:
1728
111
                return (frame_bytes / 128) * 224 / ch;
1729
327
            case AV_CODEC_ID_INTERPLAY_DPCM:
1730
327
                return (frame_bytes - 6 - ch) / ch;
1731
507
            case AV_CODEC_ID_ROQ_DPCM:
1732
507
                return (frame_bytes - 8) / ch;
1733
112
            case AV_CODEC_ID_XAN_DPCM:
1734
112
                return (frame_bytes - 2 * ch) / ch;
1735
            case AV_CODEC_ID_MACE3:
1736
                return 3 * frame_bytes / ch;
1737
69
            case AV_CODEC_ID_MACE6:
1738
69
                return 6 * frame_bytes / ch;
1739
            case AV_CODEC_ID_PCM_LXF:
1740
                return 2 * (frame_bytes / (5 * ch));
1741
1311
            case AV_CODEC_ID_IAC:
1742
            case AV_CODEC_ID_IMC:
1743
1311
                return 4 * frame_bytes / ch;
1744
            }
1745
1746
28418
            if (tag) {
1747
                /* calc from frame_bytes, channels, and codec_tag */
1748
9211
                if (id == AV_CODEC_ID_SOL_DPCM) {
1749
74
                    if (tag == 3)
1750
74
                        return frame_bytes / ch;
1751
                    else
1752
                        return frame_bytes * 2 / ch;
1753
                }
1754
            }
1755
1756
28344
            if (ba > 0) {
1757
                /* calc from frame_bytes, channels, and block_align */
1758
7377
                int blocks = frame_bytes / ba;
1759

7377
                switch (id) {
1760
394
                case AV_CODEC_ID_ADPCM_IMA_WAV:
1761

394
                    if (bps < 2 || bps > 5)
1762
                        return 0;
1763
394
                    return blocks * (1 + (ba - 4 * ch) / (bps * ch) * 8);
1764
669
                case AV_CODEC_ID_ADPCM_IMA_DK3:
1765
669
                    return blocks * (((ba - 16) * 2 / 3 * 4) / ch);
1766
649
                case AV_CODEC_ID_ADPCM_IMA_DK4:
1767
649
                    return blocks * (1 + (ba - 4 * ch) * 2 / ch);
1768
1001
                case AV_CODEC_ID_ADPCM_IMA_RAD:
1769
1001
                    return blocks * ((ba - 4 * ch) * 2 / ch);
1770
366
                case AV_CODEC_ID_ADPCM_MS:
1771
366
                    return blocks * (2 + (ba - 7 * ch) * 2 / ch);
1772
                case AV_CODEC_ID_ADPCM_MTAF:
1773
                    return blocks * (ba - 16) * 2 / ch;
1774
                }
1775
            }
1776
1777
25265
            if (bps > 0) {
1778
                /* calc from frame_bytes, channels, and bits_per_coded_sample */
1779

6915
                switch (id) {
1780
654
                case AV_CODEC_ID_PCM_DVD:
1781

654
                    if(bps<4 || frame_bytes<3)
1782
                        return 0;
1783
654
                    return 2 * ((frame_bytes - 3) / ((bps * 2 / 8) * ch));
1784
                case AV_CODEC_ID_PCM_BLURAY:
1785
                    if(bps<4 || frame_bytes<4)
1786
                        return 0;
1787
                    return (frame_bytes - 4) / ((FFALIGN(ch, 2) * bps) / 8);
1788
                case AV_CODEC_ID_S302M:
1789
                    return 2 * (frame_bytes / ((bps + 4) / 4)) / ch;
1790
                }
1791
            }
1792
        }
1793
    }
1794
1795
    /* Fall back on using frame_size */
1796

354248
    if (frame_size > 1 && frame_bytes)
1797
11451
        return frame_size;
1798
1799
    //For WMA we currently have no other means to calculate duration thus we
1800
    //do it here by assuming CBR, which is true for all known cases.
1801


342797
    if (bitrate > 0 && frame_bytes > 0 && sr > 0 && ba > 1) {
1802

4253
        if (id == AV_CODEC_ID_WMAV1 || id == AV_CODEC_ID_WMAV2)
1803
770
            return  (frame_bytes * 8LL * sr) / bitrate;
1804
    }
1805
1806
342027
    return 0;
1807
}
1808
1809
382605
int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
1810
{
1811
382605
    return get_audio_frame_duration(avctx->codec_id, avctx->sample_rate,
1812
                                    avctx->channels, avctx->block_align,
1813
                                    avctx->codec_tag, avctx->bits_per_coded_sample,
1814
                                    avctx->bit_rate, avctx->extradata, avctx->frame_size,
1815
                                    frame_bytes);
1816
}
1817
1818
96718
int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes)
1819
{
1820
96718
    return get_audio_frame_duration(par->codec_id, par->sample_rate,
1821
                                    par->channels, par->block_align,
1822
                                    par->codec_tag, par->bits_per_coded_sample,
1823
                                    par->bit_rate, par->extradata, par->frame_size,
1824
                                    frame_bytes);
1825
}
1826
1827
#if !HAVE_THREADS
1828
int ff_thread_init(AVCodecContext *s)
1829
{
1830
    return -1;
1831
}
1832
1833
#endif
1834
1835
54
unsigned int av_xiphlacing(unsigned char *s, unsigned int v)
1836
{
1837
54
    unsigned int n = 0;
1838
1839
54
    while (v >= 0xff) {
1840
        *s++ = 0xff;
1841
        v -= 0xff;
1842
        n++;
1843
    }
1844
54
    *s = v;
1845
54
    n++;
1846
54
    return n;
1847
}
1848
1849
476
int ff_match_2uint16(const uint16_t(*tab)[2], int size, int a, int b)
1850
{
1851
    int i;
1852

1924
    for (i = 0; i < size && !(tab[i][0] == a && tab[i][1] == b); i++) ;
1853
476
    return i;
1854
}
1855
1856
13233
const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *codec, int index)
1857
{
1858
    int i;
1859

13233
    if (!codec->hw_configs || index < 0)
1860
10795
        return NULL;
1861
6412
    for (i = 0; i <= index; i++)
1862
4809
        if (!codec->hw_configs[i])
1863
835
            return NULL;
1864
1603
    return &codec->hw_configs[index]->public;
1865
}
1866
1867
#if FF_API_USER_VISIBLE_AVHWACCEL
1868
AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel)
1869
{
1870
    return NULL;
1871
}
1872
1873
void av_register_hwaccel(AVHWAccel *hwaccel)
1874
{
1875
}
1876
#endif
1877
1878
#if FF_API_LOCKMGR
1879
int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op))
1880
{
1881
    return 0;
1882
}
1883
#endif
1884
1885
623165
unsigned int avpriv_toupper4(unsigned int x)
1886
{
1887
623165
    return av_toupper(x & 0xFF) +
1888
623165
          (av_toupper((x >>  8) & 0xFF) << 8)  +
1889
1246330
          (av_toupper((x >> 16) & 0xFF) << 16) +
1890
623165
((unsigned)av_toupper((x >> 24) & 0xFF) << 24);
1891
}
1892
1893
136814
int ff_thread_ref_frame(ThreadFrame *dst, const ThreadFrame *src)
1894
{
1895
    int ret;
1896
1897
136814
    dst->owner[0] = src->owner[0];
1898
136814
    dst->owner[1] = src->owner[1];
1899
1900
136814
    ret = av_frame_ref(dst->f, src->f);
1901
136814
    if (ret < 0)
1902
6
        return ret;
1903
1904
136808
    av_assert0(!dst->progress);
1905
1906
136808
    if (src->progress &&
1907
333
        !(dst->progress = av_buffer_ref(src->progress))) {
1908
        ff_thread_release_buffer(dst->owner[0], dst);
1909
        return AVERROR(ENOMEM);
1910
    }
1911
1912
136808
    return 0;
1913
}
1914
1915
#if !HAVE_THREADS
1916
1917
enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
1918
{
1919
    return ff_get_format(avctx, fmt);
1920
}
1921
1922
int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
1923
{
1924
    f->owner[0] = f->owner[1] = avctx;
1925
    return ff_get_buffer(avctx, f->f, flags);
1926
}
1927
1928
void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f)
1929
{
1930
    if (f->f)
1931
        av_frame_unref(f->f);
1932
}
1933
1934
void ff_thread_finish_setup(AVCodecContext *avctx)
1935
{
1936
}
1937
1938
void ff_thread_report_progress(ThreadFrame *f, int progress, int field)
1939
{
1940
}
1941
1942
void ff_thread_await_progress(ThreadFrame *f, int progress, int field)
1943
{
1944
}
1945
1946
int ff_thread_can_start_frame(AVCodecContext *avctx)
1947
{
1948
    return 1;
1949
}
1950
1951
int ff_alloc_entries(AVCodecContext *avctx, int count)
1952
{
1953
    return 0;
1954
}
1955
1956
void ff_reset_entries(AVCodecContext *avctx)
1957
{
1958
}
1959
1960
void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift)
1961
{
1962
}
1963
1964
void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, int n)
1965
{
1966
}
1967
1968
#endif
1969
1970
2618344
int avcodec_is_open(AVCodecContext *s)
1971
{
1972
2618344
    return !!s->internal;
1973
}
1974
1975
568475
const uint8_t *avpriv_find_start_code(const uint8_t *av_restrict p,
1976
                                      const uint8_t *end,
1977
                                      uint32_t *av_restrict state)
1978
{
1979
    int i;
1980
1981
568475
    av_assert0(p <= end);
1982
568475
    if (p >= end)
1983
553
        return end;
1984
1985
2262597
    for (i = 0; i < 3; i++) {
1986
1698382
        uint32_t tmp = *state << 8;
1987
1698382
        *state = tmp + *(p++);
1988

1698382
        if (tmp == 0x100 || p == end)
1989
3707
            return p;
1990
    }
1991
1992
161500071
    while (p < end) {
1993
161442970
        if      (p[-1] > 1      ) p += 3;
1994
20659837
        else if (p[-2]          ) p += 2;
1995
12746832
        else if (p[-3]|(p[-1]-1)) p++;
1996
        else {
1997
507114
            p++;
1998
507114
            break;
1999
        }
2000
    }
2001
2002
564215
    p = FFMIN(p, end) - 4;
2003
564215
    *state = AV_RB32(p);
2004
2005
564215
    return p + 4;
2006
}
2007
2008
419
AVCPBProperties *av_cpb_properties_alloc(size_t *size)
2009
{
2010
419
    AVCPBProperties *props = av_mallocz(sizeof(AVCPBProperties));
2011
419
    if (!props)
2012
        return NULL;
2013
2014
419
    if (size)
2015
419
        *size = sizeof(*props);
2016
2017
419
    props->vbv_delay = UINT64_MAX;
2018
2019
419
    return props;
2020
}
2021
2022
831
AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx)
2023
{
2024
    AVPacketSideData *tmp;
2025
    AVCPBProperties  *props;
2026
    size_t size;
2027
    int i;
2028
2029
831
    for (i = 0; i < avctx->nb_coded_side_data; i++)
2030
437
        if (avctx->coded_side_data[i].type == AV_PKT_DATA_CPB_PROPERTIES)
2031
437
            return (AVCPBProperties *)avctx->coded_side_data[i].data;
2032
2033
394
    props = av_cpb_properties_alloc(&size);
2034
394
    if (!props)
2035
        return NULL;
2036
2037
394
    tmp = av_realloc_array(avctx->coded_side_data, avctx->nb_coded_side_data + 1, sizeof(*tmp));
2038
394
    if (!tmp) {
2039
        av_freep(&props);
2040
        return NULL;
2041
    }
2042
2043
394
    avctx->coded_side_data = tmp;
2044
394
    avctx->nb_coded_side_data++;
2045
2046
394
    avctx->coded_side_data[avctx->nb_coded_side_data - 1].type = AV_PKT_DATA_CPB_PROPERTIES;
2047
394
    avctx->coded_side_data[avctx->nb_coded_side_data - 1].data = (uint8_t*)props;
2048
394
    avctx->coded_side_data[avctx->nb_coded_side_data - 1].size = size;
2049
2050
394
    return props;
2051
}
2052
2053
155369
static void codec_parameters_reset(AVCodecParameters *par)
2054
{
2055
155369
    av_freep(&par->extradata);
2056
2057
155369
    memset(par, 0, sizeof(*par));
2058
2059
155369
    par->codec_type          = AVMEDIA_TYPE_UNKNOWN;
2060
155369
    par->codec_id            = AV_CODEC_ID_NONE;
2061
155369
    par->format              = -1;
2062
155369
    par->field_order         = AV_FIELD_UNKNOWN;
2063
155369
    par->color_range         = AVCOL_RANGE_UNSPECIFIED;
2064
155369
    par->color_primaries     = AVCOL_PRI_UNSPECIFIED;
2065
155369
    par->color_trc           = AVCOL_TRC_UNSPECIFIED;
2066
155369
    par->color_space         = AVCOL_SPC_UNSPECIFIED;
2067
155369
    par->chroma_location     = AVCHROMA_LOC_UNSPECIFIED;
2068
155369
    par->sample_aspect_ratio = (AVRational){ 0, 1 };
2069
155369
    par->profile             = FF_PROFILE_UNKNOWN;
2070
155369
    par->level               = FF_LEVEL_UNKNOWN;
2071
155369
}
2072
2073
48292
AVCodecParameters *avcodec_parameters_alloc(void)
2074
{
2075
48292
    AVCodecParameters *par = av_mallocz(sizeof(*par));
2076
2077
48292
    if (!par)
2078
        return NULL;
2079
48292
    codec_parameters_reset(par);
2080
48292
    return par;
2081
}
2082
2083
48286
void avcodec_parameters_free(AVCodecParameters **ppar)
2084
{
2085
48286
    AVCodecParameters *par = *ppar;
2086
2087
48286
    if (!par)
2088
        return;
2089
48286
    codec_parameters_reset(par);
2090
2091
48286
    av_freep(ppar);
2092
}
2093
2094
26911
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
2095
{
2096
26911
    codec_parameters_reset(dst);
2097
26911
    memcpy(dst, src, sizeof(*dst));
2098
2099
26911
    dst->extradata      = NULL;
2100
26911
    dst->extradata_size = 0;
2101
26911
    if (src->extradata) {
2102
4143
        dst->extradata = av_mallocz(src->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
2103
4143
        if (!dst->extradata)
2104
            return AVERROR(ENOMEM);
2105
4143
        memcpy(dst->extradata, src->extradata, src->extradata_size);
2106
4143
        dst->extradata_size = src->extradata_size;
2107
    }
2108
2109
26911
    return 0;
2110
}
2111
2112
31880
int avcodec_parameters_from_context(AVCodecParameters *par,
2113
                                    const AVCodecContext *codec)
2114
{
2115
31880
    codec_parameters_reset(par);
2116
2117
31880
    par->codec_type = codec->codec_type;
2118
31880
    par->codec_id   = codec->codec_id;
2119
31880
    par->codec_tag  = codec->codec_tag;
2120
2121
31880
    par->bit_rate              = codec->bit_rate;
2122
31880
    par->bits_per_coded_sample = codec->bits_per_coded_sample;
2123
31880
    par->bits_per_raw_sample   = codec->bits_per_raw_sample;
2124
31880
    par->profile               = codec->profile;
2125
31880
    par->level                 = codec->level;
2126
2127

31880
    switch (par->codec_type) {
2128
24620
    case AVMEDIA_TYPE_VIDEO:
2129
24620
        par->format              = codec->pix_fmt;
2130
24620
        par->width               = codec->width;
2131
24620
        par->height              = codec->height;
2132
24620
        par->field_order         = codec->field_order;
2133
24620
        par->color_range         = codec->color_range;
2134
24620
        par->color_primaries     = codec->color_primaries;
2135
24620
        par->color_trc           = codec->color_trc;
2136
24620
        par->color_space         = codec->colorspace;
2137
24620
        par->chroma_location     = codec->chroma_sample_location;
2138
24620
        par->sample_aspect_ratio = codec->sample_aspect_ratio;
2139
24620
        par->video_delay         = codec->has_b_frames;
2140
24620
        break;
2141
6935
    case AVMEDIA_TYPE_AUDIO:
2142
6935
        par->format           = codec->sample_fmt;
2143
6935
        par->channel_layout   = codec->channel_layout;
2144
6935
        par->channels         = codec->channels;
2145
6935
        par->sample_rate      = codec->sample_rate;
2146
6935
        par->block_align      = codec->block_align;
2147
6935
        par->frame_size       = codec->frame_size;
2148
6935
        par->initial_padding  = codec->initial_padding;
2149
6935
        par->trailing_padding = codec->trailing_padding;
2150
6935
        par->seek_preroll     = codec->seek_preroll;
2151
6935
        break;
2152
213
    case AVMEDIA_TYPE_SUBTITLE:
2153
213
        par->width  = codec->width;
2154
213
        par->height = codec->height;
2155
213
        break;
2156
    }
2157
2158
31880
    if (codec->extradata) {
2159
4986
        par->extradata = av_mallocz(codec->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
2160
4986
        if (!par->extradata)
2161
            return AVERROR(ENOMEM);
2162
4986
        memcpy(par->extradata, codec->extradata, codec->extradata_size);
2163
4986
        par->extradata_size = codec->extradata_size;
2164
    }
2165
2166
31880
    return 0;
2167
}
2168
2169
46897
int avcodec_parameters_to_context(AVCodecContext *codec,
2170
                                  const AVCodecParameters *par)
2171
{
2172
46897
    codec->codec_type = par->codec_type;
2173
46897
    codec->codec_id   = par->codec_id;
2174
46897
    codec->codec_tag  = par->codec_tag;
2175
2176
46897
    codec->bit_rate              = par->bit_rate;
2177
46897
    codec->bits_per_coded_sample = par->bits_per_coded_sample;
2178
46897
    codec->bits_per_raw_sample   = par->bits_per_raw_sample;
2179
46897
    codec->profile               = par->profile;
2180
46897
    codec->level                 = par->level;
2181
2182

46897
    switch (par->codec_type) {
2183
35231
    case AVMEDIA_TYPE_VIDEO:
2184
35231
        codec->pix_fmt                = par->format;
2185
35231
        codec->width                  = par->width;
2186
35231
        codec->height                 = par->height;
2187
35231
        codec->field_order            = par->field_order;
2188
35231
        codec->color_range            = par->color_range;
2189
35231
        codec->color_primaries        = par->color_primaries;
2190
35231
        codec->color_trc              = par->color_trc;
2191
35231
        codec->colorspace             = par->color_space;
2192
35231
        codec->chroma_sample_location = par->chroma_location;
2193
35231
        codec->sample_aspect_ratio    = par->sample_aspect_ratio;
2194
35231
        codec->has_b_frames           = par->video_delay;
2195
35231
        break;
2196
10978
    case AVMEDIA_TYPE_AUDIO:
2197
10978
        codec->sample_fmt       = par->format;
2198
10978
        codec->channel_layout   = par->channel_layout;
2199
10978
        codec->channels         = par->channels;
2200
10978
        codec->sample_rate      = par->sample_rate;
2201
10978
        codec->block_align      = par->block_align;
2202
10978
        codec->frame_size       = par->frame_size;
2203
10978
        codec->delay            =
2204
10978
        codec->initial_padding  = par->initial_padding;
2205
10978
        codec->trailing_padding = par->trailing_padding;
2206
10978
        codec->seek_preroll     = par->seek_preroll;
2207
10978
        break;
2208
331
    case AVMEDIA_TYPE_SUBTITLE:
2209
331
        codec->width  = par->width;
2210
331
        codec->height = par->height;
2211
331
        break;
2212
    }
2213
2214
46897
    if (par->extradata) {
2215
7031
        av_freep(&codec->extradata);
2216
7031
        codec->extradata = av_mallocz(par->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
2217
7031
        if (!codec->extradata)
2218
            return AVERROR(ENOMEM);
2219
7031
        memcpy(codec->extradata, par->extradata, par->extradata_size);
2220
7031
        codec->extradata_size = par->extradata_size;
2221
    }
2222
2223
46897
    return 0;
2224
}
2225
2226
static unsigned bcd2uint(uint8_t bcd)
2227
{
2228
    unsigned low  = bcd & 0xf;
2229
    unsigned high = bcd >> 4;
2230
    if (low > 9 || high > 9)
2231
        return 0;
2232
    return low + 10*high;
2233
}
2234
2235
int ff_alloc_timecode_sei(const AVFrame *frame, AVRational rate, size_t prefix_len,
2236
                     void **data, size_t *sei_size)
2237
{
2238
    AVFrameSideData *sd = NULL;
2239
    uint8_t *sei_data;
2240
    PutBitContext pb;
2241
    uint32_t *tc;
2242
    int m;
2243
2244
    if (frame)
2245
        sd = av_frame_get_side_data(frame, AV_FRAME_DATA_S12M_TIMECODE);
2246
2247
    if (!sd) {
2248
        *data = NULL;
2249
        return 0;
2250
    }
2251
    tc =  (uint32_t*)sd->data;
2252
    m  = tc[0] & 3;
2253
2254
    *sei_size = sizeof(uint32_t) * 4;
2255
    *data = av_mallocz(*sei_size + prefix_len);
2256
    if (!*data)
2257
        return AVERROR(ENOMEM);
2258
    sei_data = (uint8_t*)*data + prefix_len;
2259
2260
    init_put_bits(&pb, sei_data, *sei_size);
2261
    put_bits(&pb, 2, m); // num_clock_ts
2262
2263
    for (int j = 1; j <= m; j++) {
2264
        uint32_t tcsmpte = tc[j];
2265
        unsigned hh   = bcd2uint(tcsmpte     & 0x3f);    // 6-bit hours
2266
        unsigned mm   = bcd2uint(tcsmpte>>8  & 0x7f);    // 7-bit minutes
2267
        unsigned ss   = bcd2uint(tcsmpte>>16 & 0x7f);    // 7-bit seconds
2268
        unsigned ff   = bcd2uint(tcsmpte>>24 & 0x3f);    // 6-bit frames
2269
        unsigned drop = tcsmpte & 1<<30 && !0;  // 1-bit drop if not arbitrary bit
2270
2271
        /* Calculate frame number of HEVC by SMPTE ST 12-1:2014 Sec 12.2 if rate > 30FPS */
2272
        if (av_cmp_q(rate, (AVRational) {30, 1}) == 1) {
2273
            unsigned pc;
2274
            ff *= 2;
2275
            if (av_cmp_q(rate, (AVRational) {50, 1}) == 0)
2276
                pc = !!(tcsmpte & 1 << 7);
2277
            else
2278
                pc = !!(tcsmpte & 1 << 23);
2279
            ff = (ff + pc) & 0x7f;
2280
        }
2281
2282
        put_bits(&pb, 1, 1); // clock_timestamp_flag
2283
        put_bits(&pb, 1, 1); // units_field_based_flag
2284
        put_bits(&pb, 5, 0); // counting_type
2285
        put_bits(&pb, 1, 1); // full_timestamp_flag
2286
        put_bits(&pb, 1, 0); // discontinuity_flag
2287
        put_bits(&pb, 1, drop);
2288
        put_bits(&pb, 9, ff);
2289
        put_bits(&pb, 6, ss);
2290
        put_bits(&pb, 6, mm);
2291
        put_bits(&pb, 5, hh);
2292
        put_bits(&pb, 5, 0);
2293
    }
2294
    flush_put_bits(&pb);
2295
2296
    return 0;
2297
}
2298
2299
4131
int64_t ff_guess_coded_bitrate(AVCodecContext *avctx)
2300
{
2301
4131
    AVRational framerate = avctx->framerate;
2302
4131
    int bits_per_coded_sample = avctx->bits_per_coded_sample;
2303
    int64_t bitrate;
2304
2305

4131
    if (!(framerate.num && framerate.den))
2306
1
        framerate = av_inv_q(avctx->time_base);
2307

4131
    if (!(framerate.num && framerate.den))
2308
        return 0;
2309
2310
4131
    if (!bits_per_coded_sample) {
2311
        const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt);
2312
        bits_per_coded_sample = av_get_bits_per_pixel(desc);
2313
    }
2314
4131
    bitrate = (int64_t)bits_per_coded_sample * avctx->width * avctx->height *
2315
4131
              framerate.num / framerate.den;
2316
2317
4131
    return bitrate;
2318
}
2319
2320
2400
int ff_int_from_list_or_default(void *ctx, const char * val_name, int val,
2321
                                const int * array_valid_values, int default_value)
2322
{
2323
2400
    int i = 0, ref_val;
2324
2325
    while (1) {
2326
6400
        ref_val = array_valid_values[i];
2327
6400
        if (ref_val == INT_MAX)
2328
            break;
2329
6400
        if (val == ref_val)
2330
2400
            return val;
2331
4000
        i++;
2332
    }
2333
    /* val is not a valid value */
2334
    av_log(ctx, AV_LOG_DEBUG,
2335
           "%s %d are not supported. Set to default value : %d\n", val_name, val, default_value);
2336
    return default_value;
2337
}