diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2012-12-23 17:49:27 -0500 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2013-02-12 12:21:22 -0500 |
commit | b8e9c99ef19c21d20962e90237697722cbc96ff8 (patch) | |
tree | f5465b25b4ac89b78fe6a59fd086f63958d457ea | |
parent | 97c7bdc6d417457c81cade090de4a85ad5f34b8a (diff) | |
download | ffmpeg-b8e9c99ef19c21d20962e90237697722cbc96ff8.tar.gz |
flac: decode directly to the user-provided AVFrame
-rw-r--r-- | libavcodec/flacdec.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/libavcodec/flacdec.c b/libavcodec/flacdec.c index f273d145cb..6bb6be3477 100644 --- a/libavcodec/flacdec.c +++ b/libavcodec/flacdec.c @@ -51,7 +51,6 @@ typedef struct FLACContext { FLACSTREAMINFO AVCodecContext *avctx; ///< parent AVCodecContext - AVFrame frame; GetBitContext gb; ///< GetBitContext initialized to start at the current frame int blocksize; ///< number of samples in the current frame @@ -115,9 +114,6 @@ static av_cold int flac_decode_init(AVCodecContext *avctx) ff_flacdsp_init(&s->dsp, avctx->sample_fmt, s->bps); s->got_streaminfo = 1; - avcodec_get_frame_defaults(&s->frame); - avctx->coded_frame = &s->frame; - return 0; } @@ -493,6 +489,7 @@ static int decode_frame(FLACContext *s) static int flac_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt) { + AVFrame *frame = data; const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; FLACContext *s = avctx->priv_data; @@ -531,13 +528,13 @@ static int flac_decode_frame(AVCodecContext *avctx, void *data, bytes_read = (get_bits_count(&s->gb)+7)/8; /* get output buffer */ - s->frame.nb_samples = s->blocksize; - if ((ret = ff_get_buffer(avctx, &s->frame)) < 0) { + frame->nb_samples = s->blocksize; + if ((ret = ff_get_buffer(avctx, frame)) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return ret; } - s->dsp.decorrelate[s->ch_mode](s->frame.data, s->decoded, s->channels, + s->dsp.decorrelate[s->ch_mode](frame->data, s->decoded, s->channels, s->blocksize, s->sample_shift); if (bytes_read > buf_size) { @@ -549,8 +546,7 @@ static int flac_decode_frame(AVCodecContext *avctx, void *data, buf_size - bytes_read, buf_size); } - *got_frame_ptr = 1; - *(AVFrame *)data = s->frame; + *got_frame_ptr = 1; return bytes_read; } |