]> git.sesse.net Git - ffmpeg/blob - libavcodec/utils.c
avcodec/pthread: add wpp api
[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/atomic.h"
30 #include "libavutil/attributes.h"
31 #include "libavutil/avassert.h"
32 #include "libavutil/avstring.h"
33 #include "libavutil/bprint.h"
34 #include "libavutil/channel_layout.h"
35 #include "libavutil/crc.h"
36 #include "libavutil/frame.h"
37 #include "libavutil/internal.h"
38 #include "libavutil/mathematics.h"
39 #include "libavutil/pixdesc.h"
40 #include "libavutil/imgutils.h"
41 #include "libavutil/samplefmt.h"
42 #include "libavutil/dict.h"
43 #include "avcodec.h"
44 #include "dsputil.h"
45 #include "libavutil/opt.h"
46 #include "thread.h"
47 #include "frame_thread_encoder.h"
48 #include "internal.h"
49 #include "bytestream.h"
50 #include "version.h"
51 #include <stdlib.h>
52 #include <stdarg.h>
53 #include <limits.h>
54 #include <float.h>
55 #if CONFIG_ICONV
56 # include <iconv.h>
57 #endif
58
59 volatile int ff_avcodec_locked;
60 static int volatile entangled_thread_counter = 0;
61 static int (*lockmgr_cb)(void **mutex, enum AVLockOp op);
62 static void *codec_mutex;
63 static void *avformat_mutex;
64
65 void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
66 {
67     if (min_size < *size)
68         return ptr;
69
70     min_size = FFMAX(17 * min_size / 16 + 32, min_size);
71
72     ptr = av_realloc(ptr, min_size);
73     /* we could set this to the unmodified min_size but this is safer
74      * if the user lost the ptr and uses NULL now
75      */
76     if (!ptr)
77         min_size = 0;
78
79     *size = min_size;
80
81     return ptr;
82 }
83
84 static inline int ff_fast_malloc(void *ptr, unsigned int *size, size_t min_size, int zero_realloc)
85 {
86     void **p = ptr;
87     if (min_size < *size)
88         return 0;
89     min_size = FFMAX(17 * min_size / 16 + 32, min_size);
90     av_free(*p);
91     *p = zero_realloc ? av_mallocz(min_size) : av_malloc(min_size);
92     if (!*p)
93         min_size = 0;
94     *size = min_size;
95     return 1;
96 }
97
98 void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
99 {
100     ff_fast_malloc(ptr, size, min_size, 0);
101 }
102
103 void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
104 {
105     uint8_t **p = ptr;
106     if (min_size > SIZE_MAX - FF_INPUT_BUFFER_PADDING_SIZE) {
107         av_freep(p);
108         *size = 0;
109         return;
110     }
111     if (!ff_fast_malloc(p, size, min_size + FF_INPUT_BUFFER_PADDING_SIZE, 1))
112         memset(*p + min_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
113 }
114
115 void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size)
116 {
117     uint8_t **p = ptr;
118     if (min_size > SIZE_MAX - FF_INPUT_BUFFER_PADDING_SIZE) {
119         av_freep(p);
120         *size = 0;
121         return;
122     }
123     if (!ff_fast_malloc(p, size, min_size + FF_INPUT_BUFFER_PADDING_SIZE, 1))
124         memset(*p, 0, min_size + FF_INPUT_BUFFER_PADDING_SIZE);
125 }
126
127 /* encoder management */
128 static AVCodec *first_avcodec = NULL;
129
130 AVCodec *av_codec_next(const AVCodec *c)
131 {
132     if (c)
133         return c->next;
134     else
135         return first_avcodec;
136 }
137
138 static av_cold void avcodec_init(void)
139 {
140     static int initialized = 0;
141
142     if (initialized != 0)
143         return;
144     initialized = 1;
145
146     if (CONFIG_DSPUTIL)
147         ff_dsputil_static_init();
148 }
149
150 int av_codec_is_encoder(const AVCodec *codec)
151 {
152     return codec && (codec->encode_sub || codec->encode2);
153 }
154
155 int av_codec_is_decoder(const AVCodec *codec)
156 {
157     return codec && codec->decode;
158 }
159
160 av_cold void avcodec_register(AVCodec *codec)
161 {
162     AVCodec **p;
163     avcodec_init();
164     p = &first_avcodec;
165     codec->next = NULL;
166     while(avpriv_atomic_ptr_cas((void * volatile *)p, NULL, codec))
167         p = &(*p)->next;
168
169     if (codec->init_static_data)
170         codec->init_static_data(codec);
171 }
172
173 unsigned avcodec_get_edge_width(void)
174 {
175     return EDGE_WIDTH;
176 }
177
178 void avcodec_set_dimensions(AVCodecContext *s, int width, int height)
179 {
180     s->coded_width  = width;
181     s->coded_height = height;
182     s->width        = FF_CEIL_RSHIFT(width,  s->lowres);
183     s->height       = FF_CEIL_RSHIFT(height, s->lowres);
184 }
185
186 #if HAVE_NEON || ARCH_PPC || HAVE_MMX
187 #   define STRIDE_ALIGN 16
188 #else
189 #   define STRIDE_ALIGN 8
190 #endif
191
192 void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
193                                int linesize_align[AV_NUM_DATA_POINTERS])
194 {
195     int i;
196     int w_align = 1;
197     int h_align = 1;
198
199     switch (s->pix_fmt) {
200     case AV_PIX_FMT_YUV420P:
201     case AV_PIX_FMT_YUYV422:
202     case AV_PIX_FMT_UYVY422:
203     case AV_PIX_FMT_YUV422P:
204     case AV_PIX_FMT_YUV440P:
205     case AV_PIX_FMT_YUV444P:
206     case AV_PIX_FMT_GBRAP:
207     case AV_PIX_FMT_GBRP:
208     case AV_PIX_FMT_GRAY8:
209     case AV_PIX_FMT_GRAY16BE:
210     case AV_PIX_FMT_GRAY16LE:
211     case AV_PIX_FMT_YUVJ420P:
212     case AV_PIX_FMT_YUVJ422P:
213     case AV_PIX_FMT_YUVJ440P:
214     case AV_PIX_FMT_YUVJ444P:
215     case AV_PIX_FMT_YUVA420P:
216     case AV_PIX_FMT_YUVA422P:
217     case AV_PIX_FMT_YUVA444P:
218     case AV_PIX_FMT_YUV420P9LE:
219     case AV_PIX_FMT_YUV420P9BE:
220     case AV_PIX_FMT_YUV420P10LE:
221     case AV_PIX_FMT_YUV420P10BE:
222     case AV_PIX_FMT_YUV420P12LE:
223     case AV_PIX_FMT_YUV420P12BE:
224     case AV_PIX_FMT_YUV420P14LE:
225     case AV_PIX_FMT_YUV420P14BE:
226     case AV_PIX_FMT_YUV420P16LE:
227     case AV_PIX_FMT_YUV420P16BE:
228     case AV_PIX_FMT_YUV422P9LE:
229     case AV_PIX_FMT_YUV422P9BE:
230     case AV_PIX_FMT_YUV422P10LE:
231     case AV_PIX_FMT_YUV422P10BE:
232     case AV_PIX_FMT_YUV422P12LE:
233     case AV_PIX_FMT_YUV422P12BE:
234     case AV_PIX_FMT_YUV422P14LE:
235     case AV_PIX_FMT_YUV422P14BE:
236     case AV_PIX_FMT_YUV422P16LE:
237     case AV_PIX_FMT_YUV422P16BE:
238     case AV_PIX_FMT_YUV444P9LE:
239     case AV_PIX_FMT_YUV444P9BE:
240     case AV_PIX_FMT_YUV444P10LE:
241     case AV_PIX_FMT_YUV444P10BE:
242     case AV_PIX_FMT_YUV444P12LE:
243     case AV_PIX_FMT_YUV444P12BE:
244     case AV_PIX_FMT_YUV444P14LE:
245     case AV_PIX_FMT_YUV444P14BE:
246     case AV_PIX_FMT_YUV444P16LE:
247     case AV_PIX_FMT_YUV444P16BE:
248     case AV_PIX_FMT_YUVA420P9LE:
249     case AV_PIX_FMT_YUVA420P9BE:
250     case AV_PIX_FMT_YUVA420P10LE:
251     case AV_PIX_FMT_YUVA420P10BE:
252     case AV_PIX_FMT_YUVA420P16LE:
253     case AV_PIX_FMT_YUVA420P16BE:
254     case AV_PIX_FMT_YUVA422P9LE:
255     case AV_PIX_FMT_YUVA422P9BE:
256     case AV_PIX_FMT_YUVA422P10LE:
257     case AV_PIX_FMT_YUVA422P10BE:
258     case AV_PIX_FMT_YUVA422P16LE:
259     case AV_PIX_FMT_YUVA422P16BE:
260     case AV_PIX_FMT_YUVA444P9LE:
261     case AV_PIX_FMT_YUVA444P9BE:
262     case AV_PIX_FMT_YUVA444P10LE:
263     case AV_PIX_FMT_YUVA444P10BE:
264     case AV_PIX_FMT_YUVA444P16LE:
265     case AV_PIX_FMT_YUVA444P16BE:
266     case AV_PIX_FMT_GBRP9LE:
267     case AV_PIX_FMT_GBRP9BE:
268     case AV_PIX_FMT_GBRP10LE:
269     case AV_PIX_FMT_GBRP10BE:
270     case AV_PIX_FMT_GBRP12LE:
271     case AV_PIX_FMT_GBRP12BE:
272     case AV_PIX_FMT_GBRP14LE:
273     case AV_PIX_FMT_GBRP14BE:
274         w_align = 16; //FIXME assume 16 pixel per macroblock
275         h_align = 16 * 2; // interlaced needs 2 macroblocks height
276         break;
277     case AV_PIX_FMT_YUV411P:
278     case AV_PIX_FMT_YUVJ411P:
279     case AV_PIX_FMT_UYYVYY411:
280         w_align = 32;
281         h_align = 8;
282         break;
283     case AV_PIX_FMT_YUV410P:
284         if (s->codec_id == AV_CODEC_ID_SVQ1) {
285             w_align = 64;
286             h_align = 64;
287         }
288         break;
289     case AV_PIX_FMT_RGB555:
290         if (s->codec_id == AV_CODEC_ID_RPZA) {
291             w_align = 4;
292             h_align = 4;
293         }
294         break;
295     case AV_PIX_FMT_PAL8:
296     case AV_PIX_FMT_BGR8:
297     case AV_PIX_FMT_RGB8:
298         if (s->codec_id == AV_CODEC_ID_SMC ||
299             s->codec_id == AV_CODEC_ID_CINEPAK) {
300             w_align = 4;
301             h_align = 4;
302         }
303         break;
304     case AV_PIX_FMT_BGR24:
305         if ((s->codec_id == AV_CODEC_ID_MSZH) ||
306             (s->codec_id == AV_CODEC_ID_ZLIB)) {
307             w_align = 4;
308             h_align = 4;
309         }
310         break;
311     case AV_PIX_FMT_RGB24:
312         if (s->codec_id == AV_CODEC_ID_CINEPAK) {
313             w_align = 4;
314             h_align = 4;
315         }
316         break;
317     default:
318         w_align = 1;
319         h_align = 1;
320         break;
321     }
322
323     if (s->codec_id == AV_CODEC_ID_IFF_ILBM || s->codec_id == AV_CODEC_ID_IFF_BYTERUN1) {
324         w_align = FFMAX(w_align, 8);
325     }
326
327     *width  = FFALIGN(*width, w_align);
328     *height = FFALIGN(*height, h_align);
329     if (s->codec_id == AV_CODEC_ID_H264 || s->lowres)
330         // some of the optimized chroma MC reads one line too much
331         // which is also done in mpeg decoders with lowres > 0
332         *height += 2;
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(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 static int update_frame_pool(AVCodecContext *avctx, AVFrame *frame)
413 {
414     FramePool *pool = avctx->internal->pool;
415     int i, ret;
416
417     switch (avctx->codec_type) {
418     case AVMEDIA_TYPE_VIDEO: {
419         AVPicture picture;
420         int size[4] = { 0 };
421         int w = frame->width;
422         int h = frame->height;
423         int tmpsize, unaligned;
424
425         if (pool->format == frame->format &&
426             pool->width == frame->width && pool->height == frame->height)
427             return 0;
428
429         avcodec_align_dimensions2(avctx, &w, &h, pool->stride_align);
430
431         if (!(avctx->flags & CODEC_FLAG_EMU_EDGE)) {
432             w += EDGE_WIDTH * 2;
433             h += EDGE_WIDTH * 2;
434         }
435
436         do {
437             // NOTE: do not align linesizes individually, this breaks e.g. assumptions
438             // that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2
439             av_image_fill_linesizes(picture.linesize, avctx->pix_fmt, w);
440             // increase alignment of w for next try (rhs gives the lowest bit set in w)
441             w += w & ~(w - 1);
442
443             unaligned = 0;
444             for (i = 0; i < 4; i++)
445                 unaligned |= picture.linesize[i] % pool->stride_align[i];
446         } while (unaligned);
447
448         tmpsize = av_image_fill_pointers(picture.data, avctx->pix_fmt, h,
449                                          NULL, picture.linesize);
450         if (tmpsize < 0)
451             return -1;
452
453         for (i = 0; i < 3 && picture.data[i + 1]; i++)
454             size[i] = picture.data[i + 1] - picture.data[i];
455         size[i] = tmpsize - (picture.data[i] - picture.data[0]);
456
457         for (i = 0; i < 4; i++) {
458             av_buffer_pool_uninit(&pool->pools[i]);
459             pool->linesize[i] = picture.linesize[i];
460             if (size[i]) {
461                 pool->pools[i] = av_buffer_pool_init(size[i] + 16 + STRIDE_ALIGN - 1,
462                                                      CONFIG_MEMORY_POISONING ?
463                                                         NULL :
464                                                         av_buffer_allocz);
465                 if (!pool->pools[i]) {
466                     ret = AVERROR(ENOMEM);
467                     goto fail;
468                 }
469             }
470         }
471         pool->format = frame->format;
472         pool->width  = frame->width;
473         pool->height = frame->height;
474
475         break;
476         }
477     case AVMEDIA_TYPE_AUDIO: {
478         int ch     = av_frame_get_channels(frame); //av_get_channel_layout_nb_channels(frame->channel_layout);
479         int planar = av_sample_fmt_is_planar(frame->format);
480         int planes = planar ? ch : 1;
481
482         if (pool->format == frame->format && pool->planes == planes &&
483             pool->channels == ch && frame->nb_samples == pool->samples)
484             return 0;
485
486         av_buffer_pool_uninit(&pool->pools[0]);
487         ret = av_samples_get_buffer_size(&pool->linesize[0], ch,
488                                          frame->nb_samples, frame->format, 0);
489         if (ret < 0)
490             goto fail;
491
492         pool->pools[0] = av_buffer_pool_init(pool->linesize[0], NULL);
493         if (!pool->pools[0]) {
494             ret = AVERROR(ENOMEM);
495             goto fail;
496         }
497
498         pool->format     = frame->format;
499         pool->planes     = planes;
500         pool->channels   = ch;
501         pool->samples = frame->nb_samples;
502         break;
503         }
504     default: av_assert0(0);
505     }
506     return 0;
507 fail:
508     for (i = 0; i < 4; i++)
509         av_buffer_pool_uninit(&pool->pools[i]);
510     pool->format = -1;
511     pool->planes = pool->channels = pool->samples = 0;
512     pool->width  = pool->height = 0;
513     return ret;
514 }
515
516 static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame)
517 {
518     FramePool *pool = avctx->internal->pool;
519     int planes = pool->planes;
520     int i;
521
522     frame->linesize[0] = pool->linesize[0];
523
524     if (planes > AV_NUM_DATA_POINTERS) {
525         frame->extended_data = av_mallocz(planes * sizeof(*frame->extended_data));
526         frame->nb_extended_buf = planes - AV_NUM_DATA_POINTERS;
527         frame->extended_buf  = av_mallocz(frame->nb_extended_buf *
528                                           sizeof(*frame->extended_buf));
529         if (!frame->extended_data || !frame->extended_buf) {
530             av_freep(&frame->extended_data);
531             av_freep(&frame->extended_buf);
532             return AVERROR(ENOMEM);
533         }
534     } else {
535         frame->extended_data = frame->data;
536         av_assert0(frame->nb_extended_buf == 0);
537     }
538
539     for (i = 0; i < FFMIN(planes, AV_NUM_DATA_POINTERS); i++) {
540         frame->buf[i] = av_buffer_pool_get(pool->pools[0]);
541         if (!frame->buf[i])
542             goto fail;
543         frame->extended_data[i] = frame->data[i] = frame->buf[i]->data;
544     }
545     for (i = 0; i < frame->nb_extended_buf; i++) {
546         frame->extended_buf[i] = av_buffer_pool_get(pool->pools[0]);
547         if (!frame->extended_buf[i])
548             goto fail;
549         frame->extended_data[i + AV_NUM_DATA_POINTERS] = frame->extended_buf[i]->data;
550     }
551
552     if (avctx->debug & FF_DEBUG_BUFFERS)
553         av_log(avctx, AV_LOG_DEBUG, "default_get_buffer called on frame %p", frame);
554
555     return 0;
556 fail:
557     av_frame_unref(frame);
558     return AVERROR(ENOMEM);
559 }
560
561 static int video_get_buffer(AVCodecContext *s, AVFrame *pic)
562 {
563     FramePool *pool = s->internal->pool;
564     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pic->format);
565     int pixel_size = desc->comp[0].step_minus1 + 1;
566     int h_chroma_shift, v_chroma_shift;
567     int i;
568
569     if (pic->data[0] != NULL) {
570         av_log(s, AV_LOG_ERROR, "pic->data[0]!=NULL in avcodec_default_get_buffer\n");
571         return -1;
572     }
573
574     memset(pic->data, 0, sizeof(pic->data));
575     pic->extended_data = pic->data;
576
577     av_pix_fmt_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift);
578
579     for (i = 0; i < 4 && pool->pools[i]; i++) {
580         const int h_shift = i == 0 ? 0 : h_chroma_shift;
581         const int v_shift = i == 0 ? 0 : v_chroma_shift;
582         int is_planar = pool->pools[2] || (i==0 && s->pix_fmt == AV_PIX_FMT_GRAY8);
583
584         pic->linesize[i] = pool->linesize[i];
585
586         pic->buf[i] = av_buffer_pool_get(pool->pools[i]);
587         if (!pic->buf[i])
588             goto fail;
589
590         // no edge if EDGE EMU or not planar YUV
591         if ((s->flags & CODEC_FLAG_EMU_EDGE) || !is_planar)
592             pic->data[i] = pic->buf[i]->data;
593         else {
594             pic->data[i] = pic->buf[i]->data +
595                 FFALIGN((pic->linesize[i] * EDGE_WIDTH >> v_shift) +
596                         (pixel_size * EDGE_WIDTH >> h_shift), pool->stride_align[i]);
597         }
598     }
599     for (; i < AV_NUM_DATA_POINTERS; i++) {
600         pic->data[i] = NULL;
601         pic->linesize[i] = 0;
602     }
603     if (pic->data[1] && !pic->data[2])
604         avpriv_set_systematic_pal2((uint32_t *)pic->data[1], s->pix_fmt);
605
606     if (s->debug & FF_DEBUG_BUFFERS)
607         av_log(s, AV_LOG_DEBUG, "default_get_buffer called on pic %p\n", pic);
608
609     return 0;
610 fail:
611     av_frame_unref(pic);
612     return AVERROR(ENOMEM);
613 }
614
615 void avpriv_color_frame(AVFrame *frame, const int c[4])
616 {
617     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format);
618     int p, y, x;
619
620     av_assert0(desc->flags & AV_PIX_FMT_FLAG_PLANAR);
621
622     for (p = 0; p<desc->nb_components; p++) {
623         uint8_t *dst = frame->data[p];
624         int is_chroma = p == 1 || p == 2;
625         int bytes  = is_chroma ? FF_CEIL_RSHIFT(frame->width,  desc->log2_chroma_w) : frame->width;
626         int height = is_chroma ? FF_CEIL_RSHIFT(frame->height, desc->log2_chroma_h) : frame->height;
627         for (y = 0; y < height; y++) {
628             if (desc->comp[0].depth_minus1 >= 8) {
629                 for (x = 0; x<bytes; x++)
630                     ((uint16_t*)dst)[x] = c[p];
631             }else
632                 memset(dst, c[p], bytes);
633             dst += frame->linesize[p];
634         }
635     }
636 }
637
638 int avcodec_default_get_buffer2(AVCodecContext *avctx, AVFrame *frame, int flags)
639 {
640     int ret;
641
642     if ((ret = update_frame_pool(avctx, frame)) < 0)
643         return ret;
644
645 #if FF_API_GET_BUFFER
646 FF_DISABLE_DEPRECATION_WARNINGS
647     frame->type = FF_BUFFER_TYPE_INTERNAL;
648 FF_ENABLE_DEPRECATION_WARNINGS
649 #endif
650
651     switch (avctx->codec_type) {
652     case AVMEDIA_TYPE_VIDEO:
653         return video_get_buffer(avctx, frame);
654     case AVMEDIA_TYPE_AUDIO:
655         return audio_get_buffer(avctx, frame);
656     default:
657         return -1;
658     }
659 }
660
661 int ff_init_buffer_info(AVCodecContext *avctx, AVFrame *frame)
662 {
663     if (avctx->pkt) {
664         frame->pkt_pts = avctx->pkt->pts;
665         av_frame_set_pkt_pos     (frame, avctx->pkt->pos);
666         av_frame_set_pkt_duration(frame, avctx->pkt->duration);
667         av_frame_set_pkt_size    (frame, avctx->pkt->size);
668     } else {
669         frame->pkt_pts = AV_NOPTS_VALUE;
670         av_frame_set_pkt_pos     (frame, -1);
671         av_frame_set_pkt_duration(frame, 0);
672         av_frame_set_pkt_size    (frame, -1);
673     }
674     frame->reordered_opaque = avctx->reordered_opaque;
675
676     switch (avctx->codec->type) {
677     case AVMEDIA_TYPE_VIDEO:
678         frame->width  = FFMAX(avctx->width,  FF_CEIL_RSHIFT(avctx->coded_width,  avctx->lowres));
679         frame->height = FFMAX(avctx->height, FF_CEIL_RSHIFT(avctx->coded_height, avctx->lowres));
680         if (frame->format < 0)
681             frame->format              = avctx->pix_fmt;
682         if (!frame->sample_aspect_ratio.num)
683             frame->sample_aspect_ratio = avctx->sample_aspect_ratio;
684         if (av_frame_get_colorspace(frame) == AVCOL_SPC_UNSPECIFIED)
685             av_frame_set_colorspace(frame, avctx->colorspace);
686         if (av_frame_get_color_range(frame) == AVCOL_RANGE_UNSPECIFIED)
687             av_frame_set_color_range(frame, avctx->color_range);
688         break;
689     case AVMEDIA_TYPE_AUDIO:
690         if (!frame->sample_rate)
691             frame->sample_rate    = avctx->sample_rate;
692         if (frame->format < 0)
693             frame->format         = avctx->sample_fmt;
694         if (!frame->channel_layout) {
695             if (avctx->channel_layout) {
696                  if (av_get_channel_layout_nb_channels(avctx->channel_layout) !=
697                      avctx->channels) {
698                      av_log(avctx, AV_LOG_ERROR, "Inconsistent channel "
699                             "configuration.\n");
700                      return AVERROR(EINVAL);
701                  }
702
703                 frame->channel_layout = avctx->channel_layout;
704             } else {
705                 if (avctx->channels > FF_SANE_NB_CHANNELS) {
706                     av_log(avctx, AV_LOG_ERROR, "Too many channels: %d.\n",
707                            avctx->channels);
708                     return AVERROR(ENOSYS);
709                 }
710             }
711         }
712         av_frame_set_channels(frame, avctx->channels);
713         break;
714     }
715     return 0;
716 }
717
718 #if FF_API_GET_BUFFER
719 FF_DISABLE_DEPRECATION_WARNINGS
720 int avcodec_default_get_buffer(AVCodecContext *avctx, AVFrame *frame)
721 {
722     return avcodec_default_get_buffer2(avctx, frame, 0);
723 }
724
725 typedef struct CompatReleaseBufPriv {
726     AVCodecContext avctx;
727     AVFrame frame;
728 } CompatReleaseBufPriv;
729
730 static void compat_free_buffer(void *opaque, uint8_t *data)
731 {
732     CompatReleaseBufPriv *priv = opaque;
733     if (priv->avctx.release_buffer)
734         priv->avctx.release_buffer(&priv->avctx, &priv->frame);
735     av_freep(&priv);
736 }
737
738 static void compat_release_buffer(void *opaque, uint8_t *data)
739 {
740     AVBufferRef *buf = opaque;
741     av_buffer_unref(&buf);
742 }
743 FF_ENABLE_DEPRECATION_WARNINGS
744 #endif
745
746 static int get_buffer_internal(AVCodecContext *avctx, AVFrame *frame, int flags)
747 {
748     int ret;
749
750     if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
751         if ((ret = av_image_check_size(avctx->width, avctx->height, 0, avctx)) < 0 || avctx->pix_fmt<0) {
752             av_log(avctx, AV_LOG_ERROR, "video_get_buffer: image parameters invalid\n");
753             return AVERROR(EINVAL);
754         }
755     }
756     if ((ret = ff_init_buffer_info(avctx, frame)) < 0)
757         return ret;
758
759 #if FF_API_GET_BUFFER
760 FF_DISABLE_DEPRECATION_WARNINGS
761     /*
762      * Wrap an old get_buffer()-allocated buffer in a bunch of AVBuffers.
763      * We wrap each plane in its own AVBuffer. Each of those has a reference to
764      * a dummy AVBuffer as its private data, unreffing it on free.
765      * When all the planes are freed, the dummy buffer's free callback calls
766      * release_buffer().
767      */
768     if (avctx->get_buffer) {
769         CompatReleaseBufPriv *priv = NULL;
770         AVBufferRef *dummy_buf = NULL;
771         int planes, i, ret;
772
773         if (flags & AV_GET_BUFFER_FLAG_REF)
774             frame->reference    = 1;
775
776         ret = avctx->get_buffer(avctx, frame);
777         if (ret < 0)
778             return ret;
779
780         /* return if the buffers are already set up
781          * this would happen e.g. when a custom get_buffer() calls
782          * avcodec_default_get_buffer
783          */
784         if (frame->buf[0])
785             goto end;
786
787         priv = av_mallocz(sizeof(*priv));
788         if (!priv) {
789             ret = AVERROR(ENOMEM);
790             goto fail;
791         }
792         priv->avctx = *avctx;
793         priv->frame = *frame;
794
795         dummy_buf = av_buffer_create(NULL, 0, compat_free_buffer, priv, 0);
796         if (!dummy_buf) {
797             ret = AVERROR(ENOMEM);
798             goto fail;
799         }
800
801 #define WRAP_PLANE(ref_out, data, data_size)                            \
802 do {                                                                    \
803     AVBufferRef *dummy_ref = av_buffer_ref(dummy_buf);                  \
804     if (!dummy_ref) {                                                   \
805         ret = AVERROR(ENOMEM);                                          \
806         goto fail;                                                      \
807     }                                                                   \
808     ref_out = av_buffer_create(data, data_size, compat_release_buffer,  \
809                                dummy_ref, 0);                           \
810     if (!ref_out) {                                                     \
811         av_frame_unref(frame);                                          \
812         ret = AVERROR(ENOMEM);                                          \
813         goto fail;                                                      \
814     }                                                                   \
815 } while (0)
816
817         if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
818             const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format);
819
820             planes = av_pix_fmt_count_planes(frame->format);
821             /* workaround for AVHWAccel plane count of 0, buf[0] is used as
822                check for allocated buffers: make libavcodec happy */
823             if (desc && desc->flags & AV_PIX_FMT_FLAG_HWACCEL)
824                 planes = 1;
825             if (!desc || planes <= 0) {
826                 ret = AVERROR(EINVAL);
827                 goto fail;
828             }
829
830             for (i = 0; i < planes; i++) {
831                 int v_shift    = (i == 1 || i == 2) ? desc->log2_chroma_h : 0;
832                 int plane_size = (frame->height >> v_shift) * frame->linesize[i];
833
834                 WRAP_PLANE(frame->buf[i], frame->data[i], plane_size);
835             }
836         } else {
837             int planar = av_sample_fmt_is_planar(frame->format);
838             planes = planar ? avctx->channels : 1;
839
840             if (planes > FF_ARRAY_ELEMS(frame->buf)) {
841                 frame->nb_extended_buf = planes - FF_ARRAY_ELEMS(frame->buf);
842                 frame->extended_buf = av_malloc(sizeof(*frame->extended_buf) *
843                                                 frame->nb_extended_buf);
844                 if (!frame->extended_buf) {
845                     ret = AVERROR(ENOMEM);
846                     goto fail;
847                 }
848             }
849
850             for (i = 0; i < FFMIN(planes, FF_ARRAY_ELEMS(frame->buf)); i++)
851                 WRAP_PLANE(frame->buf[i], frame->extended_data[i], frame->linesize[0]);
852
853             for (i = 0; i < frame->nb_extended_buf; i++)
854                 WRAP_PLANE(frame->extended_buf[i],
855                            frame->extended_data[i + FF_ARRAY_ELEMS(frame->buf)],
856                            frame->linesize[0]);
857         }
858
859         av_buffer_unref(&dummy_buf);
860
861 end:
862         frame->width  = avctx->width;
863         frame->height = avctx->height;
864
865         return 0;
866
867 fail:
868         avctx->release_buffer(avctx, frame);
869         av_freep(&priv);
870         av_buffer_unref(&dummy_buf);
871         return ret;
872     }
873 FF_ENABLE_DEPRECATION_WARNINGS
874 #endif
875
876     ret = avctx->get_buffer2(avctx, frame, flags);
877
878     if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
879         frame->width  = avctx->width;
880         frame->height = avctx->height;
881     }
882
883     return ret;
884 }
885
886 int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
887 {
888     int ret = get_buffer_internal(avctx, frame, flags);
889     if (ret < 0)
890         av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
891     return ret;
892 }
893
894 static int reget_buffer_internal(AVCodecContext *avctx, AVFrame *frame)
895 {
896     AVFrame tmp;
897     int ret;
898
899     av_assert0(avctx->codec_type == AVMEDIA_TYPE_VIDEO);
900
901     if (frame->data[0] && (frame->width != avctx->width || frame->height != avctx->height || frame->format != avctx->pix_fmt)) {
902         av_log(avctx, AV_LOG_WARNING, "Picture changed from size:%dx%d fmt:%s to size:%dx%d fmt:%s in reget buffer()\n",
903                frame->width, frame->height, av_get_pix_fmt_name(frame->format), avctx->width, avctx->height, av_get_pix_fmt_name(avctx->pix_fmt));
904         av_frame_unref(frame);
905     }
906
907     ff_init_buffer_info(avctx, frame);
908
909     if (!frame->data[0])
910         return ff_get_buffer(avctx, frame, AV_GET_BUFFER_FLAG_REF);
911
912     if (av_frame_is_writable(frame))
913         return 0;
914
915     av_frame_move_ref(&tmp, frame);
916
917     ret = ff_get_buffer(avctx, frame, AV_GET_BUFFER_FLAG_REF);
918     if (ret < 0) {
919         av_frame_unref(&tmp);
920         return ret;
921     }
922
923     av_image_copy(frame->data, frame->linesize, tmp.data, tmp.linesize,
924                   frame->format, frame->width, frame->height);
925
926     av_frame_unref(&tmp);
927
928     return 0;
929 }
930
931 int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame)
932 {
933     int ret = reget_buffer_internal(avctx, frame);
934     if (ret < 0)
935         av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
936     return ret;
937 }
938
939 #if FF_API_GET_BUFFER
940 void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic)
941 {
942     av_assert0(s->codec_type == AVMEDIA_TYPE_VIDEO);
943
944     av_frame_unref(pic);
945 }
946
947 int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic)
948 {
949     av_assert0(0);
950     return AVERROR_BUG;
951 }
952 #endif
953
954 int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size)
955 {
956     int i;
957
958     for (i = 0; i < count; i++) {
959         int r = func(c, (char *)arg + i * size);
960         if (ret)
961             ret[i] = r;
962     }
963     return 0;
964 }
965
966 int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int jobnr, int threadnr), void *arg, int *ret, int count)
967 {
968     int i;
969
970     for (i = 0; i < count; i++) {
971         int r = func(c, arg, i, 0);
972         if (ret)
973             ret[i] = r;
974     }
975     return 0;
976 }
977
978 static int is_hwaccel_pix_fmt(enum AVPixelFormat pix_fmt)
979 {
980     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
981     return desc->flags & AV_PIX_FMT_FLAG_HWACCEL;
982 }
983
984 enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat *fmt)
985 {
986     while (*fmt != AV_PIX_FMT_NONE && is_hwaccel_pix_fmt(*fmt))
987         ++fmt;
988     return fmt[0];
989 }
990
991 void avcodec_get_frame_defaults(AVFrame *frame)
992 {
993 #if LIBAVCODEC_VERSION_MAJOR >= 55
994      // extended_data should explicitly be freed when needed, this code is unsafe currently
995      // also this is not compatible to the <55 ABI/API
996     if (frame->extended_data != frame->data && 0)
997         av_freep(&frame->extended_data);
998 #endif
999
1000     memset(frame, 0, sizeof(AVFrame));
1001
1002     frame->pts                   =
1003     frame->pkt_dts               =
1004     frame->pkt_pts               = AV_NOPTS_VALUE;
1005     av_frame_set_best_effort_timestamp(frame, AV_NOPTS_VALUE);
1006     av_frame_set_pkt_duration         (frame, 0);
1007     av_frame_set_pkt_pos              (frame, -1);
1008     av_frame_set_pkt_size             (frame, -1);
1009     frame->key_frame           = 1;
1010     frame->sample_aspect_ratio = (AVRational) {0, 1 };
1011     frame->format              = -1; /* unknown */
1012     frame->extended_data       = frame->data;
1013     av_frame_set_colorspace(frame, AVCOL_SPC_UNSPECIFIED);
1014 }
1015
1016 AVFrame *avcodec_alloc_frame(void)
1017 {
1018     AVFrame *frame = av_malloc(sizeof(AVFrame));
1019
1020     if (frame == NULL)
1021         return NULL;
1022
1023     frame->extended_data = NULL;
1024     avcodec_get_frame_defaults(frame);
1025
1026     return frame;
1027 }
1028
1029 void avcodec_free_frame(AVFrame **frame)
1030 {
1031     AVFrame *f;
1032
1033     if (!frame || !*frame)
1034         return;
1035
1036     f = *frame;
1037
1038     if (f->extended_data != f->data)
1039         av_freep(&f->extended_data);
1040
1041     av_freep(frame);
1042 }
1043
1044 MAKE_ACCESSORS(AVCodecContext, codec, AVRational, pkt_timebase)
1045 MAKE_ACCESSORS(AVCodecContext, codec, const AVCodecDescriptor *, codec_descriptor)
1046 MAKE_ACCESSORS(AVCodecContext, codec, int, lowres)
1047 MAKE_ACCESSORS(AVCodecContext, codec, int, seek_preroll)
1048
1049 int av_codec_get_max_lowres(const AVCodec *codec)
1050 {
1051     return codec->max_lowres;
1052 }
1053
1054 static void avcodec_get_subtitle_defaults(AVSubtitle *sub)
1055 {
1056     memset(sub, 0, sizeof(*sub));
1057     sub->pts = AV_NOPTS_VALUE;
1058 }
1059
1060 static int get_bit_rate(AVCodecContext *ctx)
1061 {
1062     int bit_rate;
1063     int bits_per_sample;
1064
1065     switch (ctx->codec_type) {
1066     case AVMEDIA_TYPE_VIDEO:
1067     case AVMEDIA_TYPE_DATA:
1068     case AVMEDIA_TYPE_SUBTITLE:
1069     case AVMEDIA_TYPE_ATTACHMENT:
1070         bit_rate = ctx->bit_rate;
1071         break;
1072     case AVMEDIA_TYPE_AUDIO:
1073         bits_per_sample = av_get_bits_per_sample(ctx->codec_id);
1074         bit_rate = bits_per_sample ? ctx->sample_rate * ctx->channels * bits_per_sample : ctx->bit_rate;
1075         break;
1076     default:
1077         bit_rate = 0;
1078         break;
1079     }
1080     return bit_rate;
1081 }
1082
1083 #if FF_API_AVCODEC_OPEN
1084 int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec)
1085 {
1086     return avcodec_open2(avctx, codec, NULL);
1087 }
1088 #endif
1089
1090 int attribute_align_arg ff_codec_open2_recursive(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
1091 {
1092     int ret = 0;
1093
1094     ff_unlock_avcodec();
1095
1096     ret = avcodec_open2(avctx, codec, options);
1097
1098     ff_lock_avcodec(avctx);
1099     return ret;
1100 }
1101
1102 int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
1103 {
1104     int ret = 0;
1105     AVDictionary *tmp = NULL;
1106
1107     if (avcodec_is_open(avctx))
1108         return 0;
1109
1110     if ((!codec && !avctx->codec)) {
1111         av_log(avctx, AV_LOG_ERROR, "No codec provided to avcodec_open2()\n");
1112         return AVERROR(EINVAL);
1113     }
1114     if ((codec && avctx->codec && codec != avctx->codec)) {
1115         av_log(avctx, AV_LOG_ERROR, "This AVCodecContext was allocated for %s, "
1116                                     "but %s passed to avcodec_open2()\n", avctx->codec->name, codec->name);
1117         return AVERROR(EINVAL);
1118     }
1119     if (!codec)
1120         codec = avctx->codec;
1121
1122     if (avctx->extradata_size < 0 || avctx->extradata_size >= FF_MAX_EXTRADATA_SIZE)
1123         return AVERROR(EINVAL);
1124
1125     if (options)
1126         av_dict_copy(&tmp, *options, 0);
1127
1128     ret = ff_lock_avcodec(avctx);
1129     if (ret < 0)
1130         return ret;
1131
1132     avctx->internal = av_mallocz(sizeof(AVCodecInternal));
1133     if (!avctx->internal) {
1134         ret = AVERROR(ENOMEM);
1135         goto end;
1136     }
1137
1138     avctx->internal->pool = av_mallocz(sizeof(*avctx->internal->pool));
1139     if (!avctx->internal->pool) {
1140         ret = AVERROR(ENOMEM);
1141         goto free_and_end;
1142     }
1143
1144     if (codec->priv_data_size > 0) {
1145         if (!avctx->priv_data) {
1146             avctx->priv_data = av_mallocz(codec->priv_data_size);
1147             if (!avctx->priv_data) {
1148                 ret = AVERROR(ENOMEM);
1149                 goto end;
1150             }
1151             if (codec->priv_class) {
1152                 *(const AVClass **)avctx->priv_data = codec->priv_class;
1153                 av_opt_set_defaults(avctx->priv_data);
1154             }
1155         }
1156         if (codec->priv_class && (ret = av_opt_set_dict(avctx->priv_data, &tmp)) < 0)
1157             goto free_and_end;
1158     } else {
1159         avctx->priv_data = NULL;
1160     }
1161     if ((ret = av_opt_set_dict(avctx, &tmp)) < 0)
1162         goto free_and_end;
1163
1164     // only call avcodec_set_dimensions() for non H.264/VP6F codecs so as not to overwrite previously setup dimensions
1165     if (!(avctx->coded_width && avctx->coded_height && avctx->width && avctx->height &&
1166           (avctx->codec_id == AV_CODEC_ID_H264 || avctx->codec_id == AV_CODEC_ID_VP6F))) {
1167     if (avctx->coded_width && avctx->coded_height)
1168         avcodec_set_dimensions(avctx, avctx->coded_width, avctx->coded_height);
1169     else if (avctx->width && avctx->height)
1170         avcodec_set_dimensions(avctx, avctx->width, avctx->height);
1171     }
1172
1173     if ((avctx->coded_width || avctx->coded_height || avctx->width || avctx->height)
1174         && (  av_image_check_size(avctx->coded_width, avctx->coded_height, 0, avctx) < 0
1175            || av_image_check_size(avctx->width,       avctx->height,       0, avctx) < 0)) {
1176         av_log(avctx, AV_LOG_WARNING, "Ignoring invalid width/height values\n");
1177         avcodec_set_dimensions(avctx, 0, 0);
1178     }
1179
1180     /* if the decoder init function was already called previously,
1181      * free the already allocated subtitle_header before overwriting it */
1182     if (av_codec_is_decoder(codec))
1183         av_freep(&avctx->subtitle_header);
1184
1185     if (avctx->channels > FF_SANE_NB_CHANNELS) {
1186         ret = AVERROR(EINVAL);
1187         goto free_and_end;
1188     }
1189
1190     avctx->codec = codec;
1191     if ((avctx->codec_type == AVMEDIA_TYPE_UNKNOWN || avctx->codec_type == codec->type) &&
1192         avctx->codec_id == AV_CODEC_ID_NONE) {
1193         avctx->codec_type = codec->type;
1194         avctx->codec_id   = codec->id;
1195     }
1196     if (avctx->codec_id != codec->id || (avctx->codec_type != codec->type
1197                                          && avctx->codec_type != AVMEDIA_TYPE_ATTACHMENT)) {
1198         av_log(avctx, AV_LOG_ERROR, "Codec type or id mismatches\n");
1199         ret = AVERROR(EINVAL);
1200         goto free_and_end;
1201     }
1202     avctx->frame_number = 0;
1203     avctx->codec_descriptor = avcodec_descriptor_get(avctx->codec_id);
1204
1205     if (avctx->codec->capabilities & CODEC_CAP_EXPERIMENTAL &&
1206         avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) {
1207         const char *codec_string = av_codec_is_encoder(codec) ? "encoder" : "decoder";
1208         AVCodec *codec2;
1209         av_log(avctx, AV_LOG_ERROR,
1210                "The %s '%s' is experimental but experimental codecs are not enabled, "
1211                "add '-strict %d' if you want to use it.\n",
1212                codec_string, codec->name, FF_COMPLIANCE_EXPERIMENTAL);
1213         codec2 = av_codec_is_encoder(codec) ? avcodec_find_encoder(codec->id) : avcodec_find_decoder(codec->id);
1214         if (!(codec2->capabilities & CODEC_CAP_EXPERIMENTAL))
1215             av_log(avctx, AV_LOG_ERROR, "Alternatively use the non experimental %s '%s'.\n",
1216                 codec_string, codec2->name);
1217         ret = AVERROR_EXPERIMENTAL;
1218         goto free_and_end;
1219     }
1220
1221     if (avctx->codec_type == AVMEDIA_TYPE_AUDIO &&
1222         (!avctx->time_base.num || !avctx->time_base.den)) {
1223         avctx->time_base.num = 1;
1224         avctx->time_base.den = avctx->sample_rate;
1225     }
1226
1227     if (!HAVE_THREADS)
1228         av_log(avctx, AV_LOG_WARNING, "Warning: not compiled with thread support, using thread emulation\n");
1229
1230     if (CONFIG_FRAME_THREAD_ENCODER) {
1231         ff_unlock_avcodec(); //we will instanciate a few encoders thus kick the counter to prevent false detection of a problem
1232         ret = ff_frame_thread_encoder_init(avctx, options ? *options : NULL);
1233         ff_lock_avcodec(avctx);
1234         if (ret < 0)
1235             goto free_and_end;
1236     }
1237
1238     if (HAVE_THREADS
1239         && !(avctx->internal->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))) {
1240         ret = ff_thread_init(avctx);
1241         if (ret < 0) {
1242             goto free_and_end;
1243         }
1244     }
1245     if (!HAVE_THREADS && !(codec->capabilities & CODEC_CAP_AUTO_THREADS))
1246         avctx->thread_count = 1;
1247
1248     if (avctx->codec->max_lowres < avctx->lowres || avctx->lowres < 0) {
1249         av_log(avctx, AV_LOG_ERROR, "The maximum value for lowres supported by the decoder is %d\n",
1250                avctx->codec->max_lowres);
1251         ret = AVERROR(EINVAL);
1252         goto free_and_end;
1253     }
1254
1255     if (av_codec_is_encoder(avctx->codec)) {
1256         int i;
1257         if (avctx->codec->sample_fmts) {
1258             for (i = 0; avctx->codec->sample_fmts[i] != AV_SAMPLE_FMT_NONE; i++) {
1259                 if (avctx->sample_fmt == avctx->codec->sample_fmts[i])
1260                     break;
1261                 if (avctx->channels == 1 &&
1262                     av_get_planar_sample_fmt(avctx->sample_fmt) ==
1263                     av_get_planar_sample_fmt(avctx->codec->sample_fmts[i])) {
1264                     avctx->sample_fmt = avctx->codec->sample_fmts[i];
1265                     break;
1266                 }
1267             }
1268             if (avctx->codec->sample_fmts[i] == AV_SAMPLE_FMT_NONE) {
1269                 char buf[128];
1270                 snprintf(buf, sizeof(buf), "%d", avctx->sample_fmt);
1271                 av_log(avctx, AV_LOG_ERROR, "Specified sample format %s is invalid or not supported\n",
1272                        (char *)av_x_if_null(av_get_sample_fmt_name(avctx->sample_fmt), buf));
1273                 ret = AVERROR(EINVAL);
1274                 goto free_and_end;
1275             }
1276         }
1277         if (avctx->codec->pix_fmts) {
1278             for (i = 0; avctx->codec->pix_fmts[i] != AV_PIX_FMT_NONE; i++)
1279                 if (avctx->pix_fmt == avctx->codec->pix_fmts[i])
1280                     break;
1281             if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_NONE
1282                 && !((avctx->codec_id == AV_CODEC_ID_MJPEG || avctx->codec_id == AV_CODEC_ID_LJPEG)
1283                      && avctx->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL)) {
1284                 char buf[128];
1285                 snprintf(buf, sizeof(buf), "%d", avctx->pix_fmt);
1286                 av_log(avctx, AV_LOG_ERROR, "Specified pixel format %s is invalid or not supported\n",
1287                        (char *)av_x_if_null(av_get_pix_fmt_name(avctx->pix_fmt), buf));
1288                 ret = AVERROR(EINVAL);
1289                 goto free_and_end;
1290             }
1291         }
1292         if (avctx->codec->supported_samplerates) {
1293             for (i = 0; avctx->codec->supported_samplerates[i] != 0; i++)
1294                 if (avctx->sample_rate == avctx->codec->supported_samplerates[i])
1295                     break;
1296             if (avctx->codec->supported_samplerates[i] == 0) {
1297                 av_log(avctx, AV_LOG_ERROR, "Specified sample rate %d is not supported\n",
1298                        avctx->sample_rate);
1299                 ret = AVERROR(EINVAL);
1300                 goto free_and_end;
1301             }
1302         }
1303         if (avctx->codec->channel_layouts) {
1304             if (!avctx->channel_layout) {
1305                 av_log(avctx, AV_LOG_WARNING, "Channel layout not specified\n");
1306             } else {
1307                 for (i = 0; avctx->codec->channel_layouts[i] != 0; i++)
1308                     if (avctx->channel_layout == avctx->codec->channel_layouts[i])
1309                         break;
1310                 if (avctx->codec->channel_layouts[i] == 0) {
1311                     char buf[512];
1312                     av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout);
1313                     av_log(avctx, AV_LOG_ERROR, "Specified channel layout '%s' is not supported\n", buf);
1314                     ret = AVERROR(EINVAL);
1315                     goto free_and_end;
1316                 }
1317             }
1318         }
1319         if (avctx->channel_layout && avctx->channels) {
1320             int channels = av_get_channel_layout_nb_channels(avctx->channel_layout);
1321             if (channels != avctx->channels) {
1322                 char buf[512];
1323                 av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout);
1324                 av_log(avctx, AV_LOG_ERROR,
1325                        "Channel layout '%s' with %d channels does not match number of specified channels %d\n",
1326                        buf, channels, avctx->channels);
1327                 ret = AVERROR(EINVAL);
1328                 goto free_and_end;
1329             }
1330         } else if (avctx->channel_layout) {
1331             avctx->channels = av_get_channel_layout_nb_channels(avctx->channel_layout);
1332         }
1333         if(avctx->codec_type == AVMEDIA_TYPE_VIDEO &&
1334            avctx->codec_id != AV_CODEC_ID_PNG // For mplayer
1335         ) {
1336             if (avctx->width <= 0 || avctx->height <= 0) {
1337                 av_log(avctx, AV_LOG_ERROR, "dimensions not set\n");
1338                 ret = AVERROR(EINVAL);
1339                 goto free_and_end;
1340             }
1341         }
1342         if (   (avctx->codec_type == AVMEDIA_TYPE_VIDEO || avctx->codec_type == AVMEDIA_TYPE_AUDIO)
1343             && avctx->bit_rate>0 && avctx->bit_rate<1000) {
1344             av_log(avctx, AV_LOG_WARNING, "Bitrate %d is extremely low, maybe you mean %dk\n", avctx->bit_rate, avctx->bit_rate);
1345         }
1346
1347         if (!avctx->rc_initial_buffer_occupancy)
1348             avctx->rc_initial_buffer_occupancy = avctx->rc_buffer_size * 3 / 4;
1349     }
1350
1351     avctx->pts_correction_num_faulty_pts =
1352     avctx->pts_correction_num_faulty_dts = 0;
1353     avctx->pts_correction_last_pts =
1354     avctx->pts_correction_last_dts = INT64_MIN;
1355
1356     if (   avctx->codec->init && (!(avctx->active_thread_type&FF_THREAD_FRAME)
1357         || avctx->internal->frame_thread_encoder)) {
1358         ret = avctx->codec->init(avctx);
1359         if (ret < 0) {
1360             goto free_and_end;
1361         }
1362     }
1363
1364     ret=0;
1365
1366     if (av_codec_is_decoder(avctx->codec)) {
1367         if (!avctx->bit_rate)
1368             avctx->bit_rate = get_bit_rate(avctx);
1369         /* validate channel layout from the decoder */
1370         if (avctx->channel_layout) {
1371             int channels = av_get_channel_layout_nb_channels(avctx->channel_layout);
1372             if (!avctx->channels)
1373                 avctx->channels = channels;
1374             else if (channels != avctx->channels) {
1375                 char buf[512];
1376                 av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout);
1377                 av_log(avctx, AV_LOG_WARNING,
1378                        "Channel layout '%s' with %d channels does not match specified number of channels %d: "
1379                        "ignoring specified channel layout\n",
1380                        buf, channels, avctx->channels);
1381                 avctx->channel_layout = 0;
1382             }
1383         }
1384         if (avctx->channels && avctx->channels < 0 ||
1385             avctx->channels > FF_SANE_NB_CHANNELS) {
1386             ret = AVERROR(EINVAL);
1387             goto free_and_end;
1388         }
1389         if (avctx->sub_charenc) {
1390             if (avctx->codec_type != AVMEDIA_TYPE_SUBTITLE) {
1391                 av_log(avctx, AV_LOG_ERROR, "Character encoding is only "
1392                        "supported with subtitles codecs\n");
1393                 ret = AVERROR(EINVAL);
1394                 goto free_and_end;
1395             } else if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB) {
1396                 av_log(avctx, AV_LOG_WARNING, "Codec '%s' is bitmap-based, "
1397                        "subtitles character encoding will be ignored\n",
1398                        avctx->codec_descriptor->name);
1399                 avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_DO_NOTHING;
1400             } else {
1401                 /* input character encoding is set for a text based subtitle
1402                  * codec at this point */
1403                 if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_AUTOMATIC)
1404                     avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_PRE_DECODER;
1405
1406                 if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_PRE_DECODER) {
1407 #if CONFIG_ICONV
1408                     iconv_t cd = iconv_open("UTF-8", avctx->sub_charenc);
1409                     if (cd == (iconv_t)-1) {
1410                         av_log(avctx, AV_LOG_ERROR, "Unable to open iconv context "
1411                                "with input character encoding \"%s\"\n", avctx->sub_charenc);
1412                         ret = AVERROR(errno);
1413                         goto free_and_end;
1414                     }
1415                     iconv_close(cd);
1416 #else
1417                     av_log(avctx, AV_LOG_ERROR, "Character encoding subtitles "
1418                            "conversion needs a libavcodec built with iconv support "
1419                            "for this codec\n");
1420                     ret = AVERROR(ENOSYS);
1421                     goto free_and_end;
1422 #endif
1423                 }
1424             }
1425         }
1426     }
1427 end:
1428     ff_unlock_avcodec();
1429     if (options) {
1430         av_dict_free(options);
1431         *options = tmp;
1432     }
1433
1434     return ret;
1435 free_and_end:
1436     av_dict_free(&tmp);
1437     av_freep(&avctx->priv_data);
1438     if (avctx->internal)
1439         av_freep(&avctx->internal->pool);
1440     av_freep(&avctx->internal);
1441     avctx->codec = NULL;
1442     goto end;
1443 }
1444
1445 int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size)
1446 {
1447     if (avpkt->size < 0) {
1448         av_log(avctx, AV_LOG_ERROR, "Invalid negative user packet size %d\n", avpkt->size);
1449         return AVERROR(EINVAL);
1450     }
1451     if (size < 0 || size > INT_MAX - FF_INPUT_BUFFER_PADDING_SIZE) {
1452         av_log(avctx, AV_LOG_ERROR, "Invalid minimum required packet size %"PRId64" (max allowed is %d)\n",
1453                size, INT_MAX - FF_INPUT_BUFFER_PADDING_SIZE);
1454         return AVERROR(EINVAL);
1455     }
1456
1457     if (avctx) {
1458         av_assert0(!avpkt->data || avpkt->data != avctx->internal->byte_buffer);
1459         if (!avpkt->data || avpkt->size < size) {
1460             av_fast_padded_malloc(&avctx->internal->byte_buffer, &avctx->internal->byte_buffer_size, size);
1461             avpkt->data = avctx->internal->byte_buffer;
1462             avpkt->size = avctx->internal->byte_buffer_size;
1463             avpkt->destruct = NULL;
1464         }
1465     }
1466
1467     if (avpkt->data) {
1468         AVBufferRef *buf = avpkt->buf;
1469 #if FF_API_DESTRUCT_PACKET
1470 FF_DISABLE_DEPRECATION_WARNINGS
1471         void *destruct = avpkt->destruct;
1472 FF_ENABLE_DEPRECATION_WARNINGS
1473 #endif
1474
1475         if (avpkt->size < size) {
1476             av_log(avctx, AV_LOG_ERROR, "User packet is too small (%d < %"PRId64")\n", avpkt->size, size);
1477             return AVERROR(EINVAL);
1478         }
1479
1480         av_init_packet(avpkt);
1481 #if FF_API_DESTRUCT_PACKET
1482 FF_DISABLE_DEPRECATION_WARNINGS
1483         avpkt->destruct = destruct;
1484 FF_ENABLE_DEPRECATION_WARNINGS
1485 #endif
1486         avpkt->buf      = buf;
1487         avpkt->size     = size;
1488         return 0;
1489     } else {
1490         int ret = av_new_packet(avpkt, size);
1491         if (ret < 0)
1492             av_log(avctx, AV_LOG_ERROR, "Failed to allocate packet of size %"PRId64"\n", size);
1493         return ret;
1494     }
1495 }
1496
1497 int ff_alloc_packet(AVPacket *avpkt, int size)
1498 {
1499     return ff_alloc_packet2(NULL, avpkt, size);
1500 }
1501
1502 /**
1503  * Pad last frame with silence.
1504  */
1505 static int pad_last_frame(AVCodecContext *s, AVFrame **dst, const AVFrame *src)
1506 {
1507     AVFrame *frame = NULL;
1508     int ret;
1509
1510     if (!(frame = avcodec_alloc_frame()))
1511         return AVERROR(ENOMEM);
1512
1513     frame->format         = src->format;
1514     frame->channel_layout = src->channel_layout;
1515     av_frame_set_channels(frame, av_frame_get_channels(src));
1516     frame->nb_samples     = s->frame_size;
1517     ret = av_frame_get_buffer(frame, 32);
1518     if (ret < 0)
1519         goto fail;
1520
1521     ret = av_frame_copy_props(frame, src);
1522     if (ret < 0)
1523         goto fail;
1524
1525     if ((ret = av_samples_copy(frame->extended_data, src->extended_data, 0, 0,
1526                                src->nb_samples, s->channels, s->sample_fmt)) < 0)
1527         goto fail;
1528     if ((ret = av_samples_set_silence(frame->extended_data, src->nb_samples,
1529                                       frame->nb_samples - src->nb_samples,
1530                                       s->channels, s->sample_fmt)) < 0)
1531         goto fail;
1532
1533     *dst = frame;
1534
1535     return 0;
1536
1537 fail:
1538     av_frame_free(&frame);
1539     return ret;
1540 }
1541
1542 int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
1543                                               AVPacket *avpkt,
1544                                               const AVFrame *frame,
1545                                               int *got_packet_ptr)
1546 {
1547     AVFrame tmp;
1548     AVFrame *padded_frame = NULL;
1549     int ret;
1550     AVPacket user_pkt = *avpkt;
1551     int needs_realloc = !user_pkt.data;
1552
1553     *got_packet_ptr = 0;
1554
1555     if (!(avctx->codec->capabilities & CODEC_CAP_DELAY) && !frame) {
1556         av_free_packet(avpkt);
1557         av_init_packet(avpkt);
1558         return 0;
1559     }
1560
1561     /* ensure that extended_data is properly set */
1562     if (frame && !frame->extended_data) {
1563         if (av_sample_fmt_is_planar(avctx->sample_fmt) &&
1564             avctx->channels > AV_NUM_DATA_POINTERS) {
1565             av_log(avctx, AV_LOG_ERROR, "Encoding to a planar sample format, "
1566                                         "with more than %d channels, but extended_data is not set.\n",
1567                    AV_NUM_DATA_POINTERS);
1568             return AVERROR(EINVAL);
1569         }
1570         av_log(avctx, AV_LOG_WARNING, "extended_data is not set.\n");
1571
1572         tmp = *frame;
1573         tmp.extended_data = tmp.data;
1574         frame = &tmp;
1575     }
1576
1577     /* check for valid frame size */
1578     if (frame) {
1579         if (avctx->codec->capabilities & CODEC_CAP_SMALL_LAST_FRAME) {
1580             if (frame->nb_samples > avctx->frame_size) {
1581                 av_log(avctx, AV_LOG_ERROR, "more samples than frame size (avcodec_encode_audio2)\n");
1582                 return AVERROR(EINVAL);
1583             }
1584         } else if (!(avctx->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE)) {
1585             if (frame->nb_samples < avctx->frame_size &&
1586                 !avctx->internal->last_audio_frame) {
1587                 ret = pad_last_frame(avctx, &padded_frame, frame);
1588                 if (ret < 0)
1589                     return ret;
1590
1591                 frame = padded_frame;
1592                 avctx->internal->last_audio_frame = 1;
1593             }
1594
1595             if (frame->nb_samples != avctx->frame_size) {
1596                 av_log(avctx, AV_LOG_ERROR, "nb_samples (%d) != frame_size (%d) (avcodec_encode_audio2)\n", frame->nb_samples, avctx->frame_size);
1597                 ret = AVERROR(EINVAL);
1598                 goto end;
1599             }
1600         }
1601     }
1602
1603     ret = avctx->codec->encode2(avctx, avpkt, frame, got_packet_ptr);
1604     if (!ret) {
1605         if (*got_packet_ptr) {
1606             if (!(avctx->codec->capabilities & CODEC_CAP_DELAY)) {
1607                 if (avpkt->pts == AV_NOPTS_VALUE)
1608                     avpkt->pts = frame->pts;
1609                 if (!avpkt->duration)
1610                     avpkt->duration = ff_samples_to_time_base(avctx,
1611                                                               frame->nb_samples);
1612             }
1613             avpkt->dts = avpkt->pts;
1614         } else {
1615             avpkt->size = 0;
1616         }
1617     }
1618     if (avpkt->data && avpkt->data == avctx->internal->byte_buffer) {
1619         needs_realloc = 0;
1620         if (user_pkt.data) {
1621             if (user_pkt.size >= avpkt->size) {
1622                 memcpy(user_pkt.data, avpkt->data, avpkt->size);
1623             } else {
1624                 av_log(avctx, AV_LOG_ERROR, "Provided packet is too small, needs to be %d\n", avpkt->size);
1625                 avpkt->size = user_pkt.size;
1626                 ret = -1;
1627             }
1628             avpkt->buf      = user_pkt.buf;
1629             avpkt->data     = user_pkt.data;
1630             avpkt->destruct = user_pkt.destruct;
1631         } else {
1632             if (av_dup_packet(avpkt) < 0) {
1633                 ret = AVERROR(ENOMEM);
1634             }
1635         }
1636     }
1637
1638     if (!ret) {
1639         if (needs_realloc && avpkt->data) {
1640             ret = av_buffer_realloc(&avpkt->buf, avpkt->size + FF_INPUT_BUFFER_PADDING_SIZE);
1641             if (ret >= 0)
1642                 avpkt->data = avpkt->buf->data;
1643         }
1644
1645         avctx->frame_number++;
1646     }
1647
1648     if (ret < 0 || !*got_packet_ptr) {
1649         av_free_packet(avpkt);
1650         av_init_packet(avpkt);
1651         goto end;
1652     }
1653
1654     /* NOTE: if we add any audio encoders which output non-keyframe packets,
1655      *       this needs to be moved to the encoders, but for now we can do it
1656      *       here to simplify things */
1657     avpkt->flags |= AV_PKT_FLAG_KEY;
1658
1659 end:
1660     av_frame_free(&padded_frame);
1661
1662     return ret;
1663 }
1664
1665 #if FF_API_OLD_ENCODE_AUDIO
1666 int attribute_align_arg avcodec_encode_audio(AVCodecContext *avctx,
1667                                              uint8_t *buf, int buf_size,
1668                                              const short *samples)
1669 {
1670     AVPacket pkt;
1671     AVFrame frame0 = { { 0 } };
1672     AVFrame *frame;
1673     int ret, samples_size, got_packet;
1674
1675     av_init_packet(&pkt);
1676     pkt.data = buf;
1677     pkt.size = buf_size;
1678
1679     if (samples) {
1680         frame = &frame0;
1681         avcodec_get_frame_defaults(frame);
1682
1683         if (avctx->frame_size) {
1684             frame->nb_samples = avctx->frame_size;
1685         } else {
1686             /* if frame_size is not set, the number of samples must be
1687              * calculated from the buffer size */
1688             int64_t nb_samples;
1689             if (!av_get_bits_per_sample(avctx->codec_id)) {
1690                 av_log(avctx, AV_LOG_ERROR, "avcodec_encode_audio() does not "
1691                                             "support this codec\n");
1692                 return AVERROR(EINVAL);
1693             }
1694             nb_samples = (int64_t)buf_size * 8 /
1695                          (av_get_bits_per_sample(avctx->codec_id) *
1696                           avctx->channels);
1697             if (nb_samples >= INT_MAX)
1698                 return AVERROR(EINVAL);
1699             frame->nb_samples = nb_samples;
1700         }
1701
1702         /* it is assumed that the samples buffer is large enough based on the
1703          * relevant parameters */
1704         samples_size = av_samples_get_buffer_size(NULL, avctx->channels,
1705                                                   frame->nb_samples,
1706                                                   avctx->sample_fmt, 1);
1707         if ((ret = avcodec_fill_audio_frame(frame, avctx->channels,
1708                                             avctx->sample_fmt,
1709                                             (const uint8_t *)samples,
1710                                             samples_size, 1)) < 0)
1711             return ret;
1712
1713         /* fabricate frame pts from sample count.
1714          * this is needed because the avcodec_encode_audio() API does not have
1715          * a way for the user to provide pts */
1716         if (avctx->sample_rate && avctx->time_base.num)
1717             frame->pts = ff_samples_to_time_base(avctx,
1718                                                  avctx->internal->sample_count);
1719         else
1720             frame->pts = AV_NOPTS_VALUE;
1721         avctx->internal->sample_count += frame->nb_samples;
1722     } else {
1723         frame = NULL;
1724     }
1725
1726     got_packet = 0;
1727     ret = avcodec_encode_audio2(avctx, &pkt, frame, &got_packet);
1728     if (!ret && got_packet && avctx->coded_frame) {
1729         avctx->coded_frame->pts       = pkt.pts;
1730         avctx->coded_frame->key_frame = !!(pkt.flags & AV_PKT_FLAG_KEY);
1731     }
1732     /* free any side data since we cannot return it */
1733     av_packet_free_side_data(&pkt);
1734
1735     if (frame && frame->extended_data != frame->data)
1736         av_freep(&frame->extended_data);
1737
1738     return ret ? ret : pkt.size;
1739 }
1740
1741 #endif
1742
1743 #if FF_API_OLD_ENCODE_VIDEO
1744 int attribute_align_arg avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
1745                                              const AVFrame *pict)
1746 {
1747     AVPacket pkt;
1748     int ret, got_packet = 0;
1749
1750     if (buf_size < FF_MIN_BUFFER_SIZE) {
1751         av_log(avctx, AV_LOG_ERROR, "buffer smaller than minimum size\n");
1752         return -1;
1753     }
1754
1755     av_init_packet(&pkt);
1756     pkt.data = buf;
1757     pkt.size = buf_size;
1758
1759     ret = avcodec_encode_video2(avctx, &pkt, pict, &got_packet);
1760     if (!ret && got_packet && avctx->coded_frame) {
1761         avctx->coded_frame->pts       = pkt.pts;
1762         avctx->coded_frame->key_frame = !!(pkt.flags & AV_PKT_FLAG_KEY);
1763     }
1764
1765     /* free any side data since we cannot return it */
1766     if (pkt.side_data_elems > 0) {
1767         int i;
1768         for (i = 0; i < pkt.side_data_elems; i++)
1769             av_free(pkt.side_data[i].data);
1770         av_freep(&pkt.side_data);
1771         pkt.side_data_elems = 0;
1772     }
1773
1774     return ret ? ret : pkt.size;
1775 }
1776
1777 #endif
1778
1779 int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx,
1780                                               AVPacket *avpkt,
1781                                               const AVFrame *frame,
1782                                               int *got_packet_ptr)
1783 {
1784     int ret;
1785     AVPacket user_pkt = *avpkt;
1786     int needs_realloc = !user_pkt.data;
1787
1788     *got_packet_ptr = 0;
1789
1790     if(CONFIG_FRAME_THREAD_ENCODER &&
1791        avctx->internal->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))
1792         return ff_thread_video_encode_frame(avctx, avpkt, frame, got_packet_ptr);
1793
1794     if ((avctx->flags&CODEC_FLAG_PASS1) && avctx->stats_out)
1795         avctx->stats_out[0] = '\0';
1796
1797     if (!(avctx->codec->capabilities & CODEC_CAP_DELAY) && !frame) {
1798         av_free_packet(avpkt);
1799         av_init_packet(avpkt);
1800         avpkt->size = 0;
1801         return 0;
1802     }
1803
1804     if (av_image_check_size(avctx->width, avctx->height, 0, avctx))
1805         return AVERROR(EINVAL);
1806
1807     av_assert0(avctx->codec->encode2);
1808
1809     ret = avctx->codec->encode2(avctx, avpkt, frame, got_packet_ptr);
1810     av_assert0(ret <= 0);
1811
1812     if (avpkt->data && avpkt->data == avctx->internal->byte_buffer) {
1813         needs_realloc = 0;
1814         if (user_pkt.data) {
1815             if (user_pkt.size >= avpkt->size) {
1816                 memcpy(user_pkt.data, avpkt->data, avpkt->size);
1817             } else {
1818                 av_log(avctx, AV_LOG_ERROR, "Provided packet is too small, needs to be %d\n", avpkt->size);
1819                 avpkt->size = user_pkt.size;
1820                 ret = -1;
1821             }
1822             avpkt->buf      = user_pkt.buf;
1823             avpkt->data     = user_pkt.data;
1824             avpkt->destruct = user_pkt.destruct;
1825         } else {
1826             if (av_dup_packet(avpkt) < 0) {
1827                 ret = AVERROR(ENOMEM);
1828             }
1829         }
1830     }
1831
1832     if (!ret) {
1833         if (!*got_packet_ptr)
1834             avpkt->size = 0;
1835         else if (!(avctx->codec->capabilities & CODEC_CAP_DELAY))
1836             avpkt->pts = avpkt->dts = frame->pts;
1837
1838         if (needs_realloc && avpkt->data) {
1839             ret = av_buffer_realloc(&avpkt->buf, avpkt->size + FF_INPUT_BUFFER_PADDING_SIZE);
1840             if (ret >= 0)
1841                 avpkt->data = avpkt->buf->data;
1842         }
1843
1844         avctx->frame_number++;
1845     }
1846
1847     if (ret < 0 || !*got_packet_ptr)
1848         av_free_packet(avpkt);
1849     else
1850         av_packet_merge_side_data(avpkt);
1851
1852     emms_c();
1853     return ret;
1854 }
1855
1856 int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
1857                             const AVSubtitle *sub)
1858 {
1859     int ret;
1860     if (sub->start_display_time) {
1861         av_log(avctx, AV_LOG_ERROR, "start_display_time must be 0.\n");
1862         return -1;
1863     }
1864
1865     ret = avctx->codec->encode_sub(avctx, buf, buf_size, sub);
1866     avctx->frame_number++;
1867     return ret;
1868 }
1869
1870 /**
1871  * Attempt to guess proper monotonic timestamps for decoded video frames
1872  * which might have incorrect times. Input timestamps may wrap around, in
1873  * which case the output will as well.
1874  *
1875  * @param pts the pts field of the decoded AVPacket, as passed through
1876  * AVFrame.pkt_pts
1877  * @param dts the dts field of the decoded AVPacket
1878  * @return one of the input values, may be AV_NOPTS_VALUE
1879  */
1880 static int64_t guess_correct_pts(AVCodecContext *ctx,
1881                                  int64_t reordered_pts, int64_t dts)
1882 {
1883     int64_t pts = AV_NOPTS_VALUE;
1884
1885     if (dts != AV_NOPTS_VALUE) {
1886         ctx->pts_correction_num_faulty_dts += dts <= ctx->pts_correction_last_dts;
1887         ctx->pts_correction_last_dts = dts;
1888     }
1889     if (reordered_pts != AV_NOPTS_VALUE) {
1890         ctx->pts_correction_num_faulty_pts += reordered_pts <= ctx->pts_correction_last_pts;
1891         ctx->pts_correction_last_pts = reordered_pts;
1892     }
1893     if ((ctx->pts_correction_num_faulty_pts<=ctx->pts_correction_num_faulty_dts || dts == AV_NOPTS_VALUE)
1894        && reordered_pts != AV_NOPTS_VALUE)
1895         pts = reordered_pts;
1896     else
1897         pts = dts;
1898
1899     return pts;
1900 }
1901
1902 static void apply_param_change(AVCodecContext *avctx, AVPacket *avpkt)
1903 {
1904     int size = 0;
1905     const uint8_t *data;
1906     uint32_t flags;
1907
1908     if (!(avctx->codec->capabilities & CODEC_CAP_PARAM_CHANGE))
1909         return;
1910
1911     data = av_packet_get_side_data(avpkt, AV_PKT_DATA_PARAM_CHANGE, &size);
1912     if (!data || size < 4)
1913         return;
1914     flags = bytestream_get_le32(&data);
1915     size -= 4;
1916     if (size < 4) /* Required for any of the changes */
1917         return;
1918     if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) {
1919         avctx->channels = bytestream_get_le32(&data);
1920         size -= 4;
1921     }
1922     if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) {
1923         if (size < 8)
1924             return;
1925         avctx->channel_layout = bytestream_get_le64(&data);
1926         size -= 8;
1927     }
1928     if (size < 4)
1929         return;
1930     if (flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) {
1931         avctx->sample_rate = bytestream_get_le32(&data);
1932         size -= 4;
1933     }
1934     if (flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) {
1935         if (size < 8)
1936             return;
1937         avctx->width  = bytestream_get_le32(&data);
1938         avctx->height = bytestream_get_le32(&data);
1939         avcodec_set_dimensions(avctx, avctx->width, avctx->height);
1940         size -= 8;
1941     }
1942 }
1943
1944 static int add_metadata_from_side_data(AVCodecContext *avctx, AVFrame *frame)
1945 {
1946     int size, ret = 0;
1947     const uint8_t *side_metadata;
1948     const uint8_t *end;
1949
1950     side_metadata = av_packet_get_side_data(avctx->pkt,
1951                                             AV_PKT_DATA_STRINGS_METADATA, &size);
1952     if (!side_metadata)
1953         goto end;
1954     end = side_metadata + size;
1955     if (size && end[-1])
1956         return AVERROR_INVALIDDATA;
1957     while (side_metadata < end) {
1958         const uint8_t *key = side_metadata;
1959         const uint8_t *val = side_metadata + strlen(key) + 1;
1960         int ret;
1961
1962         if (val >= end)
1963             return AVERROR_INVALIDDATA;
1964
1965         ret = av_dict_set(avpriv_frame_get_metadatap(frame), key, val, 0);
1966         if (ret < 0)
1967             break;
1968         side_metadata = val + strlen(val) + 1;
1969     }
1970 end:
1971     return ret;
1972 }
1973
1974 int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
1975                                               int *got_picture_ptr,
1976                                               const AVPacket *avpkt)
1977 {
1978     AVCodecInternal *avci = avctx->internal;
1979     int ret;
1980     // copy to ensure we do not change avpkt
1981     AVPacket tmp = *avpkt;
1982
1983     if (!avctx->codec)
1984         return AVERROR(EINVAL);
1985     if (avctx->codec->type != AVMEDIA_TYPE_VIDEO) {
1986         av_log(avctx, AV_LOG_ERROR, "Invalid media type for video\n");
1987         return AVERROR(EINVAL);
1988     }
1989
1990     *got_picture_ptr = 0;
1991     if ((avctx->coded_width || avctx->coded_height) && av_image_check_size(avctx->coded_width, avctx->coded_height, 0, avctx))
1992         return AVERROR(EINVAL);
1993
1994     avcodec_get_frame_defaults(picture);
1995
1996     if (!avctx->refcounted_frames)
1997         av_frame_unref(&avci->to_free);
1998
1999     if ((avctx->codec->capabilities & CODEC_CAP_DELAY) || avpkt->size || (avctx->active_thread_type & FF_THREAD_FRAME)) {
2000         int did_split = av_packet_split_side_data(&tmp);
2001         apply_param_change(avctx, &tmp);
2002         avctx->pkt = &tmp;
2003         if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME)
2004             ret = ff_thread_decode_frame(avctx, picture, got_picture_ptr,
2005                                          &tmp);
2006         else {
2007             ret = avctx->codec->decode(avctx, picture, got_picture_ptr,
2008                                        &tmp);
2009             picture->pkt_dts = avpkt->dts;
2010
2011             if(!avctx->has_b_frames){
2012                 av_frame_set_pkt_pos(picture, avpkt->pos);
2013             }
2014             //FIXME these should be under if(!avctx->has_b_frames)
2015             /* get_buffer is supposed to set frame parameters */
2016             if (!(avctx->codec->capabilities & CODEC_CAP_DR1)) {
2017                 if (!picture->sample_aspect_ratio.num)    picture->sample_aspect_ratio = avctx->sample_aspect_ratio;
2018                 if (!picture->width)                      picture->width               = avctx->width;
2019                 if (!picture->height)                     picture->height              = avctx->height;
2020                 if (picture->format == AV_PIX_FMT_NONE)   picture->format              = avctx->pix_fmt;
2021             }
2022         }
2023         add_metadata_from_side_data(avctx, picture);
2024
2025         emms_c(); //needed to avoid an emms_c() call before every return;
2026
2027         avctx->pkt = NULL;
2028         if (did_split) {
2029             av_packet_free_side_data(&tmp);
2030             if(ret == tmp.size)
2031                 ret = avpkt->size;
2032         }
2033
2034         if (ret < 0 && picture->data[0])
2035             av_frame_unref(picture);
2036
2037         if (*got_picture_ptr) {
2038             if (!avctx->refcounted_frames) {
2039                 avci->to_free = *picture;
2040                 avci->to_free.extended_data = avci->to_free.data;
2041                 memset(picture->buf, 0, sizeof(picture->buf));
2042             }
2043
2044             avctx->frame_number++;
2045             av_frame_set_best_effort_timestamp(picture,
2046                                                guess_correct_pts(avctx,
2047                                                                  picture->pkt_pts,
2048                                                                  picture->pkt_dts));
2049         }
2050     } else
2051         ret = 0;
2052
2053     /* many decoders assign whole AVFrames, thus overwriting extended_data;
2054      * make sure it's set correctly */
2055     picture->extended_data = picture->data;
2056
2057     return ret;
2058 }
2059
2060 #if FF_API_OLD_DECODE_AUDIO
2061 int attribute_align_arg avcodec_decode_audio3(AVCodecContext *avctx, int16_t *samples,
2062                                               int *frame_size_ptr,
2063                                               AVPacket *avpkt)
2064 {
2065     AVFrame frame = { { 0 } };
2066     int ret, got_frame = 0;
2067
2068     if (avctx->get_buffer != avcodec_default_get_buffer) {
2069         av_log(avctx, AV_LOG_ERROR, "Custom get_buffer() for use with"
2070                                     "avcodec_decode_audio3() detected. Overriding with avcodec_default_get_buffer\n");
2071         av_log(avctx, AV_LOG_ERROR, "Please port your application to "
2072                                     "avcodec_decode_audio4()\n");
2073         avctx->get_buffer = avcodec_default_get_buffer;
2074         avctx->release_buffer = avcodec_default_release_buffer;
2075     }
2076
2077     ret = avcodec_decode_audio4(avctx, &frame, &got_frame, avpkt);
2078
2079     if (ret >= 0 && got_frame) {
2080         int ch, plane_size;
2081         int planar    = av_sample_fmt_is_planar(avctx->sample_fmt);
2082         int data_size = av_samples_get_buffer_size(&plane_size, avctx->channels,
2083                                                    frame.nb_samples,
2084                                                    avctx->sample_fmt, 1);
2085         if (*frame_size_ptr < data_size) {
2086             av_log(avctx, AV_LOG_ERROR, "output buffer size is too small for "
2087                                         "the current frame (%d < %d)\n", *frame_size_ptr, data_size);
2088             return AVERROR(EINVAL);
2089         }
2090
2091         memcpy(samples, frame.extended_data[0], plane_size);
2092
2093         if (planar && avctx->channels > 1) {
2094             uint8_t *out = ((uint8_t *)samples) + plane_size;
2095             for (ch = 1; ch < avctx->channels; ch++) {
2096                 memcpy(out, frame.extended_data[ch], plane_size);
2097                 out += plane_size;
2098             }
2099         }
2100         *frame_size_ptr = data_size;
2101     } else {
2102         *frame_size_ptr = 0;
2103     }
2104     return ret;
2105 }
2106
2107 #endif
2108
2109 int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
2110                                               AVFrame *frame,
2111                                               int *got_frame_ptr,
2112                                               const AVPacket *avpkt)
2113 {
2114     AVCodecInternal *avci = avctx->internal;
2115     int planar, channels;
2116     int ret = 0;
2117
2118     *got_frame_ptr = 0;
2119
2120     if (!avpkt->data && avpkt->size) {
2121         av_log(avctx, AV_LOG_ERROR, "invalid packet: NULL data, size != 0\n");
2122         return AVERROR(EINVAL);
2123     }
2124     if (!avctx->codec)
2125         return AVERROR(EINVAL);
2126     if (avctx->codec->type != AVMEDIA_TYPE_AUDIO) {
2127         av_log(avctx, AV_LOG_ERROR, "Invalid media type for audio\n");
2128         return AVERROR(EINVAL);
2129     }
2130
2131     avcodec_get_frame_defaults(frame);
2132
2133     if (!avctx->refcounted_frames)
2134         av_frame_unref(&avci->to_free);
2135
2136     if ((avctx->codec->capabilities & CODEC_CAP_DELAY) || avpkt->size || (avctx->active_thread_type & FF_THREAD_FRAME)) {
2137         uint8_t *side;
2138         int side_size;
2139         uint32_t discard_padding = 0;
2140         // copy to ensure we do not change avpkt
2141         AVPacket tmp = *avpkt;
2142         int did_split = av_packet_split_side_data(&tmp);
2143         apply_param_change(avctx, &tmp);
2144
2145         avctx->pkt = &tmp;
2146         if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME)
2147             ret = ff_thread_decode_frame(avctx, frame, got_frame_ptr, &tmp);
2148         else {
2149             ret = avctx->codec->decode(avctx, frame, got_frame_ptr, &tmp);
2150             frame->pkt_dts = avpkt->dts;
2151         }
2152         if (ret >= 0 && *got_frame_ptr) {
2153             add_metadata_from_side_data(avctx, frame);
2154             avctx->frame_number++;
2155             av_frame_set_best_effort_timestamp(frame,
2156                                                guess_correct_pts(avctx,
2157                                                                  frame->pkt_pts,
2158                                                                  frame->pkt_dts));
2159             if (frame->format == AV_SAMPLE_FMT_NONE)
2160                 frame->format = avctx->sample_fmt;
2161             if (!frame->channel_layout)
2162                 frame->channel_layout = avctx->channel_layout;
2163             if (!av_frame_get_channels(frame))
2164                 av_frame_set_channels(frame, avctx->channels);
2165             if (!frame->sample_rate)
2166                 frame->sample_rate = avctx->sample_rate;
2167         }
2168
2169         side= av_packet_get_side_data(avctx->pkt, AV_PKT_DATA_SKIP_SAMPLES, &side_size);
2170         if(side && side_size>=10) {
2171             avctx->internal->skip_samples = AV_RL32(side);
2172             av_log(avctx, AV_LOG_DEBUG, "skip %d samples due to side data\n",
2173                    avctx->internal->skip_samples);
2174             discard_padding = AV_RL32(side + 4);
2175         }
2176         if (avctx->internal->skip_samples && *got_frame_ptr) {
2177             if(frame->nb_samples <= avctx->internal->skip_samples){
2178                 *got_frame_ptr = 0;
2179                 avctx->internal->skip_samples -= frame->nb_samples;
2180                 av_log(avctx, AV_LOG_DEBUG, "skip whole frame, skip left: %d\n",
2181                        avctx->internal->skip_samples);
2182             } else {
2183                 av_samples_copy(frame->extended_data, frame->extended_data, 0, avctx->internal->skip_samples,
2184                                 frame->nb_samples - avctx->internal->skip_samples, avctx->channels, frame->format);
2185                 if(avctx->pkt_timebase.num && avctx->sample_rate) {
2186                     int64_t diff_ts = av_rescale_q(avctx->internal->skip_samples,
2187                                                    (AVRational){1, avctx->sample_rate},
2188                                                    avctx->pkt_timebase);
2189                     if(frame->pkt_pts!=AV_NOPTS_VALUE)
2190                         frame->pkt_pts += diff_ts;
2191                     if(frame->pkt_dts!=AV_NOPTS_VALUE)
2192                         frame->pkt_dts += diff_ts;
2193                     if (av_frame_get_pkt_duration(frame) >= diff_ts)
2194                         av_frame_set_pkt_duration(frame, av_frame_get_pkt_duration(frame) - diff_ts);
2195                 } else {
2196                     av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for skipped samples.\n");
2197                 }
2198                 av_log(avctx, AV_LOG_DEBUG, "skip %d/%d samples\n",
2199                        avctx->internal->skip_samples, frame->nb_samples);
2200                 frame->nb_samples -= avctx->internal->skip_samples;
2201                 avctx->internal->skip_samples = 0;
2202             }
2203         }
2204
2205         if (discard_padding > 0 && discard_padding <= frame->nb_samples && *got_frame_ptr) {
2206             if (discard_padding == frame->nb_samples) {
2207                 *got_frame_ptr = 0;
2208             } else {
2209                 if(avctx->pkt_timebase.num && avctx->sample_rate) {
2210                     int64_t diff_ts = av_rescale_q(frame->nb_samples - discard_padding,
2211                                                    (AVRational){1, avctx->sample_rate},
2212                                                    avctx->pkt_timebase);
2213                     if (av_frame_get_pkt_duration(frame) >= diff_ts)
2214                         av_frame_set_pkt_duration(frame, av_frame_get_pkt_duration(frame) - diff_ts);
2215                 } else {
2216                     av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for discarded samples.\n");
2217                 }
2218                 av_log(avctx, AV_LOG_DEBUG, "discard %d/%d samples\n",
2219                        discard_padding, frame->nb_samples);
2220                 frame->nb_samples -= discard_padding;
2221             }
2222         }
2223
2224         avctx->pkt = NULL;
2225         if (did_split) {
2226             av_packet_free_side_data(&tmp);
2227             if(ret == tmp.size)
2228                 ret = avpkt->size;
2229         }
2230
2231         if (ret >= 0 && *got_frame_ptr) {
2232             if (!avctx->refcounted_frames) {
2233                 avci->to_free = *frame;
2234                 avci->to_free.extended_data = avci->to_free.data;
2235                 memset(frame->buf, 0, sizeof(frame->buf));
2236                 frame->extended_buf    = NULL;
2237                 frame->nb_extended_buf = 0;
2238             }
2239         } else if (frame->data[0])
2240             av_frame_unref(frame);
2241     }
2242
2243     /* many decoders assign whole AVFrames, thus overwriting extended_data;
2244      * make sure it's set correctly; assume decoders that actually use
2245      * extended_data are doing it correctly */
2246     if (*got_frame_ptr) {
2247         planar   = av_sample_fmt_is_planar(frame->format);
2248         channels = av_frame_get_channels(frame);
2249         if (!(planar && channels > AV_NUM_DATA_POINTERS))
2250             frame->extended_data = frame->data;
2251     } else {
2252         frame->extended_data = NULL;
2253     }
2254
2255     return ret;
2256 }
2257
2258 #define UTF8_MAX_BYTES 4 /* 5 and 6 bytes sequences should not be used */
2259 static int recode_subtitle(AVCodecContext *avctx,
2260                            AVPacket *outpkt, const AVPacket *inpkt)
2261 {
2262 #if CONFIG_ICONV
2263     iconv_t cd = (iconv_t)-1;
2264     int ret = 0;
2265     char *inb, *outb;
2266     size_t inl, outl;
2267     AVPacket tmp;
2268 #endif
2269
2270     if (avctx->sub_charenc_mode != FF_SUB_CHARENC_MODE_PRE_DECODER)
2271         return 0;
2272
2273 #if CONFIG_ICONV
2274     cd = iconv_open("UTF-8", avctx->sub_charenc);
2275     av_assert0(cd != (iconv_t)-1);
2276
2277     inb = inpkt->data;
2278     inl = inpkt->size;
2279
2280     if (inl >= INT_MAX / UTF8_MAX_BYTES - FF_INPUT_BUFFER_PADDING_SIZE) {
2281         av_log(avctx, AV_LOG_ERROR, "Subtitles packet is too big for recoding\n");
2282         ret = AVERROR(ENOMEM);
2283         goto end;
2284     }
2285
2286     ret = av_new_packet(&tmp, inl * UTF8_MAX_BYTES);
2287     if (ret < 0)
2288         goto end;
2289     outpkt->buf  = tmp.buf;
2290     outpkt->data = tmp.data;
2291     outpkt->size = tmp.size;
2292     outb = outpkt->data;
2293     outl = outpkt->size;
2294
2295     if (iconv(cd, &inb, &inl, &outb, &outl) == (size_t)-1 ||
2296         iconv(cd, NULL, NULL, &outb, &outl) == (size_t)-1 ||
2297         outl >= outpkt->size || inl != 0) {
2298         av_log(avctx, AV_LOG_ERROR, "Unable to recode subtitle event \"%s\" "
2299                "from %s to UTF-8\n", inpkt->data, avctx->sub_charenc);
2300         av_free_packet(&tmp);
2301         ret = AVERROR(errno);
2302         goto end;
2303     }
2304     outpkt->size -= outl;
2305     memset(outpkt->data + outpkt->size, 0, outl);
2306
2307 end:
2308     if (cd != (iconv_t)-1)
2309         iconv_close(cd);
2310     return ret;
2311 #else
2312     av_assert0(!"requesting subtitles recoding without iconv");
2313 #endif
2314 }
2315
2316 static int utf8_check(const uint8_t *str)
2317 {
2318     const uint8_t *byte;
2319     uint32_t codepoint, min;
2320
2321     while (*str) {
2322         byte = str;
2323         GET_UTF8(codepoint, *(byte++), return 0;);
2324         min = byte - str == 1 ? 0 : byte - str == 2 ? 0x80 :
2325               1 << (5 * (byte - str) - 4);
2326         if (codepoint < min || codepoint >= 0x110000 ||
2327             codepoint == 0xFFFE /* BOM */ ||
2328             codepoint >= 0xD800 && codepoint <= 0xDFFF /* surrogates */)
2329             return 0;
2330         str = byte;
2331     }
2332     return 1;
2333 }
2334
2335 int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
2336                              int *got_sub_ptr,
2337                              AVPacket *avpkt)
2338 {
2339     int i, ret = 0;
2340
2341     if (!avpkt->data && avpkt->size) {
2342         av_log(avctx, AV_LOG_ERROR, "invalid packet: NULL data, size != 0\n");
2343         return AVERROR(EINVAL);
2344     }
2345     if (!avctx->codec)
2346         return AVERROR(EINVAL);
2347     if (avctx->codec->type != AVMEDIA_TYPE_SUBTITLE) {
2348         av_log(avctx, AV_LOG_ERROR, "Invalid media type for subtitles\n");
2349         return AVERROR(EINVAL);
2350     }
2351
2352     *got_sub_ptr = 0;
2353     avcodec_get_subtitle_defaults(sub);
2354
2355     if (avpkt->size) {
2356         AVPacket pkt_recoded;
2357         AVPacket tmp = *avpkt;
2358         int did_split = av_packet_split_side_data(&tmp);
2359         //apply_param_change(avctx, &tmp);
2360
2361         pkt_recoded = tmp;
2362         ret = recode_subtitle(avctx, &pkt_recoded, &tmp);
2363         if (ret < 0) {
2364             *got_sub_ptr = 0;
2365         } else {
2366             avctx->pkt = &pkt_recoded;
2367
2368             if (avctx->pkt_timebase.den && avpkt->pts != AV_NOPTS_VALUE)
2369                 sub->pts = av_rescale_q(avpkt->pts,
2370                                         avctx->pkt_timebase, AV_TIME_BASE_Q);
2371             ret = avctx->codec->decode(avctx, sub, got_sub_ptr, &pkt_recoded);
2372             av_assert1((ret >= 0) >= !!*got_sub_ptr &&
2373                        !!*got_sub_ptr >= !!sub->num_rects);
2374
2375             if (sub->num_rects && !sub->end_display_time && avpkt->duration &&
2376                 avctx->pkt_timebase.num) {
2377                 AVRational ms = { 1, 1000 };
2378                 sub->end_display_time = av_rescale_q(avpkt->duration,
2379                                                      avctx->pkt_timebase, ms);
2380             }
2381
2382             for (i = 0; i < sub->num_rects; i++) {
2383                 if (sub->rects[i]->ass && !utf8_check(sub->rects[i]->ass)) {
2384                     av_log(avctx, AV_LOG_ERROR,
2385                            "Invalid UTF-8 in decoded subtitles text; "
2386                            "maybe missing -sub_charenc option\n");
2387                     avsubtitle_free(sub);
2388                     return AVERROR_INVALIDDATA;
2389                 }
2390             }
2391
2392             if (tmp.data != pkt_recoded.data) { // did we recode?
2393                 /* prevent from destroying side data from original packet */
2394                 pkt_recoded.side_data = NULL;
2395                 pkt_recoded.side_data_elems = 0;
2396
2397                 av_free_packet(&pkt_recoded);
2398             }
2399             if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB)
2400                 sub->format = 0;
2401             else if (avctx->codec_descriptor->props & AV_CODEC_PROP_TEXT_SUB)
2402                 sub->format = 1;
2403             avctx->pkt = NULL;
2404         }
2405
2406         if (did_split) {
2407             av_packet_free_side_data(&tmp);
2408             if(ret == tmp.size)
2409                 ret = avpkt->size;
2410         }
2411
2412         if (*got_sub_ptr)
2413             avctx->frame_number++;
2414     }
2415
2416     return ret;
2417 }
2418
2419 void avsubtitle_free(AVSubtitle *sub)
2420 {
2421     int i;
2422
2423     for (i = 0; i < sub->num_rects; i++) {
2424         av_freep(&sub->rects[i]->pict.data[0]);
2425         av_freep(&sub->rects[i]->pict.data[1]);
2426         av_freep(&sub->rects[i]->pict.data[2]);
2427         av_freep(&sub->rects[i]->pict.data[3]);
2428         av_freep(&sub->rects[i]->text);
2429         av_freep(&sub->rects[i]->ass);
2430         av_freep(&sub->rects[i]);
2431     }
2432
2433     av_freep(&sub->rects);
2434
2435     memset(sub, 0, sizeof(AVSubtitle));
2436 }
2437
2438 av_cold int ff_codec_close_recursive(AVCodecContext *avctx)
2439 {
2440     int ret = 0;
2441
2442     ff_unlock_avcodec();
2443
2444     ret = avcodec_close(avctx);
2445
2446     ff_lock_avcodec(NULL);
2447     return ret;
2448 }
2449
2450 av_cold int avcodec_close(AVCodecContext *avctx)
2451 {
2452     int ret;
2453
2454     if (!avctx)
2455         return 0;
2456
2457     ret = ff_lock_avcodec(avctx);
2458     if (ret < 0)
2459         return ret;
2460
2461     if (avcodec_is_open(avctx)) {
2462         FramePool *pool = avctx->internal->pool;
2463         int i;
2464         if (CONFIG_FRAME_THREAD_ENCODER &&
2465             avctx->internal->frame_thread_encoder && avctx->thread_count > 1) {
2466             ff_unlock_avcodec();
2467             ff_frame_thread_encoder_free(avctx);
2468             ff_lock_avcodec(avctx);
2469         }
2470         if (HAVE_THREADS && avctx->thread_opaque)
2471             ff_thread_free(avctx);
2472         if (avctx->codec && avctx->codec->close)
2473             avctx->codec->close(avctx);
2474         avctx->coded_frame = NULL;
2475         avctx->internal->byte_buffer_size = 0;
2476         av_freep(&avctx->internal->byte_buffer);
2477         if (!avctx->refcounted_frames)
2478             av_frame_unref(&avctx->internal->to_free);
2479         for (i = 0; i < FF_ARRAY_ELEMS(pool->pools); i++)
2480             av_buffer_pool_uninit(&pool->pools[i]);
2481         av_freep(&avctx->internal->pool);
2482         av_freep(&avctx->internal);
2483     }
2484
2485     if (avctx->priv_data && avctx->codec && avctx->codec->priv_class)
2486         av_opt_free(avctx->priv_data);
2487     av_opt_free(avctx);
2488     av_freep(&avctx->priv_data);
2489     if (av_codec_is_encoder(avctx->codec))
2490         av_freep(&avctx->extradata);
2491     avctx->codec = NULL;
2492     avctx->active_thread_type = 0;
2493
2494     ff_unlock_avcodec();
2495     return 0;
2496 }
2497
2498 static enum AVCodecID remap_deprecated_codec_id(enum AVCodecID id)
2499 {
2500     switch(id){
2501         //This is for future deprecatec codec ids, its empty since
2502         //last major bump but will fill up again over time, please don't remove it
2503 //         case AV_CODEC_ID_UTVIDEO_DEPRECATED: return AV_CODEC_ID_UTVIDEO;
2504         case AV_CODEC_ID_OPUS_DEPRECATED: return AV_CODEC_ID_OPUS;
2505         case AV_CODEC_ID_TAK_DEPRECATED : return AV_CODEC_ID_TAK;
2506         case AV_CODEC_ID_PCM_S24LE_PLANAR_DEPRECATED : return AV_CODEC_ID_PCM_S24LE_PLANAR;
2507         case AV_CODEC_ID_PCM_S32LE_PLANAR_DEPRECATED : return AV_CODEC_ID_PCM_S32LE_PLANAR;
2508         case AV_CODEC_ID_ESCAPE130_DEPRECATED : return AV_CODEC_ID_ESCAPE130;
2509         case AV_CODEC_ID_G2M_DEPRECATED : return AV_CODEC_ID_G2M;
2510         case AV_CODEC_ID_WEBP_DEPRECATED: return AV_CODEC_ID_WEBP;
2511         default                         : return id;
2512     }
2513 }
2514
2515 static AVCodec *find_encdec(enum AVCodecID id, int encoder)
2516 {
2517     AVCodec *p, *experimental = NULL;
2518     p = first_avcodec;
2519     id= remap_deprecated_codec_id(id);
2520     while (p) {
2521         if ((encoder ? av_codec_is_encoder(p) : av_codec_is_decoder(p)) &&
2522             p->id == id) {
2523             if (p->capabilities & CODEC_CAP_EXPERIMENTAL && !experimental) {
2524                 experimental = p;
2525             } else
2526                 return p;
2527         }
2528         p = p->next;
2529     }
2530     return experimental;
2531 }
2532
2533 AVCodec *avcodec_find_encoder(enum AVCodecID id)
2534 {
2535     return find_encdec(id, 1);
2536 }
2537
2538 AVCodec *avcodec_find_encoder_by_name(const char *name)
2539 {
2540     AVCodec *p;
2541     if (!name)
2542         return NULL;
2543     p = first_avcodec;
2544     while (p) {
2545         if (av_codec_is_encoder(p) && strcmp(name, p->name) == 0)
2546             return p;
2547         p = p->next;
2548     }
2549     return NULL;
2550 }
2551
2552 AVCodec *avcodec_find_decoder(enum AVCodecID id)
2553 {
2554     return find_encdec(id, 0);
2555 }
2556
2557 AVCodec *avcodec_find_decoder_by_name(const char *name)
2558 {
2559     AVCodec *p;
2560     if (!name)
2561         return NULL;
2562     p = first_avcodec;
2563     while (p) {
2564         if (av_codec_is_decoder(p) && strcmp(name, p->name) == 0)
2565             return p;
2566         p = p->next;
2567     }
2568     return NULL;
2569 }
2570
2571 const char *avcodec_get_name(enum AVCodecID id)
2572 {
2573     const AVCodecDescriptor *cd;
2574     AVCodec *codec;
2575
2576     if (id == AV_CODEC_ID_NONE)
2577         return "none";
2578     cd = avcodec_descriptor_get(id);
2579     if (cd)
2580         return cd->name;
2581     av_log(NULL, AV_LOG_WARNING, "Codec 0x%x is not in the full list.\n", id);
2582     codec = avcodec_find_decoder(id);
2583     if (codec)
2584         return codec->name;
2585     codec = avcodec_find_encoder(id);
2586     if (codec)
2587         return codec->name;
2588     return "unknown_codec";
2589 }
2590
2591 size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag)
2592 {
2593     int i, len, ret = 0;
2594
2595 #define TAG_PRINT(x)                                              \
2596     (((x) >= '0' && (x) <= '9') ||                                \
2597      ((x) >= 'a' && (x) <= 'z') || ((x) >= 'A' && (x) <= 'Z') ||  \
2598      ((x) == '.' || (x) == ' ' || (x) == '-' || (x) == '_'))
2599
2600     for (i = 0; i < 4; i++) {
2601         len = snprintf(buf, buf_size,
2602                        TAG_PRINT(codec_tag & 0xFF) ? "%c" : "[%d]", codec_tag & 0xFF);
2603         buf        += len;
2604         buf_size    = buf_size > len ? buf_size - len : 0;
2605         ret        += len;
2606         codec_tag >>= 8;
2607     }
2608     return ret;
2609 }
2610
2611 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
2612 {
2613     const char *codec_type;
2614     const char *codec_name;
2615     const char *profile = NULL;
2616     const AVCodec *p;
2617     int bitrate;
2618     AVRational display_aspect_ratio;
2619
2620     if (!buf || buf_size <= 0)
2621         return;
2622     codec_type = av_get_media_type_string(enc->codec_type);
2623     codec_name = avcodec_get_name(enc->codec_id);
2624     if (enc->profile != FF_PROFILE_UNKNOWN) {
2625         if (enc->codec)
2626             p = enc->codec;
2627         else
2628             p = encode ? avcodec_find_encoder(enc->codec_id) :
2629                         avcodec_find_decoder(enc->codec_id);
2630         if (p)
2631             profile = av_get_profile_name(p, enc->profile);
2632     }
2633
2634     snprintf(buf, buf_size, "%s: %s", codec_type ? codec_type : "unknown",
2635              codec_name);
2636     buf[0] ^= 'a' ^ 'A'; /* first letter in uppercase */
2637
2638     if (enc->codec && strcmp(enc->codec->name, codec_name))
2639         snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", enc->codec->name);
2640
2641     if (profile)
2642         snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", profile);
2643     if (enc->codec_tag) {
2644         char tag_buf[32];
2645         av_get_codec_tag_string(tag_buf, sizeof(tag_buf), enc->codec_tag);
2646         snprintf(buf + strlen(buf), buf_size - strlen(buf),
2647                  " (%s / 0x%04X)", tag_buf, enc->codec_tag);
2648     }
2649
2650     switch (enc->codec_type) {
2651     case AVMEDIA_TYPE_VIDEO:
2652         if (enc->pix_fmt != AV_PIX_FMT_NONE) {
2653             char detail[256] = "(";
2654             const char *colorspace_name;
2655             snprintf(buf + strlen(buf), buf_size - strlen(buf),
2656                      ", %s",
2657                      av_get_pix_fmt_name(enc->pix_fmt));
2658             if (enc->bits_per_raw_sample &&
2659                 enc->bits_per_raw_sample <= av_pix_fmt_desc_get(enc->pix_fmt)->comp[0].depth_minus1)
2660                 av_strlcatf(detail, sizeof(detail), "%d bpc, ", enc->bits_per_raw_sample);
2661             if (enc->color_range != AVCOL_RANGE_UNSPECIFIED)
2662                 av_strlcatf(detail, sizeof(detail),
2663                             enc->color_range == AVCOL_RANGE_MPEG ? "tv, ": "pc, ");
2664
2665             colorspace_name = av_get_colorspace_name(enc->colorspace);
2666             if (colorspace_name)
2667                 av_strlcatf(detail, sizeof(detail), "%s, ", colorspace_name);
2668
2669             if (strlen(detail) > 1) {
2670                 detail[strlen(detail) - 2] = 0;
2671                 av_strlcatf(buf, buf_size, "%s)", detail);
2672             }
2673         }
2674         if (enc->width) {
2675             snprintf(buf + strlen(buf), buf_size - strlen(buf),
2676                      ", %dx%d",
2677                      enc->width, enc->height);
2678             if (enc->sample_aspect_ratio.num) {
2679                 av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den,
2680                           enc->width * enc->sample_aspect_ratio.num,
2681                           enc->height * enc->sample_aspect_ratio.den,
2682                           1024 * 1024);
2683                 snprintf(buf + strlen(buf), buf_size - strlen(buf),
2684                          " [SAR %d:%d DAR %d:%d]",
2685                          enc->sample_aspect_ratio.num, enc->sample_aspect_ratio.den,
2686                          display_aspect_ratio.num, display_aspect_ratio.den);
2687             }
2688             if (av_log_get_level() >= AV_LOG_DEBUG) {
2689                 int g = av_gcd(enc->time_base.num, enc->time_base.den);
2690                 snprintf(buf + strlen(buf), buf_size - strlen(buf),
2691                          ", %d/%d",
2692                          enc->time_base.num / g, enc->time_base.den / g);
2693             }
2694         }
2695         if (encode) {
2696             snprintf(buf + strlen(buf), buf_size - strlen(buf),
2697                      ", q=%d-%d", enc->qmin, enc->qmax);
2698         }
2699         break;
2700     case AVMEDIA_TYPE_AUDIO:
2701         if (enc->sample_rate) {
2702             snprintf(buf + strlen(buf), buf_size - strlen(buf),
2703                      ", %d Hz", enc->sample_rate);
2704         }
2705         av_strlcat(buf, ", ", buf_size);
2706         av_get_channel_layout_string(buf + strlen(buf), buf_size - strlen(buf), enc->channels, enc->channel_layout);
2707         if (enc->sample_fmt != AV_SAMPLE_FMT_NONE) {
2708             snprintf(buf + strlen(buf), buf_size - strlen(buf),
2709                      ", %s", av_get_sample_fmt_name(enc->sample_fmt));
2710         }
2711         break;
2712     case AVMEDIA_TYPE_DATA:
2713         if (av_log_get_level() >= AV_LOG_DEBUG) {
2714             int g = av_gcd(enc->time_base.num, enc->time_base.den);
2715             if (g)
2716                 snprintf(buf + strlen(buf), buf_size - strlen(buf),
2717                          ", %d/%d",
2718                          enc->time_base.num / g, enc->time_base.den / g);
2719         }
2720         break;
2721     case AVMEDIA_TYPE_SUBTITLE:
2722         if (enc->width)
2723             snprintf(buf + strlen(buf), buf_size - strlen(buf),
2724                      ", %dx%d", enc->width, enc->height);
2725         break;
2726     default:
2727         return;
2728     }
2729     if (encode) {
2730         if (enc->flags & CODEC_FLAG_PASS1)
2731             snprintf(buf + strlen(buf), buf_size - strlen(buf),
2732                      ", pass 1");
2733         if (enc->flags & CODEC_FLAG_PASS2)
2734             snprintf(buf + strlen(buf), buf_size - strlen(buf),
2735                      ", pass 2");
2736     }
2737     bitrate = get_bit_rate(enc);
2738     if (bitrate != 0) {
2739         snprintf(buf + strlen(buf), buf_size - strlen(buf),
2740                  ", %d kb/s", bitrate / 1000);
2741     } else if (enc->rc_max_rate > 0) {
2742         snprintf(buf + strlen(buf), buf_size - strlen(buf),
2743                  ", max. %d kb/s", enc->rc_max_rate / 1000);
2744     }
2745 }
2746
2747 const char *av_get_profile_name(const AVCodec *codec, int profile)
2748 {
2749     const AVProfile *p;
2750     if (profile == FF_PROFILE_UNKNOWN || !codec->profiles)
2751         return NULL;
2752
2753     for (p = codec->profiles; p->profile != FF_PROFILE_UNKNOWN; p++)
2754         if (p->profile == profile)
2755             return p->name;
2756
2757     return NULL;
2758 }
2759
2760 unsigned avcodec_version(void)
2761 {
2762 //    av_assert0(AV_CODEC_ID_V410==164);
2763     av_assert0(AV_CODEC_ID_PCM_S8_PLANAR==65563);
2764     av_assert0(AV_CODEC_ID_ADPCM_G722==69660);
2765 //     av_assert0(AV_CODEC_ID_BMV_AUDIO==86071);
2766     av_assert0(AV_CODEC_ID_SRT==94216);
2767     av_assert0(LIBAVCODEC_VERSION_MICRO >= 100);
2768
2769     av_assert0(CODEC_ID_CLLC == AV_CODEC_ID_CLLC);
2770     av_assert0(CODEC_ID_PCM_S8_PLANAR == AV_CODEC_ID_PCM_S8_PLANAR);
2771     av_assert0(CODEC_ID_ADPCM_IMA_APC == AV_CODEC_ID_ADPCM_IMA_APC);
2772     av_assert0(CODEC_ID_ILBC == AV_CODEC_ID_ILBC);
2773     av_assert0(CODEC_ID_SRT == AV_CODEC_ID_SRT);
2774     return LIBAVCODEC_VERSION_INT;
2775 }
2776
2777 const char *avcodec_configuration(void)
2778 {
2779     return FFMPEG_CONFIGURATION;
2780 }
2781
2782 const char *avcodec_license(void)
2783 {
2784 #define LICENSE_PREFIX "libavcodec license: "
2785     return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1;
2786 }
2787
2788 void avcodec_flush_buffers(AVCodecContext *avctx)
2789 {
2790     if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME)
2791         ff_thread_flush(avctx);
2792     else if (avctx->codec->flush)
2793         avctx->codec->flush(avctx);
2794
2795     avctx->pts_correction_last_pts =
2796     avctx->pts_correction_last_dts = INT64_MIN;
2797
2798     if (!avctx->refcounted_frames)
2799         av_frame_unref(&avctx->internal->to_free);
2800 }
2801
2802 int av_get_exact_bits_per_sample(enum AVCodecID codec_id)
2803 {
2804     switch (codec_id) {
2805     case AV_CODEC_ID_8SVX_EXP:
2806     case AV_CODEC_ID_8SVX_FIB:
2807     case AV_CODEC_ID_ADPCM_CT:
2808     case AV_CODEC_ID_ADPCM_IMA_APC:
2809     case AV_CODEC_ID_ADPCM_IMA_EA_SEAD:
2810     case AV_CODEC_ID_ADPCM_IMA_OKI:
2811     case AV_CODEC_ID_ADPCM_IMA_WS:
2812     case AV_CODEC_ID_ADPCM_G722:
2813     case AV_CODEC_ID_ADPCM_YAMAHA:
2814         return 4;
2815     case AV_CODEC_ID_PCM_ALAW:
2816     case AV_CODEC_ID_PCM_MULAW:
2817     case AV_CODEC_ID_PCM_S8:
2818     case AV_CODEC_ID_PCM_S8_PLANAR:
2819     case AV_CODEC_ID_PCM_U8:
2820     case AV_CODEC_ID_PCM_ZORK:
2821         return 8;
2822     case AV_CODEC_ID_PCM_S16BE:
2823     case AV_CODEC_ID_PCM_S16BE_PLANAR:
2824     case AV_CODEC_ID_PCM_S16LE:
2825     case AV_CODEC_ID_PCM_S16LE_PLANAR:
2826     case AV_CODEC_ID_PCM_U16BE:
2827     case AV_CODEC_ID_PCM_U16LE:
2828         return 16;
2829     case AV_CODEC_ID_PCM_S24DAUD:
2830     case AV_CODEC_ID_PCM_S24BE:
2831     case AV_CODEC_ID_PCM_S24LE:
2832     case AV_CODEC_ID_PCM_S24LE_PLANAR:
2833     case AV_CODEC_ID_PCM_U24BE:
2834     case AV_CODEC_ID_PCM_U24LE:
2835         return 24;
2836     case AV_CODEC_ID_PCM_S32BE:
2837     case AV_CODEC_ID_PCM_S32LE:
2838     case AV_CODEC_ID_PCM_S32LE_PLANAR:
2839     case AV_CODEC_ID_PCM_U32BE:
2840     case AV_CODEC_ID_PCM_U32LE:
2841     case AV_CODEC_ID_PCM_F32BE:
2842     case AV_CODEC_ID_PCM_F32LE:
2843         return 32;
2844     case AV_CODEC_ID_PCM_F64BE:
2845     case AV_CODEC_ID_PCM_F64LE:
2846         return 64;
2847     default:
2848         return 0;
2849     }
2850 }
2851
2852 enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be)
2853 {
2854     static const enum AVCodecID map[AV_SAMPLE_FMT_NB][2] = {
2855         [AV_SAMPLE_FMT_U8  ] = { AV_CODEC_ID_PCM_U8,    AV_CODEC_ID_PCM_U8    },
2856         [AV_SAMPLE_FMT_S16 ] = { AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S16BE },
2857         [AV_SAMPLE_FMT_S32 ] = { AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_S32BE },
2858         [AV_SAMPLE_FMT_FLT ] = { AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_F32BE },
2859         [AV_SAMPLE_FMT_DBL ] = { AV_CODEC_ID_PCM_F64LE, AV_CODEC_ID_PCM_F64BE },
2860         [AV_SAMPLE_FMT_U8P ] = { AV_CODEC_ID_PCM_U8,    AV_CODEC_ID_PCM_U8    },
2861         [AV_SAMPLE_FMT_S16P] = { AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S16BE },
2862         [AV_SAMPLE_FMT_S32P] = { AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_S32BE },
2863         [AV_SAMPLE_FMT_FLTP] = { AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_F32BE },
2864         [AV_SAMPLE_FMT_DBLP] = { AV_CODEC_ID_PCM_F64LE, AV_CODEC_ID_PCM_F64BE },
2865     };
2866     if (fmt < 0 || fmt >= AV_SAMPLE_FMT_NB)
2867         return AV_CODEC_ID_NONE;
2868     if (be < 0 || be > 1)
2869         be = AV_NE(1, 0);
2870     return map[fmt][be];
2871 }
2872
2873 int av_get_bits_per_sample(enum AVCodecID codec_id)
2874 {
2875     switch (codec_id) {
2876     case AV_CODEC_ID_ADPCM_SBPRO_2:
2877         return 2;
2878     case AV_CODEC_ID_ADPCM_SBPRO_3:
2879         return 3;
2880     case AV_CODEC_ID_ADPCM_SBPRO_4:
2881     case AV_CODEC_ID_ADPCM_IMA_WAV:
2882     case AV_CODEC_ID_ADPCM_IMA_QT:
2883     case AV_CODEC_ID_ADPCM_SWF:
2884     case AV_CODEC_ID_ADPCM_MS:
2885         return 4;
2886     default:
2887         return av_get_exact_bits_per_sample(codec_id);
2888     }
2889 }
2890
2891 int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
2892 {
2893     int id, sr, ch, ba, tag, bps;
2894
2895     id  = avctx->codec_id;
2896     sr  = avctx->sample_rate;
2897     ch  = avctx->channels;
2898     ba  = avctx->block_align;
2899     tag = avctx->codec_tag;
2900     bps = av_get_exact_bits_per_sample(avctx->codec_id);
2901
2902     /* codecs with an exact constant bits per sample */
2903     if (bps > 0 && ch > 0 && frame_bytes > 0 && ch < 32768 && bps < 32768)
2904         return (frame_bytes * 8LL) / (bps * ch);
2905     bps = avctx->bits_per_coded_sample;
2906
2907     /* codecs with a fixed packet duration */
2908     switch (id) {
2909     case AV_CODEC_ID_ADPCM_ADX:    return   32;
2910     case AV_CODEC_ID_ADPCM_IMA_QT: return   64;
2911     case AV_CODEC_ID_ADPCM_EA_XAS: return  128;
2912     case AV_CODEC_ID_AMR_NB:
2913     case AV_CODEC_ID_EVRC:
2914     case AV_CODEC_ID_GSM:
2915     case AV_CODEC_ID_QCELP:
2916     case AV_CODEC_ID_RA_288:       return  160;
2917     case AV_CODEC_ID_AMR_WB:
2918     case AV_CODEC_ID_GSM_MS:       return  320;
2919     case AV_CODEC_ID_MP1:          return  384;
2920     case AV_CODEC_ID_ATRAC1:       return  512;
2921     case AV_CODEC_ID_ATRAC3:       return 1024;
2922     case AV_CODEC_ID_MP2:
2923     case AV_CODEC_ID_MUSEPACK7:    return 1152;
2924     case AV_CODEC_ID_AC3:          return 1536;
2925     }
2926
2927     if (sr > 0) {
2928         /* calc from sample rate */
2929         if (id == AV_CODEC_ID_TTA)
2930             return 256 * sr / 245;
2931
2932         if (ch > 0) {
2933             /* calc from sample rate and channels */
2934             if (id == AV_CODEC_ID_BINKAUDIO_DCT)
2935                 return (480 << (sr / 22050)) / ch;
2936         }
2937     }
2938
2939     if (ba > 0) {
2940         /* calc from block_align */
2941         if (id == AV_CODEC_ID_SIPR) {
2942             switch (ba) {
2943             case 20: return 160;
2944             case 19: return 144;
2945             case 29: return 288;
2946             case 37: return 480;
2947             }
2948         } else if (id == AV_CODEC_ID_ILBC) {
2949             switch (ba) {
2950             case 38: return 160;
2951             case 50: return 240;
2952             }
2953         }
2954     }
2955
2956     if (frame_bytes > 0) {
2957         /* calc from frame_bytes only */
2958         if (id == AV_CODEC_ID_TRUESPEECH)
2959             return 240 * (frame_bytes / 32);
2960         if (id == AV_CODEC_ID_NELLYMOSER)
2961             return 256 * (frame_bytes / 64);
2962         if (id == AV_CODEC_ID_RA_144)
2963             return 160 * (frame_bytes / 20);
2964         if (id == AV_CODEC_ID_G723_1)
2965             return 240 * (frame_bytes / 24);
2966
2967         if (bps > 0) {
2968             /* calc from frame_bytes and bits_per_coded_sample */
2969             if (id == AV_CODEC_ID_ADPCM_G726)
2970                 return frame_bytes * 8 / bps;
2971         }
2972
2973         if (ch > 0) {
2974             /* calc from frame_bytes and channels */
2975             switch (id) {
2976             case AV_CODEC_ID_ADPCM_AFC:
2977                 return frame_bytes / (9 * ch) * 16;
2978             case AV_CODEC_ID_ADPCM_DTK:
2979                 return frame_bytes / (16 * ch) * 28;
2980             case AV_CODEC_ID_ADPCM_4XM:
2981             case AV_CODEC_ID_ADPCM_IMA_ISS:
2982                 return (frame_bytes - 4 * ch) * 2 / ch;
2983             case AV_CODEC_ID_ADPCM_IMA_SMJPEG:
2984                 return (frame_bytes - 4) * 2 / ch;
2985             case AV_CODEC_ID_ADPCM_IMA_AMV:
2986                 return (frame_bytes - 8) * 2 / ch;
2987             case AV_CODEC_ID_ADPCM_XA:
2988                 return (frame_bytes / 128) * 224 / ch;
2989             case AV_CODEC_ID_INTERPLAY_DPCM:
2990                 return (frame_bytes - 6 - ch) / ch;
2991             case AV_CODEC_ID_ROQ_DPCM:
2992                 return (frame_bytes - 8) / ch;
2993             case AV_CODEC_ID_XAN_DPCM:
2994                 return (frame_bytes - 2 * ch) / ch;
2995             case AV_CODEC_ID_MACE3:
2996                 return 3 * frame_bytes / ch;
2997             case AV_CODEC_ID_MACE6:
2998                 return 6 * frame_bytes / ch;
2999             case AV_CODEC_ID_PCM_LXF:
3000                 return 2 * (frame_bytes / (5 * ch));
3001             case AV_CODEC_ID_IAC:
3002             case AV_CODEC_ID_IMC:
3003                 return 4 * frame_bytes / ch;
3004             }
3005
3006             if (tag) {
3007                 /* calc from frame_bytes, channels, and codec_tag */
3008                 if (id == AV_CODEC_ID_SOL_DPCM) {
3009                     if (tag == 3)
3010                         return frame_bytes / ch;
3011                     else
3012                         return frame_bytes * 2 / ch;
3013                 }
3014             }
3015
3016             if (ba > 0) {
3017                 /* calc from frame_bytes, channels, and block_align */
3018                 int blocks = frame_bytes / ba;
3019                 switch (avctx->codec_id) {
3020                 case AV_CODEC_ID_ADPCM_IMA_WAV:
3021                     if (bps < 2 || bps > 5)
3022                         return 0;
3023                     return blocks * (1 + (ba - 4 * ch) / (bps * ch) * 8);
3024                 case AV_CODEC_ID_ADPCM_IMA_DK3:
3025                     return blocks * (((ba - 16) * 2 / 3 * 4) / ch);
3026                 case AV_CODEC_ID_ADPCM_IMA_DK4:
3027                     return blocks * (1 + (ba - 4 * ch) * 2 / ch);
3028                 case AV_CODEC_ID_ADPCM_IMA_RAD:
3029                     return blocks * ((ba - 4 * ch) * 2 / ch);
3030                 case AV_CODEC_ID_ADPCM_MS:
3031                     return blocks * (2 + (ba - 7 * ch) * 2 / ch);
3032                 }
3033             }
3034
3035             if (bps > 0) {
3036                 /* calc from frame_bytes, channels, and bits_per_coded_sample */
3037                 switch (avctx->codec_id) {
3038                 case AV_CODEC_ID_PCM_DVD:
3039                     if(bps<4)
3040                         return 0;
3041                     return 2 * (frame_bytes / ((bps * 2 / 8) * ch));
3042                 case AV_CODEC_ID_PCM_BLURAY:
3043                     if(bps<4)
3044                         return 0;
3045                     return frame_bytes / ((FFALIGN(ch, 2) * bps) / 8);
3046                 case AV_CODEC_ID_S302M:
3047                     return 2 * (frame_bytes / ((bps + 4) / 4)) / ch;
3048                 }
3049             }
3050         }
3051     }
3052
3053     return 0;
3054 }
3055
3056 #if !HAVE_THREADS
3057 int ff_thread_init(AVCodecContext *s)
3058 {
3059     return -1;
3060 }
3061
3062 #endif
3063
3064 unsigned int av_xiphlacing(unsigned char *s, unsigned int v)
3065 {
3066     unsigned int n = 0;
3067
3068     while (v >= 0xff) {
3069         *s++ = 0xff;
3070         v -= 0xff;
3071         n++;
3072     }
3073     *s = v;
3074     n++;
3075     return n;
3076 }
3077
3078 int ff_match_2uint16(const uint16_t(*tab)[2], int size, int a, int b)
3079 {
3080     int i;
3081     for (i = 0; i < size && !(tab[i][0] == a && tab[i][1] == b); i++) ;
3082     return i;
3083 }
3084
3085 #if FF_API_MISSING_SAMPLE
3086 FF_DISABLE_DEPRECATION_WARNINGS
3087 void av_log_missing_feature(void *avc, const char *feature, int want_sample)
3088 {
3089     av_log(avc, AV_LOG_WARNING, "%s is not implemented. Update your FFmpeg "
3090             "version to the newest one from Git. If the problem still "
3091             "occurs, it means that your file has a feature which has not "
3092             "been implemented.\n", feature);
3093     if(want_sample)
3094         av_log_ask_for_sample(avc, NULL);
3095 }
3096
3097 void av_log_ask_for_sample(void *avc, const char *msg, ...)
3098 {
3099     va_list argument_list;
3100
3101     va_start(argument_list, msg);
3102
3103     if (msg)
3104         av_vlog(avc, AV_LOG_WARNING, msg, argument_list);
3105     av_log(avc, AV_LOG_WARNING, "If you want to help, upload a sample "
3106             "of this file to ftp://upload.ffmpeg.org/MPlayer/incoming/ "
3107             "and contact the ffmpeg-devel mailing list.\n");
3108
3109     va_end(argument_list);
3110 }
3111 FF_ENABLE_DEPRECATION_WARNINGS
3112 #endif /* FF_API_MISSING_SAMPLE */
3113
3114 static AVHWAccel *first_hwaccel = NULL;
3115
3116 void av_register_hwaccel(AVHWAccel *hwaccel)
3117 {
3118     AVHWAccel **p = &first_hwaccel;
3119     hwaccel->next = NULL;
3120     while(avpriv_atomic_ptr_cas((void * volatile *)p, NULL, hwaccel))
3121         p = &(*p)->next;
3122 }
3123
3124 AVHWAccel *av_hwaccel_next(AVHWAccel *hwaccel)
3125 {
3126     return hwaccel ? hwaccel->next : first_hwaccel;
3127 }
3128
3129 AVHWAccel *ff_find_hwaccel(enum AVCodecID codec_id, enum AVPixelFormat pix_fmt)
3130 {
3131     AVHWAccel *hwaccel = NULL;
3132
3133     while ((hwaccel = av_hwaccel_next(hwaccel)))
3134         if (hwaccel->id == codec_id
3135             && hwaccel->pix_fmt == pix_fmt)
3136             return hwaccel;
3137     return NULL;
3138 }
3139
3140 int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op))
3141 {
3142     if (lockmgr_cb) {
3143         if (lockmgr_cb(&codec_mutex, AV_LOCK_DESTROY))
3144             return -1;
3145         if (lockmgr_cb(&avformat_mutex, AV_LOCK_DESTROY))
3146             return -1;
3147     }
3148
3149     lockmgr_cb = cb;
3150
3151     if (lockmgr_cb) {
3152         if (lockmgr_cb(&codec_mutex, AV_LOCK_CREATE))
3153             return -1;
3154         if (lockmgr_cb(&avformat_mutex, AV_LOCK_CREATE))
3155             return -1;
3156     }
3157     return 0;
3158 }
3159
3160 int ff_lock_avcodec(AVCodecContext *log_ctx)
3161 {
3162     if (lockmgr_cb) {
3163         if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN))
3164             return -1;
3165     }
3166     entangled_thread_counter++;
3167     if (entangled_thread_counter != 1) {
3168         av_log(log_ctx, AV_LOG_ERROR, "Insufficient thread locking around avcodec_open/close()\n");
3169         if (!lockmgr_cb)
3170             av_log(log_ctx, AV_LOG_ERROR, "No lock manager is set, please see av_lockmgr_register()\n");
3171         ff_avcodec_locked = 1;
3172         ff_unlock_avcodec();
3173         return AVERROR(EINVAL);
3174     }
3175     av_assert0(!ff_avcodec_locked);
3176     ff_avcodec_locked = 1;
3177     return 0;
3178 }
3179
3180 int ff_unlock_avcodec(void)
3181 {
3182     av_assert0(ff_avcodec_locked);
3183     ff_avcodec_locked = 0;
3184     entangled_thread_counter--;
3185     if (lockmgr_cb) {
3186         if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE))
3187             return -1;
3188     }
3189     return 0;
3190 }
3191
3192 int avpriv_lock_avformat(void)
3193 {
3194     if (lockmgr_cb) {
3195         if ((*lockmgr_cb)(&avformat_mutex, AV_LOCK_OBTAIN))
3196             return -1;
3197     }
3198     return 0;
3199 }
3200
3201 int avpriv_unlock_avformat(void)
3202 {
3203     if (lockmgr_cb) {
3204         if ((*lockmgr_cb)(&avformat_mutex, AV_LOCK_RELEASE))
3205             return -1;
3206     }
3207     return 0;
3208 }
3209
3210 unsigned int avpriv_toupper4(unsigned int x)
3211 {
3212     return av_toupper(x & 0xFF) +
3213           (av_toupper((x >>  8) & 0xFF) << 8)  +
3214           (av_toupper((x >> 16) & 0xFF) << 16) +
3215           (av_toupper((x >> 24) & 0xFF) << 24);
3216 }
3217
3218 int ff_thread_ref_frame(ThreadFrame *dst, ThreadFrame *src)
3219 {
3220     int ret;
3221
3222     dst->owner = src->owner;
3223
3224     ret = av_frame_ref(dst->f, src->f);
3225     if (ret < 0)
3226         return ret;
3227
3228     if (src->progress &&
3229         !(dst->progress = av_buffer_ref(src->progress))) {
3230         ff_thread_release_buffer(dst->owner, dst);
3231         return AVERROR(ENOMEM);
3232     }
3233
3234     return 0;
3235 }
3236
3237 #if !HAVE_THREADS
3238
3239 enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
3240 {
3241     return avctx->get_format(avctx, fmt);
3242 }
3243
3244 int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
3245 {
3246     f->owner = avctx;
3247     return ff_get_buffer(avctx, f->f, flags);
3248 }
3249
3250 void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f)
3251 {
3252     av_frame_unref(f->f);
3253 }
3254
3255 void ff_thread_finish_setup(AVCodecContext *avctx)
3256 {
3257 }
3258
3259 void ff_thread_report_progress(ThreadFrame *f, int progress, int field)
3260 {
3261 }
3262
3263 void ff_thread_await_progress(ThreadFrame *f, int progress, int field)
3264 {
3265 }
3266
3267 int ff_thread_can_start_frame(AVCodecContext *avctx)
3268 {
3269     return 1;
3270 }
3271
3272 int ff_alloc_entries(AVCodecContext *avctx, int count)
3273 {
3274     return 0;
3275 }
3276
3277 void ff_reset_entries(AVCodecContext *avctx)
3278 {
3279 }
3280
3281 void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift)
3282 {
3283 }
3284
3285 void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, int n)
3286 {
3287 }
3288
3289 #endif
3290
3291 enum AVMediaType avcodec_get_type(enum AVCodecID codec_id)
3292 {
3293     AVCodec *c= avcodec_find_decoder(codec_id);
3294     if(!c)
3295         c= avcodec_find_encoder(codec_id);
3296     if(c)
3297         return c->type;
3298
3299     if (codec_id <= AV_CODEC_ID_NONE)
3300         return AVMEDIA_TYPE_UNKNOWN;
3301     else if (codec_id < AV_CODEC_ID_FIRST_AUDIO)
3302         return AVMEDIA_TYPE_VIDEO;
3303     else if (codec_id < AV_CODEC_ID_FIRST_SUBTITLE)
3304         return AVMEDIA_TYPE_AUDIO;
3305     else if (codec_id < AV_CODEC_ID_FIRST_UNKNOWN)
3306         return AVMEDIA_TYPE_SUBTITLE;
3307
3308     return AVMEDIA_TYPE_UNKNOWN;
3309 }
3310
3311 int avcodec_is_open(AVCodecContext *s)
3312 {
3313     return !!s->internal;
3314 }
3315
3316 int avpriv_bprint_to_extradata(AVCodecContext *avctx, struct AVBPrint *buf)
3317 {
3318     int ret;
3319     char *str;
3320
3321     ret = av_bprint_finalize(buf, &str);
3322     if (ret < 0)
3323         return ret;
3324     avctx->extradata = str;
3325     /* Note: the string is NUL terminated (so extradata can be read as a
3326      * string), but the ending character is not accounted in the size (in
3327      * binary formats you are likely not supposed to mux that character). When
3328      * extradata is copied, it is also padded with FF_INPUT_BUFFER_PADDING_SIZE
3329      * zeros. */
3330     avctx->extradata_size = buf->len;
3331     return 0;
3332 }
3333
3334 const uint8_t *avpriv_find_start_code(const uint8_t *av_restrict p,
3335                                       const uint8_t *end,
3336                                       uint32_t *av_restrict state)
3337 {
3338     int i;
3339
3340     av_assert0(p <= end);
3341     if (p >= end)
3342         return end;
3343
3344     for (i = 0; i < 3; i++) {
3345         uint32_t tmp = *state << 8;
3346         *state = tmp + *(p++);
3347         if (tmp == 0x100 || p == end)
3348             return p;
3349     }
3350
3351     while (p < end) {
3352         if      (p[-1] > 1      ) p += 3;
3353         else if (p[-2]          ) p += 2;
3354         else if (p[-3]|(p[-1]-1)) p++;
3355         else {
3356             p++;
3357             break;
3358         }
3359     }
3360
3361     p = FFMIN(p, end) - 4;
3362     *state = AV_RB32(p);
3363
3364     return p + 4;
3365 }