Coverage Report

Created: 2026-07-30 07:17

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ffmpeg/libavcodec/utils.c
Line
Count
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/avassert.h"
30
#include "libavutil/channel_layout.h"
31
#include "libavutil/intreadwrite.h"
32
#include "libavutil/mem.h"
33
#include "libavutil/pixdesc.h"
34
#include "libavutil/imgutils.h"
35
#include "libavutil/pixfmt.h"
36
#include "libavutil/timecode_internal.h"
37
#include "avcodec.h"
38
#include "codec.h"
39
#include "codec_desc.h"
40
#include "codec_internal.h"
41
#include "codec_par.h"
42
#include "decode.h"
43
#include "hwconfig.h"
44
#include "libavutil/refstruct.h"
45
#include "thread.h"
46
#include "threadframe.h"
47
#include "internal.h"
48
#include "put_bits.h"
49
#include "startcode.h"
50
#include <stdlib.h>
51
#include <limits.h>
52
53
void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
54
0
{
55
0
    uint8_t **p = ptr;
56
0
    if (min_size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE) {
57
0
        av_freep(p);
58
0
        *size = 0;
59
0
        return;
60
0
    }
61
0
    av_fast_mallocz(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE);
62
0
    if (*p)
63
0
        memset(*p + min_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
64
0
}
65
66
void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size)
67
0
{
68
0
    uint8_t **p = ptr;
69
0
    if (min_size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE) {
70
0
        av_freep(p);
71
0
        *size = 0;
72
0
        return;
73
0
    }
74
0
    av_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE);
75
0
    if (*p)
76
0
        memset(*p, 0, min_size + AV_INPUT_BUFFER_PADDING_SIZE);
77
0
}
78
79
int av_codec_is_encoder(const AVCodec *avcodec)
80
0
{
81
0
    const FFCodec *const codec = ffcodec(avcodec);
82
0
    return codec && !codec->is_decoder;
83
0
}
84
85
int av_codec_is_decoder(const AVCodec *avcodec)
86
0
{
87
0
    const FFCodec *const codec = ffcodec(avcodec);
88
0
    return codec && codec->is_decoder;
89
0
}
90
91
int ff_set_dimensions(AVCodecContext *s, int width, int height)
92
0
{
93
0
    int ret = av_image_check_size2(width, height, s->max_pixels, AV_PIX_FMT_NONE, 0, s);
94
95
0
    if (ret < 0)
96
0
        width = height = 0;
97
98
0
    s->coded_width  = width;
99
0
    s->coded_height = height;
100
0
    s->width        = AV_CEIL_RSHIFT(width,  s->lowres);
101
0
    s->height       = AV_CEIL_RSHIFT(height, s->lowres);
102
103
0
    return ret;
104
0
}
105
106
int ff_set_sar(AVCodecContext *avctx, AVRational sar)
107
0
{
108
0
    int ret = av_image_check_sar(avctx->width, avctx->height, sar);
109
110
0
    if (ret < 0) {
111
0
        av_log(avctx, AV_LOG_WARNING, "ignoring invalid SAR: %d/%d\n",
112
0
               sar.num, sar.den);
113
0
        avctx->sample_aspect_ratio = (AVRational){ 0, 1 };
114
0
        return ret;
115
0
    } else {
116
0
        avctx->sample_aspect_ratio = sar;
117
0
    }
118
0
    return 0;
119
0
}
120
121
int ff_side_data_update_matrix_encoding(AVFrame *frame,
122
                                        enum AVMatrixEncoding matrix_encoding)
123
0
{
124
0
    AVFrameSideData *side_data;
125
0
    enum AVMatrixEncoding *data;
126
127
0
    side_data = av_frame_get_side_data(frame, AV_FRAME_DATA_MATRIXENCODING);
128
0
    if (!side_data)
129
0
        side_data = av_frame_new_side_data(frame, AV_FRAME_DATA_MATRIXENCODING,
130
0
                                           sizeof(enum AVMatrixEncoding));
131
132
0
    if (!side_data)
133
0
        return AVERROR(ENOMEM);
134
135
0
    data  = (enum AVMatrixEncoding*)side_data->data;
136
0
    *data = matrix_encoding;
137
138
0
    return 0;
139
0
}
140
141
void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
142
                               int linesize_align[AV_NUM_DATA_POINTERS])
143
0
{
144
0
    int i;
145
0
    int w_align = 1;
146
0
    int h_align = 1;
147
0
    AVPixFmtDescriptor const *desc = av_pix_fmt_desc_get(s->pix_fmt);
148
149
0
    if (desc) {
150
0
        w_align = 1 << desc->log2_chroma_w;
151
0
        h_align = 1 << desc->log2_chroma_h;
152
0
    }
153
154
0
    switch (s->pix_fmt) {
155
0
    case AV_PIX_FMT_YUV420P:
156
0
    case AV_PIX_FMT_YUYV422:
157
0
    case AV_PIX_FMT_YVYU422:
158
0
    case AV_PIX_FMT_UYVY422:
159
0
    case AV_PIX_FMT_YUV422P:
160
0
    case AV_PIX_FMT_YUV440P:
161
0
    case AV_PIX_FMT_YUV444P:
162
0
    case AV_PIX_FMT_GBRP:
163
0
    case AV_PIX_FMT_GBRAP:
164
0
    case AV_PIX_FMT_GRAY8:
165
0
    case AV_PIX_FMT_GRAY16BE:
166
0
    case AV_PIX_FMT_GRAY16LE:
167
0
    case AV_PIX_FMT_YUVJ420P:
168
0
    case AV_PIX_FMT_YUVJ422P:
169
0
    case AV_PIX_FMT_YUVJ440P:
170
0
    case AV_PIX_FMT_YUVJ444P:
171
0
    case AV_PIX_FMT_YUVA420P:
172
0
    case AV_PIX_FMT_YUVA422P:
173
0
    case AV_PIX_FMT_YUVA444P:
174
0
    case AV_PIX_FMT_YUV420P9LE:
175
0
    case AV_PIX_FMT_YUV420P9BE:
176
0
    case AV_PIX_FMT_YUV420P10LE:
177
0
    case AV_PIX_FMT_YUV420P10BE:
178
0
    case AV_PIX_FMT_YUV420P12LE:
179
0
    case AV_PIX_FMT_YUV420P12BE:
180
0
    case AV_PIX_FMT_YUV420P14LE:
181
0
    case AV_PIX_FMT_YUV420P14BE:
182
0
    case AV_PIX_FMT_YUV420P16LE:
183
0
    case AV_PIX_FMT_YUV420P16BE:
184
0
    case AV_PIX_FMT_YUVA420P9LE:
185
0
    case AV_PIX_FMT_YUVA420P9BE:
186
0
    case AV_PIX_FMT_YUVA420P10LE:
187
0
    case AV_PIX_FMT_YUVA420P10BE:
188
0
    case AV_PIX_FMT_YUVA420P16LE:
189
0
    case AV_PIX_FMT_YUVA420P16BE:
190
0
    case AV_PIX_FMT_YUV422P9LE:
191
0
    case AV_PIX_FMT_YUV422P9BE:
192
0
    case AV_PIX_FMT_YUV422P10LE:
193
0
    case AV_PIX_FMT_YUV422P10BE:
194
0
    case AV_PIX_FMT_YUV422P12LE:
195
0
    case AV_PIX_FMT_YUV422P12BE:
196
0
    case AV_PIX_FMT_YUV422P14LE:
197
0
    case AV_PIX_FMT_YUV422P14BE:
198
0
    case AV_PIX_FMT_YUV422P16LE:
199
0
    case AV_PIX_FMT_YUV422P16BE:
200
0
    case AV_PIX_FMT_YUVA422P9LE:
201
0
    case AV_PIX_FMT_YUVA422P9BE:
202
0
    case AV_PIX_FMT_YUVA422P10LE:
203
0
    case AV_PIX_FMT_YUVA422P10BE:
204
0
    case AV_PIX_FMT_YUVA422P12LE:
205
0
    case AV_PIX_FMT_YUVA422P12BE:
206
0
    case AV_PIX_FMT_YUVA422P16LE:
207
0
    case AV_PIX_FMT_YUVA422P16BE:
208
0
    case AV_PIX_FMT_YUV440P10LE:
209
0
    case AV_PIX_FMT_YUV440P10BE:
210
0
    case AV_PIX_FMT_YUV440P12LE:
211
0
    case AV_PIX_FMT_YUV440P12BE:
212
0
    case AV_PIX_FMT_YUV444P9LE:
213
0
    case AV_PIX_FMT_YUV444P9BE:
214
0
    case AV_PIX_FMT_YUV444P10LE:
215
0
    case AV_PIX_FMT_YUV444P10BE:
216
0
    case AV_PIX_FMT_YUV444P12LE:
217
0
    case AV_PIX_FMT_YUV444P12BE:
218
0
    case AV_PIX_FMT_YUV444P14LE:
219
0
    case AV_PIX_FMT_YUV444P14BE:
220
0
    case AV_PIX_FMT_YUV444P16LE:
221
0
    case AV_PIX_FMT_YUV444P16BE:
222
0
    case AV_PIX_FMT_YUVA444P9LE:
223
0
    case AV_PIX_FMT_YUVA444P9BE:
224
0
    case AV_PIX_FMT_YUVA444P10LE:
225
0
    case AV_PIX_FMT_YUVA444P10BE:
226
0
    case AV_PIX_FMT_YUVA444P12LE:
227
0
    case AV_PIX_FMT_YUVA444P12BE:
228
0
    case AV_PIX_FMT_YUVA444P16LE:
229
0
    case AV_PIX_FMT_YUVA444P16BE:
230
0
    case AV_PIX_FMT_GBRP9LE:
231
0
    case AV_PIX_FMT_GBRP9BE:
232
0
    case AV_PIX_FMT_GBRP10LE:
233
0
    case AV_PIX_FMT_GBRP10BE:
234
0
    case AV_PIX_FMT_GBRP12LE:
235
0
    case AV_PIX_FMT_GBRP12BE:
236
0
    case AV_PIX_FMT_GBRP14LE:
237
0
    case AV_PIX_FMT_GBRP14BE:
238
0
    case AV_PIX_FMT_GBRP16LE:
239
0
    case AV_PIX_FMT_GBRP16BE:
240
0
    case AV_PIX_FMT_GBRAP12LE:
241
0
    case AV_PIX_FMT_GBRAP12BE:
242
0
    case AV_PIX_FMT_GBRAP16LE:
243
0
    case AV_PIX_FMT_GBRAP16BE:
244
0
        w_align = 16; //FIXME assume 16 pixel per macroblock
245
0
        h_align = 16 * 2; // interlaced needs 2 macroblocks height
246
0
        if (s->codec_id == AV_CODEC_ID_BINKVIDEO)
247
0
            w_align = 16*2;
248
0
        break;
249
0
    case AV_PIX_FMT_YUV411P:
250
0
    case AV_PIX_FMT_YUVJ411P:
251
0
    case AV_PIX_FMT_UYYVYY411:
252
0
        w_align = 32;
253
0
        h_align = 16 * 2;
254
0
        break;
255
0
    case AV_PIX_FMT_YUV410P:
256
0
        if (s->codec_id == AV_CODEC_ID_SVQ1) {
257
0
            w_align = 64;
258
0
            h_align = 64;
259
0
        } else if (s->codec_id == AV_CODEC_ID_SNOW) {
260
0
            w_align = 16;
261
0
            h_align = 16;
262
0
        }
263
0
        break;
264
0
    case AV_PIX_FMT_RGB555:
265
0
        if (s->codec_id == AV_CODEC_ID_RPZA) {
266
0
            w_align = 4;
267
0
            h_align = 4;
268
0
        }
269
0
        if (s->codec_id == AV_CODEC_ID_INTERPLAY_VIDEO) {
270
0
            w_align = 8;
271
0
            h_align = 8;
272
0
        }
273
0
        break;
274
0
    case AV_PIX_FMT_PAL8:
275
0
    case AV_PIX_FMT_BGR8:
276
0
    case AV_PIX_FMT_RGB8:
277
0
        if (s->codec_id == AV_CODEC_ID_SMC ||
278
0
            s->codec_id == AV_CODEC_ID_CINEPAK) {
279
0
            w_align = 4;
280
0
            h_align = 4;
281
0
        }
282
0
        if (s->codec_id == AV_CODEC_ID_JV ||
283
0
            s->codec_id == AV_CODEC_ID_ARGO ||
284
0
            s->codec_id == AV_CODEC_ID_INTERPLAY_VIDEO) {
285
0
            w_align = 8;
286
0
            h_align = 8;
287
0
        }
288
0
        if (s->codec_id == AV_CODEC_ID_MJPEG   ||
289
0
            s->codec_id == AV_CODEC_ID_MJPEGB  ||
290
0
            s->codec_id == AV_CODEC_ID_LJPEG   ||
291
0
            s->codec_id == AV_CODEC_ID_SMVJPEG ||
292
0
            s->codec_id == AV_CODEC_ID_AMV     ||
293
0
            s->codec_id == AV_CODEC_ID_SP5X    ||
294
0
            s->codec_id == AV_CODEC_ID_JPEGLS) {
295
0
            w_align =   8;
296
0
            h_align = 2*8;
297
0
        }
298
0
        break;
299
0
    case AV_PIX_FMT_BGR24:
300
0
        if ((s->codec_id == AV_CODEC_ID_MSZH) ||
301
0
            (s->codec_id == AV_CODEC_ID_ZLIB)) {
302
0
            w_align = 4;
303
0
            h_align = 4;
304
0
        }
305
0
        break;
306
0
    case AV_PIX_FMT_RGB24:
307
0
        if (s->codec_id == AV_CODEC_ID_CINEPAK) {
308
0
            w_align = 4;
309
0
            h_align = 4;
310
0
        }
311
0
        break;
312
0
    case AV_PIX_FMT_BGR0:
313
0
        if (s->codec_id == AV_CODEC_ID_ARGO) {
314
0
            w_align = 8;
315
0
            h_align = 8;
316
0
        }
317
0
        break;
318
0
    case AV_PIX_FMT_BAYER_BGGR8:
319
0
    case AV_PIX_FMT_BAYER_RGGB8:
320
0
    case AV_PIX_FMT_BAYER_GBRG8:
321
0
    case AV_PIX_FMT_BAYER_GRBG8:
322
0
    case AV_PIX_FMT_BAYER_BGGR16LE:
323
0
    case AV_PIX_FMT_BAYER_BGGR16BE:
324
0
    case AV_PIX_FMT_BAYER_RGGB16LE:
325
0
    case AV_PIX_FMT_BAYER_RGGB16BE:
326
0
    case AV_PIX_FMT_BAYER_GBRG16LE:
327
0
    case AV_PIX_FMT_BAYER_GBRG16BE:
328
0
    case AV_PIX_FMT_BAYER_GRBG16LE:
329
0
    case AV_PIX_FMT_BAYER_GRBG16BE:
330
0
        w_align = FFMAX(w_align, 2);
331
0
        h_align = FFMAX(h_align, 2);
332
0
        break;
333
0
    default:
334
0
        break;
335
0
    }
336
337
0
    if (s->codec_id == AV_CODEC_ID_IFF_ILBM) {
338
0
        w_align = FFMAX(w_align, 16);
339
0
    }
340
341
0
    *width  = FFALIGN(*width, w_align);
342
0
    *height = FFALIGN(*height, h_align);
343
0
    if (s->codec_id == AV_CODEC_ID_H264 || s->lowres ||
344
0
        s->codec_id == AV_CODEC_ID_VC1  || s->codec_id == AV_CODEC_ID_WMV3 ||
345
0
        s->codec_id == AV_CODEC_ID_VP5  || s->codec_id == AV_CODEC_ID_VP6 ||
346
0
        s->codec_id == AV_CODEC_ID_VP6F || s->codec_id == AV_CODEC_ID_VP6A
347
0
    ) {
348
        // some of the optimized chroma MC reads one line too much
349
        // which is also done in mpeg decoders with lowres > 0
350
0
        *height += 2;
351
352
        // H.264 uses edge emulation for out of frame motion vectors, for this
353
        // it requires a temporary area large enough to hold a 21x21 block,
354
        // increasing width ensure that the temporary area is large enough,
355
        // the next rounded up width is 32
356
0
        *width = FFMAX(*width, 32);
357
0
    }
358
0
    if (s->codec_id == AV_CODEC_ID_SVQ3) {
359
0
        *width = FFMAX(*width, 32);
360
0
    }
361
362
0
    for (i = 0; i < 4; i++)
363
0
        linesize_align[i] = STRIDE_ALIGN;
364
0
}
365
366
void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height)
367
0
{
368
0
    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(s->pix_fmt);
369
0
    int chroma_shift = desc->log2_chroma_w;
370
0
    int linesize_align[AV_NUM_DATA_POINTERS];
371
0
    int align;
372
373
0
    avcodec_align_dimensions2(s, width, height, linesize_align);
374
0
    align               = FFMAX(linesize_align[0], linesize_align[3]);
375
0
    linesize_align[1] <<= chroma_shift;
376
0
    linesize_align[2] <<= chroma_shift;
377
0
    align               = FFMAX3(align, linesize_align[1], linesize_align[2]);
378
0
    *width              = FFALIGN(*width, align);
379
0
}
380
381
int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels,
382
                             enum AVSampleFormat sample_fmt, const uint8_t *buf,
383
                             int buf_size, int align)
384
0
{
385
0
    int ch, planar, needed_size, ret = 0;
386
387
0
    needed_size = av_samples_get_buffer_size(NULL, nb_channels,
388
0
                                             frame->nb_samples, sample_fmt,
389
0
                                             align);
390
0
    if (buf_size < needed_size)
391
0
        return AVERROR(EINVAL);
392
393
0
    planar = av_sample_fmt_is_planar(sample_fmt);
394
0
    if (planar && nb_channels > AV_NUM_DATA_POINTERS) {
395
0
        if (!FF_ALLOCZ_TYPED_ARRAY(frame->extended_data, nb_channels))
396
0
            return AVERROR(ENOMEM);
397
0
    } else {
398
0
        frame->extended_data = frame->data;
399
0
    }
400
401
0
    if ((ret = av_samples_fill_arrays(frame->extended_data, &frame->linesize[0],
402
0
                                      (uint8_t *)(intptr_t)buf, nb_channels, frame->nb_samples,
403
0
                                      sample_fmt, align)) < 0) {
404
0
        if (frame->extended_data != frame->data)
405
0
            av_freep(&frame->extended_data);
406
0
        return ret;
407
0
    }
408
0
    if (frame->extended_data != frame->data) {
409
0
        for (ch = 0; ch < AV_NUM_DATA_POINTERS; ch++)
410
0
            frame->data[ch] = frame->extended_data[ch];
411
0
    }
412
413
0
    return ret;
414
0
}
415
416
417
0
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec){
418
0
    return !!(ffcodec(codec)->caps_internal & FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM);
419
0
}
420
421
const char *avcodec_get_name(enum AVCodecID id)
422
0
{
423
0
    const AVCodecDescriptor *cd;
424
425
0
    if (id == AV_CODEC_ID_NONE)
426
0
        return "none";
427
0
    cd = avcodec_descriptor_get(id);
428
0
    if (cd)
429
0
        return cd->name;
430
0
    return "unknown_codec";
431
0
}
432
433
const char *av_get_profile_name(const AVCodec *codec, int profile)
434
0
{
435
0
    const AVProfile *p;
436
0
    if (profile == AV_PROFILE_UNKNOWN || !codec->profiles)
437
0
        return NULL;
438
439
0
    for (p = codec->profiles; p->profile != AV_PROFILE_UNKNOWN; p++)
440
0
        if (p->profile == profile)
441
0
            return p->name;
442
443
0
    return NULL;
444
0
}
445
446
const char *avcodec_profile_name(enum AVCodecID codec_id, int profile)
447
0
{
448
0
    const AVCodecDescriptor *desc = avcodec_descriptor_get(codec_id);
449
0
    const AVProfile *p;
450
451
0
    if (profile == AV_PROFILE_UNKNOWN || !desc || !desc->profiles)
452
0
        return NULL;
453
454
0
    for (p = desc->profiles; p->profile != AV_PROFILE_UNKNOWN; p++)
455
0
        if (p->profile == profile)
456
0
            return p->name;
457
458
0
    return NULL;
459
0
}
460
461
int av_get_exact_bits_per_sample(enum AVCodecID codec_id)
462
0
{
463
0
    switch (codec_id) {
464
0
    case AV_CODEC_ID_DFPWM:
465
0
        return 1;
466
0
    case AV_CODEC_ID_8SVX_EXP:
467
0
    case AV_CODEC_ID_8SVX_FIB:
468
0
    case AV_CODEC_ID_ADPCM_ARGO:
469
0
    case AV_CODEC_ID_ADPCM_CT:
470
0
    case AV_CODEC_ID_ADPCM_IMA_ALP:
471
0
    case AV_CODEC_ID_ADPCM_IMA_AMV:
472
0
    case AV_CODEC_ID_ADPCM_IMA_APC:
473
0
    case AV_CODEC_ID_ADPCM_IMA_APM:
474
0
    case AV_CODEC_ID_ADPCM_IMA_EA_SEAD:
475
0
    case AV_CODEC_ID_ADPCM_IMA_MAGIX:
476
0
    case AV_CODEC_ID_ADPCM_IMA_OKI:
477
0
    case AV_CODEC_ID_ADPCM_IMA_WS:
478
0
    case AV_CODEC_ID_ADPCM_IMA_SSI:
479
0
    case AV_CODEC_ID_ADPCM_G722:
480
0
    case AV_CODEC_ID_ADPCM_YAMAHA:
481
0
    case AV_CODEC_ID_ADPCM_AICA:
482
0
        return 4;
483
0
    case AV_CODEC_ID_DSD_LSBF:
484
0
    case AV_CODEC_ID_DSD_MSBF:
485
0
    case AV_CODEC_ID_DSD_LSBF_PLANAR:
486
0
    case AV_CODEC_ID_DSD_MSBF_PLANAR:
487
0
    case AV_CODEC_ID_PCM_ALAW:
488
0
    case AV_CODEC_ID_PCM_MULAW:
489
0
    case AV_CODEC_ID_PCM_VIDC:
490
0
    case AV_CODEC_ID_PCM_S8:
491
0
    case AV_CODEC_ID_PCM_S8_PLANAR:
492
0
    case AV_CODEC_ID_PCM_SGA:
493
0
    case AV_CODEC_ID_PCM_U8:
494
0
    case AV_CODEC_ID_SDX2_DPCM:
495
0
    case AV_CODEC_ID_CBD2_DPCM:
496
0
    case AV_CODEC_ID_DERF_DPCM:
497
0
    case AV_CODEC_ID_WADY_DPCM:
498
0
    case AV_CODEC_ID_ADPCM_CIRCUS:
499
0
        return 8;
500
0
    case AV_CODEC_ID_PCM_S16BE:
501
0
    case AV_CODEC_ID_PCM_S16BE_PLANAR:
502
0
    case AV_CODEC_ID_PCM_S16LE:
503
0
    case AV_CODEC_ID_PCM_S16LE_PLANAR:
504
0
    case AV_CODEC_ID_PCM_U16BE:
505
0
    case AV_CODEC_ID_PCM_U16LE:
506
0
        return 16;
507
0
    case AV_CODEC_ID_PCM_S24DAUD:
508
0
    case AV_CODEC_ID_PCM_S24BE:
509
0
    case AV_CODEC_ID_PCM_S24LE:
510
0
    case AV_CODEC_ID_PCM_S24LE_PLANAR:
511
0
    case AV_CODEC_ID_PCM_U24BE:
512
0
    case AV_CODEC_ID_PCM_U24LE:
513
0
        return 24;
514
0
    case AV_CODEC_ID_PCM_S32BE:
515
0
    case AV_CODEC_ID_PCM_S32LE:
516
0
    case AV_CODEC_ID_PCM_S32LE_PLANAR:
517
0
    case AV_CODEC_ID_PCM_U32BE:
518
0
    case AV_CODEC_ID_PCM_U32LE:
519
0
    case AV_CODEC_ID_PCM_F32BE:
520
0
    case AV_CODEC_ID_PCM_F32LE:
521
0
    case AV_CODEC_ID_PCM_F24LE:
522
0
    case AV_CODEC_ID_PCM_F16LE:
523
0
        return 32;
524
0
    case AV_CODEC_ID_PCM_F64BE:
525
0
    case AV_CODEC_ID_PCM_F64LE:
526
0
    case AV_CODEC_ID_PCM_S64BE:
527
0
    case AV_CODEC_ID_PCM_S64LE:
528
0
        return 64;
529
0
    default:
530
0
        return 0;
531
0
    }
532
0
}
533
534
enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be)
535
0
{
536
0
    static const enum AVCodecID map[][2] = {
537
0
        [AV_SAMPLE_FMT_U8  ] = { AV_CODEC_ID_PCM_U8,    AV_CODEC_ID_PCM_U8    },
538
0
        [AV_SAMPLE_FMT_S16 ] = { AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S16BE },
539
0
        [AV_SAMPLE_FMT_S32 ] = { AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_S32BE },
540
0
        [AV_SAMPLE_FMT_FLT ] = { AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_F32BE },
541
0
        [AV_SAMPLE_FMT_DBL ] = { AV_CODEC_ID_PCM_F64LE, AV_CODEC_ID_PCM_F64BE },
542
0
        [AV_SAMPLE_FMT_U8P ] = { AV_CODEC_ID_PCM_U8,    AV_CODEC_ID_PCM_U8    },
543
0
        [AV_SAMPLE_FMT_S16P] = { AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S16BE },
544
0
        [AV_SAMPLE_FMT_S32P] = { AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_S32BE },
545
0
        [AV_SAMPLE_FMT_S64P] = { AV_CODEC_ID_PCM_S64LE, AV_CODEC_ID_PCM_S64BE },
546
0
        [AV_SAMPLE_FMT_FLTP] = { AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_F32BE },
547
0
        [AV_SAMPLE_FMT_DBLP] = { AV_CODEC_ID_PCM_F64LE, AV_CODEC_ID_PCM_F64BE },
548
0
    };
549
0
    if (fmt < 0 || fmt >= FF_ARRAY_ELEMS(map))
550
0
        return AV_CODEC_ID_NONE;
551
0
    if (be < 0 || be > 1)
552
0
        be = AV_NE(1, 0);
553
0
    return map[fmt][be];
554
0
}
555
556
int av_get_bits_per_sample(enum AVCodecID codec_id)
557
0
{
558
0
    switch (codec_id) {
559
0
    case AV_CODEC_ID_DFPWM:
560
0
        return 1;
561
0
    case AV_CODEC_ID_ADPCM_SBPRO_2:
562
0
    case AV_CODEC_ID_G728:
563
0
        return 2;
564
0
    case AV_CODEC_ID_ADPCM_SBPRO_3:
565
0
        return 3;
566
0
    case AV_CODEC_ID_ADPCM_SBPRO_4:
567
0
    case AV_CODEC_ID_ADPCM_IMA_WAV:
568
0
    case AV_CODEC_ID_ADPCM_IMA_XBOX:
569
0
    case AV_CODEC_ID_ADPCM_IMA_QT:
570
0
    case AV_CODEC_ID_ADPCM_SWF:
571
0
    case AV_CODEC_ID_ADPCM_MS:
572
0
        return 4;
573
0
    default:
574
0
        return av_get_exact_bits_per_sample(codec_id);
575
0
    }
576
0
}
577
578
static int get_audio_frame_duration(enum AVCodecID id, int sr, int ch, int ba,
579
                                    uint32_t tag, int bits_per_coded_sample, int64_t bitrate,
580
                                    uint8_t * extradata, int frame_size, int frame_bytes)
581
0
{
582
0
    int bps = av_get_exact_bits_per_sample(id);
583
0
    int framecount = (ba > 0 && frame_bytes / ba > 0) ? frame_bytes / ba : 1;
584
585
    /* codecs with an exact constant bits per sample */
586
0
    if (bps > 0 && ch > 0 && frame_bytes > 0 && ch < 32768 && bps < 32768)
587
0
        return (frame_bytes * 8LL) / (bps * ch);
588
0
    bps = bits_per_coded_sample;
589
590
    /* codecs with a fixed packet duration */
591
0
    switch (id) {
592
0
    case AV_CODEC_ID_ADPCM_ADX:    return   32;
593
0
    case AV_CODEC_ID_ADPCM_IMA_QT: return   64;
594
0
    case AV_CODEC_ID_ADPCM_EA_XAS: return  128;
595
0
    case AV_CODEC_ID_AMR_NB:
596
0
    case AV_CODEC_ID_EVRC:
597
0
    case AV_CODEC_ID_GSM:
598
0
    case AV_CODEC_ID_QCELP:
599
0
    case AV_CODEC_ID_RA_288:       return  160;
600
0
    case AV_CODEC_ID_AMR_WB:
601
0
    case AV_CODEC_ID_GSM_MS:       return  320;
602
0
    case AV_CODEC_ID_MP1:          return  384;
603
0
    case AV_CODEC_ID_ATRAC1:       return  512;
604
0
    case AV_CODEC_ID_ATRAC9:
605
0
    case AV_CODEC_ID_ATRAC3:
606
0
        if (framecount > INT_MAX/1024)
607
0
            return 0;
608
0
        return 1024 * framecount;
609
0
    case AV_CODEC_ID_ATRAC3P:      return 2048;
610
0
    case AV_CODEC_ID_MP2:
611
0
    case AV_CODEC_ID_MUSEPACK7:    return 1152;
612
0
    case AV_CODEC_ID_AC3:          return 1536;
613
0
    case AV_CODEC_ID_FTR:          return 1024;
614
0
    }
615
616
0
    if (sr > 0) {
617
        /* calc from sample rate */
618
0
        if (id == AV_CODEC_ID_TTA)
619
0
            return 256ll * sr / 245;
620
0
        else if (id == AV_CODEC_ID_DST)
621
0
            return 588ll * sr / 44100;
622
0
        else if (id == AV_CODEC_ID_BINKAUDIO_DCT) {
623
0
            if (sr / 22050 > 22)
624
0
                return 0;
625
0
            return (480 << (sr / 22050));
626
0
        }
627
628
0
        if (id == AV_CODEC_ID_MP3)
629
0
            return sr <= 24000 ? 576 : 1152;
630
0
    }
631
632
0
    if (ba > 0) {
633
        /* calc from block_align */
634
0
        if (id == AV_CODEC_ID_SIPR) {
635
0
            switch (ba) {
636
0
            case 20: return 160;
637
0
            case 19: return 144;
638
0
            case 29: return 288;
639
0
            case 37: return 480;
640
0
            }
641
0
        } else if (id == AV_CODEC_ID_ILBC) {
642
0
            switch (ba) {
643
0
            case 38: return 160;
644
0
            case 50: return 240;
645
0
            }
646
0
        }
647
0
    }
648
649
0
    if (frame_bytes > 0) {
650
        /* calc from frame_bytes only */
651
0
        int64_t d = INT64_MIN;
652
0
        switch(id) {
653
0
        case AV_CODEC_ID_TRUESPEECH : d = 240LL * (frame_bytes / 32); break;
654
0
        case AV_CODEC_ID_NELLYMOSER : d = 256LL * (frame_bytes / 64); break;
655
0
        case AV_CODEC_ID_RA_144     : d = 160LL * (frame_bytes / 20); break;
656
0
        case AV_CODEC_ID_APTX       : d =   4LL * (frame_bytes /  4); break;
657
0
        case AV_CODEC_ID_APTX_HD    : d =   4LL * (frame_bytes /  6); break;
658
0
        }
659
0
        if (d > INT64_MIN)
660
0
            return ((int)d == d && d > 0) ? d : 0;
661
662
0
        if (bps > 0) {
663
            /* calc from frame_bytes and bits_per_coded_sample */
664
0
            if (id == AV_CODEC_ID_ADPCM_G726 || id == AV_CODEC_ID_ADPCM_G726LE)
665
0
                return frame_bytes * 8 / bps;
666
0
        }
667
668
0
        if (ch > 0 && ch < INT_MAX/16) {
669
            /* calc from frame_bytes and channels */
670
0
            switch (id) {
671
0
            case AV_CODEC_ID_FASTAUDIO:
672
0
                return frame_bytes / (40 * ch) * 256;
673
0
            case AV_CODEC_ID_ADPCM_IMA_MOFLEX:
674
0
                return (frame_bytes - 4 * ch) / (128 * ch) * 256;
675
0
            case AV_CODEC_ID_ADPCM_AFC:
676
0
                return frame_bytes / (9 * ch) * 16;
677
0
            case AV_CODEC_ID_ADPCM_N64:
678
0
                frame_bytes /= 9 * ch;
679
0
                if (frame_bytes > INT_MAX / 16)
680
0
                    return 0;
681
0
                return frame_bytes * 16;
682
0
            case AV_CODEC_ID_ADPCM_PSX:
683
0
            case AV_CODEC_ID_ADPCM_DTK:
684
0
                frame_bytes /= 16 * ch;
685
0
                if (frame_bytes > INT_MAX / 28)
686
0
                    return 0;
687
0
                return frame_bytes * 28;
688
0
            case AV_CODEC_ID_ADPCM_PSXC:
689
0
                frame_bytes = (frame_bytes - 1) / ch;
690
0
                if (frame_bytes > INT_MAX / 2)
691
0
                    return 0;
692
0
                return frame_bytes * 2;
693
0
            case AV_CODEC_ID_ADPCM_4XM:
694
0
            case AV_CODEC_ID_ADPCM_IMA_ACORN:
695
0
            case AV_CODEC_ID_ADPCM_IMA_DAT4:
696
0
            case AV_CODEC_ID_ADPCM_IMA_ISS:
697
0
            case AV_CODEC_ID_ADPCM_IMA_PDA:
698
0
                return (frame_bytes - 4 * ch) * 2 / ch;
699
0
            case AV_CODEC_ID_ADPCM_IMA_SMJPEG:
700
0
                return (frame_bytes - 4) * 2 / ch;
701
0
            case AV_CODEC_ID_ADPCM_IMA_AMV:
702
0
                return (frame_bytes - 8) * 2;
703
0
            case AV_CODEC_ID_ADPCM_THP:
704
0
            case AV_CODEC_ID_ADPCM_THP_LE:
705
0
                if (extradata)
706
0
                    return frame_bytes * 14LL / (8 * ch);
707
0
                break;
708
0
            case AV_CODEC_ID_ADPCM_XA:
709
0
                return (frame_bytes / 128) * 224 / ch;
710
0
            case AV_CODEC_ID_INTERPLAY_DPCM:
711
0
                return (frame_bytes - 6 - ch) / ch;
712
0
            case AV_CODEC_ID_ROQ_DPCM:
713
0
                return (frame_bytes - 8) / ch;
714
0
            case AV_CODEC_ID_XAN_DPCM:
715
0
                return (frame_bytes - 2 * ch) / ch;
716
0
            case AV_CODEC_ID_MACE3:
717
0
                return 3 * frame_bytes / ch;
718
0
            case AV_CODEC_ID_MACE6:
719
0
                return 6 * frame_bytes / ch;
720
0
            case AV_CODEC_ID_PCM_LXF:
721
0
                return 2 * (frame_bytes / (5 * ch));
722
0
            case AV_CODEC_ID_IAC:
723
0
            case AV_CODEC_ID_IMC:
724
0
                return 4 * frame_bytes / ch;
725
0
            }
726
727
0
            if (tag) {
728
                /* calc from frame_bytes, channels, and codec_tag */
729
0
                if (id == AV_CODEC_ID_SOL_DPCM) {
730
0
                    if (tag == 3)
731
0
                        return frame_bytes / ch;
732
0
                    else
733
0
                        return frame_bytes * 2 / ch;
734
0
                }
735
0
            }
736
737
0
            if (ba > 0) {
738
                /* calc from frame_bytes, channels, and block_align */
739
0
                int blocks = frame_bytes / ba;
740
0
                int64_t tmp = 0;
741
0
                switch (id) {
742
0
                case AV_CODEC_ID_ADPCM_IMA_XBOX:
743
0
                    if (bps != 4)
744
0
                        return 0;
745
0
                    tmp = blocks * ((ba - 4 * ch) / (bps * ch) * 8);
746
0
                    break;
747
0
                case AV_CODEC_ID_ADPCM_IMA_WAV:
748
0
                    if (bps < 2 || bps > 5)
749
0
                        return 0;
750
0
                    tmp = blocks * (1LL + (ba - 4 * ch) / (bps * ch) * 8LL);
751
0
                    break;
752
0
                case AV_CODEC_ID_ADPCM_IMA_DK3:
753
0
                    tmp = blocks * (((ba - 16LL) * 2 / 3 * 4) / ch);
754
0
                    break;
755
0
                case AV_CODEC_ID_ADPCM_IMA_DK4:
756
0
                    tmp = blocks * (1 + (ba - 4LL * ch) * 2 / ch);
757
0
                    break;
758
0
                case AV_CODEC_ID_ADPCM_IMA_RAD:
759
0
                    tmp = blocks * ((ba - 4LL * ch) * 2 / ch);
760
0
                    break;
761
0
                case AV_CODEC_ID_ADPCM_MS:
762
0
                    tmp = blocks * (2 + (ba - 7LL * ch) * 2LL / ch);
763
0
                    break;
764
0
                case AV_CODEC_ID_ADPCM_MTAF:
765
0
                    tmp = blocks * (ba - 16LL) * 2 / ch;
766
0
                    break;
767
0
                case AV_CODEC_ID_ADPCM_XMD:
768
0
                    tmp = blocks * 32;
769
0
                    break;
770
0
                }
771
0
                if (tmp) {
772
0
                    if (tmp != (int)tmp)
773
0
                        return 0;
774
0
                    return tmp;
775
0
                }
776
0
            }
777
778
0
            if (bps > 0) {
779
                /* calc from frame_bytes, channels, and bits_per_coded_sample */
780
0
                switch (id) {
781
0
                case AV_CODEC_ID_PCM_DVD:
782
0
                    if(bps<4 || frame_bytes<3)
783
0
                        return 0;
784
0
                    return 2 * ((frame_bytes - 3) / ((bps * 2 / 8) * ch));
785
0
                case AV_CODEC_ID_PCM_BLURAY:
786
0
                    if(bps<4 || frame_bytes<4)
787
0
                        return 0;
788
0
                    return (frame_bytes - 4) / ((FFALIGN(ch, 2) * bps) / 8);
789
0
                case AV_CODEC_ID_S302M:
790
0
                    return 2 * (frame_bytes / ((bps + 4) / 4)) / ch;
791
0
                }
792
0
            }
793
0
        }
794
0
    }
795
796
    /* Fall back on using frame_size */
797
0
    if (frame_size > 1 && frame_bytes)
798
0
        return frame_size;
799
800
    //For WMA we currently have no other means to calculate duration thus we
801
    //do it here by assuming CBR, which is true for all known cases.
802
0
    if (bitrate > 0 && frame_bytes > 0 && sr > 0 && ba > 1) {
803
0
        if (id == AV_CODEC_ID_WMAV1 || id == AV_CODEC_ID_WMAV2)
804
0
            return  (frame_bytes * 8LL * sr) / bitrate;
805
0
    }
806
807
0
    return 0;
808
0
}
809
810
int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
811
0
{
812
0
   int channels = avctx->ch_layout.nb_channels;
813
0
   int duration;
814
815
0
    duration = get_audio_frame_duration(avctx->codec_id, avctx->sample_rate,
816
0
                                    channels, avctx->block_align,
817
0
                                    avctx->codec_tag, avctx->bits_per_coded_sample,
818
0
                                    avctx->bit_rate, avctx->extradata, avctx->frame_size,
819
0
                                    frame_bytes);
820
0
    return FFMAX(0, duration);
821
0
}
822
823
int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes)
824
0
{
825
0
   int channels = par->ch_layout.nb_channels;
826
0
   int duration;
827
828
0
    duration = get_audio_frame_duration(par->codec_id, par->sample_rate,
829
0
                                    channels, par->block_align,
830
0
                                    par->codec_tag, par->bits_per_coded_sample,
831
0
                                    par->bit_rate, par->extradata, par->frame_size,
832
0
                                    frame_bytes);
833
0
    return FFMAX(0, duration);
834
0
}
835
836
unsigned int av_xiphlacing(unsigned char *s, unsigned int v)
837
0
{
838
0
    unsigned int n = 0;
839
840
0
    while (v >= 0xff) {
841
0
        *s++ = 0xff;
842
0
        v -= 0xff;
843
0
        n++;
844
0
    }
845
0
    *s = v;
846
0
    n++;
847
0
    return n;
848
0
}
849
850
int ff_match_2uint16(const uint16_t(*tab)[2], int size, int a, int b)
851
0
{
852
0
    int i;
853
0
    for (i = 0; i < size && !(tab[i][0] == a && tab[i][1] == b); i++) ;
854
0
    return i;
855
0
}
856
857
const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *avcodec, int index)
858
0
{
859
0
    const FFCodec *const codec = ffcodec(avcodec);
860
0
    int i;
861
0
    if (!codec->hw_configs || index < 0)
862
0
        return NULL;
863
0
    for (i = 0; i <= index; i++)
864
0
        if (!codec->hw_configs[i])
865
0
            return NULL;
866
0
    return &codec->hw_configs[index]->public;
867
0
}
868
869
int ff_thread_ref_frame(ThreadFrame *dst, const ThreadFrame *src)
870
0
{
871
0
    int ret;
872
873
0
    dst->owner[0] = src->owner[0];
874
0
    dst->owner[1] = src->owner[1];
875
876
0
    ret = av_frame_ref(dst->f, src->f);
877
0
    if (ret < 0)
878
0
        return ret;
879
880
0
    av_assert0(!dst->progress);
881
882
0
    if (src->progress)
883
0
        dst->progress = av_refstruct_ref(src->progress);
884
885
0
    return 0;
886
0
}
887
888
int ff_thread_replace_frame(ThreadFrame *dst, const ThreadFrame *src)
889
0
{
890
0
    int ret;
891
892
0
    dst->owner[0] = src->owner[0];
893
0
    dst->owner[1] = src->owner[1];
894
895
0
    ret = av_frame_replace(dst->f, src->f);
896
0
    if (ret < 0)
897
0
        return ret;
898
899
0
    av_refstruct_replace(&dst->progress, src->progress);
900
901
0
    return 0;
902
0
}
903
904
#if !HAVE_THREADS
905
906
int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f, int flags)
907
{
908
    return ff_get_buffer(avctx, f, flags);
909
}
910
911
int ff_thread_get_ext_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
912
{
913
    f->owner[0] = f->owner[1] = avctx;
914
    return ff_get_buffer(avctx, f->f, flags);
915
}
916
917
void ff_thread_release_ext_buffer(ThreadFrame *f)
918
{
919
    f->owner[0] = f->owner[1] = NULL;
920
    if (f->f)
921
        av_frame_unref(f->f);
922
}
923
924
void ff_thread_finish_setup(AVCodecContext *avctx)
925
{
926
}
927
928
void ff_thread_report_progress(ThreadFrame *f, int progress, int field)
929
{
930
}
931
932
void ff_thread_await_progress(const ThreadFrame *f, int progress, int field)
933
{
934
}
935
936
int ff_thread_can_start_frame(AVCodecContext *avctx)
937
{
938
    return 1;
939
}
940
#endif
941
942
const uint8_t *avpriv_find_start_code(const uint8_t *restrict p,
943
                                      const uint8_t *end,
944
                                      uint32_t *restrict state)
945
0
{
946
0
    int i;
947
948
0
    av_assert0(p <= end);
949
0
    if (p >= end)
950
0
        return end;
951
952
0
    for (i = 0; i < 3; i++) {
953
0
        uint32_t tmp = *state << 8;
954
0
        *state = tmp + *(p++);
955
0
        if (tmp == 0x100 || p == end)
956
0
            return p;
957
0
    }
958
959
0
    while (p < end) {
960
0
        if      (p[-1] > 1      ) p += 3;
961
0
        else if (p[-2]          ) p += 2;
962
0
        else if (p[-3]|(p[-1]-1)) p++;
963
0
        else {
964
0
            p++;
965
0
            break;
966
0
        }
967
0
    }
968
969
0
    p = FFMIN(p, end) - 4;
970
0
    *state = AV_RB32(p);
971
972
0
    return p + 4;
973
0
}
974
975
AVCPBProperties *av_cpb_properties_alloc(size_t *size)
976
0
{
977
0
    AVCPBProperties *props = av_mallocz(sizeof(AVCPBProperties));
978
0
    if (!props)
979
0
        return NULL;
980
981
0
    if (size)
982
0
        *size = sizeof(*props);
983
984
0
    props->vbv_delay = UINT64_MAX;
985
986
0
    return props;
987
0
}
988
989
int ff_alloc_timecode_sei(const AVFrame *frame, AVRational rate, size_t prefix_len,
990
                     void **data, size_t *sei_size)
991
0
{
992
0
    AVFrameSideData *sd = NULL;
993
0
    uint8_t *sei_data;
994
0
    PutBitContext pb;
995
0
    uint32_t *tc;
996
0
    int m;
997
998
0
    if (frame)
999
0
        sd = av_frame_get_side_data(frame, AV_FRAME_DATA_S12M_TIMECODE);
1000
1001
0
    if (!sd) {
1002
0
        *data = NULL;
1003
0
        return 0;
1004
0
    }
1005
0
    tc =  (uint32_t*)sd->data;
1006
0
    m  = tc[0] & 3;
1007
1008
0
    *sei_size = sizeof(uint32_t) * 4;
1009
0
    *data = av_mallocz(*sei_size + prefix_len);
1010
0
    if (!*data)
1011
0
        return AVERROR(ENOMEM);
1012
0
    sei_data = (uint8_t*)*data + prefix_len;
1013
1014
0
    init_put_bits(&pb, sei_data, *sei_size);
1015
0
    put_bits(&pb, 2, m); // num_clock_ts
1016
1017
0
    for (int j = 1; j <= m; j++) {
1018
0
        unsigned hh, mm, ss, ff, drop;
1019
0
        ff_timecode_set_smpte(&drop, &hh, &mm, &ss, &ff, rate, tc[j], 0, 0);
1020
1021
0
        put_bits(&pb, 1, 1); // clock_timestamp_flag
1022
0
        put_bits(&pb, 1, 1); // units_field_based_flag
1023
0
        put_bits(&pb, 5, 0); // counting_type
1024
0
        put_bits(&pb, 1, 1); // full_timestamp_flag
1025
0
        put_bits(&pb, 1, 0); // discontinuity_flag
1026
0
        put_bits(&pb, 1, drop);
1027
0
        put_bits(&pb, 9, ff);
1028
0
        put_bits(&pb, 6, ss);
1029
0
        put_bits(&pb, 6, mm);
1030
0
        put_bits(&pb, 5, hh);
1031
0
        put_bits(&pb, 5, 0);
1032
0
    }
1033
0
    flush_put_bits(&pb);
1034
1035
0
    return 0;
1036
0
}
1037
1038
int64_t ff_guess_coded_bitrate(AVCodecContext *avctx)
1039
0
{
1040
0
    AVRational framerate = avctx->framerate;
1041
0
    int bits_per_coded_sample = avctx->bits_per_coded_sample;
1042
0
    int64_t bitrate;
1043
1044
0
    if (!(framerate.num && framerate.den))
1045
0
        framerate = av_inv_q(avctx->time_base);
1046
0
    if (!(framerate.num && framerate.den))
1047
0
        return 0;
1048
1049
0
    if (!bits_per_coded_sample) {
1050
0
        const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt);
1051
0
        bits_per_coded_sample = av_get_bits_per_pixel(desc);
1052
0
    }
1053
0
    bitrate = (int64_t)bits_per_coded_sample * avctx->width * avctx->height *
1054
0
              framerate.num / framerate.den;
1055
1056
0
    return bitrate;
1057
0
}