summaryrefslogtreecommitdiff
path: root/libavcodec/bmv.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2012-12-23 17:35:54 -0500
committerJustin Ruggles <justin.ruggles@gmail.com>2013-02-12 12:21:21 -0500
commite42e5a89d62386b4dae37cd7fb0fd61d449632e6 (patch)
tree08614e91e5675689391bdc7162b0cbe71daf6ad0 /libavcodec/bmv.c
parenta6bb39add273ad05b345c49ab3c7a7fa721b55cf (diff)
bmvaudio: decode directly to the user-provided AVFrame
Diffstat (limited to 'libavcodec/bmv.c')
-rw-r--r--libavcodec/bmv.c21
1 files changed, 5 insertions, 16 deletions
diff --git a/libavcodec/bmv.c b/libavcodec/bmv.c
index a082d3ced7..75c550f3f5 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,