diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2012-08-28 14:02:41 -0400 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2012-10-14 16:48:22 -0400 |
commit | 977eb7d567f6e3f7562a2c5682d346372ba105b4 (patch) | |
tree | 492700741cbfe10931ebc276d327aeeb486e1be9 | |
parent | 8441909f49d1cb172c714b4a6b9527aefb82b3fe (diff) | |
download | ffmpeg-977eb7d567f6e3f7562a2c5682d346372ba105b4.tar.gz |
shorten: use planar sample format
-rw-r--r-- | libavcodec/shorten.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/libavcodec/shorten.c b/libavcodec/shorten.c index fb48070eb6..1664a907ae 100644 --- a/libavcodec/shorten.c +++ b/libavcodec/shorten.c @@ -112,7 +112,7 @@ static av_cold int shorten_decode_init(AVCodecContext * avctx) { ShortenContext *s = avctx->priv_data; s->avctx = avctx; - avctx->sample_fmt = AV_SAMPLE_FMT_S16; + avctx->sample_fmt = AV_SAMPLE_FMT_S16P; avcodec_get_frame_defaults(&s->frame); avctx->coded_frame = &s->frame; @@ -259,13 +259,16 @@ static int decode_wave_header(AVCodecContext *avctx, const uint8_t *header, return 0; } -static void interleave_buffer(int16_t *samples, int nchan, int blocksize, - int32_t **buffer) +static void output_buffer(int16_t **samples, int nchan, int blocksize, + int32_t **buffer) { - int i, chan; - for (i=0; i<blocksize; i++) - for (chan=0; chan < nchan; chan++) - *samples++ = av_clip_int16(buffer[chan][i]); + int i, ch; + for (ch = 0; ch < nchan; ch++) { + int32_t *in = buffer[ch]; + int16_t *out = samples[ch]; + for (i = 0; i < blocksize; i++) + out[i] = av_clip_int16(in[i]); + } } static const int fixed_coeffs[3][3] = { @@ -583,8 +586,8 @@ static int shorten_decode_frame(AVCodecContext *avctx, void *data, return ret; } /* interleave output */ - interleave_buffer((int16_t *)s->frame.data[0], s->channels, - s->blocksize, s->decoded); + output_buffer((int16_t **)s->frame.extended_data, s->channels, + s->blocksize, s->decoded); *got_frame_ptr = 1; *(AVFrame *)data = s->frame; @@ -637,4 +640,6 @@ AVCodec ff_shorten_decoder = { .decode = shorten_decode_frame, .capabilities = CODEC_CAP_DELAY | CODEC_CAP_DR1, .long_name = NULL_IF_CONFIG_SMALL("Shorten"), + .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, + AV_SAMPLE_FMT_NONE }, }; |