]> git.sesse.net Git - ffmpeg/blob - libavcodec/utils.c
a19e0086cbd6ee4aeda52d8ecf701073e9ec0133
[ffmpeg] / libavcodec / utils.c
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 "hwaccel.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 "raw.h"
54 #include "bytestream.h"
55 #include "version.h"
56 #include <stdlib.h>
57 #include <stdarg.h>
58 #include <stdatomic.h>
59 #include <limits.h>
60 #include <float.h>
61 #if CONFIG_ICONV
62 # include <iconv.h>
63 #endif
64
65 #include "libavutil/ffversion.h"
66 const char av_codec_ffversion[] = "FFmpeg version " FFMPEG_VERSION;
67
68 static AVMutex codec_mutex = AV_MUTEX_INITIALIZER;
69
70 void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
71 {
72     uint8_t **p = ptr;
73     if (min_size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE) {
74         av_freep(p);
75         *size = 0;
76         return;
77     }
78     if (!ff_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE, 1))
79         memset(*p + min_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
80 }
81
82 void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size)
83 {
84     uint8_t **p = ptr;
85     if (min_size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE) {
86         av_freep(p);
87         *size = 0;
88         return;
89     }
90     if (!ff_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE, 1))
91         memset(*p, 0, min_size + AV_INPUT_BUFFER_PADDING_SIZE);
92 }
93
94 int av_codec_is_encoder(const AVCodec *codec)
95 {
96     return codec && (codec->encode_sub || codec->encode2 ||codec->send_frame);
97 }
98
99 int av_codec_is_decoder(const AVCodec *codec)
100 {
101     return codec && (codec->decode || codec->receive_frame);
102 }
103
104 int ff_set_dimensions(AVCodecContext *s, int width, int height)
105 {
106     int ret = av_image_check_size2(width, height, s->max_pixels, AV_PIX_FMT_NONE, 0, s);
107
108     if (ret < 0)
109         width = height = 0;
110
111     s->coded_width  = width;
112     s->coded_height = height;
113     s->width        = AV_CEIL_RSHIFT(width,  s->lowres);
114     s->height       = AV_CEIL_RSHIFT(height, s->lowres);
115
116     return ret;
117 }
118
119 int ff_set_sar(AVCodecContext *avctx, AVRational sar)
120 {
121     int ret = av_image_check_sar(avctx->width, avctx->height, sar);
122
123     if (ret < 0) {
124         av_log(avctx, AV_LOG_WARNING, "ignoring invalid SAR: %d/%d\n",
125                sar.num, sar.den);
126         avctx->sample_aspect_ratio = (AVRational){ 0, 1 };
127         return ret;
128     } else {
129         avctx->sample_aspect_ratio = sar;
130     }
131     return 0;
132 }
133
134 int ff_side_data_update_matrix_encoding(AVFrame *frame,
135                                         enum AVMatrixEncoding matrix_encoding)
136 {
137     AVFrameSideData *side_data;
138     enum AVMatrixEncoding *data;
139
140     side_data = av_frame_get_side_data(frame, AV_FRAME_DATA_MATRIXENCODING);
141     if (!side_data)
142         side_data = av_frame_new_side_data(frame, AV_FRAME_DATA_MATRIXENCODING,
143                                            sizeof(enum AVMatrixEncoding));
144
145     if (!side_data)
146         return AVERROR(ENOMEM);
147
148     data  = (enum AVMatrixEncoding*)side_data->data;
149     *data = matrix_encoding;
150
151     return 0;
152 }
153
154 void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
155                                int linesize_align[AV_NUM_DATA_POINTERS])
156 {
157     int i;
158     int w_align = 1;
159     int h_align = 1;
160     AVPixFmtDescriptor const *desc = av_pix_fmt_desc_get(s->pix_fmt);
161
162     if (desc) {
163         w_align = 1 << desc->log2_chroma_w;
164         h_align = 1 << desc->log2_chroma_h;
165     }
166
167     switch (s->pix_fmt) {
168     case AV_PIX_FMT_YUV420P:
169     case AV_PIX_FMT_YUYV422:
170     case AV_PIX_FMT_YVYU422:
171     case AV_PIX_FMT_UYVY422:
172     case AV_PIX_FMT_YUV422P:
173     case AV_PIX_FMT_YUV440P:
174     case AV_PIX_FMT_YUV444P:
175     case AV_PIX_FMT_GBRP:
176     case AV_PIX_FMT_GBRAP:
177     case AV_PIX_FMT_GRAY8:
178     case AV_PIX_FMT_GRAY16BE:
179     case AV_PIX_FMT_GRAY16LE:
180     case AV_PIX_FMT_YUVJ420P:
181     case AV_PIX_FMT_YUVJ422P:
182     case AV_PIX_FMT_YUVJ440P:
183     case AV_PIX_FMT_YUVJ444P:
184     case AV_PIX_FMT_YUVA420P:
185     case AV_PIX_FMT_YUVA422P:
186     case AV_PIX_FMT_YUVA444P:
187     case AV_PIX_FMT_YUV420P9LE:
188     case AV_PIX_FMT_YUV420P9BE:
189     case AV_PIX_FMT_YUV420P10LE:
190     case AV_PIX_FMT_YUV420P10BE:
191     case AV_PIX_FMT_YUV420P12LE:
192     case AV_PIX_FMT_YUV420P12BE:
193     case AV_PIX_FMT_YUV420P14LE:
194     case AV_PIX_FMT_YUV420P14BE:
195     case AV_PIX_FMT_YUV420P16LE:
196     case AV_PIX_FMT_YUV420P16BE:
197     case AV_PIX_FMT_YUVA420P9LE:
198     case AV_PIX_FMT_YUVA420P9BE:
199     case AV_PIX_FMT_YUVA420P10LE:
200     case AV_PIX_FMT_YUVA420P10BE:
201     case AV_PIX_FMT_YUVA420P16LE:
202     case AV_PIX_FMT_YUVA420P16BE:
203     case AV_PIX_FMT_YUV422P9LE:
204     case AV_PIX_FMT_YUV422P9BE:
205     case AV_PIX_FMT_YUV422P10LE:
206     case AV_PIX_FMT_YUV422P10BE:
207     case AV_PIX_FMT_YUV422P12LE:
208     case AV_PIX_FMT_YUV422P12BE:
209     case AV_PIX_FMT_YUV422P14LE:
210     case AV_PIX_FMT_YUV422P14BE:
211     case AV_PIX_FMT_YUV422P16LE:
212     case AV_PIX_FMT_YUV422P16BE:
213     case AV_PIX_FMT_YUVA422P9LE:
214     case AV_PIX_FMT_YUVA422P9BE:
215     case AV_PIX_FMT_YUVA422P10LE:
216     case AV_PIX_FMT_YUVA422P10BE:
217     case AV_PIX_FMT_YUVA422P12LE:
218     case AV_PIX_FMT_YUVA422P12BE:
219     case AV_PIX_FMT_YUVA422P16LE:
220     case AV_PIX_FMT_YUVA422P16BE:
221     case AV_PIX_FMT_YUV440P10LE:
222     case AV_PIX_FMT_YUV440P10BE:
223     case AV_PIX_FMT_YUV440P12LE:
224     case AV_PIX_FMT_YUV440P12BE:
225     case AV_PIX_FMT_YUV444P9LE:
226     case AV_PIX_FMT_YUV444P9BE:
227     case AV_PIX_FMT_YUV444P10LE:
228     case AV_PIX_FMT_YUV444P10BE:
229     case AV_PIX_FMT_YUV444P12LE:
230     case AV_PIX_FMT_YUV444P12BE:
231     case AV_PIX_FMT_YUV444P14LE:
232     case AV_PIX_FMT_YUV444P14BE:
233     case AV_PIX_FMT_YUV444P16LE:
234     case AV_PIX_FMT_YUV444P16BE:
235     case AV_PIX_FMT_YUVA444P9LE:
236     case AV_PIX_FMT_YUVA444P9BE:
237     case AV_PIX_FMT_YUVA444P10LE:
238     case AV_PIX_FMT_YUVA444P10BE:
239     case AV_PIX_FMT_YUVA444P12LE:
240     case AV_PIX_FMT_YUVA444P12BE:
241     case AV_PIX_FMT_YUVA444P16LE:
242     case AV_PIX_FMT_YUVA444P16BE:
243     case AV_PIX_FMT_GBRP9LE:
244     case AV_PIX_FMT_GBRP9BE:
245     case AV_PIX_FMT_GBRP10LE:
246     case AV_PIX_FMT_GBRP10BE:
247     case AV_PIX_FMT_GBRP12LE:
248     case AV_PIX_FMT_GBRP12BE:
249     case AV_PIX_FMT_GBRP14LE:
250     case AV_PIX_FMT_GBRP14BE:
251     case AV_PIX_FMT_GBRP16LE:
252     case AV_PIX_FMT_GBRP16BE:
253     case AV_PIX_FMT_GBRAP12LE:
254     case AV_PIX_FMT_GBRAP12BE:
255     case AV_PIX_FMT_GBRAP16LE:
256     case AV_PIX_FMT_GBRAP16BE:
257         w_align = 16; //FIXME assume 16 pixel per macroblock
258         h_align = 16 * 2; // interlaced needs 2 macroblocks height
259         break;
260     case AV_PIX_FMT_YUV411P:
261     case AV_PIX_FMT_YUVJ411P:
262     case AV_PIX_FMT_UYYVYY411:
263         w_align = 32;
264         h_align = 16 * 2;
265         break;
266     case AV_PIX_FMT_YUV410P:
267         if (s->codec_id == AV_CODEC_ID_SVQ1) {
268             w_align = 64;
269             h_align = 64;
270         }
271         break;
272     case AV_PIX_FMT_RGB555:
273         if (s->codec_id == AV_CODEC_ID_RPZA) {
274             w_align = 4;
275             h_align = 4;
276         }
277         if (s->codec_id == AV_CODEC_ID_INTERPLAY_VIDEO) {
278             w_align = 8;
279             h_align = 8;
280         }
281         break;
282     case AV_PIX_FMT_PAL8:
283     case AV_PIX_FMT_BGR8:
284     case AV_PIX_FMT_RGB8:
285         if (s->codec_id == AV_CODEC_ID_SMC ||
286             s->codec_id == AV_CODEC_ID_CINEPAK) {
287             w_align = 4;
288             h_align = 4;
289         }
290         if (s->codec_id == AV_CODEC_ID_JV ||
291             s->codec_id == AV_CODEC_ID_INTERPLAY_VIDEO) {
292             w_align = 8;
293             h_align = 8;
294         }
295         break;
296     case AV_PIX_FMT_BGR24:
297         if ((s->codec_id == AV_CODEC_ID_MSZH) ||
298             (s->codec_id == AV_CODEC_ID_ZLIB)) {
299             w_align = 4;
300             h_align = 4;
301         }
302         break;
303     case AV_PIX_FMT_RGB24:
304         if (s->codec_id == AV_CODEC_ID_CINEPAK) {
305             w_align = 4;
306             h_align = 4;
307         }
308         break;
309     default:
310         break;
311     }
312
313     if (s->codec_id == AV_CODEC_ID_IFF_ILBM) {
314         w_align = FFMAX(w_align, 8);
315     }
316
317     *width  = FFALIGN(*width, w_align);
318     *height = FFALIGN(*height, h_align);
319     if (s->codec_id == AV_CODEC_ID_H264 || s->lowres ||
320         s->codec_id == AV_CODEC_ID_VP5  || s->codec_id == AV_CODEC_ID_VP6 ||
321         s->codec_id == AV_CODEC_ID_VP6F || s->codec_id == AV_CODEC_ID_VP6A
322     ) {
323         // some of the optimized chroma MC reads one line too much
324         // which is also done in mpeg decoders with lowres > 0
325         *height += 2;
326
327         // H.264 uses edge emulation for out of frame motion vectors, for this
328         // it requires a temporary area large enough to hold a 21x21 block,
329         // increasing witdth ensure that the temporary area is large enough,
330         // the next rounded up width is 32
331         *width = FFMAX(*width, 32);
332     }
333
334     for (i = 0; i < 4; i++)
335         linesize_align[i] = STRIDE_ALIGN;
336 }
337
338 void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height)
339 {
340     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(s->pix_fmt);
341     int chroma_shift = desc->log2_chroma_w;
342     int linesize_align[AV_NUM_DATA_POINTERS];
343     int align;
344
345     avcodec_align_dimensions2(s, width, height, linesize_align);
346     align               = FFMAX(linesize_align[0], linesize_align[3]);
347     linesize_align[1] <<= chroma_shift;
348     linesize_align[2] <<= chroma_shift;
349     align               = FFMAX3(align, linesize_align[1], linesize_align[2]);
350     *width              = FFALIGN(*width, align);
351 }
352
353 int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos)
354 {
355     if (pos <= AVCHROMA_LOC_UNSPECIFIED || pos >= AVCHROMA_LOC_NB)
356         return AVERROR(EINVAL);
357     pos--;
358
359     *xpos = (pos&1) * 128;
360     *ypos = ((pos>>1)^(pos<4)) * 128;
361
362     return 0;
363 }
364
365 enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos)
366 {
367     int pos, xout, yout;
368
369     for (pos = AVCHROMA_LOC_UNSPECIFIED + 1; pos < AVCHROMA_LOC_NB; pos++) {
370         if (avcodec_enum_to_chroma_pos(&xout, &yout, pos) == 0 && xout == xpos && yout == ypos)
371             return pos;
372     }
373     return AVCHROMA_LOC_UNSPECIFIED;
374 }
375
376 int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels,
377                              enum AVSampleFormat sample_fmt, const uint8_t *buf,
378                              int buf_size, int align)
379 {
380     int ch, planar, needed_size, ret = 0;
381
382     needed_size = av_samples_get_buffer_size(NULL, nb_channels,
383                                              frame->nb_samples, sample_fmt,
384                                              align);
385     if (buf_size < needed_size)
386         return AVERROR(EINVAL);
387
388     planar = av_sample_fmt_is_planar(sample_fmt);
389     if (planar && nb_channels > AV_NUM_DATA_POINTERS) {
390         if (!(frame->extended_data = av_mallocz_array(nb_channels,
391                                                 sizeof(*frame->extended_data))))
392             return AVERROR(ENOMEM);
393     } else {
394         frame->extended_data = frame->data;
395     }
396
397     if ((ret = av_samples_fill_arrays(frame->extended_data, &frame->linesize[0],
398                                       (uint8_t *)(intptr_t)buf, nb_channels, frame->nb_samples,
399                                       sample_fmt, align)) < 0) {
400         if (frame->extended_data != frame->data)
401             av_freep(&frame->extended_data);
402         return ret;
403     }
404     if (frame->extended_data != frame->data) {
405         for (ch = 0; ch < AV_NUM_DATA_POINTERS; ch++)
406             frame->data[ch] = frame->extended_data[ch];
407     }
408
409     return ret;
410 }
411
412 void ff_color_frame(AVFrame *frame, const int c[4])
413 {
414     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format);
415     int p, y;
416
417     av_assert0(desc->flags & AV_PIX_FMT_FLAG_PLANAR);
418
419     for (p = 0; p<desc->nb_components; p++) {
420         uint8_t *dst = frame->data[p];
421         int is_chroma = p == 1 || p == 2;
422         int bytes  = is_chroma ? AV_CEIL_RSHIFT(frame->width,  desc->log2_chroma_w) : frame->width;
423         int height = is_chroma ? AV_CEIL_RSHIFT(frame->height, desc->log2_chroma_h) : frame->height;
424         if (desc->comp[0].depth >= 9) {
425             ((uint16_t*)dst)[0] = c[p];
426             av_memcpy_backptr(dst + 2, 2, bytes - 2);
427             dst += frame->linesize[p];
428             for (y = 1; y < height; y++) {
429                 memcpy(dst, frame->data[p], 2*bytes);
430                 dst += frame->linesize[p];
431             }
432         } else {
433             for (y = 0; y < height; y++) {
434                 memset(dst, c[p], bytes);
435                 dst += frame->linesize[p];
436             }
437         }
438     }
439 }
440
441 int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size)
442 {
443     int i;
444
445     for (i = 0; i < count; i++) {
446         int r = func(c, (char *)arg + i * size);
447         if (ret)
448             ret[i] = r;
449     }
450     emms_c();
451     return 0;
452 }
453
454 int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int jobnr, int threadnr), void *arg, int *ret, int count)
455 {
456     int i;
457
458     for (i = 0; i < count; i++) {
459         int r = func(c, arg, i, 0);
460         if (ret)
461             ret[i] = r;
462     }
463     emms_c();
464     return 0;
465 }
466
467 enum AVPixelFormat avpriv_find_pix_fmt(const PixelFormatTag *tags,
468                                        unsigned int fourcc)
469 {
470     while (tags->pix_fmt >= 0) {
471         if (tags->fourcc == fourcc)
472             return tags->pix_fmt;
473         tags++;
474     }
475     return AV_PIX_FMT_NONE;
476 }
477
478 #if FF_API_CODEC_GET_SET
479 MAKE_ACCESSORS(AVCodecContext, codec, AVRational, pkt_timebase)
480 MAKE_ACCESSORS(AVCodecContext, codec, const AVCodecDescriptor *, codec_descriptor)
481 MAKE_ACCESSORS(AVCodecContext, codec, int, lowres)
482 MAKE_ACCESSORS(AVCodecContext, codec, int, seek_preroll)
483 MAKE_ACCESSORS(AVCodecContext, codec, uint16_t*, chroma_intra_matrix)
484
485 unsigned av_codec_get_codec_properties(const AVCodecContext *codec)
486 {
487     return codec->properties;
488 }
489
490 int av_codec_get_max_lowres(const AVCodec *codec)
491 {
492     return codec->max_lowres;
493 }
494 #endif
495
496 int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec){
497     return !!(codec->caps_internal & FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM);
498 }
499
500 static int64_t get_bit_rate(AVCodecContext *ctx)
501 {
502     int64_t bit_rate;
503     int bits_per_sample;
504
505     switch (ctx->codec_type) {
506     case AVMEDIA_TYPE_VIDEO:
507     case AVMEDIA_TYPE_DATA:
508     case AVMEDIA_TYPE_SUBTITLE:
509     case AVMEDIA_TYPE_ATTACHMENT:
510         bit_rate = ctx->bit_rate;
511         break;
512     case AVMEDIA_TYPE_AUDIO:
513         bits_per_sample = av_get_bits_per_sample(ctx->codec_id);
514         bit_rate = bits_per_sample ? ctx->sample_rate * (int64_t)ctx->channels * bits_per_sample : ctx->bit_rate;
515         break;
516     default:
517         bit_rate = 0;
518         break;
519     }
520     return bit_rate;
521 }
522
523
524 static void ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec)
525 {
526     if (!(codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE) && codec->init)
527         ff_mutex_lock(&codec_mutex);
528 }
529
530 static void ff_unlock_avcodec(const AVCodec *codec)
531 {
532     if (!(codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE) && codec->init)
533         ff_mutex_unlock(&codec_mutex);
534 }
535
536 int attribute_align_arg ff_codec_open2_recursive(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
537 {
538     int ret = 0;
539
540     ff_unlock_avcodec(codec);
541
542     ret = avcodec_open2(avctx, codec, options);
543
544     ff_lock_avcodec(avctx, codec);
545     return ret;
546 }
547
548 int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
549 {
550     int ret = 0;
551     int codec_init_ok = 0;
552     AVDictionary *tmp = NULL;
553     const AVPixFmtDescriptor *pixdesc;
554
555     if (avcodec_is_open(avctx))
556         return 0;
557
558     if ((!codec && !avctx->codec)) {
559         av_log(avctx, AV_LOG_ERROR, "No codec provided to avcodec_open2()\n");
560         return AVERROR(EINVAL);
561     }
562     if ((codec && avctx->codec && codec != avctx->codec)) {
563         av_log(avctx, AV_LOG_ERROR, "This AVCodecContext was allocated for %s, "
564                                     "but %s passed to avcodec_open2()\n", avctx->codec->name, codec->name);
565         return AVERROR(EINVAL);
566     }
567     if (!codec)
568         codec = avctx->codec;
569
570     if (avctx->extradata_size < 0 || avctx->extradata_size >= FF_MAX_EXTRADATA_SIZE)
571         return AVERROR(EINVAL);
572
573     if (options)
574         av_dict_copy(&tmp, *options, 0);
575
576     ff_lock_avcodec(avctx, codec);
577
578     avctx->internal = av_mallocz(sizeof(*avctx->internal));
579     if (!avctx->internal) {
580         ret = AVERROR(ENOMEM);
581         goto end;
582     }
583
584     avctx->internal->pool = av_mallocz(sizeof(*avctx->internal->pool));
585     if (!avctx->internal->pool) {
586         ret = AVERROR(ENOMEM);
587         goto free_and_end;
588     }
589
590     avctx->internal->to_free = av_frame_alloc();
591     if (!avctx->internal->to_free) {
592         ret = AVERROR(ENOMEM);
593         goto free_and_end;
594     }
595
596     avctx->internal->compat_decode_frame = av_frame_alloc();
597     if (!avctx->internal->compat_decode_frame) {
598         ret = AVERROR(ENOMEM);
599         goto free_and_end;
600     }
601
602     avctx->internal->buffer_frame = av_frame_alloc();
603     if (!avctx->internal->buffer_frame) {
604         ret = AVERROR(ENOMEM);
605         goto free_and_end;
606     }
607
608     avctx->internal->buffer_pkt = av_packet_alloc();
609     if (!avctx->internal->buffer_pkt) {
610         ret = AVERROR(ENOMEM);
611         goto free_and_end;
612     }
613
614     avctx->internal->ds.in_pkt = av_packet_alloc();
615     if (!avctx->internal->ds.in_pkt) {
616         ret = AVERROR(ENOMEM);
617         goto free_and_end;
618     }
619
620     avctx->internal->last_pkt_props = av_packet_alloc();
621     if (!avctx->internal->last_pkt_props) {
622         ret = AVERROR(ENOMEM);
623         goto free_and_end;
624     }
625
626     avctx->internal->skip_samples_multiplier = 1;
627
628     if (codec->priv_data_size > 0) {
629         if (!avctx->priv_data) {
630             avctx->priv_data = av_mallocz(codec->priv_data_size);
631             if (!avctx->priv_data) {
632                 ret = AVERROR(ENOMEM);
633                 goto end;
634             }
635             if (codec->priv_class) {
636                 *(const AVClass **)avctx->priv_data = codec->priv_class;
637                 av_opt_set_defaults(avctx->priv_data);
638             }
639         }
640         if (codec->priv_class && (ret = av_opt_set_dict(avctx->priv_data, &tmp)) < 0)
641             goto free_and_end;
642     } else {
643         avctx->priv_data = NULL;
644     }
645     if ((ret = av_opt_set_dict(avctx, &tmp)) < 0)
646         goto free_and_end;
647
648     if (avctx->codec_whitelist && av_match_list(codec->name, avctx->codec_whitelist, ',') <= 0) {
649         av_log(avctx, AV_LOG_ERROR, "Codec (%s) not on whitelist \'%s\'\n", codec->name, avctx->codec_whitelist);
650         ret = AVERROR(EINVAL);
651         goto free_and_end;
652     }
653
654     // only call ff_set_dimensions() for non H.264/VP6F/DXV codecs so as not to overwrite previously setup dimensions
655     if (!(avctx->coded_width && avctx->coded_height && avctx->width && avctx->height &&
656           (avctx->codec_id == AV_CODEC_ID_H264 || avctx->codec_id == AV_CODEC_ID_VP6F || avctx->codec_id == AV_CODEC_ID_DXV))) {
657     if (avctx->coded_width && avctx->coded_height)
658         ret = ff_set_dimensions(avctx, avctx->coded_width, avctx->coded_height);
659     else if (avctx->width && avctx->height)
660         ret = ff_set_dimensions(avctx, avctx->width, avctx->height);
661     if (ret < 0)
662         goto free_and_end;
663     }
664
665     if ((avctx->coded_width || avctx->coded_height || avctx->width || avctx->height)
666         && (  av_image_check_size2(avctx->coded_width, avctx->coded_height, avctx->max_pixels, AV_PIX_FMT_NONE, 0, avctx) < 0
667            || av_image_check_size2(avctx->width,       avctx->height,       avctx->max_pixels, AV_PIX_FMT_NONE, 0, avctx) < 0)) {
668         av_log(avctx, AV_LOG_WARNING, "Ignoring invalid width/height values\n");
669         ff_set_dimensions(avctx, 0, 0);
670     }
671
672     if (avctx->width > 0 && avctx->height > 0) {
673         if (av_image_check_sar(avctx->width, avctx->height,
674                                avctx->sample_aspect_ratio) < 0) {
675             av_log(avctx, AV_LOG_WARNING, "ignoring invalid SAR: %u/%u\n",
676                    avctx->sample_aspect_ratio.num,
677                    avctx->sample_aspect_ratio.den);
678             avctx->sample_aspect_ratio = (AVRational){ 0, 1 };
679         }
680     }
681
682     /* if the decoder init function was already called previously,
683      * free the already allocated subtitle_header before overwriting it */
684     if (av_codec_is_decoder(codec))
685         av_freep(&avctx->subtitle_header);
686
687     if (avctx->channels > FF_SANE_NB_CHANNELS || avctx->channels < 0) {
688         av_log(avctx, AV_LOG_ERROR, "Too many or invalid channels: %d\n", avctx->channels);
689         ret = AVERROR(EINVAL);
690         goto free_and_end;
691     }
692
693     avctx->codec = codec;
694     if ((avctx->codec_type == AVMEDIA_TYPE_UNKNOWN || avctx->codec_type == codec->type) &&
695         avctx->codec_id == AV_CODEC_ID_NONE) {
696         avctx->codec_type = codec->type;
697         avctx->codec_id   = codec->id;
698     }
699     if (avctx->codec_id != codec->id || (avctx->codec_type != codec->type
700                                          && avctx->codec_type != AVMEDIA_TYPE_ATTACHMENT)) {
701         av_log(avctx, AV_LOG_ERROR, "Codec type or id mismatches\n");
702         ret = AVERROR(EINVAL);
703         goto free_and_end;
704     }
705     avctx->frame_number = 0;
706     avctx->codec_descriptor = avcodec_descriptor_get(avctx->codec_id);
707
708     if ((avctx->codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) &&
709         avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) {
710         const char *codec_string = av_codec_is_encoder(codec) ? "encoder" : "decoder";
711         AVCodec *codec2;
712         av_log(avctx, AV_LOG_ERROR,
713                "The %s '%s' is experimental but experimental codecs are not enabled, "
714                "add '-strict %d' if you want to use it.\n",
715                codec_string, codec->name, FF_COMPLIANCE_EXPERIMENTAL);
716         codec2 = av_codec_is_encoder(codec) ? avcodec_find_encoder(codec->id) : avcodec_find_decoder(codec->id);
717         if (!(codec2->capabilities & AV_CODEC_CAP_EXPERIMENTAL))
718             av_log(avctx, AV_LOG_ERROR, "Alternatively use the non experimental %s '%s'.\n",
719                 codec_string, codec2->name);
720         ret = AVERROR_EXPERIMENTAL;
721         goto free_and_end;
722     }
723
724     if (avctx->codec_type == AVMEDIA_TYPE_AUDIO &&
725         (!avctx->time_base.num || !avctx->time_base.den)) {
726         avctx->time_base.num = 1;
727         avctx->time_base.den = avctx->sample_rate;
728     }
729
730     if (!HAVE_THREADS)
731         av_log(avctx, AV_LOG_WARNING, "Warning: not compiled with thread support, using thread emulation\n");
732
733     if (CONFIG_FRAME_THREAD_ENCODER && av_codec_is_encoder(avctx->codec)) {
734         ff_unlock_avcodec(codec); //we will instantiate a few encoders thus kick the counter to prevent false detection of a problem
735         ret = ff_frame_thread_encoder_init(avctx, options ? *options : NULL);
736         ff_lock_avcodec(avctx, codec);
737         if (ret < 0)
738             goto free_and_end;
739     }
740
741     if (av_codec_is_decoder(avctx->codec)) {
742         ret = ff_decode_bsfs_init(avctx);
743         if (ret < 0)
744             goto free_and_end;
745     }
746
747     if (HAVE_THREADS
748         && !(avctx->internal->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))) {
749         ret = ff_thread_init(avctx);
750         if (ret < 0) {
751             goto free_and_end;
752         }
753     }
754     if (!HAVE_THREADS && !(codec->capabilities & AV_CODEC_CAP_AUTO_THREADS))
755         avctx->thread_count = 1;
756
757     if (avctx->codec->max_lowres < avctx->lowres || avctx->lowres < 0) {
758         av_log(avctx, AV_LOG_WARNING, "The maximum value for lowres supported by the decoder is %d\n",
759                avctx->codec->max_lowres);
760         avctx->lowres = avctx->codec->max_lowres;
761     }
762
763     if (av_codec_is_encoder(avctx->codec)) {
764         int i;
765 #if FF_API_CODED_FRAME
766 FF_DISABLE_DEPRECATION_WARNINGS
767         avctx->coded_frame = av_frame_alloc();
768         if (!avctx->coded_frame) {
769             ret = AVERROR(ENOMEM);
770             goto free_and_end;
771         }
772 FF_ENABLE_DEPRECATION_WARNINGS
773 #endif
774
775         if (avctx->time_base.num <= 0 || avctx->time_base.den <= 0) {
776             av_log(avctx, AV_LOG_ERROR, "The encoder timebase is not set.\n");
777             ret = AVERROR(EINVAL);
778             goto free_and_end;
779         }
780
781         if (avctx->codec->sample_fmts) {
782             for (i = 0; avctx->codec->sample_fmts[i] != AV_SAMPLE_FMT_NONE; i++) {
783                 if (avctx->sample_fmt == avctx->codec->sample_fmts[i])
784                     break;
785                 if (avctx->channels == 1 &&
786                     av_get_planar_sample_fmt(avctx->sample_fmt) ==
787                     av_get_planar_sample_fmt(avctx->codec->sample_fmts[i])) {
788                     avctx->sample_fmt = avctx->codec->sample_fmts[i];
789                     break;
790                 }
791             }
792             if (avctx->codec->sample_fmts[i] == AV_SAMPLE_FMT_NONE) {
793                 char buf[128];
794                 snprintf(buf, sizeof(buf), "%d", avctx->sample_fmt);
795                 av_log(avctx, AV_LOG_ERROR, "Specified sample format %s is invalid or not supported\n",
796                        (char *)av_x_if_null(av_get_sample_fmt_name(avctx->sample_fmt), buf));
797                 ret = AVERROR(EINVAL);
798                 goto free_and_end;
799             }
800         }
801         if (avctx->codec->pix_fmts) {
802             for (i = 0; avctx->codec->pix_fmts[i] != AV_PIX_FMT_NONE; i++)
803                 if (avctx->pix_fmt == avctx->codec->pix_fmts[i])
804                     break;
805             if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_NONE
806                 && !((avctx->codec_id == AV_CODEC_ID_MJPEG || avctx->codec_id == AV_CODEC_ID_LJPEG)
807                      && avctx->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL)) {
808                 char buf[128];
809                 snprintf(buf, sizeof(buf), "%d", avctx->pix_fmt);
810                 av_log(avctx, AV_LOG_ERROR, "Specified pixel format %s is invalid or not supported\n",
811                        (char *)av_x_if_null(av_get_pix_fmt_name(avctx->pix_fmt), buf));
812                 ret = AVERROR(EINVAL);
813                 goto free_and_end;
814             }
815             if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ420P ||
816                 avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ411P ||
817                 avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ422P ||
818                 avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ440P ||
819                 avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ444P)
820                 avctx->color_range = AVCOL_RANGE_JPEG;
821         }
822         if (avctx->codec->supported_samplerates) {
823             for (i = 0; avctx->codec->supported_samplerates[i] != 0; i++)
824                 if (avctx->sample_rate == avctx->codec->supported_samplerates[i])
825                     break;
826             if (avctx->codec->supported_samplerates[i] == 0) {
827                 av_log(avctx, AV_LOG_ERROR, "Specified sample rate %d is not supported\n",
828                        avctx->sample_rate);
829                 ret = AVERROR(EINVAL);
830                 goto free_and_end;
831             }
832         }
833         if (avctx->sample_rate < 0) {
834             av_log(avctx, AV_LOG_ERROR, "Specified sample rate %d is not supported\n",
835                     avctx->sample_rate);
836             ret = AVERROR(EINVAL);
837             goto free_and_end;
838         }
839         if (avctx->codec->channel_layouts) {
840             if (!avctx->channel_layout) {
841                 av_log(avctx, AV_LOG_WARNING, "Channel layout not specified\n");
842             } else {
843                 for (i = 0; avctx->codec->channel_layouts[i] != 0; i++)
844                     if (avctx->channel_layout == avctx->codec->channel_layouts[i])
845                         break;
846                 if (avctx->codec->channel_layouts[i] == 0) {
847                     char buf[512];
848                     av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout);
849                     av_log(avctx, AV_LOG_ERROR, "Specified channel layout '%s' is not supported\n", buf);
850                     ret = AVERROR(EINVAL);
851                     goto free_and_end;
852                 }
853             }
854         }
855         if (avctx->channel_layout && avctx->channels) {
856             int channels = av_get_channel_layout_nb_channels(avctx->channel_layout);
857             if (channels != avctx->channels) {
858                 char buf[512];
859                 av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout);
860                 av_log(avctx, AV_LOG_ERROR,
861                        "Channel layout '%s' with %d channels does not match number of specified channels %d\n",
862                        buf, channels, avctx->channels);
863                 ret = AVERROR(EINVAL);
864                 goto free_and_end;
865             }
866         } else if (avctx->channel_layout) {
867             avctx->channels = av_get_channel_layout_nb_channels(avctx->channel_layout);
868         }
869         if (avctx->channels < 0) {
870             av_log(avctx, AV_LOG_ERROR, "Specified number of channels %d is not supported\n",
871                     avctx->channels);
872             ret = AVERROR(EINVAL);
873             goto free_and_end;
874         }
875         if(avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
876             pixdesc = av_pix_fmt_desc_get(avctx->pix_fmt);
877             if (    avctx->bits_per_raw_sample < 0
878                 || (avctx->bits_per_raw_sample > 8 && pixdesc->comp[0].depth <= 8)) {
879                 av_log(avctx, AV_LOG_WARNING, "Specified bit depth %d not possible with the specified pixel formats depth %d\n",
880                     avctx->bits_per_raw_sample, pixdesc->comp[0].depth);
881                 avctx->bits_per_raw_sample = pixdesc->comp[0].depth;
882             }
883             if (avctx->width <= 0 || avctx->height <= 0) {
884                 av_log(avctx, AV_LOG_ERROR, "dimensions not set\n");
885                 ret = AVERROR(EINVAL);
886                 goto free_and_end;
887             }
888         }
889         if (   (avctx->codec_type == AVMEDIA_TYPE_VIDEO || avctx->codec_type == AVMEDIA_TYPE_AUDIO)
890             && avctx->bit_rate>0 && avctx->bit_rate<1000) {
891             av_log(avctx, AV_LOG_WARNING, "Bitrate %"PRId64" is extremely low, maybe you mean %"PRId64"k\n", avctx->bit_rate, avctx->bit_rate);
892         }
893
894         if (!avctx->rc_initial_buffer_occupancy)
895             avctx->rc_initial_buffer_occupancy = avctx->rc_buffer_size * 3LL / 4;
896
897         if (avctx->ticks_per_frame && avctx->time_base.num &&
898             avctx->ticks_per_frame > INT_MAX / avctx->time_base.num) {
899             av_log(avctx, AV_LOG_ERROR,
900                    "ticks_per_frame %d too large for the timebase %d/%d.",
901                    avctx->ticks_per_frame,
902                    avctx->time_base.num,
903                    avctx->time_base.den);
904             goto free_and_end;
905         }
906
907         if (avctx->hw_frames_ctx) {
908             AVHWFramesContext *frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data;
909             if (frames_ctx->format != avctx->pix_fmt) {
910                 av_log(avctx, AV_LOG_ERROR,
911                        "Mismatching AVCodecContext.pix_fmt and AVHWFramesContext.format\n");
912                 ret = AVERROR(EINVAL);
913                 goto free_and_end;
914             }
915             if (avctx->sw_pix_fmt != AV_PIX_FMT_NONE &&
916                 avctx->sw_pix_fmt != frames_ctx->sw_format) {
917                 av_log(avctx, AV_LOG_ERROR,
918                        "Mismatching AVCodecContext.sw_pix_fmt (%s) "
919                        "and AVHWFramesContext.sw_format (%s)\n",
920                        av_get_pix_fmt_name(avctx->sw_pix_fmt),
921                        av_get_pix_fmt_name(frames_ctx->sw_format));
922                 ret = AVERROR(EINVAL);
923                 goto free_and_end;
924             }
925             avctx->sw_pix_fmt = frames_ctx->sw_format;
926         }
927     }
928
929     avctx->pts_correction_num_faulty_pts =
930     avctx->pts_correction_num_faulty_dts = 0;
931     avctx->pts_correction_last_pts =
932     avctx->pts_correction_last_dts = INT64_MIN;
933
934     if (   !CONFIG_GRAY && avctx->flags & AV_CODEC_FLAG_GRAY
935         && avctx->codec_descriptor->type == AVMEDIA_TYPE_VIDEO)
936         av_log(avctx, AV_LOG_WARNING,
937                "gray decoding requested but not enabled at configuration time\n");
938
939     if (   avctx->codec->init && (!(avctx->active_thread_type&FF_THREAD_FRAME)
940         || avctx->internal->frame_thread_encoder)) {
941         ret = avctx->codec->init(avctx);
942         if (ret < 0) {
943             goto free_and_end;
944         }
945         codec_init_ok = 1;
946     }
947
948     ret=0;
949
950     if (av_codec_is_decoder(avctx->codec)) {
951         if (!avctx->bit_rate)
952             avctx->bit_rate = get_bit_rate(avctx);
953         /* validate channel layout from the decoder */
954         if (avctx->channel_layout) {
955             int channels = av_get_channel_layout_nb_channels(avctx->channel_layout);
956             if (!avctx->channels)
957                 avctx->channels = channels;
958             else if (channels != avctx->channels) {
959                 char buf[512];
960                 av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout);
961                 av_log(avctx, AV_LOG_WARNING,
962                        "Channel layout '%s' with %d channels does not match specified number of channels %d: "
963                        "ignoring specified channel layout\n",
964                        buf, channels, avctx->channels);
965                 avctx->channel_layout = 0;
966             }
967         }
968         if (avctx->channels && avctx->channels < 0 ||
969             avctx->channels > FF_SANE_NB_CHANNELS) {
970             ret = AVERROR(EINVAL);
971             goto free_and_end;
972         }
973         if (avctx->bits_per_coded_sample < 0) {
974             ret = AVERROR(EINVAL);
975             goto free_and_end;
976         }
977         if (avctx->sub_charenc) {
978             if (avctx->codec_type != AVMEDIA_TYPE_SUBTITLE) {
979                 av_log(avctx, AV_LOG_ERROR, "Character encoding is only "
980                        "supported with subtitles codecs\n");
981                 ret = AVERROR(EINVAL);
982                 goto free_and_end;
983             } else if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB) {
984                 av_log(avctx, AV_LOG_WARNING, "Codec '%s' is bitmap-based, "
985                        "subtitles character encoding will be ignored\n",
986                        avctx->codec_descriptor->name);
987                 avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_DO_NOTHING;
988             } else {
989                 /* input character encoding is set for a text based subtitle
990                  * codec at this point */
991                 if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_AUTOMATIC)
992                     avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_PRE_DECODER;
993
994                 if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_PRE_DECODER) {
995 #if CONFIG_ICONV
996                     iconv_t cd = iconv_open("UTF-8", avctx->sub_charenc);
997                     if (cd == (iconv_t)-1) {
998                         ret = AVERROR(errno);
999                         av_log(avctx, AV_LOG_ERROR, "Unable to open iconv context "
1000                                "with input character encoding \"%s\"\n", avctx->sub_charenc);
1001                         goto free_and_end;
1002                     }
1003                     iconv_close(cd);
1004 #else
1005                     av_log(avctx, AV_LOG_ERROR, "Character encoding subtitles "
1006                            "conversion needs a libavcodec built with iconv support "
1007                            "for this codec\n");
1008                     ret = AVERROR(ENOSYS);
1009                     goto free_and_end;
1010 #endif
1011                 }
1012             }
1013         }
1014
1015 #if FF_API_AVCTX_TIMEBASE
1016         if (avctx->framerate.num > 0 && avctx->framerate.den > 0)
1017             avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1}));
1018 #endif
1019     }
1020     if (codec->priv_data_size > 0 && avctx->priv_data && codec->priv_class) {
1021         av_assert0(*(const AVClass **)avctx->priv_data == codec->priv_class);
1022     }
1023
1024 end:
1025     ff_unlock_avcodec(codec);
1026     if (options) {
1027         av_dict_free(options);
1028         *options = tmp;
1029     }
1030
1031     return ret;
1032 free_and_end:
1033     if (avctx->codec && avctx->codec->close &&
1034         (codec_init_ok ||
1035          (avctx->codec->caps_internal & FF_CODEC_CAP_INIT_CLEANUP)))
1036         avctx->codec->close(avctx);
1037
1038     if (HAVE_THREADS && avctx->internal->thread_ctx)
1039         ff_thread_free(avctx);
1040
1041     if (codec->priv_class && codec->priv_data_size)
1042         av_opt_free(avctx->priv_data);
1043     av_opt_free(avctx);
1044
1045 #if FF_API_CODED_FRAME
1046 FF_DISABLE_DEPRECATION_WARNINGS
1047     av_frame_free(&avctx->coded_frame);
1048 FF_ENABLE_DEPRECATION_WARNINGS
1049 #endif
1050
1051     av_dict_free(&tmp);
1052     av_freep(&avctx->priv_data);
1053     av_freep(&avctx->subtitle_header);
1054     if (avctx->internal) {
1055         av_frame_free(&avctx->internal->to_free);
1056         av_frame_free(&avctx->internal->compat_decode_frame);
1057         av_frame_free(&avctx->internal->buffer_frame);
1058         av_packet_free(&avctx->internal->buffer_pkt);
1059         av_packet_free(&avctx->internal->last_pkt_props);
1060
1061         av_packet_free(&avctx->internal->ds.in_pkt);
1062         ff_decode_bsfs_uninit(avctx);
1063
1064         av_freep(&avctx->internal->pool);
1065     }
1066     av_freep(&avctx->internal);
1067     avctx->codec = NULL;
1068     goto end;
1069 }
1070
1071 void avsubtitle_free(AVSubtitle *sub)
1072 {
1073     int i;
1074
1075     for (i = 0; i < sub->num_rects; i++) {
1076         av_freep(&sub->rects[i]->data[0]);
1077         av_freep(&sub->rects[i]->data[1]);
1078         av_freep(&sub->rects[i]->data[2]);
1079         av_freep(&sub->rects[i]->data[3]);
1080         av_freep(&sub->rects[i]->text);
1081         av_freep(&sub->rects[i]->ass);
1082         av_freep(&sub->rects[i]);
1083     }
1084
1085     av_freep(&sub->rects);
1086
1087     memset(sub, 0, sizeof(*sub));
1088 }
1089
1090 av_cold int avcodec_close(AVCodecContext *avctx)
1091 {
1092     int i;
1093
1094     if (!avctx)
1095         return 0;
1096
1097     if (avcodec_is_open(avctx)) {
1098         FramePool *pool = avctx->internal->pool;
1099         if (CONFIG_FRAME_THREAD_ENCODER &&
1100             avctx->internal->frame_thread_encoder && avctx->thread_count > 1) {
1101             ff_frame_thread_encoder_free(avctx);
1102         }
1103         if (HAVE_THREADS && avctx->internal->thread_ctx)
1104             ff_thread_free(avctx);
1105         if (avctx->codec && avctx->codec->close)
1106             avctx->codec->close(avctx);
1107         avctx->internal->byte_buffer_size = 0;
1108         av_freep(&avctx->internal->byte_buffer);
1109         av_frame_free(&avctx->internal->to_free);
1110         av_frame_free(&avctx->internal->compat_decode_frame);
1111         av_frame_free(&avctx->internal->buffer_frame);
1112         av_packet_free(&avctx->internal->buffer_pkt);
1113         av_packet_free(&avctx->internal->last_pkt_props);
1114
1115         av_packet_free(&avctx->internal->ds.in_pkt);
1116
1117         for (i = 0; i < FF_ARRAY_ELEMS(pool->pools); i++)
1118             av_buffer_pool_uninit(&pool->pools[i]);
1119         av_freep(&avctx->internal->pool);
1120
1121         if (avctx->hwaccel && avctx->hwaccel->uninit)
1122             avctx->hwaccel->uninit(avctx);
1123         av_freep(&avctx->internal->hwaccel_priv_data);
1124
1125         ff_decode_bsfs_uninit(avctx);
1126
1127         av_freep(&avctx->internal);
1128     }
1129
1130     for (i = 0; i < avctx->nb_coded_side_data; i++)
1131         av_freep(&avctx->coded_side_data[i].data);
1132     av_freep(&avctx->coded_side_data);
1133     avctx->nb_coded_side_data = 0;
1134
1135     av_buffer_unref(&avctx->hw_frames_ctx);
1136     av_buffer_unref(&avctx->hw_device_ctx);
1137
1138     if (avctx->priv_data && avctx->codec && avctx->codec->priv_class)
1139         av_opt_free(avctx->priv_data);
1140     av_opt_free(avctx);
1141     av_freep(&avctx->priv_data);
1142     if (av_codec_is_encoder(avctx->codec)) {
1143         av_freep(&avctx->extradata);
1144 #if FF_API_CODED_FRAME
1145 FF_DISABLE_DEPRECATION_WARNINGS
1146         av_frame_free(&avctx->coded_frame);
1147 FF_ENABLE_DEPRECATION_WARNINGS
1148 #endif
1149     }
1150     avctx->codec = NULL;
1151     avctx->active_thread_type = 0;
1152
1153     return 0;
1154 }
1155
1156 const char *avcodec_get_name(enum AVCodecID id)
1157 {
1158     const AVCodecDescriptor *cd;
1159     AVCodec *codec;
1160
1161     if (id == AV_CODEC_ID_NONE)
1162         return "none";
1163     cd = avcodec_descriptor_get(id);
1164     if (cd)
1165         return cd->name;
1166     av_log(NULL, AV_LOG_WARNING, "Codec 0x%x is not in the full list.\n", id);
1167     codec = avcodec_find_decoder(id);
1168     if (codec)
1169         return codec->name;
1170     codec = avcodec_find_encoder(id);
1171     if (codec)
1172         return codec->name;
1173     return "unknown_codec";
1174 }
1175
1176 size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag)
1177 {
1178     int i, len, ret = 0;
1179
1180 #define TAG_PRINT(x)                                              \
1181     (((x) >= '0' && (x) <= '9') ||                                \
1182      ((x) >= 'a' && (x) <= 'z') || ((x) >= 'A' && (x) <= 'Z') ||  \
1183      ((x) == '.' || (x) == ' ' || (x) == '-' || (x) == '_'))
1184
1185     for (i = 0; i < 4; i++) {
1186         len = snprintf(buf, buf_size,
1187                        TAG_PRINT(codec_tag & 0xFF) ? "%c" : "[%d]", codec_tag & 0xFF);
1188         buf        += len;
1189         buf_size    = buf_size > len ? buf_size - len : 0;
1190         ret        += len;
1191         codec_tag >>= 8;
1192     }
1193     return ret;
1194 }
1195
1196 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
1197 {
1198     const char *codec_type;
1199     const char *codec_name;
1200     const char *profile = NULL;
1201     int64_t bitrate;
1202     int new_line = 0;
1203     AVRational display_aspect_ratio;
1204     const char *separator = enc->dump_separator ? (const char *)enc->dump_separator : ", ";
1205
1206     if (!buf || buf_size <= 0)
1207         return;
1208     codec_type = av_get_media_type_string(enc->codec_type);
1209     codec_name = avcodec_get_name(enc->codec_id);
1210     profile = avcodec_profile_name(enc->codec_id, enc->profile);
1211
1212     snprintf(buf, buf_size, "%s: %s", codec_type ? codec_type : "unknown",
1213              codec_name);
1214     buf[0] ^= 'a' ^ 'A'; /* first letter in uppercase */
1215
1216     if (enc->codec && strcmp(enc->codec->name, codec_name))
1217         snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", enc->codec->name);
1218
1219     if (profile)
1220         snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", profile);
1221     if (   enc->codec_type == AVMEDIA_TYPE_VIDEO
1222         && av_log_get_level() >= AV_LOG_VERBOSE
1223         && enc->refs)
1224         snprintf(buf + strlen(buf), buf_size - strlen(buf),
1225                  ", %d reference frame%s",
1226                  enc->refs, enc->refs > 1 ? "s" : "");
1227
1228     if (enc->codec_tag)
1229         snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s / 0x%04X)",
1230                  av_fourcc2str(enc->codec_tag), enc->codec_tag);
1231
1232     switch (enc->codec_type) {
1233     case AVMEDIA_TYPE_VIDEO:
1234         {
1235             char detail[256] = "(";
1236
1237             av_strlcat(buf, separator, buf_size);
1238
1239             snprintf(buf + strlen(buf), buf_size - strlen(buf),
1240                  "%s", enc->pix_fmt == AV_PIX_FMT_NONE ? "none" :
1241                      av_get_pix_fmt_name(enc->pix_fmt));
1242             if (enc->bits_per_raw_sample && enc->pix_fmt != AV_PIX_FMT_NONE &&
1243                 enc->bits_per_raw_sample < av_pix_fmt_desc_get(enc->pix_fmt)->comp[0].depth)
1244                 av_strlcatf(detail, sizeof(detail), "%d bpc, ", enc->bits_per_raw_sample);
1245             if (enc->color_range != AVCOL_RANGE_UNSPECIFIED)
1246                 av_strlcatf(detail, sizeof(detail), "%s, ",
1247                             av_color_range_name(enc->color_range));
1248
1249             if (enc->colorspace != AVCOL_SPC_UNSPECIFIED ||
1250                 enc->color_primaries != AVCOL_PRI_UNSPECIFIED ||
1251                 enc->color_trc != AVCOL_TRC_UNSPECIFIED) {
1252                 if (enc->colorspace != (int)enc->color_primaries ||
1253                     enc->colorspace != (int)enc->color_trc) {
1254                     new_line = 1;
1255                     av_strlcatf(detail, sizeof(detail), "%s/%s/%s, ",
1256                                 av_color_space_name(enc->colorspace),
1257                                 av_color_primaries_name(enc->color_primaries),
1258                                 av_color_transfer_name(enc->color_trc));
1259                 } else
1260                     av_strlcatf(detail, sizeof(detail), "%s, ",
1261                                 av_get_colorspace_name(enc->colorspace));
1262             }
1263
1264             if (enc->field_order != AV_FIELD_UNKNOWN) {
1265                 const char *field_order = "progressive";
1266                 if (enc->field_order == AV_FIELD_TT)
1267                     field_order = "top first";
1268                 else if (enc->field_order == AV_FIELD_BB)
1269                     field_order = "bottom first";
1270                 else if (enc->field_order == AV_FIELD_TB)
1271                     field_order = "top coded first (swapped)";
1272                 else if (enc->field_order == AV_FIELD_BT)
1273                     field_order = "bottom coded first (swapped)";
1274
1275                 av_strlcatf(detail, sizeof(detail), "%s, ", field_order);
1276             }
1277
1278             if (av_log_get_level() >= AV_LOG_VERBOSE &&
1279                 enc->chroma_sample_location != AVCHROMA_LOC_UNSPECIFIED)
1280                 av_strlcatf(detail, sizeof(detail), "%s, ",
1281                             av_chroma_location_name(enc->chroma_sample_location));
1282
1283             if (strlen(detail) > 1) {
1284                 detail[strlen(detail) - 2] = 0;
1285                 av_strlcatf(buf, buf_size, "%s)", detail);
1286             }
1287         }
1288
1289         if (enc->width) {
1290             av_strlcat(buf, new_line ? separator : ", ", buf_size);
1291
1292             snprintf(buf + strlen(buf), buf_size - strlen(buf),
1293                      "%dx%d",
1294                      enc->width, enc->height);
1295
1296             if (av_log_get_level() >= AV_LOG_VERBOSE &&
1297                 (enc->width != enc->coded_width ||
1298                  enc->height != enc->coded_height))
1299                 snprintf(buf + strlen(buf), buf_size - strlen(buf),
1300                          " (%dx%d)", enc->coded_width, enc->coded_height);
1301
1302             if (enc->sample_aspect_ratio.num) {
1303                 av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den,
1304                           enc->width * (int64_t)enc->sample_aspect_ratio.num,
1305                           enc->height * (int64_t)enc->sample_aspect_ratio.den,
1306                           1024 * 1024);
1307                 snprintf(buf + strlen(buf), buf_size - strlen(buf),
1308                          " [SAR %d:%d DAR %d:%d]",
1309                          enc->sample_aspect_ratio.num, enc->sample_aspect_ratio.den,
1310                          display_aspect_ratio.num, display_aspect_ratio.den);
1311             }
1312             if (av_log_get_level() >= AV_LOG_DEBUG) {
1313                 int g = av_gcd(enc->time_base.num, enc->time_base.den);
1314                 snprintf(buf + strlen(buf), buf_size - strlen(buf),
1315                          ", %d/%d",
1316                          enc->time_base.num / g, enc->time_base.den / g);
1317             }
1318         }
1319         if (encode) {
1320             snprintf(buf + strlen(buf), buf_size - strlen(buf),
1321                      ", q=%d-%d", enc->qmin, enc->qmax);
1322         } else {
1323             if (enc->properties & FF_CODEC_PROPERTY_CLOSED_CAPTIONS)
1324                 snprintf(buf + strlen(buf), buf_size - strlen(buf),
1325                          ", Closed Captions");
1326             if (enc->properties & FF_CODEC_PROPERTY_LOSSLESS)
1327                 snprintf(buf + strlen(buf), buf_size - strlen(buf),
1328                          ", lossless");
1329         }
1330         break;
1331     case AVMEDIA_TYPE_AUDIO:
1332         av_strlcat(buf, separator, buf_size);
1333
1334         if (enc->sample_rate) {
1335             snprintf(buf + strlen(buf), buf_size - strlen(buf),
1336                      "%d Hz, ", enc->sample_rate);
1337         }
1338         av_get_channel_layout_string(buf + strlen(buf), buf_size - strlen(buf), enc->channels, enc->channel_layout);
1339         if (enc->sample_fmt != AV_SAMPLE_FMT_NONE) {
1340             snprintf(buf + strlen(buf), buf_size - strlen(buf),
1341                      ", %s", av_get_sample_fmt_name(enc->sample_fmt));
1342         }
1343         if (   enc->bits_per_raw_sample > 0
1344             && enc->bits_per_raw_sample != av_get_bytes_per_sample(enc->sample_fmt) * 8)
1345             snprintf(buf + strlen(buf), buf_size - strlen(buf),
1346                      " (%d bit)", enc->bits_per_raw_sample);
1347         if (av_log_get_level() >= AV_LOG_VERBOSE) {
1348             if (enc->initial_padding)
1349                 snprintf(buf + strlen(buf), buf_size - strlen(buf),
1350                          ", delay %d", enc->initial_padding);
1351             if (enc->trailing_padding)
1352                 snprintf(buf + strlen(buf), buf_size - strlen(buf),
1353                          ", padding %d", enc->trailing_padding);
1354         }
1355         break;
1356     case AVMEDIA_TYPE_DATA:
1357         if (av_log_get_level() >= AV_LOG_DEBUG) {
1358             int g = av_gcd(enc->time_base.num, enc->time_base.den);
1359             if (g)
1360                 snprintf(buf + strlen(buf), buf_size - strlen(buf),
1361                          ", %d/%d",
1362                          enc->time_base.num / g, enc->time_base.den / g);
1363         }
1364         break;
1365     case AVMEDIA_TYPE_SUBTITLE:
1366         if (enc->width)
1367             snprintf(buf + strlen(buf), buf_size - strlen(buf),
1368                      ", %dx%d", enc->width, enc->height);
1369         break;
1370     default:
1371         return;
1372     }
1373     if (encode) {
1374         if (enc->flags & AV_CODEC_FLAG_PASS1)
1375             snprintf(buf + strlen(buf), buf_size - strlen(buf),
1376                      ", pass 1");
1377         if (enc->flags & AV_CODEC_FLAG_PASS2)
1378             snprintf(buf + strlen(buf), buf_size - strlen(buf),
1379                      ", pass 2");
1380     }
1381     bitrate = get_bit_rate(enc);
1382     if (bitrate != 0) {
1383         snprintf(buf + strlen(buf), buf_size - strlen(buf),
1384                  ", %"PRId64" kb/s", bitrate / 1000);
1385     } else if (enc->rc_max_rate > 0) {
1386         snprintf(buf + strlen(buf), buf_size - strlen(buf),
1387                  ", max. %"PRId64" kb/s", enc->rc_max_rate / 1000);
1388     }
1389 }
1390
1391 const char *av_get_profile_name(const AVCodec *codec, int profile)
1392 {
1393     const AVProfile *p;
1394     if (profile == FF_PROFILE_UNKNOWN || !codec->profiles)
1395         return NULL;
1396
1397     for (p = codec->profiles; p->profile != FF_PROFILE_UNKNOWN; p++)
1398         if (p->profile == profile)
1399             return p->name;
1400
1401     return NULL;
1402 }
1403
1404 const char *avcodec_profile_name(enum AVCodecID codec_id, int profile)
1405 {
1406     const AVCodecDescriptor *desc = avcodec_descriptor_get(codec_id);
1407     const AVProfile *p;
1408
1409     if (profile == FF_PROFILE_UNKNOWN || !desc || !desc->profiles)
1410         return NULL;
1411
1412     for (p = desc->profiles; p->profile != FF_PROFILE_UNKNOWN; p++)
1413         if (p->profile == profile)
1414             return p->name;
1415
1416     return NULL;
1417 }
1418
1419 unsigned avcodec_version(void)
1420 {
1421     av_assert0(AV_CODEC_ID_PCM_S8_PLANAR==65563);
1422     av_assert0(AV_CODEC_ID_ADPCM_G722==69660);
1423     av_assert0(AV_CODEC_ID_SRT==94216);
1424     av_assert0(LIBAVCODEC_VERSION_MICRO >= 100);
1425
1426     return LIBAVCODEC_VERSION_INT;
1427 }
1428
1429 const char *avcodec_configuration(void)
1430 {
1431     return FFMPEG_CONFIGURATION;
1432 }
1433
1434 const char *avcodec_license(void)
1435 {
1436 #define LICENSE_PREFIX "libavcodec license: "
1437     return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1;
1438 }
1439
1440 int av_get_exact_bits_per_sample(enum AVCodecID codec_id)
1441 {
1442     switch (codec_id) {
1443     case AV_CODEC_ID_8SVX_EXP:
1444     case AV_CODEC_ID_8SVX_FIB:
1445     case AV_CODEC_ID_ADPCM_CT:
1446     case AV_CODEC_ID_ADPCM_IMA_APC:
1447     case AV_CODEC_ID_ADPCM_IMA_EA_SEAD:
1448     case AV_CODEC_ID_ADPCM_IMA_OKI:
1449     case AV_CODEC_ID_ADPCM_IMA_WS:
1450     case AV_CODEC_ID_ADPCM_G722:
1451     case AV_CODEC_ID_ADPCM_YAMAHA:
1452     case AV_CODEC_ID_ADPCM_AICA:
1453         return 4;
1454     case AV_CODEC_ID_DSD_LSBF:
1455     case AV_CODEC_ID_DSD_MSBF:
1456     case AV_CODEC_ID_DSD_LSBF_PLANAR:
1457     case AV_CODEC_ID_DSD_MSBF_PLANAR:
1458     case AV_CODEC_ID_PCM_ALAW:
1459     case AV_CODEC_ID_PCM_MULAW:
1460     case AV_CODEC_ID_PCM_VIDC:
1461     case AV_CODEC_ID_PCM_S8:
1462     case AV_CODEC_ID_PCM_S8_PLANAR:
1463     case AV_CODEC_ID_PCM_U8:
1464     case AV_CODEC_ID_PCM_ZORK:
1465     case AV_CODEC_ID_SDX2_DPCM:
1466         return 8;
1467     case AV_CODEC_ID_PCM_S16BE:
1468     case AV_CODEC_ID_PCM_S16BE_PLANAR:
1469     case AV_CODEC_ID_PCM_S16LE:
1470     case AV_CODEC_ID_PCM_S16LE_PLANAR:
1471     case AV_CODEC_ID_PCM_U16BE:
1472     case AV_CODEC_ID_PCM_U16LE:
1473         return 16;
1474     case AV_CODEC_ID_PCM_S24DAUD:
1475     case AV_CODEC_ID_PCM_S24BE:
1476     case AV_CODEC_ID_PCM_S24LE:
1477     case AV_CODEC_ID_PCM_S24LE_PLANAR:
1478     case AV_CODEC_ID_PCM_U24BE:
1479     case AV_CODEC_ID_PCM_U24LE:
1480         return 24;
1481     case AV_CODEC_ID_PCM_S32BE:
1482     case AV_CODEC_ID_PCM_S32LE:
1483     case AV_CODEC_ID_PCM_S32LE_PLANAR:
1484     case AV_CODEC_ID_PCM_U32BE:
1485     case AV_CODEC_ID_PCM_U32LE:
1486     case AV_CODEC_ID_PCM_F32BE:
1487     case AV_CODEC_ID_PCM_F32LE:
1488     case AV_CODEC_ID_PCM_F24LE:
1489     case AV_CODEC_ID_PCM_F16LE:
1490         return 32;
1491     case AV_CODEC_ID_PCM_F64BE:
1492     case AV_CODEC_ID_PCM_F64LE:
1493     case AV_CODEC_ID_PCM_S64BE:
1494     case AV_CODEC_ID_PCM_S64LE:
1495         return 64;
1496     default:
1497         return 0;
1498     }
1499 }
1500
1501 enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be)
1502 {
1503     static const enum AVCodecID map[AV_SAMPLE_FMT_NB][2] = {
1504         [AV_SAMPLE_FMT_U8  ] = { AV_CODEC_ID_PCM_U8,    AV_CODEC_ID_PCM_U8    },
1505         [AV_SAMPLE_FMT_S16 ] = { AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S16BE },
1506         [AV_SAMPLE_FMT_S32 ] = { AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_S32BE },
1507         [AV_SAMPLE_FMT_FLT ] = { AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_F32BE },
1508         [AV_SAMPLE_FMT_DBL ] = { AV_CODEC_ID_PCM_F64LE, AV_CODEC_ID_PCM_F64BE },
1509         [AV_SAMPLE_FMT_U8P ] = { AV_CODEC_ID_PCM_U8,    AV_CODEC_ID_PCM_U8    },
1510         [AV_SAMPLE_FMT_S16P] = { AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S16BE },
1511         [AV_SAMPLE_FMT_S32P] = { AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_S32BE },
1512         [AV_SAMPLE_FMT_S64P] = { AV_CODEC_ID_PCM_S64LE, AV_CODEC_ID_PCM_S64BE },
1513         [AV_SAMPLE_FMT_FLTP] = { AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_F32BE },
1514         [AV_SAMPLE_FMT_DBLP] = { AV_CODEC_ID_PCM_F64LE, AV_CODEC_ID_PCM_F64BE },
1515     };
1516     if (fmt < 0 || fmt >= AV_SAMPLE_FMT_NB)
1517         return AV_CODEC_ID_NONE;
1518     if (be < 0 || be > 1)
1519         be = AV_NE(1, 0);
1520     return map[fmt][be];
1521 }
1522
1523 int av_get_bits_per_sample(enum AVCodecID codec_id)
1524 {
1525     switch (codec_id) {
1526     case AV_CODEC_ID_ADPCM_SBPRO_2:
1527         return 2;
1528     case AV_CODEC_ID_ADPCM_SBPRO_3:
1529         return 3;
1530     case AV_CODEC_ID_ADPCM_SBPRO_4:
1531     case AV_CODEC_ID_ADPCM_IMA_WAV:
1532     case AV_CODEC_ID_ADPCM_IMA_QT:
1533     case AV_CODEC_ID_ADPCM_SWF:
1534     case AV_CODEC_ID_ADPCM_MS:
1535         return 4;
1536     default:
1537         return av_get_exact_bits_per_sample(codec_id);
1538     }
1539 }
1540
1541 static int get_audio_frame_duration(enum AVCodecID id, int sr, int ch, int ba,
1542                                     uint32_t tag, int bits_per_coded_sample, int64_t bitrate,
1543                                     uint8_t * extradata, int frame_size, int frame_bytes)
1544 {
1545     int bps = av_get_exact_bits_per_sample(id);
1546     int framecount = (ba > 0 && frame_bytes / ba > 0) ? frame_bytes / ba : 1;
1547
1548     /* codecs with an exact constant bits per sample */
1549     if (bps > 0 && ch > 0 && frame_bytes > 0 && ch < 32768 && bps < 32768)
1550         return (frame_bytes * 8LL) / (bps * ch);
1551     bps = bits_per_coded_sample;
1552
1553     /* codecs with a fixed packet duration */
1554     switch (id) {
1555     case AV_CODEC_ID_ADPCM_ADX:    return   32;
1556     case AV_CODEC_ID_ADPCM_IMA_QT: return   64;
1557     case AV_CODEC_ID_ADPCM_EA_XAS: return  128;
1558     case AV_CODEC_ID_AMR_NB:
1559     case AV_CODEC_ID_EVRC:
1560     case AV_CODEC_ID_GSM:
1561     case AV_CODEC_ID_QCELP:
1562     case AV_CODEC_ID_RA_288:       return  160;
1563     case AV_CODEC_ID_AMR_WB:
1564     case AV_CODEC_ID_GSM_MS:       return  320;
1565     case AV_CODEC_ID_MP1:          return  384;
1566     case AV_CODEC_ID_ATRAC1:       return  512;
1567     case AV_CODEC_ID_ATRAC9:
1568     case AV_CODEC_ID_ATRAC3:       return 1024 * framecount;
1569     case AV_CODEC_ID_ATRAC3P:      return 2048;
1570     case AV_CODEC_ID_MP2:
1571     case AV_CODEC_ID_MUSEPACK7:    return 1152;
1572     case AV_CODEC_ID_AC3:          return 1536;
1573     }
1574
1575     if (sr > 0) {
1576         /* calc from sample rate */
1577         if (id == AV_CODEC_ID_TTA)
1578             return 256 * sr / 245;
1579         else if (id == AV_CODEC_ID_DST)
1580             return 588 * sr / 44100;
1581
1582         if (ch > 0) {
1583             /* calc from sample rate and channels */
1584             if (id == AV_CODEC_ID_BINKAUDIO_DCT)
1585                 return (480 << (sr / 22050)) / ch;
1586         }
1587
1588         if (id == AV_CODEC_ID_MP3)
1589             return sr <= 24000 ? 576 : 1152;
1590     }
1591
1592     if (ba > 0) {
1593         /* calc from block_align */
1594         if (id == AV_CODEC_ID_SIPR) {
1595             switch (ba) {
1596             case 20: return 160;
1597             case 19: return 144;
1598             case 29: return 288;
1599             case 37: return 480;
1600             }
1601         } else if (id == AV_CODEC_ID_ILBC) {
1602             switch (ba) {
1603             case 38: return 160;
1604             case 50: return 240;
1605             }
1606         }
1607     }
1608
1609     if (frame_bytes > 0) {
1610         /* calc from frame_bytes only */
1611         if (id == AV_CODEC_ID_TRUESPEECH)
1612             return 240 * (frame_bytes / 32);
1613         if (id == AV_CODEC_ID_NELLYMOSER)
1614             return 256 * (frame_bytes / 64);
1615         if (id == AV_CODEC_ID_RA_144)
1616             return 160 * (frame_bytes / 20);
1617
1618         if (bps > 0) {
1619             /* calc from frame_bytes and bits_per_coded_sample */
1620             if (id == AV_CODEC_ID_ADPCM_G726 || id == AV_CODEC_ID_ADPCM_G726LE)
1621                 return frame_bytes * 8 / bps;
1622         }
1623
1624         if (ch > 0 && ch < INT_MAX/16) {
1625             /* calc from frame_bytes and channels */
1626             switch (id) {
1627             case AV_CODEC_ID_ADPCM_AFC:
1628                 return frame_bytes / (9 * ch) * 16;
1629             case AV_CODEC_ID_ADPCM_PSX:
1630             case AV_CODEC_ID_ADPCM_DTK:
1631                 return frame_bytes / (16 * ch) * 28;
1632             case AV_CODEC_ID_ADPCM_4XM:
1633             case AV_CODEC_ID_ADPCM_IMA_DAT4:
1634             case AV_CODEC_ID_ADPCM_IMA_ISS:
1635                 return (frame_bytes - 4 * ch) * 2 / ch;
1636             case AV_CODEC_ID_ADPCM_IMA_SMJPEG:
1637                 return (frame_bytes - 4) * 2 / ch;
1638             case AV_CODEC_ID_ADPCM_IMA_AMV:
1639                 return (frame_bytes - 8) * 2 / ch;
1640             case AV_CODEC_ID_ADPCM_THP:
1641             case AV_CODEC_ID_ADPCM_THP_LE:
1642                 if (extradata)
1643                     return frame_bytes * 14 / (8 * ch);
1644                 break;
1645             case AV_CODEC_ID_ADPCM_XA:
1646                 return (frame_bytes / 128) * 224 / ch;
1647             case AV_CODEC_ID_INTERPLAY_DPCM:
1648                 return (frame_bytes - 6 - ch) / ch;
1649             case AV_CODEC_ID_ROQ_DPCM:
1650                 return (frame_bytes - 8) / ch;
1651             case AV_CODEC_ID_XAN_DPCM:
1652                 return (frame_bytes - 2 * ch) / ch;
1653             case AV_CODEC_ID_MACE3:
1654                 return 3 * frame_bytes / ch;
1655             case AV_CODEC_ID_MACE6:
1656                 return 6 * frame_bytes / ch;
1657             case AV_CODEC_ID_PCM_LXF:
1658                 return 2 * (frame_bytes / (5 * ch));
1659             case AV_CODEC_ID_IAC:
1660             case AV_CODEC_ID_IMC:
1661                 return 4 * frame_bytes / ch;
1662             }
1663
1664             if (tag) {
1665                 /* calc from frame_bytes, channels, and codec_tag */
1666                 if (id == AV_CODEC_ID_SOL_DPCM) {
1667                     if (tag == 3)
1668                         return frame_bytes / ch;
1669                     else
1670                         return frame_bytes * 2 / ch;
1671                 }
1672             }
1673
1674             if (ba > 0) {
1675                 /* calc from frame_bytes, channels, and block_align */
1676                 int blocks = frame_bytes / ba;
1677                 switch (id) {
1678                 case AV_CODEC_ID_ADPCM_IMA_WAV:
1679                     if (bps < 2 || bps > 5)
1680                         return 0;
1681                     return blocks * (1 + (ba - 4 * ch) / (bps * ch) * 8);
1682                 case AV_CODEC_ID_ADPCM_IMA_DK3:
1683                     return blocks * (((ba - 16) * 2 / 3 * 4) / ch);
1684                 case AV_CODEC_ID_ADPCM_IMA_DK4:
1685                     return blocks * (1 + (ba - 4 * ch) * 2 / ch);
1686                 case AV_CODEC_ID_ADPCM_IMA_RAD:
1687                     return blocks * ((ba - 4 * ch) * 2 / ch);
1688                 case AV_CODEC_ID_ADPCM_MS:
1689                     return blocks * (2 + (ba - 7 * ch) * 2 / ch);
1690                 case AV_CODEC_ID_ADPCM_MTAF:
1691                     return blocks * (ba - 16) * 2 / ch;
1692                 }
1693             }
1694
1695             if (bps > 0) {
1696                 /* calc from frame_bytes, channels, and bits_per_coded_sample */
1697                 switch (id) {
1698                 case AV_CODEC_ID_PCM_DVD:
1699                     if(bps<4 || frame_bytes<3)
1700                         return 0;
1701                     return 2 * ((frame_bytes - 3) / ((bps * 2 / 8) * ch));
1702                 case AV_CODEC_ID_PCM_BLURAY:
1703                     if(bps<4 || frame_bytes<4)
1704                         return 0;
1705                     return (frame_bytes - 4) / ((FFALIGN(ch, 2) * bps) / 8);
1706                 case AV_CODEC_ID_S302M:
1707                     return 2 * (frame_bytes / ((bps + 4) / 4)) / ch;
1708                 }
1709             }
1710         }
1711     }
1712
1713     /* Fall back on using frame_size */
1714     if (frame_size > 1 && frame_bytes)
1715         return frame_size;
1716
1717     //For WMA we currently have no other means to calculate duration thus we
1718     //do it here by assuming CBR, which is true for all known cases.
1719     if (bitrate > 0 && frame_bytes > 0 && sr > 0 && ba > 1) {
1720         if (id == AV_CODEC_ID_WMAV1 || id == AV_CODEC_ID_WMAV2)
1721             return  (frame_bytes * 8LL * sr) / bitrate;
1722     }
1723
1724     return 0;
1725 }
1726
1727 int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
1728 {
1729     return get_audio_frame_duration(avctx->codec_id, avctx->sample_rate,
1730                                     avctx->channels, avctx->block_align,
1731                                     avctx->codec_tag, avctx->bits_per_coded_sample,
1732                                     avctx->bit_rate, avctx->extradata, avctx->frame_size,
1733                                     frame_bytes);
1734 }
1735
1736 int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes)
1737 {
1738     return get_audio_frame_duration(par->codec_id, par->sample_rate,
1739                                     par->channels, par->block_align,
1740                                     par->codec_tag, par->bits_per_coded_sample,
1741                                     par->bit_rate, par->extradata, par->frame_size,
1742                                     frame_bytes);
1743 }
1744
1745 #if !HAVE_THREADS
1746 int ff_thread_init(AVCodecContext *s)
1747 {
1748     return -1;
1749 }
1750
1751 #endif
1752
1753 unsigned int av_xiphlacing(unsigned char *s, unsigned int v)
1754 {
1755     unsigned int n = 0;
1756
1757     while (v >= 0xff) {
1758         *s++ = 0xff;
1759         v -= 0xff;
1760         n++;
1761     }
1762     *s = v;
1763     n++;
1764     return n;
1765 }
1766
1767 int ff_match_2uint16(const uint16_t(*tab)[2], int size, int a, int b)
1768 {
1769     int i;
1770     for (i = 0; i < size && !(tab[i][0] == a && tab[i][1] == b); i++) ;
1771     return i;
1772 }
1773
1774 const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *codec, int index)
1775 {
1776     int i;
1777     if (!codec->hw_configs || index < 0)
1778         return NULL;
1779     for (i = 0; i <= index; i++)
1780         if (!codec->hw_configs[i])
1781             return NULL;
1782     return &codec->hw_configs[index]->public;
1783 }
1784
1785 #if FF_API_USER_VISIBLE_AVHWACCEL
1786 AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel)
1787 {
1788     return NULL;
1789 }
1790
1791 void av_register_hwaccel(AVHWAccel *hwaccel)
1792 {
1793 }
1794 #endif
1795
1796 #if FF_API_LOCKMGR
1797 int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op))
1798 {
1799     return 0;
1800 }
1801 #endif
1802
1803 unsigned int avpriv_toupper4(unsigned int x)
1804 {
1805     return av_toupper(x & 0xFF) +
1806           (av_toupper((x >>  8) & 0xFF) << 8)  +
1807           (av_toupper((x >> 16) & 0xFF) << 16) +
1808 ((unsigned)av_toupper((x >> 24) & 0xFF) << 24);
1809 }
1810
1811 int ff_thread_ref_frame(ThreadFrame *dst, ThreadFrame *src)
1812 {
1813     int ret;
1814
1815     dst->owner[0] = src->owner[0];
1816     dst->owner[1] = src->owner[1];
1817
1818     ret = av_frame_ref(dst->f, src->f);
1819     if (ret < 0)
1820         return ret;
1821
1822     av_assert0(!dst->progress);
1823
1824     if (src->progress &&
1825         !(dst->progress = av_buffer_ref(src->progress))) {
1826         ff_thread_release_buffer(dst->owner[0], dst);
1827         return AVERROR(ENOMEM);
1828     }
1829
1830     return 0;
1831 }
1832
1833 #if !HAVE_THREADS
1834
1835 enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
1836 {
1837     return ff_get_format(avctx, fmt);
1838 }
1839
1840 int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
1841 {
1842     f->owner[0] = f->owner[1] = avctx;
1843     return ff_get_buffer(avctx, f->f, flags);
1844 }
1845
1846 void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f)
1847 {
1848     if (f->f)
1849         av_frame_unref(f->f);
1850 }
1851
1852 void ff_thread_finish_setup(AVCodecContext *avctx)
1853 {
1854 }
1855
1856 void ff_thread_report_progress(ThreadFrame *f, int progress, int field)
1857 {
1858 }
1859
1860 void ff_thread_await_progress(ThreadFrame *f, int progress, int field)
1861 {
1862 }
1863
1864 int ff_thread_can_start_frame(AVCodecContext *avctx)
1865 {
1866     return 1;
1867 }
1868
1869 int ff_alloc_entries(AVCodecContext *avctx, int count)
1870 {
1871     return 0;
1872 }
1873
1874 void ff_reset_entries(AVCodecContext *avctx)
1875 {
1876 }
1877
1878 void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift)
1879 {
1880 }
1881
1882 void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, int n)
1883 {
1884 }
1885
1886 #endif
1887
1888 int avcodec_is_open(AVCodecContext *s)
1889 {
1890     return !!s->internal;
1891 }
1892
1893 int avpriv_bprint_to_extradata(AVCodecContext *avctx, struct AVBPrint *buf)
1894 {
1895     int ret;
1896     char *str;
1897
1898     ret = av_bprint_finalize(buf, &str);
1899     if (ret < 0)
1900         return ret;
1901     if (!av_bprint_is_complete(buf)) {
1902         av_free(str);
1903         return AVERROR(ENOMEM);
1904     }
1905
1906     avctx->extradata = str;
1907     /* Note: the string is NUL terminated (so extradata can be read as a
1908      * string), but the ending character is not accounted in the size (in
1909      * binary formats you are likely not supposed to mux that character). When
1910      * extradata is copied, it is also padded with AV_INPUT_BUFFER_PADDING_SIZE
1911      * zeros. */
1912     avctx->extradata_size = buf->len;
1913     return 0;
1914 }
1915
1916 const uint8_t *avpriv_find_start_code(const uint8_t *av_restrict p,
1917                                       const uint8_t *end,
1918                                       uint32_t *av_restrict state)
1919 {
1920     int i;
1921
1922     av_assert0(p <= end);
1923     if (p >= end)
1924         return end;
1925
1926     for (i = 0; i < 3; i++) {
1927         uint32_t tmp = *state << 8;
1928         *state = tmp + *(p++);
1929         if (tmp == 0x100 || p == end)
1930             return p;
1931     }
1932
1933     while (p < end) {
1934         if      (p[-1] > 1      ) p += 3;
1935         else if (p[-2]          ) p += 2;
1936         else if (p[-3]|(p[-1]-1)) p++;
1937         else {
1938             p++;
1939             break;
1940         }
1941     }
1942
1943     p = FFMIN(p, end) - 4;
1944     *state = AV_RB32(p);
1945
1946     return p + 4;
1947 }
1948
1949 AVCPBProperties *av_cpb_properties_alloc(size_t *size)
1950 {
1951     AVCPBProperties *props = av_mallocz(sizeof(AVCPBProperties));
1952     if (!props)
1953         return NULL;
1954
1955     if (size)
1956         *size = sizeof(*props);
1957
1958     props->vbv_delay = UINT64_MAX;
1959
1960     return props;
1961 }
1962
1963 AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx)
1964 {
1965     AVPacketSideData *tmp;
1966     AVCPBProperties  *props;
1967     size_t size;
1968
1969     props = av_cpb_properties_alloc(&size);
1970     if (!props)
1971         return NULL;
1972
1973     tmp = av_realloc_array(avctx->coded_side_data, avctx->nb_coded_side_data + 1, sizeof(*tmp));
1974     if (!tmp) {
1975         av_freep(&props);
1976         return NULL;
1977     }
1978
1979     avctx->coded_side_data = tmp;
1980     avctx->nb_coded_side_data++;
1981
1982     avctx->coded_side_data[avctx->nb_coded_side_data - 1].type = AV_PKT_DATA_CPB_PROPERTIES;
1983     avctx->coded_side_data[avctx->nb_coded_side_data - 1].data = (uint8_t*)props;
1984     avctx->coded_side_data[avctx->nb_coded_side_data - 1].size = size;
1985
1986     return props;
1987 }
1988
1989 static void codec_parameters_reset(AVCodecParameters *par)
1990 {
1991     av_freep(&par->extradata);
1992
1993     memset(par, 0, sizeof(*par));
1994
1995     par->codec_type          = AVMEDIA_TYPE_UNKNOWN;
1996     par->codec_id            = AV_CODEC_ID_NONE;
1997     par->format              = -1;
1998     par->field_order         = AV_FIELD_UNKNOWN;
1999     par->color_range         = AVCOL_RANGE_UNSPECIFIED;
2000     par->color_primaries     = AVCOL_PRI_UNSPECIFIED;
2001     par->color_trc           = AVCOL_TRC_UNSPECIFIED;
2002     par->color_space         = AVCOL_SPC_UNSPECIFIED;
2003     par->chroma_location     = AVCHROMA_LOC_UNSPECIFIED;
2004     par->sample_aspect_ratio = (AVRational){ 0, 1 };
2005     par->profile             = FF_PROFILE_UNKNOWN;
2006     par->level               = FF_LEVEL_UNKNOWN;
2007 }
2008
2009 AVCodecParameters *avcodec_parameters_alloc(void)
2010 {
2011     AVCodecParameters *par = av_mallocz(sizeof(*par));
2012
2013     if (!par)
2014         return NULL;
2015     codec_parameters_reset(par);
2016     return par;
2017 }
2018
2019 void avcodec_parameters_free(AVCodecParameters **ppar)
2020 {
2021     AVCodecParameters *par = *ppar;
2022
2023     if (!par)
2024         return;
2025     codec_parameters_reset(par);
2026
2027     av_freep(ppar);
2028 }
2029
2030 int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
2031 {
2032     codec_parameters_reset(dst);
2033     memcpy(dst, src, sizeof(*dst));
2034
2035     dst->extradata      = NULL;
2036     dst->extradata_size = 0;
2037     if (src->extradata) {
2038         dst->extradata = av_mallocz(src->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
2039         if (!dst->extradata)
2040             return AVERROR(ENOMEM);
2041         memcpy(dst->extradata, src->extradata, src->extradata_size);
2042         dst->extradata_size = src->extradata_size;
2043     }
2044
2045     return 0;
2046 }
2047
2048 int avcodec_parameters_from_context(AVCodecParameters *par,
2049                                     const AVCodecContext *codec)
2050 {
2051     codec_parameters_reset(par);
2052
2053     par->codec_type = codec->codec_type;
2054     par->codec_id   = codec->codec_id;
2055     par->codec_tag  = codec->codec_tag;
2056
2057     par->bit_rate              = codec->bit_rate;
2058     par->bits_per_coded_sample = codec->bits_per_coded_sample;
2059     par->bits_per_raw_sample   = codec->bits_per_raw_sample;
2060     par->profile               = codec->profile;
2061     par->level                 = codec->level;
2062
2063     switch (par->codec_type) {
2064     case AVMEDIA_TYPE_VIDEO:
2065         par->format              = codec->pix_fmt;
2066         par->width               = codec->width;
2067         par->height              = codec->height;
2068         par->field_order         = codec->field_order;
2069         par->color_range         = codec->color_range;
2070         par->color_primaries     = codec->color_primaries;
2071         par->color_trc           = codec->color_trc;
2072         par->color_space         = codec->colorspace;
2073         par->chroma_location     = codec->chroma_sample_location;
2074         par->sample_aspect_ratio = codec->sample_aspect_ratio;
2075         par->video_delay         = codec->has_b_frames;
2076         break;
2077     case AVMEDIA_TYPE_AUDIO:
2078         par->format           = codec->sample_fmt;
2079         par->channel_layout   = codec->channel_layout;
2080         par->channels         = codec->channels;
2081         par->sample_rate      = codec->sample_rate;
2082         par->block_align      = codec->block_align;
2083         par->frame_size       = codec->frame_size;
2084         par->initial_padding  = codec->initial_padding;
2085         par->trailing_padding = codec->trailing_padding;
2086         par->seek_preroll     = codec->seek_preroll;
2087         break;
2088     case AVMEDIA_TYPE_SUBTITLE:
2089         par->width  = codec->width;
2090         par->height = codec->height;
2091         break;
2092     }
2093
2094     if (codec->extradata) {
2095         par->extradata = av_mallocz(codec->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
2096         if (!par->extradata)
2097             return AVERROR(ENOMEM);
2098         memcpy(par->extradata, codec->extradata, codec->extradata_size);
2099         par->extradata_size = codec->extradata_size;
2100     }
2101
2102     return 0;
2103 }
2104
2105 int avcodec_parameters_to_context(AVCodecContext *codec,
2106                                   const AVCodecParameters *par)
2107 {
2108     codec->codec_type = par->codec_type;
2109     codec->codec_id   = par->codec_id;
2110     codec->codec_tag  = par->codec_tag;
2111
2112     codec->bit_rate              = par->bit_rate;
2113     codec->bits_per_coded_sample = par->bits_per_coded_sample;
2114     codec->bits_per_raw_sample   = par->bits_per_raw_sample;
2115     codec->profile               = par->profile;
2116     codec->level                 = par->level;
2117
2118     switch (par->codec_type) {
2119     case AVMEDIA_TYPE_VIDEO:
2120         codec->pix_fmt                = par->format;
2121         codec->width                  = par->width;
2122         codec->height                 = par->height;
2123         codec->field_order            = par->field_order;
2124         codec->color_range            = par->color_range;
2125         codec->color_primaries        = par->color_primaries;
2126         codec->color_trc              = par->color_trc;
2127         codec->colorspace             = par->color_space;
2128         codec->chroma_sample_location = par->chroma_location;
2129         codec->sample_aspect_ratio    = par->sample_aspect_ratio;
2130         codec->has_b_frames           = par->video_delay;
2131         break;
2132     case AVMEDIA_TYPE_AUDIO:
2133         codec->sample_fmt       = par->format;
2134         codec->channel_layout   = par->channel_layout;
2135         codec->channels         = par->channels;
2136         codec->sample_rate      = par->sample_rate;
2137         codec->block_align      = par->block_align;
2138         codec->frame_size       = par->frame_size;
2139         codec->delay            =
2140         codec->initial_padding  = par->initial_padding;
2141         codec->trailing_padding = par->trailing_padding;
2142         codec->seek_preroll     = par->seek_preroll;
2143         break;
2144     case AVMEDIA_TYPE_SUBTITLE:
2145         codec->width  = par->width;
2146         codec->height = par->height;
2147         break;
2148     }
2149
2150     if (par->extradata) {
2151         av_freep(&codec->extradata);
2152         codec->extradata = av_mallocz(par->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
2153         if (!codec->extradata)
2154             return AVERROR(ENOMEM);
2155         memcpy(codec->extradata, par->extradata, par->extradata_size);
2156         codec->extradata_size = par->extradata_size;
2157     }
2158
2159     return 0;
2160 }
2161
2162 int ff_alloc_a53_sei(const AVFrame *frame, size_t prefix_len,
2163                      void **data, size_t *sei_size)
2164 {
2165     AVFrameSideData *side_data = NULL;
2166     uint8_t *sei_data;
2167
2168     if (frame)
2169         side_data = av_frame_get_side_data(frame, AV_FRAME_DATA_A53_CC);
2170
2171     if (!side_data) {
2172         *data = NULL;
2173         return 0;
2174     }
2175
2176     *sei_size = side_data->size + 11;
2177     *data = av_mallocz(*sei_size + prefix_len);
2178     if (!*data)
2179         return AVERROR(ENOMEM);
2180     sei_data = (uint8_t*)*data + prefix_len;
2181
2182     // country code
2183     sei_data[0] = 181;
2184     sei_data[1] = 0;
2185     sei_data[2] = 49;
2186
2187     /**
2188      * 'GA94' is standard in North America for ATSC, but hard coding
2189      * this style may not be the right thing to do -- other formats
2190      * do exist. This information is not available in the side_data
2191      * so we are going with this right now.
2192      */
2193     AV_WL32(sei_data + 3, MKTAG('G', 'A', '9', '4'));
2194     sei_data[7] = 3;
2195     sei_data[8] = ((side_data->size/3) & 0x1f) | 0x40;
2196     sei_data[9] = 0;
2197
2198     memcpy(sei_data + 10, side_data->data, side_data->size);
2199
2200     sei_data[side_data->size+10] = 255;
2201
2202     return 0;
2203 }
2204
2205 int64_t ff_guess_coded_bitrate(AVCodecContext *avctx)
2206 {
2207     AVRational framerate = avctx->framerate;
2208     int bits_per_coded_sample = avctx->bits_per_coded_sample;
2209     int64_t bitrate;
2210
2211     if (!(framerate.num && framerate.den))
2212         framerate = av_inv_q(avctx->time_base);
2213     if (!(framerate.num && framerate.den))
2214         return 0;
2215
2216     if (!bits_per_coded_sample) {
2217         const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt);
2218         bits_per_coded_sample = av_get_bits_per_pixel(desc);
2219     }
2220     bitrate = (int64_t)bits_per_coded_sample * avctx->width * avctx->height *
2221               framerate.num / framerate.den;
2222
2223     return bitrate;
2224 }
2225
2226 int ff_int_from_list_or_default(void *ctx, const char * val_name, int val,
2227                                 const int * array_valid_values, int default_value)
2228 {
2229     int i = 0, ref_val;
2230
2231     while (1) {
2232         ref_val = array_valid_values[i];
2233         if (ref_val == INT_MAX)
2234             break;
2235         if (val == ref_val)
2236             return val;
2237         i++;
2238     }
2239     /* val is not a valid value */
2240     av_log(ctx, AV_LOG_DEBUG,
2241            "%s %d are not supported. Set to default value : %d\n", val_name, val, default_value);
2242     return default_value;
2243 }