diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2012-12-23 18:05:53 -0500 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2013-02-12 12:21:22 -0500 |
commit | a8ea936a0a00570f61a16a588821b52f6a3115c2 (patch) | |
tree | 8c18bc41774cd8611bac25741b6eb6bf450f5983 /libavcodec | |
parent | b8788671288ef390374d13f4e1e6316cb01847a0 (diff) | |
download | ffmpeg-a8ea936a0a00570f61a16a588821b52f6a3115c2.tar.gz |
libilbc: decode directly to the user-provided AVFrame
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/libilbc.c | 13 |
1 files changed, 5 insertions, 8 deletions
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; } |