From a8ea936a0a00570f61a16a588821b52f6a3115c2 Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Sun, 23 Dec 2012 18:05:53 -0500 Subject: libilbc: decode directly to the user-provided AVFrame --- libavcodec/libilbc.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'libavcodec/libilbc.c') diff --git a/libavcodec/libilbc.c b/libavcodec/libilbc.c index 9acaa4057d..cabac053c2 100644 --- a/libavcodec/libilbc.c +++ b/libavcodec/libilbc.c @@ -41,7 +41,6 @@ static int get_mode(AVCodecContext *avctx) typedef struct ILBCDecContext { const AVClass *class; - AVFrame frame; iLBC_Dec_Inst_t decoder; int enhance; } ILBCDecContext; @@ -66,8 +65,6 @@ static av_cold int ilbc_decode_init(AVCodecContext *avctx) } WebRtcIlbcfix_InitDecode(&s->decoder, mode, s->enhance); - avcodec_get_frame_defaults(&s->frame); - avctx->coded_frame = &s->frame; avctx->channels = 1; avctx->channel_layout = AV_CH_LAYOUT_MONO; @@ -83,6 +80,7 @@ static int ilbc_decode_frame(AVCodecContext *avctx, void *data, const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; ILBCDecContext *s = avctx->priv_data; + AVFrame *frame = data; int ret; if (s->decoder.no_of_bytes > buf_size) { @@ -91,17 +89,16 @@ static int ilbc_decode_frame(AVCodecContext *avctx, void *data, return AVERROR_INVALIDDATA; } - s->frame.nb_samples = s->decoder.blockl; - if ((ret = ff_get_buffer(avctx, &s->frame)) < 0) { + frame->nb_samples = s->decoder.blockl; + if ((ret = ff_get_buffer(avctx, frame)) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return ret; } - WebRtcIlbcfix_DecodeImpl((WebRtc_Word16*) s->frame.data[0], + WebRtcIlbcfix_DecodeImpl((WebRtc_Word16*) frame->data[0], (const WebRtc_UWord16*) buf, &s->decoder, 1); - *got_frame_ptr = 1; - *(AVFrame *)data = s->frame; + *got_frame_ptr = 1; return s->decoder.no_of_bytes; } -- cgit v1.2.3