From 4b4926bbb3102836fc0c2edafe791cca6209f45e Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 11 Jan 2014 01:25:49 +0100 Subject: Factor out setting AVCodecContext extradata --- common/av_common.c | 24 ++++++++++++++---------- common/av_common.h | 1 + 2 files changed, 15 insertions(+), 10 deletions(-) (limited to 'common') diff --git a/common/av_common.c b/common/av_common.c index 9c41c03251..1a162b7d95 100644 --- a/common/av_common.c +++ b/common/av_common.c @@ -29,6 +29,19 @@ #include "osdep/numcores.h" +int mp_lavc_set_extradata(AVCodecContext *avctx, void *ptr, int size) +{ + if (size) { + av_free(avctx->extradata); + avctx->extradata_size = 0; + avctx->extradata = av_mallocz(size + FF_INPUT_BUFFER_PADDING_SIZE); + if (!avctx->extradata) + return -1; + avctx->extradata_size = size; + memcpy(avctx->extradata, ptr, size); + } + return 0; +} // Copy the codec-related fields from st into avctx. This does not set the // codec itself, only codec related header data provided by libavformat. @@ -38,16 +51,7 @@ // This is strictly for decoding only. void mp_copy_lav_codec_headers(AVCodecContext *avctx, AVCodecContext *st) { - if (st->extradata_size) { - av_free(avctx->extradata); - avctx->extradata_size = 0; - avctx->extradata = - av_mallocz(st->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); - if (avctx->extradata) { - avctx->extradata_size = st->extradata_size; - memcpy(avctx->extradata, st->extradata, st->extradata_size); - } - } + mp_lavc_set_extradata(avctx, st->extradata, st->extradata_size); avctx->codec_tag = st->codec_tag; avctx->stream_codec_tag = st->stream_codec_tag; avctx->bit_rate = st->bit_rate; diff --git a/common/av_common.h b/common/av_common.h index 7bf2d64d9e..2e55fe17a0 100644 --- a/common/av_common.h +++ b/common/av_common.h @@ -27,6 +27,7 @@ struct mp_decoder_list; struct demux_packet; +int mp_lavc_set_extradata(AVCodecContext *avctx, void *ptr, int size); void mp_copy_lav_codec_headers(AVCodecContext *avctx, AVCodecContext *st); void mp_set_av_packet(AVPacket *dst, struct demux_packet *mpkt, AVRational *tb); int64_t mp_pts_to_av(double mp_pts, AVRational *tb); -- cgit v1.2.3