summaryrefslogtreecommitdiff
path: root/libavcodec/shorten.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2012-08-28 14:02:41 -0400
committerJustin Ruggles <justin.ruggles@gmail.com>2012-10-14 16:48:22 -0400
commit977eb7d567f6e3f7562a2c5682d346372ba105b4 (patch)
tree492700741cbfe10931ebc276d327aeeb486e1be9 /libavcodec/shorten.c
parent8441909f49d1cb172c714b4a6b9527aefb82b3fe (diff)
shorten: use planar sample format
Diffstat (limited to 'libavcodec/shorten.c')
-rw-r--r--libavcodec/shorten.c23
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 },
};