[FFmpeg-cvslog] bmvaudio: decode directly to the user-provided AVFrame
Justin Ruggles
git at videolan.org
Wed Feb 13 11:58:28 CET 2013
ffmpeg | branch: master | Justin Ruggles <justin.ruggles at gmail.com> | Sun Dec 23 17:35:54 2012 -0500| [e42e5a89d62386b4dae37cd7fb0fd61d449632e6] | committer: Justin Ruggles
bmvaudio: decode directly to the user-provided AVFrame
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e42e5a89d62386b4dae37cd7fb0fd61d449632e6
---
libavcodec/bmv.c | 21 +++++----------------
1 file changed, 5 insertions(+), 16 deletions(-)
diff --git a/libavcodec/bmv.c b/libavcodec/bmv.c
index a082d3c..75c550f 100644
--- a/libavcodec/bmv.c
+++ b/libavcodec/bmv.c
@@ -295,32 +295,23 @@ static av_cold int decode_end(AVCodecContext *avctx)
return 0;
}
-typedef struct BMVAudioDecContext {
- AVFrame frame;
-} BMVAudioDecContext;
-
static const int bmv_aud_mults[16] = {
16512, 8256, 4128, 2064, 1032, 516, 258, 192, 129, 88, 64, 56, 48, 40, 36, 32
};
static av_cold int bmv_aud_decode_init(AVCodecContext *avctx)
{
- BMVAudioDecContext *c = avctx->priv_data;
-
avctx->channels = 2;
avctx->channel_layout = AV_CH_LAYOUT_STEREO;
avctx->sample_fmt = AV_SAMPLE_FMT_S16;
- avcodec_get_frame_defaults(&c->frame);
- avctx->coded_frame = &c->frame;
-
return 0;
}
static int bmv_aud_decode_frame(AVCodecContext *avctx, void *data,
int *got_frame_ptr, AVPacket *avpkt)
{
- BMVAudioDecContext *c = avctx->priv_data;
+ AVFrame *frame = data;
const uint8_t *buf = avpkt->data;
int buf_size = avpkt->size;
int blocks = 0, total_blocks, i;
@@ -336,12 +327,12 @@ static int bmv_aud_decode_frame(AVCodecContext *avctx, void *data,
}
/* get output buffer */
- c->frame.nb_samples = total_blocks * 32;
- if ((ret = ff_get_buffer(avctx, &c->frame)) < 0) {
+ frame->nb_samples = total_blocks * 32;
+ if ((ret = ff_get_buffer(avctx, frame)) < 0) {
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
return ret;
}
- output_samples = (int16_t *)c->frame.data[0];
+ output_samples = (int16_t *)frame->data[0];
for (blocks = 0; blocks < total_blocks; blocks++) {
uint8_t code = *buf++;
@@ -354,8 +345,7 @@ static int bmv_aud_decode_frame(AVCodecContext *avctx, void *data,
}
}
- *got_frame_ptr = 1;
- *(AVFrame *)data = c->frame;
+ *got_frame_ptr = 1;
return buf_size;
}
@@ -376,7 +366,6 @@ AVCodec ff_bmv_audio_decoder = {
.name = "bmv_audio",
.type = AVMEDIA_TYPE_AUDIO,
.id = AV_CODEC_ID_BMV_AUDIO,
- .priv_data_size = sizeof(BMVAudioDecContext),
.init = bmv_aud_decode_init,
.decode = bmv_aud_decode_frame,
.capabilities = CODEC_CAP_DR1,
More information about the ffmpeg-cvslog
mailing list