3 * Copyright (c) 2001 Fabrice Bellard
4 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
6 * This file is part of Libav.
8 * Libav 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.
13 * Libav 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.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with Libav; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29 #include "libavutil/attributes.h"
30 #include "libavutil/avassert.h"
31 #include "libavutil/avstring.h"
32 #include "libavutil/channel_layout.h"
33 #include "libavutil/crc.h"
34 #include "libavutil/frame.h"
35 #include "libavutil/mathematics.h"
36 #include "libavutil/pixdesc.h"
37 #include "libavutil/imgutils.h"
38 #include "libavutil/samplefmt.h"
39 #include "libavutil/dict.h"
42 #include "libavutil/opt.h"
45 #include "bytestream.h"
52 static int volatile entangled_thread_counter
= 0;
53 static int (*lockmgr_cb
)(void **mutex
, enum AVLockOp op
);
54 static void *codec_mutex
;
55 static void *avformat_mutex
;
57 void *av_fast_realloc(void *ptr
, unsigned int *size
, size_t min_size
)
62 min_size
= FFMAX(17 * min_size
/ 16 + 32, min_size
);
64 ptr
= av_realloc(ptr
, min_size
);
65 /* we could set this to the unmodified min_size but this is safer
66 * if the user lost the ptr and uses NULL now
76 void av_fast_malloc(void *ptr
, unsigned int *size
, size_t min_size
)
81 min_size
= FFMAX(17 * min_size
/ 16 + 32, min_size
);
83 *p
= av_malloc(min_size
);
89 void av_fast_padded_malloc(void *ptr
, unsigned int *size
, size_t min_size
)
92 if (min_size
> SIZE_MAX
- FF_INPUT_BUFFER_PADDING_SIZE
) {
97 av_fast_malloc(p
, size
, min_size
+ FF_INPUT_BUFFER_PADDING_SIZE
);
99 memset((uint8_t *)*p
+ min_size
, 0, FF_INPUT_BUFFER_PADDING_SIZE
);
102 /* encoder management */
103 static AVCodec
*first_avcodec
= NULL
;
105 AVCodec
*av_codec_next(const AVCodec
*c
)
110 return first_avcodec
;
113 static av_cold
void avcodec_init(void)
115 static int initialized
= 0;
117 if (initialized
!= 0)
122 ff_dsputil_static_init();
125 int av_codec_is_encoder(const AVCodec
*codec
)
127 return codec
&& (codec
->encode_sub
|| codec
->encode2
);
130 int av_codec_is_decoder(const AVCodec
*codec
)
132 return codec
&& codec
->decode
;
135 av_cold
void avcodec_register(AVCodec
*codec
)
145 if (codec
->init_static_data
)
146 codec
->init_static_data(codec
);
149 unsigned avcodec_get_edge_width(void)
154 void avcodec_set_dimensions(AVCodecContext
*s
, int width
, int height
)
156 s
->coded_width
= width
;
157 s
->coded_height
= height
;
162 #if (ARCH_ARM && HAVE_NEON) || ARCH_PPC || HAVE_MMX
163 # define STRIDE_ALIGN 16
165 # define STRIDE_ALIGN 8
168 void avcodec_align_dimensions2(AVCodecContext
*s
, int *width
, int *height
,
169 int linesize_align
[AV_NUM_DATA_POINTERS
])
175 switch (s
->pix_fmt
) {
176 case AV_PIX_FMT_YUV420P
:
177 case AV_PIX_FMT_YUYV422
:
178 case AV_PIX_FMT_UYVY422
:
179 case AV_PIX_FMT_YUV422P
:
180 case AV_PIX_FMT_YUV440P
:
181 case AV_PIX_FMT_YUV444P
:
182 case AV_PIX_FMT_GBRP
:
183 case AV_PIX_FMT_GRAY8
:
184 case AV_PIX_FMT_GRAY16BE
:
185 case AV_PIX_FMT_GRAY16LE
:
186 case AV_PIX_FMT_YUVJ420P
:
187 case AV_PIX_FMT_YUVJ422P
:
188 case AV_PIX_FMT_YUVJ440P
:
189 case AV_PIX_FMT_YUVJ444P
:
190 case AV_PIX_FMT_YUVA420P
:
191 case AV_PIX_FMT_YUVA422P
:
192 case AV_PIX_FMT_YUVA444P
:
193 case AV_PIX_FMT_YUV420P9LE
:
194 case AV_PIX_FMT_YUV420P9BE
:
195 case AV_PIX_FMT_YUV420P10LE
:
196 case AV_PIX_FMT_YUV420P10BE
:
197 case AV_PIX_FMT_YUV422P9LE
:
198 case AV_PIX_FMT_YUV422P9BE
:
199 case AV_PIX_FMT_YUV422P10LE
:
200 case AV_PIX_FMT_YUV422P10BE
:
201 case AV_PIX_FMT_YUV444P9LE
:
202 case AV_PIX_FMT_YUV444P9BE
:
203 case AV_PIX_FMT_YUV444P10LE
:
204 case AV_PIX_FMT_YUV444P10BE
:
205 case AV_PIX_FMT_GBRP9LE
:
206 case AV_PIX_FMT_GBRP9BE
:
207 case AV_PIX_FMT_GBRP10LE
:
208 case AV_PIX_FMT_GBRP10BE
:
209 w_align
= 16; //FIXME assume 16 pixel per macroblock
210 h_align
= 16 * 2; // interlaced needs 2 macroblocks height
212 case AV_PIX_FMT_YUV411P
:
213 case AV_PIX_FMT_UYYVYY411
:
217 case AV_PIX_FMT_YUV410P
:
218 if (s
->codec_id
== AV_CODEC_ID_SVQ1
) {
222 case AV_PIX_FMT_RGB555
:
223 if (s
->codec_id
== AV_CODEC_ID_RPZA
) {
227 case AV_PIX_FMT_PAL8
:
228 case AV_PIX_FMT_BGR8
:
229 case AV_PIX_FMT_RGB8
:
230 if (s
->codec_id
== AV_CODEC_ID_SMC
) {
235 case AV_PIX_FMT_BGR24
:
236 if ((s
->codec_id
== AV_CODEC_ID_MSZH
) ||
237 (s
->codec_id
== AV_CODEC_ID_ZLIB
)) {
248 *width
= FFALIGN(*width
, w_align
);
249 *height
= FFALIGN(*height
, h_align
);
250 if (s
->codec_id
== AV_CODEC_ID_H264
)
251 // some of the optimized chroma MC reads one line too much
254 for (i
= 0; i
< 4; i
++)
255 linesize_align
[i
] = STRIDE_ALIGN
;
258 void avcodec_align_dimensions(AVCodecContext
*s
, int *width
, int *height
)
260 const AVPixFmtDescriptor
*desc
= av_pix_fmt_desc_get(s
->pix_fmt
);
261 int chroma_shift
= desc
->log2_chroma_w
;
262 int linesize_align
[AV_NUM_DATA_POINTERS
];
265 avcodec_align_dimensions2(s
, width
, height
, linesize_align
);
266 align
= FFMAX(linesize_align
[0], linesize_align
[3]);
267 linesize_align
[1] <<= chroma_shift
;
268 linesize_align
[2] <<= chroma_shift
;
269 align
= FFMAX3(align
, linesize_align
[1], linesize_align
[2]);
270 *width
= FFALIGN(*width
, align
);
273 int avcodec_fill_audio_frame(AVFrame
*frame
, int nb_channels
,
274 enum AVSampleFormat sample_fmt
, const uint8_t *buf
,
275 int buf_size
, int align
)
277 int ch
, planar
, needed_size
, ret
= 0;
279 needed_size
= av_samples_get_buffer_size(NULL
, nb_channels
,
280 frame
->nb_samples
, sample_fmt
,
282 if (buf_size
< needed_size
)
283 return AVERROR(EINVAL
);
285 planar
= av_sample_fmt_is_planar(sample_fmt
);
286 if (planar
&& nb_channels
> AV_NUM_DATA_POINTERS
) {
287 if (!(frame
->extended_data
= av_mallocz(nb_channels
*
288 sizeof(*frame
->extended_data
))))
289 return AVERROR(ENOMEM
);
291 frame
->extended_data
= frame
->data
;
294 if ((ret
= av_samples_fill_arrays(frame
->extended_data
, &frame
->linesize
[0],
295 buf
, nb_channels
, frame
->nb_samples
,
296 sample_fmt
, align
)) < 0) {
297 if (frame
->extended_data
!= frame
->data
)
298 av_free(frame
->extended_data
);
301 if (frame
->extended_data
!= frame
->data
) {
302 for (ch
= 0; ch
< AV_NUM_DATA_POINTERS
; ch
++)
303 frame
->data
[ch
] = frame
->extended_data
[ch
];
309 static int update_frame_pool(AVCodecContext
*avctx
, AVFrame
*frame
)
311 FramePool
*pool
= avctx
->internal
->pool
;
314 switch (avctx
->codec_type
) {
315 case AVMEDIA_TYPE_VIDEO
: {
318 int w
= frame
->width
;
319 int h
= frame
->height
;
320 int tmpsize
, unaligned
;
322 if (pool
->format
== frame
->format
&&
323 pool
->width
== frame
->width
&& pool
->height
== frame
->height
)
326 avcodec_align_dimensions2(avctx
, &w
, &h
, pool
->stride_align
);
328 if (!(avctx
->flags
& CODEC_FLAG_EMU_EDGE
)) {
334 // NOTE: do not align linesizes individually, this breaks e.g. assumptions
335 // that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2
336 av_image_fill_linesizes(picture
.linesize
, avctx
->pix_fmt
, w
);
337 // increase alignment of w for next try (rhs gives the lowest bit set in w)
341 for (i
= 0; i
< 4; i
++)
342 unaligned
|= picture
.linesize
[i
] % pool
->stride_align
[i
];
345 tmpsize
= av_image_fill_pointers(picture
.data
, avctx
->pix_fmt
, h
,
346 NULL
, picture
.linesize
);
350 for (i
= 0; i
< 3 && picture
.data
[i
+ 1]; i
++)
351 size
[i
] = picture
.data
[i
+ 1] - picture
.data
[i
];
352 size
[i
] = tmpsize
- (picture
.data
[i
] - picture
.data
[0]);
354 for (i
= 0; i
< 4; i
++) {
355 av_buffer_pool_uninit(&pool
->pools
[i
]);
356 pool
->linesize
[i
] = picture
.linesize
[i
];
358 pool
->pools
[i
] = av_buffer_pool_init(size
[i
] + 16, NULL
);
359 if (!pool
->pools
[i
]) {
360 ret
= AVERROR(ENOMEM
);
365 pool
->format
= frame
->format
;
366 pool
->width
= frame
->width
;
367 pool
->height
= frame
->height
;
371 case AVMEDIA_TYPE_AUDIO
: {
372 int ch
= av_get_channel_layout_nb_channels(frame
->channel_layout
);
373 int planar
= av_sample_fmt_is_planar(frame
->format
);
374 int planes
= planar ? ch
: 1;
376 if (pool
->format
== frame
->format
&& pool
->planes
== planes
&&
377 pool
->channels
== ch
&& frame
->nb_samples
== pool
->samples
)
380 av_buffer_pool_uninit(&pool
->pools
[0]);
381 ret
= av_samples_get_buffer_size(&pool
->linesize
[0], ch
,
382 frame
->nb_samples
, frame
->format
, 0);
386 pool
->pools
[0] = av_buffer_pool_init(pool
->linesize
[0], NULL
);
387 if (!pool
->pools
[0]) {
388 ret
= AVERROR(ENOMEM
);
392 pool
->format
= frame
->format
;
393 pool
->planes
= planes
;
395 pool
->samples
= frame
->nb_samples
;
398 default: av_assert0(0);
402 for (i
= 0; i
< 4; i
++)
403 av_buffer_pool_uninit(&pool
->pools
[i
]);
405 pool
->planes
= pool
->channels
= pool
->samples
= 0;
406 pool
->width
= pool
->height
= 0;
410 static int audio_get_buffer(AVCodecContext
*avctx
, AVFrame
*frame
)
412 FramePool
*pool
= avctx
->internal
->pool
;
413 int planes
= pool
->planes
;
416 frame
->linesize
[0] = pool
->linesize
[0];
418 if (planes
> AV_NUM_DATA_POINTERS
) {
419 frame
->extended_data
= av_mallocz(planes
* sizeof(*frame
->extended_data
));
420 frame
->nb_extended_buf
= planes
- AV_NUM_DATA_POINTERS
;
421 frame
->extended_buf
= av_mallocz(frame
->nb_extended_buf
*
422 sizeof(*frame
->extended_buf
));
423 if (!frame
->extended_data
|| !frame
->extended_buf
) {
424 av_freep(&frame
->extended_data
);
425 av_freep(&frame
->extended_buf
);
426 return AVERROR(ENOMEM
);
429 frame
->extended_data
= frame
->data
;
431 for (i
= 0; i
< FFMIN(planes
, AV_NUM_DATA_POINTERS
); i
++) {
432 frame
->buf
[i
] = av_buffer_pool_get(pool
->pools
[0]);
435 frame
->extended_data
[i
] = frame
->data
[i
] = frame
->buf
[i
]->data
;
437 for (i
= 0; i
< frame
->nb_extended_buf
; i
++) {
438 frame
->extended_buf
[i
] = av_buffer_pool_get(pool
->pools
[0]);
439 if (!frame
->extended_buf
[i
])
441 frame
->extended_data
[i
+ AV_NUM_DATA_POINTERS
] = frame
->extended_buf
[i
]->data
;
444 if (avctx
->debug
& FF_DEBUG_BUFFERS
)
445 av_log(avctx
, AV_LOG_DEBUG
, "default_get_buffer called on frame %p", frame
);
449 av_frame_unref(frame
);
450 return AVERROR(ENOMEM
);
453 static int video_get_buffer(AVCodecContext
*s
, AVFrame
*pic
)
455 FramePool
*pool
= s
->internal
->pool
;
456 const AVPixFmtDescriptor
*desc
= av_pix_fmt_desc_get(pic
->format
);
457 int pixel_size
= desc
->comp
[0].step_minus1
+ 1;
458 int h_chroma_shift
, v_chroma_shift
;
461 if (pic
->data
[0] != NULL
) {
462 av_log(s
, AV_LOG_ERROR
, "pic->data[0]!=NULL in avcodec_default_get_buffer\n");
466 memset(pic
->data
, 0, sizeof(pic
->data
));
467 pic
->extended_data
= pic
->data
;
469 av_pix_fmt_get_chroma_sub_sample(s
->pix_fmt
, &h_chroma_shift
, &v_chroma_shift
);
471 for (i
= 0; i
< 4 && pool
->pools
[i
]; i
++) {
472 const int h_shift
= i
== 0 ?
0 : h_chroma_shift
;
473 const int v_shift
= i
== 0 ?
0 : v_chroma_shift
;
475 pic
->linesize
[i
] = pool
->linesize
[i
];
477 pic
->buf
[i
] = av_buffer_pool_get(pool
->pools
[i
]);
481 // no edge if EDGE EMU or not planar YUV
482 if ((s
->flags
& CODEC_FLAG_EMU_EDGE
) || !pool
->pools
[2])
483 pic
->data
[i
] = pic
->buf
[i
]->data
;
485 pic
->data
[i
] = pic
->buf
[i
]->data
+
486 FFALIGN((pic
->linesize
[i
] * EDGE_WIDTH
>> v_shift
) +
487 (pixel_size
* EDGE_WIDTH
>> h_shift
), pool
->stride_align
[i
]);
490 for (; i
< AV_NUM_DATA_POINTERS
; i
++) {
492 pic
->linesize
[i
] = 0;
494 if (pic
->data
[1] && !pic
->data
[2])
495 avpriv_set_systematic_pal2((uint32_t *)pic
->data
[1], s
->pix_fmt
);
497 if (s
->debug
& FF_DEBUG_BUFFERS
)
498 av_log(s
, AV_LOG_DEBUG
, "default_get_buffer called on pic %p\n", pic
);
503 return AVERROR(ENOMEM
);
506 int avcodec_default_get_buffer2(AVCodecContext
*avctx
, AVFrame
*frame
, int flags
)
510 if ((ret
= update_frame_pool(avctx
, frame
)) < 0)
513 #if FF_API_GET_BUFFER
514 frame
->type
= FF_BUFFER_TYPE_INTERNAL
;
517 switch (avctx
->codec_type
) {
518 case AVMEDIA_TYPE_VIDEO
:
519 return video_get_buffer(avctx
, frame
);
520 case AVMEDIA_TYPE_AUDIO
:
521 return audio_get_buffer(avctx
, frame
);
527 #if FF_API_GET_BUFFER
528 int avcodec_default_get_buffer(AVCodecContext
*avctx
, AVFrame
*frame
)
530 return avcodec_default_get_buffer2(avctx
, frame
, 0);
533 typedef struct CompatReleaseBufPriv
{
534 AVCodecContext avctx
;
536 } CompatReleaseBufPriv
;
538 static void compat_free_buffer(void *opaque
, uint8_t *data
)
540 CompatReleaseBufPriv
*priv
= opaque
;
541 if (priv
->avctx
.release_buffer
)
542 priv
->avctx
.release_buffer(&priv
->avctx
, &priv
->frame
);
546 static void compat_release_buffer(void *opaque
, uint8_t *data
)
548 AVBufferRef
*buf
= opaque
;
549 av_buffer_unref(&buf
);
553 int ff_get_buffer(AVCodecContext
*avctx
, AVFrame
*frame
, int flags
)
557 switch (avctx
->codec_type
) {
558 case AVMEDIA_TYPE_VIDEO
:
559 frame
->width
= FFMAX(avctx
->width
, avctx
->coded_width
);
560 frame
->height
= FFMAX(avctx
->height
, avctx
->coded_height
);
561 if (frame
->format
< 0)
562 frame
->format
= avctx
->pix_fmt
;
563 if (!frame
->sample_aspect_ratio
.num
)
564 frame
->sample_aspect_ratio
= avctx
->sample_aspect_ratio
;
566 if ((ret
= av_image_check_size(avctx
->width
, avctx
->height
, 0, avctx
)) < 0)
569 case AVMEDIA_TYPE_AUDIO
:
570 if (!frame
->sample_rate
)
571 frame
->sample_rate
= avctx
->sample_rate
;
572 if (frame
->format
< 0)
573 frame
->format
= avctx
->sample_fmt
;
574 if (!frame
->channel_layout
) {
575 if (avctx
->channel_layout
) {
576 if (av_get_channel_layout_nb_channels(avctx
->channel_layout
) !=
578 av_log(avctx
, AV_LOG_ERROR
, "Inconsistent channel "
580 return AVERROR(EINVAL
);
583 frame
->channel_layout
= avctx
->channel_layout
;
585 if (avctx
->channels
> FF_SANE_NB_CHANNELS
) {
586 av_log(avctx
, AV_LOG_ERROR
, "Too many channels: %d.\n",
588 return AVERROR(ENOSYS
);
591 frame
->channel_layout
= av_get_default_channel_layout(avctx
->channels
);
592 if (!frame
->channel_layout
)
593 frame
->channel_layout
= (1ULL << avctx
->channels
) - 1;
597 default: return AVERROR(EINVAL
);
600 frame
->pkt_pts
= avctx
->pkt ? avctx
->pkt
->pts
: AV_NOPTS_VALUE
;
601 frame
->reordered_opaque
= avctx
->reordered_opaque
;
603 #if FF_API_GET_BUFFER
605 * Wrap an old get_buffer()-allocated buffer in an bunch of AVBuffers.
606 * We wrap each plane in its own AVBuffer. Each of those has a reference to
607 * a dummy AVBuffer as its private data, unreffing it on free.
608 * When all the planes are freed, the dummy buffer's free callback calls
611 if (avctx
->get_buffer
) {
612 CompatReleaseBufPriv
*priv
= NULL
;
613 AVBufferRef
*dummy_buf
= NULL
;
616 if (flags
& AV_GET_BUFFER_FLAG_REF
)
617 frame
->reference
= 1;
619 ret
= avctx
->get_buffer(avctx
, frame
);
623 /* return if the buffers are already set up
624 * this would happen e.g. when a custom get_buffer() calls
625 * avcodec_default_get_buffer
630 priv
= av_mallocz(sizeof(*priv
));
632 ret
= AVERROR(ENOMEM
);
635 priv
->avctx
= *avctx
;
636 priv
->frame
= *frame
;
638 dummy_buf
= av_buffer_create(NULL
, 0, compat_free_buffer
, priv
, 0);
640 ret
= AVERROR(ENOMEM
);
644 #define WRAP_PLANE(ref_out, data, data_size) \
646 AVBufferRef *dummy_ref = av_buffer_ref(dummy_buf); \
648 ret = AVERROR(ENOMEM); \
651 ref_out = av_buffer_create(data, data_size, compat_release_buffer, \
654 av_frame_unref(frame); \
655 ret = AVERROR(ENOMEM); \
660 if (avctx
->codec_type
== AVMEDIA_TYPE_VIDEO
) {
661 const AVPixFmtDescriptor
*desc
= av_pix_fmt_desc_get(frame
->format
);
663 planes
= av_pix_fmt_count_planes(frame
->format
);
664 /* workaround for AVHWAccel plane count of 0, buf[0] is used as
665 check for allocated buffers: make libavcodec happy */
666 if (desc
&& desc
->flags
& AV_PIX_FMT_FLAG_HWACCEL
)
668 if (!desc
|| planes
<= 0) {
669 ret
= AVERROR(EINVAL
);
673 for (i
= 0; i
< planes
; i
++) {
674 int v_shift
= (i
== 1 || i
== 2) ? desc
->log2_chroma_h
: 0;
675 int plane_size
= (frame
->height
>> v_shift
) * frame
->linesize
[i
];
677 WRAP_PLANE(frame
->buf
[i
], frame
->data
[i
], plane_size
);
680 int planar
= av_sample_fmt_is_planar(frame
->format
);
681 planes
= planar ? avctx
->channels
: 1;
683 if (planes
> FF_ARRAY_ELEMS(frame
->buf
)) {
684 frame
->nb_extended_buf
= planes
- FF_ARRAY_ELEMS(frame
->buf
);
685 frame
->extended_buf
= av_malloc(sizeof(*frame
->extended_buf
) *
686 frame
->nb_extended_buf
);
687 if (!frame
->extended_buf
) {
688 ret
= AVERROR(ENOMEM
);
693 for (i
= 0; i
< FFMIN(planes
, FF_ARRAY_ELEMS(frame
->buf
)); i
++)
694 WRAP_PLANE(frame
->buf
[i
], frame
->extended_data
[i
], frame
->linesize
[0]);
696 for (i
= 0; i
< frame
->nb_extended_buf
; i
++)
697 WRAP_PLANE(frame
->extended_buf
[i
],
698 frame
->extended_data
[i
+ FF_ARRAY_ELEMS(frame
->buf
)],
702 av_buffer_unref(&dummy_buf
);
704 frame
->width
= avctx
->width
;
705 frame
->height
= avctx
->height
;
710 avctx
->release_buffer(avctx
, frame
);
712 av_buffer_unref(&dummy_buf
);
717 ret
= avctx
->get_buffer2(avctx
, frame
, flags
);
719 if (avctx
->codec_type
== AVMEDIA_TYPE_VIDEO
) {
720 frame
->width
= avctx
->width
;
721 frame
->height
= avctx
->height
;
727 int ff_reget_buffer(AVCodecContext
*avctx
, AVFrame
*frame
)
732 av_assert0(avctx
->codec_type
== AVMEDIA_TYPE_VIDEO
);
735 return ff_get_buffer(avctx
, frame
, AV_GET_BUFFER_FLAG_REF
);
737 if (av_frame_is_writable(frame
))
740 av_frame_move_ref(&tmp
, frame
);
742 ret
= ff_get_buffer(avctx
, frame
, AV_GET_BUFFER_FLAG_REF
);
744 av_frame_unref(&tmp
);
748 av_image_copy(frame
->data
, frame
->linesize
, tmp
.data
, tmp
.linesize
,
749 frame
->format
, frame
->width
, frame
->height
);
751 av_frame_unref(&tmp
);
756 #if FF_API_GET_BUFFER
757 void avcodec_default_release_buffer(AVCodecContext
*s
, AVFrame
*pic
)
762 int avcodec_default_reget_buffer(AVCodecContext
*s
, AVFrame
*pic
)
769 int avcodec_default_execute(AVCodecContext
*c
, int (*func
)(AVCodecContext
*c2
, void *arg2
), void *arg
, int *ret
, int count
, int size
)
773 for (i
= 0; i
< count
; i
++) {
774 int r
= func(c
, (char *)arg
+ i
* size
);
781 int avcodec_default_execute2(AVCodecContext
*c
, int (*func
)(AVCodecContext
*c2
, void *arg2
, int jobnr
, int threadnr
), void *arg
, int *ret
, int count
)
785 for (i
= 0; i
< count
; i
++) {
786 int r
= func(c
, arg
, i
, 0);
793 static int is_hwaccel_pix_fmt(enum AVPixelFormat pix_fmt
)
795 const AVPixFmtDescriptor
*desc
= av_pix_fmt_desc_get(pix_fmt
);
796 return desc
->flags
& AV_PIX_FMT_FLAG_HWACCEL
;
799 enum AVPixelFormat
avcodec_default_get_format(struct AVCodecContext
*s
, const enum AVPixelFormat
*fmt
)
801 while (*fmt
!= AV_PIX_FMT_NONE
&& is_hwaccel_pix_fmt(*fmt
))
806 void avcodec_get_frame_defaults(AVFrame
*frame
)
808 if (frame
->extended_data
!= frame
->data
)
809 av_freep(&frame
->extended_data
);
811 memset(frame
, 0, sizeof(AVFrame
));
813 frame
->pts
= AV_NOPTS_VALUE
;
814 frame
->key_frame
= 1;
815 frame
->sample_aspect_ratio
= (AVRational
) {0, 1 };
816 frame
->format
= -1; /* unknown */
817 frame
->extended_data
= frame
->data
;
820 AVFrame
*avcodec_alloc_frame(void)
822 AVFrame
*frame
= av_mallocz(sizeof(AVFrame
));
827 avcodec_get_frame_defaults(frame
);
832 void avcodec_free_frame(AVFrame
**frame
)
836 if (!frame
|| !*frame
)
841 if (f
->extended_data
!= f
->data
)
842 av_freep(&f
->extended_data
);
847 int attribute_align_arg
avcodec_open2(AVCodecContext
*avctx
, const AVCodec
*codec
, AVDictionary
**options
)
850 AVDictionary
*tmp
= NULL
;
852 if (avcodec_is_open(avctx
))
855 if ((!codec
&& !avctx
->codec
)) {
856 av_log(avctx
, AV_LOG_ERROR
, "No codec provided to avcodec_open2().\n");
857 return AVERROR(EINVAL
);
859 if ((codec
&& avctx
->codec
&& codec
!= avctx
->codec
)) {
860 av_log(avctx
, AV_LOG_ERROR
, "This AVCodecContext was allocated for %s, "
861 "but %s passed to avcodec_open2().\n", avctx
->codec
->name
, codec
->name
);
862 return AVERROR(EINVAL
);
865 codec
= avctx
->codec
;
867 if (avctx
->extradata_size
< 0 || avctx
->extradata_size
>= FF_MAX_EXTRADATA_SIZE
)
868 return AVERROR(EINVAL
);
871 av_dict_copy(&tmp
, *options
, 0);
873 /* If there is a user-supplied mutex locking routine, call it. */
875 if ((*lockmgr_cb
)(&codec_mutex
, AV_LOCK_OBTAIN
))
879 entangled_thread_counter
++;
880 if (entangled_thread_counter
!= 1) {
881 av_log(avctx
, AV_LOG_ERROR
, "insufficient thread locking around avcodec_open/close()\n");
886 avctx
->internal
= av_mallocz(sizeof(AVCodecInternal
));
887 if (!avctx
->internal
) {
888 ret
= AVERROR(ENOMEM
);
892 avctx
->internal
->pool
= av_mallocz(sizeof(*avctx
->internal
->pool
));
893 if (!avctx
->internal
->pool
) {
894 ret
= AVERROR(ENOMEM
);
898 if (codec
->priv_data_size
> 0) {
899 if (!avctx
->priv_data
) {
900 avctx
->priv_data
= av_mallocz(codec
->priv_data_size
);
901 if (!avctx
->priv_data
) {
902 ret
= AVERROR(ENOMEM
);
905 if (codec
->priv_class
) {
906 *(const AVClass
**)avctx
->priv_data
= codec
->priv_class
;
907 av_opt_set_defaults(avctx
->priv_data
);
910 if (codec
->priv_class
&& (ret
= av_opt_set_dict(avctx
->priv_data
, &tmp
)) < 0)
913 avctx
->priv_data
= NULL
;
915 if ((ret
= av_opt_set_dict(avctx
, &tmp
)) < 0)
918 if (avctx
->coded_width
&& avctx
->coded_height
&& !avctx
->width
&& !avctx
->height
)
919 avcodec_set_dimensions(avctx
, avctx
->coded_width
, avctx
->coded_height
);
920 else if (avctx
->width
&& avctx
->height
)
921 avcodec_set_dimensions(avctx
, avctx
->width
, avctx
->height
);
923 if ((avctx
->coded_width
|| avctx
->coded_height
|| avctx
->width
|| avctx
->height
)
924 && ( av_image_check_size(avctx
->coded_width
, avctx
->coded_height
, 0, avctx
) < 0
925 || av_image_check_size(avctx
->width
, avctx
->height
, 0, avctx
) < 0)) {
926 av_log(avctx
, AV_LOG_WARNING
, "ignoring invalid width/height values\n");
927 avcodec_set_dimensions(avctx
, 0, 0);
930 /* if the decoder init function was already called previously,
931 * free the already allocated subtitle_header before overwriting it */
932 if (av_codec_is_decoder(codec
))
933 av_freep(&avctx
->subtitle_header
);
935 if (avctx
->channels
> FF_SANE_NB_CHANNELS
) {
936 ret
= AVERROR(EINVAL
);
940 avctx
->codec
= codec
;
941 if ((avctx
->codec_type
== AVMEDIA_TYPE_UNKNOWN
|| avctx
->codec_type
== codec
->type
) &&
942 avctx
->codec_id
== AV_CODEC_ID_NONE
) {
943 avctx
->codec_type
= codec
->type
;
944 avctx
->codec_id
= codec
->id
;
946 if (avctx
->codec_id
!= codec
->id
|| (avctx
->codec_type
!= codec
->type
947 && avctx
->codec_type
!= AVMEDIA_TYPE_ATTACHMENT
)) {
948 av_log(avctx
, AV_LOG_ERROR
, "codec type or id mismatches\n");
949 ret
= AVERROR(EINVAL
);
952 avctx
->frame_number
= 0;
954 if (avctx
->codec
->capabilities
& CODEC_CAP_EXPERIMENTAL
&&
955 avctx
->strict_std_compliance
> FF_COMPLIANCE_EXPERIMENTAL
) {
956 ret
= AVERROR_EXPERIMENTAL
;
960 if (avctx
->codec_type
== AVMEDIA_TYPE_AUDIO
&&
961 (!avctx
->time_base
.num
|| !avctx
->time_base
.den
)) {
962 avctx
->time_base
.num
= 1;
963 avctx
->time_base
.den
= avctx
->sample_rate
;
967 ret
= ff_thread_init(avctx
);
972 if (!HAVE_THREADS
&& !(codec
->capabilities
& CODEC_CAP_AUTO_THREADS
))
973 avctx
->thread_count
= 1;
975 if (av_codec_is_encoder(avctx
->codec
)) {
977 if (avctx
->codec
->sample_fmts
) {
978 for (i
= 0; avctx
->codec
->sample_fmts
[i
] != AV_SAMPLE_FMT_NONE
; i
++) {
979 if (avctx
->sample_fmt
== avctx
->codec
->sample_fmts
[i
])
981 if (avctx
->channels
== 1 &&
982 av_get_planar_sample_fmt(avctx
->sample_fmt
) ==
983 av_get_planar_sample_fmt(avctx
->codec
->sample_fmts
[i
])) {
984 avctx
->sample_fmt
= avctx
->codec
->sample_fmts
[i
];
988 if (avctx
->codec
->sample_fmts
[i
] == AV_SAMPLE_FMT_NONE
) {
989 av_log(avctx
, AV_LOG_ERROR
, "Specified sample_fmt is not supported.\n");
990 ret
= AVERROR(EINVAL
);
994 if (avctx
->codec
->pix_fmts
) {
995 for (i
= 0; avctx
->codec
->pix_fmts
[i
] != AV_PIX_FMT_NONE
; i
++)
996 if (avctx
->pix_fmt
== avctx
->codec
->pix_fmts
[i
])
998 if (avctx
->codec
->pix_fmts
[i
] == AV_PIX_FMT_NONE
) {
999 av_log(avctx
, AV_LOG_ERROR
, "Specified pix_fmt is not supported\n");
1000 ret
= AVERROR(EINVAL
);
1004 if (avctx
->codec
->supported_samplerates
) {
1005 for (i
= 0; avctx
->codec
->supported_samplerates
[i
] != 0; i
++)
1006 if (avctx
->sample_rate
== avctx
->codec
->supported_samplerates
[i
])
1008 if (avctx
->codec
->supported_samplerates
[i
] == 0) {
1009 av_log(avctx
, AV_LOG_ERROR
, "Specified sample_rate is not supported\n");
1010 ret
= AVERROR(EINVAL
);
1014 if (avctx
->codec
->channel_layouts
) {
1015 if (!avctx
->channel_layout
) {
1016 av_log(avctx
, AV_LOG_WARNING
, "channel_layout not specified\n");
1018 for (i
= 0; avctx
->codec
->channel_layouts
[i
] != 0; i
++)
1019 if (avctx
->channel_layout
== avctx
->codec
->channel_layouts
[i
])
1021 if (avctx
->codec
->channel_layouts
[i
] == 0) {
1022 av_log(avctx
, AV_LOG_ERROR
, "Specified channel_layout is not supported\n");
1023 ret
= AVERROR(EINVAL
);
1028 if (avctx
->channel_layout
&& avctx
->channels
) {
1029 if (av_get_channel_layout_nb_channels(avctx
->channel_layout
) != avctx
->channels
) {
1030 av_log(avctx
, AV_LOG_ERROR
, "channel layout does not match number of channels\n");
1031 ret
= AVERROR(EINVAL
);
1034 } else if (avctx
->channel_layout
) {
1035 avctx
->channels
= av_get_channel_layout_nb_channels(avctx
->channel_layout
);
1038 if (!avctx
->rc_initial_buffer_occupancy
)
1039 avctx
->rc_initial_buffer_occupancy
= avctx
->rc_buffer_size
* 3 / 4;
1042 if (avctx
->codec
->init
&& !(avctx
->active_thread_type
& FF_THREAD_FRAME
)) {
1043 ret
= avctx
->codec
->init(avctx
);
1049 if (av_codec_is_decoder(avctx
->codec
)) {
1050 /* validate channel layout from the decoder */
1051 if (avctx
->channel_layout
) {
1052 int channels
= av_get_channel_layout_nb_channels(avctx
->channel_layout
);
1053 if (!avctx
->channels
)
1054 avctx
->channels
= channels
;
1055 else if (channels
!= avctx
->channels
) {
1056 av_log(avctx
, AV_LOG_WARNING
,
1057 "channel layout does not match number of channels\n");
1058 avctx
->channel_layout
= 0;
1061 if (avctx
->channels
&& avctx
->channels
< 0 ||
1062 avctx
->channels
> FF_SANE_NB_CHANNELS
) {
1063 ret
= AVERROR(EINVAL
);
1068 entangled_thread_counter
--;
1070 /* Release any user-supplied mutex. */
1072 (*lockmgr_cb
)(&codec_mutex
, AV_LOCK_RELEASE
);
1075 av_dict_free(options
);
1082 av_freep(&avctx
->priv_data
);
1083 if (avctx
->internal
)
1084 av_freep(&avctx
->internal
->pool
);
1085 av_freep(&avctx
->internal
);
1086 avctx
->codec
= NULL
;
1090 int ff_alloc_packet(AVPacket
*avpkt
, int size
)
1092 if (size
> INT_MAX
- FF_INPUT_BUFFER_PADDING_SIZE
)
1093 return AVERROR(EINVAL
);
1096 AVBufferRef
*buf
= avpkt
->buf
;
1097 #if FF_API_DESTRUCT_PACKET
1098 void *destruct
= avpkt
->destruct
;
1101 if (avpkt
->size
< size
)
1102 return AVERROR(EINVAL
);
1104 av_init_packet(avpkt
);
1105 #if FF_API_DESTRUCT_PACKET
1106 avpkt
->destruct
= destruct
;
1112 return av_new_packet(avpkt
, size
);
1117 * Pad last frame with silence.
1119 static int pad_last_frame(AVCodecContext
*s
, AVFrame
**dst
, const AVFrame
*src
)
1121 AVFrame
*frame
= NULL
;
1124 if (!(frame
= avcodec_alloc_frame()))
1125 return AVERROR(ENOMEM
);
1127 frame
->format
= src
->format
;
1128 frame
->channel_layout
= src
->channel_layout
;
1129 frame
->nb_samples
= s
->frame_size
;
1130 ret
= av_frame_get_buffer(frame
, 32);
1134 ret
= av_frame_copy_props(frame
, src
);
1138 if ((ret
= av_samples_copy(frame
->extended_data
, src
->extended_data
, 0, 0,
1139 src
->nb_samples
, s
->channels
, s
->sample_fmt
)) < 0)
1141 if ((ret
= av_samples_set_silence(frame
->extended_data
, src
->nb_samples
,
1142 frame
->nb_samples
- src
->nb_samples
,
1143 s
->channels
, s
->sample_fmt
)) < 0)
1151 av_frame_free(&frame
);
1155 int attribute_align_arg
avcodec_encode_audio2(AVCodecContext
*avctx
,
1157 const AVFrame
*frame
,
1158 int *got_packet_ptr
)
1161 AVFrame
*padded_frame
= NULL
;
1163 int user_packet
= !!avpkt
->data
;
1165 *got_packet_ptr
= 0;
1167 if (!(avctx
->codec
->capabilities
& CODEC_CAP_DELAY
) && !frame
) {
1168 av_free_packet(avpkt
);
1169 av_init_packet(avpkt
);
1173 /* ensure that extended_data is properly set */
1174 if (frame
&& !frame
->extended_data
) {
1175 if (av_sample_fmt_is_planar(avctx
->sample_fmt
) &&
1176 avctx
->channels
> AV_NUM_DATA_POINTERS
) {
1177 av_log(avctx
, AV_LOG_ERROR
, "Encoding to a planar sample format, "
1178 "with more than %d channels, but extended_data is not set.\n",
1179 AV_NUM_DATA_POINTERS
);
1180 return AVERROR(EINVAL
);
1182 av_log(avctx
, AV_LOG_WARNING
, "extended_data is not set.\n");
1185 tmp
.extended_data
= tmp
.data
;
1189 /* check for valid frame size */
1191 if (avctx
->codec
->capabilities
& CODEC_CAP_SMALL_LAST_FRAME
) {
1192 if (frame
->nb_samples
> avctx
->frame_size
)
1193 return AVERROR(EINVAL
);
1194 } else if (!(avctx
->codec
->capabilities
& CODEC_CAP_VARIABLE_FRAME_SIZE
)) {
1195 if (frame
->nb_samples
< avctx
->frame_size
&&
1196 !avctx
->internal
->last_audio_frame
) {
1197 ret
= pad_last_frame(avctx
, &padded_frame
, frame
);
1201 frame
= padded_frame
;
1202 avctx
->internal
->last_audio_frame
= 1;
1205 if (frame
->nb_samples
!= avctx
->frame_size
) {
1206 ret
= AVERROR(EINVAL
);
1212 ret
= avctx
->codec
->encode2(avctx
, avpkt
, frame
, got_packet_ptr
);
1214 if (*got_packet_ptr
) {
1215 if (!(avctx
->codec
->capabilities
& CODEC_CAP_DELAY
)) {
1216 if (avpkt
->pts
== AV_NOPTS_VALUE
)
1217 avpkt
->pts
= frame
->pts
;
1218 if (!avpkt
->duration
)
1219 avpkt
->duration
= ff_samples_to_time_base(avctx
,
1222 avpkt
->dts
= avpkt
->pts
;
1227 if (!user_packet
&& avpkt
->size
) {
1228 ret
= av_buffer_realloc(&avpkt
->buf
, avpkt
->size
);
1230 avpkt
->data
= avpkt
->buf
->data
;
1233 avctx
->frame_number
++;
1236 if (ret
< 0 || !*got_packet_ptr
) {
1237 av_free_packet(avpkt
);
1238 av_init_packet(avpkt
);
1242 /* NOTE: if we add any audio encoders which output non-keyframe packets,
1243 * this needs to be moved to the encoders, but for now we can do it
1244 * here to simplify things */
1245 avpkt
->flags
|= AV_PKT_FLAG_KEY
;
1249 av_freep(&padded_frame
->data
[0]);
1250 if (padded_frame
->extended_data
!= padded_frame
->data
)
1251 av_freep(&padded_frame
->extended_data
);
1252 av_freep(&padded_frame
);
1258 int attribute_align_arg
avcodec_encode_video2(AVCodecContext
*avctx
,
1260 const AVFrame
*frame
,
1261 int *got_packet_ptr
)
1264 int user_packet
= !!avpkt
->data
;
1266 *got_packet_ptr
= 0;
1268 if (!(avctx
->codec
->capabilities
& CODEC_CAP_DELAY
) && !frame
) {
1269 av_free_packet(avpkt
);
1270 av_init_packet(avpkt
);
1275 if (av_image_check_size(avctx
->width
, avctx
->height
, 0, avctx
))
1276 return AVERROR(EINVAL
);
1278 av_assert0(avctx
->codec
->encode2
);
1280 ret
= avctx
->codec
->encode2(avctx
, avpkt
, frame
, got_packet_ptr
);
1282 if (!*got_packet_ptr
)
1284 else if (!(avctx
->codec
->capabilities
& CODEC_CAP_DELAY
))
1285 avpkt
->pts
= avpkt
->dts
= frame
->pts
;
1287 if (!user_packet
&& avpkt
->size
) {
1288 ret
= av_buffer_realloc(&avpkt
->buf
, avpkt
->size
);
1290 avpkt
->data
= avpkt
->buf
->data
;
1293 avctx
->frame_number
++;
1296 if (ret
< 0 || !*got_packet_ptr
)
1297 av_free_packet(avpkt
);
1303 int avcodec_encode_subtitle(AVCodecContext
*avctx
, uint8_t *buf
, int buf_size
,
1304 const AVSubtitle
*sub
)
1307 if (sub
->start_display_time
) {
1308 av_log(avctx
, AV_LOG_ERROR
, "start_display_time must be 0.\n");
1311 if (sub
->num_rects
== 0 || !sub
->rects
)
1313 ret
= avctx
->codec
->encode_sub(avctx
, buf
, buf_size
, sub
);
1314 avctx
->frame_number
++;
1318 static void apply_param_change(AVCodecContext
*avctx
, AVPacket
*avpkt
)
1321 const uint8_t *data
;
1324 if (!(avctx
->codec
->capabilities
& CODEC_CAP_PARAM_CHANGE
))
1327 data
= av_packet_get_side_data(avpkt
, AV_PKT_DATA_PARAM_CHANGE
, &size
);
1328 if (!data
|| size
< 4)
1330 flags
= bytestream_get_le32(&data
);
1332 if (size
< 4) /* Required for any of the changes */
1334 if (flags
& AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT
) {
1335 avctx
->channels
= bytestream_get_le32(&data
);
1338 if (flags
& AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT
) {
1341 avctx
->channel_layout
= bytestream_get_le64(&data
);
1346 if (flags
& AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE
) {
1347 avctx
->sample_rate
= bytestream_get_le32(&data
);
1350 if (flags
& AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS
) {
1353 avctx
->width
= bytestream_get_le32(&data
);
1354 avctx
->height
= bytestream_get_le32(&data
);
1355 avcodec_set_dimensions(avctx
, avctx
->width
, avctx
->height
);
1360 int attribute_align_arg
avcodec_decode_video2(AVCodecContext
*avctx
, AVFrame
*picture
,
1361 int *got_picture_ptr
,
1364 AVCodecInternal
*avci
= avctx
->internal
;
1367 *got_picture_ptr
= 0;
1368 if ((avctx
->coded_width
|| avctx
->coded_height
) && av_image_check_size(avctx
->coded_width
, avctx
->coded_height
, 0, avctx
))
1372 apply_param_change(avctx
, avpkt
);
1374 avcodec_get_frame_defaults(picture
);
1376 if (!avctx
->refcounted_frames
)
1377 av_frame_unref(&avci
->to_free
);
1379 if ((avctx
->codec
->capabilities
& CODEC_CAP_DELAY
) || avpkt
->size
|| (avctx
->active_thread_type
& FF_THREAD_FRAME
)) {
1380 if (HAVE_THREADS
&& avctx
->active_thread_type
& FF_THREAD_FRAME
)
1381 ret
= ff_thread_decode_frame(avctx
, picture
, got_picture_ptr
,
1384 ret
= avctx
->codec
->decode(avctx
, picture
, got_picture_ptr
,
1386 picture
->pkt_dts
= avpkt
->dts
;
1387 /* get_buffer is supposed to set frame parameters */
1388 if (!(avctx
->codec
->capabilities
& CODEC_CAP_DR1
)) {
1389 picture
->sample_aspect_ratio
= avctx
->sample_aspect_ratio
;
1390 picture
->width
= avctx
->width
;
1391 picture
->height
= avctx
->height
;
1392 picture
->format
= avctx
->pix_fmt
;
1396 emms_c(); //needed to avoid an emms_c() call before every return;
1398 if (ret
< 0 && picture
->data
[0])
1399 av_frame_unref(picture
);
1401 if (*got_picture_ptr
) {
1402 if (!avctx
->refcounted_frames
) {
1403 avci
->to_free
= *picture
;
1404 avci
->to_free
.extended_data
= avci
->to_free
.data
;
1405 memset(picture
->buf
, 0, sizeof(picture
->buf
));
1408 avctx
->frame_number
++;
1413 /* many decoders assign whole AVFrames, thus overwriting extended_data;
1414 * make sure it's set correctly */
1415 picture
->extended_data
= picture
->data
;
1420 int attribute_align_arg
avcodec_decode_audio4(AVCodecContext
*avctx
,
1425 AVCodecInternal
*avci
= avctx
->internal
;
1426 int planar
, channels
;
1433 if (!avpkt
->data
&& avpkt
->size
) {
1434 av_log(avctx
, AV_LOG_ERROR
, "invalid packet: NULL data, size != 0\n");
1435 return AVERROR(EINVAL
);
1438 apply_param_change(avctx
, avpkt
);
1440 avcodec_get_frame_defaults(frame
);
1442 if (!avctx
->refcounted_frames
)
1443 av_frame_unref(&avci
->to_free
);
1445 if ((avctx
->codec
->capabilities
& CODEC_CAP_DELAY
) || avpkt
->size
) {
1446 ret
= avctx
->codec
->decode(avctx
, frame
, got_frame_ptr
, avpkt
);
1447 if (ret
>= 0 && *got_frame_ptr
) {
1448 avctx
->frame_number
++;
1449 frame
->pkt_dts
= avpkt
->dts
;
1450 if (frame
->format
== AV_SAMPLE_FMT_NONE
)
1451 frame
->format
= avctx
->sample_fmt
;
1453 if (!avctx
->refcounted_frames
) {
1454 avci
->to_free
= *frame
;
1455 avci
->to_free
.extended_data
= avci
->to_free
.data
;
1456 memset(frame
->buf
, 0, sizeof(frame
->buf
));
1457 frame
->extended_buf
= NULL
;
1458 frame
->nb_extended_buf
= 0;
1460 } else if (frame
->data
[0])
1461 av_frame_unref(frame
);
1464 /* many decoders assign whole AVFrames, thus overwriting extended_data;
1465 * make sure it's set correctly; assume decoders that actually use
1466 * extended_data are doing it correctly */
1467 planar
= av_sample_fmt_is_planar(frame
->format
);
1468 channels
= av_get_channel_layout_nb_channels(frame
->channel_layout
);
1469 if (!(planar
&& channels
> AV_NUM_DATA_POINTERS
))
1470 frame
->extended_data
= frame
->data
;
1475 int avcodec_decode_subtitle2(AVCodecContext
*avctx
, AVSubtitle
*sub
,
1483 ret
= avctx
->codec
->decode(avctx
, sub
, got_sub_ptr
, avpkt
);
1485 avctx
->frame_number
++;
1489 void avsubtitle_free(AVSubtitle
*sub
)
1493 for (i
= 0; i
< sub
->num_rects
; i
++) {
1494 av_freep(&sub
->rects
[i
]->pict
.data
[0]);
1495 av_freep(&sub
->rects
[i
]->pict
.data
[1]);
1496 av_freep(&sub
->rects
[i
]->pict
.data
[2]);
1497 av_freep(&sub
->rects
[i
]->pict
.data
[3]);
1498 av_freep(&sub
->rects
[i
]->text
);
1499 av_freep(&sub
->rects
[i
]->ass
);
1500 av_freep(&sub
->rects
[i
]);
1503 av_freep(&sub
->rects
);
1505 memset(sub
, 0, sizeof(AVSubtitle
));
1508 av_cold
int avcodec_close(AVCodecContext
*avctx
)
1510 /* If there is a user-supplied mutex locking routine, call it. */
1512 if ((*lockmgr_cb
)(&codec_mutex
, AV_LOCK_OBTAIN
))
1516 entangled_thread_counter
++;
1517 if (entangled_thread_counter
!= 1) {
1518 av_log(avctx
, AV_LOG_ERROR
, "insufficient thread locking around avcodec_open/close()\n");
1519 entangled_thread_counter
--;
1523 if (avcodec_is_open(avctx
)) {
1524 FramePool
*pool
= avctx
->internal
->pool
;
1526 if (HAVE_THREADS
&& avctx
->thread_opaque
)
1527 ff_thread_free(avctx
);
1528 if (avctx
->codec
&& avctx
->codec
->close
)
1529 avctx
->codec
->close(avctx
);
1530 avctx
->coded_frame
= NULL
;
1531 if (!avctx
->refcounted_frames
)
1532 av_frame_unref(&avctx
->internal
->to_free
);
1533 for (i
= 0; i
< FF_ARRAY_ELEMS(pool
->pools
); i
++)
1534 av_buffer_pool_uninit(&pool
->pools
[i
]);
1535 av_freep(&avctx
->internal
->pool
);
1536 av_freep(&avctx
->internal
);
1539 if (avctx
->priv_data
&& avctx
->codec
&& avctx
->codec
->priv_class
)
1540 av_opt_free(avctx
->priv_data
);
1542 av_freep(&avctx
->priv_data
);
1543 if (av_codec_is_encoder(avctx
->codec
))
1544 av_freep(&avctx
->extradata
);
1545 avctx
->codec
= NULL
;
1546 avctx
->active_thread_type
= 0;
1547 entangled_thread_counter
--;
1549 /* Release any user-supplied mutex. */
1551 (*lockmgr_cb
)(&codec_mutex
, AV_LOCK_RELEASE
);
1556 static AVCodec
*find_encdec(enum AVCodecID id
, int encoder
)
1558 AVCodec
*p
, *experimental
= NULL
;
1561 if ((encoder ?
av_codec_is_encoder(p
) : av_codec_is_decoder(p
)) &&
1563 if (p
->capabilities
& CODEC_CAP_EXPERIMENTAL
&& !experimental
) {
1570 return experimental
;
1573 AVCodec
*avcodec_find_encoder(enum AVCodecID id
)
1575 return find_encdec(id
, 1);
1578 AVCodec
*avcodec_find_encoder_by_name(const char *name
)
1585 if (av_codec_is_encoder(p
) && strcmp(name
, p
->name
) == 0)
1592 AVCodec
*avcodec_find_decoder(enum AVCodecID id
)
1594 return find_encdec(id
, 0);
1597 AVCodec
*avcodec_find_decoder_by_name(const char *name
)
1604 if (av_codec_is_decoder(p
) && strcmp(name
, p
->name
) == 0)
1611 static int get_bit_rate(AVCodecContext
*ctx
)
1614 int bits_per_sample
;
1616 switch (ctx
->codec_type
) {
1617 case AVMEDIA_TYPE_VIDEO
:
1618 case AVMEDIA_TYPE_DATA
:
1619 case AVMEDIA_TYPE_SUBTITLE
:
1620 case AVMEDIA_TYPE_ATTACHMENT
:
1621 bit_rate
= ctx
->bit_rate
;
1623 case AVMEDIA_TYPE_AUDIO
:
1624 bits_per_sample
= av_get_bits_per_sample(ctx
->codec_id
);
1625 bit_rate
= bits_per_sample ? ctx
->sample_rate
* ctx
->channels
* bits_per_sample
: ctx
->bit_rate
;
1634 size_t av_get_codec_tag_string(char *buf
, size_t buf_size
, unsigned int codec_tag
)
1636 int i
, len
, ret
= 0;
1638 #define TAG_PRINT(x) \
1639 (((x) >= '0' && (x) <= '9') || \
1640 ((x) >= 'a' && (x) <= 'z') || ((x) >= 'A' && (x) <= 'Z') || \
1641 ((x) == '.' || (x) == ' '))
1643 for (i
= 0; i
< 4; i
++) {
1644 len
= snprintf(buf
, buf_size
,
1645 TAG_PRINT(codec_tag
& 0xFF) ?
"%c" : "[%d]", codec_tag
& 0xFF);
1647 buf_size
= buf_size
> len ? buf_size
- len
: 0;
1654 void avcodec_string(char *buf
, int buf_size
, AVCodecContext
*enc
, int encode
)
1656 const char *codec_name
;
1657 const char *profile
= NULL
;
1661 AVRational display_aspect_ratio
;
1666 p
= avcodec_find_encoder(enc
->codec_id
);
1668 p
= avcodec_find_decoder(enc
->codec_id
);
1671 codec_name
= p
->name
;
1672 profile
= av_get_profile_name(p
, enc
->profile
);
1673 } else if (enc
->codec_id
== AV_CODEC_ID_MPEG2TS
) {
1674 /* fake mpeg2 transport stream codec (currently not
1676 codec_name
= "mpeg2ts";
1677 } else if (enc
->codec_name
[0] != '\0') {
1678 codec_name
= enc
->codec_name
;
1680 /* output avi tags */
1682 av_get_codec_tag_string(tag_buf
, sizeof(tag_buf
), enc
->codec_tag
);
1683 snprintf(buf1
, sizeof(buf1
), "%s / 0x%04X", tag_buf
, enc
->codec_tag
);
1687 switch (enc
->codec_type
) {
1688 case AVMEDIA_TYPE_VIDEO
:
1689 snprintf(buf
, buf_size
,
1691 codec_name
, enc
->mb_decision ?
" (hq)" : "");
1693 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
1695 if (enc
->pix_fmt
!= AV_PIX_FMT_NONE
) {
1696 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
1698 av_get_pix_fmt_name(enc
->pix_fmt
));
1701 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
1703 enc
->width
, enc
->height
);
1704 if (enc
->sample_aspect_ratio
.num
) {
1705 av_reduce(&display_aspect_ratio
.num
, &display_aspect_ratio
.den
,
1706 enc
->width
* enc
->sample_aspect_ratio
.num
,
1707 enc
->height
* enc
->sample_aspect_ratio
.den
,
1709 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
1710 " [PAR %d:%d DAR %d:%d]",
1711 enc
->sample_aspect_ratio
.num
, enc
->sample_aspect_ratio
.den
,
1712 display_aspect_ratio
.num
, display_aspect_ratio
.den
);
1714 if (av_log_get_level() >= AV_LOG_DEBUG
) {
1715 int g
= av_gcd(enc
->time_base
.num
, enc
->time_base
.den
);
1716 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
1718 enc
->time_base
.num
/ g
, enc
->time_base
.den
/ g
);
1722 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
1723 ", q=%d-%d", enc
->qmin
, enc
->qmax
);
1726 case AVMEDIA_TYPE_AUDIO
:
1727 snprintf(buf
, buf_size
,
1731 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
1733 if (enc
->sample_rate
) {
1734 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
1735 ", %d Hz", enc
->sample_rate
);
1737 av_strlcat(buf
, ", ", buf_size
);
1738 av_get_channel_layout_string(buf
+ strlen(buf
), buf_size
- strlen(buf
), enc
->channels
, enc
->channel_layout
);
1739 if (enc
->sample_fmt
!= AV_SAMPLE_FMT_NONE
) {
1740 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
1741 ", %s", av_get_sample_fmt_name(enc
->sample_fmt
));
1744 case AVMEDIA_TYPE_DATA
:
1745 snprintf(buf
, buf_size
, "Data: %s", codec_name
);
1747 case AVMEDIA_TYPE_SUBTITLE
:
1748 snprintf(buf
, buf_size
, "Subtitle: %s", codec_name
);
1750 case AVMEDIA_TYPE_ATTACHMENT
:
1751 snprintf(buf
, buf_size
, "Attachment: %s", codec_name
);
1754 snprintf(buf
, buf_size
, "Invalid Codec type %d", enc
->codec_type
);
1758 if (enc
->flags
& CODEC_FLAG_PASS1
)
1759 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
1761 if (enc
->flags
& CODEC_FLAG_PASS2
)
1762 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
1765 bitrate
= get_bit_rate(enc
);
1767 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
1768 ", %d kb/s", bitrate
/ 1000);
1772 const char *av_get_profile_name(const AVCodec
*codec
, int profile
)
1775 if (profile
== FF_PROFILE_UNKNOWN
|| !codec
->profiles
)
1778 for (p
= codec
->profiles
; p
->profile
!= FF_PROFILE_UNKNOWN
; p
++)
1779 if (p
->profile
== profile
)
1785 unsigned avcodec_version(void)
1787 return LIBAVCODEC_VERSION_INT
;
1790 const char *avcodec_configuration(void)
1792 return LIBAV_CONFIGURATION
;
1795 const char *avcodec_license(void)
1797 #define LICENSE_PREFIX "libavcodec license: "
1798 return LICENSE_PREFIX LIBAV_LICENSE
+ sizeof(LICENSE_PREFIX
) - 1;
1801 void avcodec_flush_buffers(AVCodecContext
*avctx
)
1803 if (HAVE_THREADS
&& avctx
->active_thread_type
& FF_THREAD_FRAME
)
1804 ff_thread_flush(avctx
);
1805 else if (avctx
->codec
->flush
)
1806 avctx
->codec
->flush(avctx
);
1809 int av_get_exact_bits_per_sample(enum AVCodecID codec_id
)
1812 case AV_CODEC_ID_ADPCM_CT
:
1813 case AV_CODEC_ID_ADPCM_IMA_APC
:
1814 case AV_CODEC_ID_ADPCM_IMA_EA_SEAD
:
1815 case AV_CODEC_ID_ADPCM_IMA_WS
:
1816 case AV_CODEC_ID_ADPCM_G722
:
1817 case AV_CODEC_ID_ADPCM_YAMAHA
:
1819 case AV_CODEC_ID_PCM_ALAW
:
1820 case AV_CODEC_ID_PCM_MULAW
:
1821 case AV_CODEC_ID_PCM_S8
:
1822 case AV_CODEC_ID_PCM_U8
:
1823 case AV_CODEC_ID_PCM_ZORK
:
1825 case AV_CODEC_ID_PCM_S16BE
:
1826 case AV_CODEC_ID_PCM_S16LE
:
1827 case AV_CODEC_ID_PCM_S16LE_PLANAR
:
1828 case AV_CODEC_ID_PCM_U16BE
:
1829 case AV_CODEC_ID_PCM_U16LE
:
1831 case AV_CODEC_ID_PCM_S24DAUD
:
1832 case AV_CODEC_ID_PCM_S24BE
:
1833 case AV_CODEC_ID_PCM_S24LE
:
1834 case AV_CODEC_ID_PCM_U24BE
:
1835 case AV_CODEC_ID_PCM_U24LE
:
1837 case AV_CODEC_ID_PCM_S32BE
:
1838 case AV_CODEC_ID_PCM_S32LE
:
1839 case AV_CODEC_ID_PCM_U32BE
:
1840 case AV_CODEC_ID_PCM_U32LE
:
1841 case AV_CODEC_ID_PCM_F32BE
:
1842 case AV_CODEC_ID_PCM_F32LE
:
1844 case AV_CODEC_ID_PCM_F64BE
:
1845 case AV_CODEC_ID_PCM_F64LE
:
1852 int av_get_bits_per_sample(enum AVCodecID codec_id
)
1855 case AV_CODEC_ID_ADPCM_SBPRO_2
:
1857 case AV_CODEC_ID_ADPCM_SBPRO_3
:
1859 case AV_CODEC_ID_ADPCM_SBPRO_4
:
1860 case AV_CODEC_ID_ADPCM_IMA_WAV
:
1861 case AV_CODEC_ID_ADPCM_IMA_QT
:
1862 case AV_CODEC_ID_ADPCM_SWF
:
1863 case AV_CODEC_ID_ADPCM_MS
:
1866 return av_get_exact_bits_per_sample(codec_id
);
1870 int av_get_audio_frame_duration(AVCodecContext
*avctx
, int frame_bytes
)
1872 int id
, sr
, ch
, ba
, tag
, bps
;
1874 id
= avctx
->codec_id
;
1875 sr
= avctx
->sample_rate
;
1876 ch
= avctx
->channels
;
1877 ba
= avctx
->block_align
;
1878 tag
= avctx
->codec_tag
;
1879 bps
= av_get_exact_bits_per_sample(avctx
->codec_id
);
1881 /* codecs with an exact constant bits per sample */
1882 if (bps
> 0 && ch
> 0 && frame_bytes
> 0)
1883 return (frame_bytes
* 8) / (bps
* ch
);
1884 bps
= avctx
->bits_per_coded_sample
;
1886 /* codecs with a fixed packet duration */
1888 case AV_CODEC_ID_ADPCM_ADX
: return 32;
1889 case AV_CODEC_ID_ADPCM_IMA_QT
: return 64;
1890 case AV_CODEC_ID_ADPCM_EA_XAS
: return 128;
1891 case AV_CODEC_ID_AMR_NB
:
1892 case AV_CODEC_ID_GSM
:
1893 case AV_CODEC_ID_QCELP
:
1894 case AV_CODEC_ID_RA_144
:
1895 case AV_CODEC_ID_RA_288
: return 160;
1896 case AV_CODEC_ID_IMC
: return 256;
1897 case AV_CODEC_ID_AMR_WB
:
1898 case AV_CODEC_ID_GSM_MS
: return 320;
1899 case AV_CODEC_ID_MP1
: return 384;
1900 case AV_CODEC_ID_ATRAC1
: return 512;
1901 case AV_CODEC_ID_ATRAC3
: return 1024;
1902 case AV_CODEC_ID_MP2
:
1903 case AV_CODEC_ID_MUSEPACK7
: return 1152;
1904 case AV_CODEC_ID_AC3
: return 1536;
1908 /* calc from sample rate */
1909 if (id
== AV_CODEC_ID_TTA
)
1910 return 256 * sr
/ 245;
1913 /* calc from sample rate and channels */
1914 if (id
== AV_CODEC_ID_BINKAUDIO_DCT
)
1915 return (480 << (sr
/ 22050)) / ch
;
1920 /* calc from block_align */
1921 if (id
== AV_CODEC_ID_SIPR
) {
1923 case 20: return 160;
1924 case 19: return 144;
1925 case 29: return 288;
1926 case 37: return 480;
1928 } else if (id
== AV_CODEC_ID_ILBC
) {
1930 case 38: return 160;
1931 case 50: return 240;
1936 if (frame_bytes
> 0) {
1937 /* calc from frame_bytes only */
1938 if (id
== AV_CODEC_ID_TRUESPEECH
)
1939 return 240 * (frame_bytes
/ 32);
1940 if (id
== AV_CODEC_ID_NELLYMOSER
)
1941 return 256 * (frame_bytes
/ 64);
1944 /* calc from frame_bytes and bits_per_coded_sample */
1945 if (id
== AV_CODEC_ID_ADPCM_G726
)
1946 return frame_bytes
* 8 / bps
;
1950 /* calc from frame_bytes and channels */
1952 case AV_CODEC_ID_ADPCM_4XM
:
1953 case AV_CODEC_ID_ADPCM_IMA_ISS
:
1954 return (frame_bytes
- 4 * ch
) * 2 / ch
;
1955 case AV_CODEC_ID_ADPCM_IMA_SMJPEG
:
1956 return (frame_bytes
- 4) * 2 / ch
;
1957 case AV_CODEC_ID_ADPCM_IMA_AMV
:
1958 return (frame_bytes
- 8) * 2 / ch
;
1959 case AV_CODEC_ID_ADPCM_XA
:
1960 return (frame_bytes
/ 128) * 224 / ch
;
1961 case AV_CODEC_ID_INTERPLAY_DPCM
:
1962 return (frame_bytes
- 6 - ch
) / ch
;
1963 case AV_CODEC_ID_ROQ_DPCM
:
1964 return (frame_bytes
- 8) / ch
;
1965 case AV_CODEC_ID_XAN_DPCM
:
1966 return (frame_bytes
- 2 * ch
) / ch
;
1967 case AV_CODEC_ID_MACE3
:
1968 return 3 * frame_bytes
/ ch
;
1969 case AV_CODEC_ID_MACE6
:
1970 return 6 * frame_bytes
/ ch
;
1971 case AV_CODEC_ID_PCM_LXF
:
1972 return 2 * (frame_bytes
/ (5 * ch
));
1976 /* calc from frame_bytes, channels, and codec_tag */
1977 if (id
== AV_CODEC_ID_SOL_DPCM
) {
1979 return frame_bytes
/ ch
;
1981 return frame_bytes
* 2 / ch
;
1986 /* calc from frame_bytes, channels, and block_align */
1987 int blocks
= frame_bytes
/ ba
;
1988 switch (avctx
->codec_id
) {
1989 case AV_CODEC_ID_ADPCM_IMA_WAV
:
1990 return blocks
* (1 + (ba
- 4 * ch
) / (4 * ch
) * 8);
1991 case AV_CODEC_ID_ADPCM_IMA_DK3
:
1992 return blocks
* (((ba
- 16) * 2 / 3 * 4) / ch
);
1993 case AV_CODEC_ID_ADPCM_IMA_DK4
:
1994 return blocks
* (1 + (ba
- 4 * ch
) * 2 / ch
);
1995 case AV_CODEC_ID_ADPCM_MS
:
1996 return blocks
* (2 + (ba
- 7 * ch
) * 2 / ch
);
2001 /* calc from frame_bytes, channels, and bits_per_coded_sample */
2002 switch (avctx
->codec_id
) {
2003 case AV_CODEC_ID_PCM_DVD
:
2004 return 2 * (frame_bytes
/ ((bps
* 2 / 8) * ch
));
2005 case AV_CODEC_ID_PCM_BLURAY
:
2006 return frame_bytes
/ ((FFALIGN(ch
, 2) * bps
) / 8);
2007 case AV_CODEC_ID_S302M
:
2008 return 2 * (frame_bytes
/ ((bps
+ 4) / 4)) / ch
;
2018 int ff_thread_init(AVCodecContext
*s
)
2025 unsigned int av_xiphlacing(unsigned char *s
, unsigned int v
)
2039 int ff_match_2uint16(const uint16_t(*tab
)[2], int size
, int a
, int b
)
2042 for (i
= 0; i
< size
&& !(tab
[i
][0] == a
&& tab
[i
][1] == b
); i
++) ;
2046 #if FF_API_MISSING_SAMPLE
2047 void av_log_missing_feature(void *avc
, const char *feature
, int want_sample
)
2049 av_log(avc
, AV_LOG_WARNING
, "%s is not implemented. Update your Libav "
2050 "version to the newest one from Git. If the problem still "
2051 "occurs, it means that your file has a feature which has not "
2052 "been implemented.\n", feature
);
2054 av_log_ask_for_sample(avc
, NULL
);
2057 void av_log_ask_for_sample(void *avc
, const char *msg
, ...)
2059 va_list argument_list
;
2061 va_start(argument_list
, msg
);
2064 av_vlog(avc
, AV_LOG_WARNING
, msg
, argument_list
);
2065 av_log(avc
, AV_LOG_WARNING
, "If you want to help, upload a sample "
2066 "of this file to ftp://upload.libav.org/incoming/ "
2067 "and contact the libav-devel mailing list.\n");
2069 va_end(argument_list
);
2071 #endif /* FF_API_MISSING_SAMPLE */
2073 static AVHWAccel
*first_hwaccel
= NULL
;
2075 void av_register_hwaccel(AVHWAccel
*hwaccel
)
2077 AVHWAccel
**p
= &first_hwaccel
;
2081 hwaccel
->next
= NULL
;
2084 AVHWAccel
*av_hwaccel_next(AVHWAccel
*hwaccel
)
2086 return hwaccel ? hwaccel
->next
: first_hwaccel
;
2089 AVHWAccel
*ff_find_hwaccel(enum AVCodecID codec_id
, enum AVPixelFormat pix_fmt
)
2091 AVHWAccel
*hwaccel
= NULL
;
2093 while ((hwaccel
= av_hwaccel_next(hwaccel
)))
2094 if (hwaccel
->id
== codec_id
2095 && hwaccel
->pix_fmt
== pix_fmt
)
2100 int av_lockmgr_register(int (*cb
)(void **mutex
, enum AVLockOp op
))
2103 if (lockmgr_cb(&codec_mutex
, AV_LOCK_DESTROY
))
2105 if (lockmgr_cb(&avformat_mutex
, AV_LOCK_DESTROY
))
2112 if (lockmgr_cb(&codec_mutex
, AV_LOCK_CREATE
))
2114 if (lockmgr_cb(&avformat_mutex
, AV_LOCK_CREATE
))
2120 int avpriv_lock_avformat(void)
2123 if ((*lockmgr_cb
)(&avformat_mutex
, AV_LOCK_OBTAIN
))
2129 int avpriv_unlock_avformat(void)
2132 if ((*lockmgr_cb
)(&avformat_mutex
, AV_LOCK_RELEASE
))
2138 unsigned int avpriv_toupper4(unsigned int x
)
2140 return av_toupper(x
& 0xFF) +
2141 (av_toupper((x
>> 8) & 0xFF) << 8) +
2142 (av_toupper((x
>> 16) & 0xFF) << 16) +
2143 (av_toupper((x
>> 24) & 0xFF) << 24);
2146 int ff_thread_ref_frame(ThreadFrame
*dst
, ThreadFrame
*src
)
2150 dst
->owner
= src
->owner
;
2152 ret
= av_frame_ref(dst
->f
, src
->f
);
2156 if (src
->progress
&&
2157 !(dst
->progress
= av_buffer_ref(src
->progress
))) {
2158 ff_thread_release_buffer(dst
->owner
, dst
);
2159 return AVERROR(ENOMEM
);
2167 int ff_thread_get_buffer(AVCodecContext
*avctx
, ThreadFrame
*f
, int flags
)
2170 return ff_get_buffer(avctx
, f
->f
, flags
);
2173 void ff_thread_release_buffer(AVCodecContext
*avctx
, ThreadFrame
*f
)
2175 av_frame_unref(f
->f
);
2178 void ff_thread_finish_setup(AVCodecContext
*avctx
)
2182 void ff_thread_report_progress(ThreadFrame
*f
, int progress
, int field
)
2186 void ff_thread_await_progress(ThreadFrame
*f
, int progress
, int field
)
2192 enum AVMediaType
avcodec_get_type(enum AVCodecID codec_id
)
2194 if (codec_id
<= AV_CODEC_ID_NONE
)
2195 return AVMEDIA_TYPE_UNKNOWN
;
2196 else if (codec_id
< AV_CODEC_ID_FIRST_AUDIO
)
2197 return AVMEDIA_TYPE_VIDEO
;
2198 else if (codec_id
< AV_CODEC_ID_FIRST_SUBTITLE
)
2199 return AVMEDIA_TYPE_AUDIO
;
2200 else if (codec_id
< AV_CODEC_ID_FIRST_UNKNOWN
)
2201 return AVMEDIA_TYPE_SUBTITLE
;
2203 return AVMEDIA_TYPE_UNKNOWN
;
2206 int avcodec_is_open(AVCodecContext
*s
)
2208 return !!s
->internal
;
2211 const uint8_t *avpriv_find_start_code(const uint8_t *restrict p
,
2213 uint32_t * restrict state
)
2221 for (i
= 0; i
< 3; i
++) {
2222 uint32_t tmp
= *state
<< 8;
2223 *state
= tmp
+ *(p
++);
2224 if (tmp
== 0x100 || p
== end
)
2229 if (p
[-1] > 1 ) p
+= 3;
2230 else if (p
[-2] ) p
+= 2;
2231 else if (p
[-3]|(p
[-1]-1)) p
++;
2238 p
= FFMIN(p
, end
) - 4;
2239 *state
= AV_RB32(p
);