shorten: use planar sample format

This commit is contained in:
Justin Ruggles 2012-08-28 14:02:41 -04:00
parent 8441909f49
commit 977eb7d567

View File

@ -112,7 +112,7 @@ static av_cold int shorten_decode_init(AVCodecContext * avctx)
{ {
ShortenContext *s = avctx->priv_data; ShortenContext *s = avctx->priv_data;
s->avctx = avctx; s->avctx = avctx;
avctx->sample_fmt = AV_SAMPLE_FMT_S16; avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
avcodec_get_frame_defaults(&s->frame); avcodec_get_frame_defaults(&s->frame);
avctx->coded_frame = &s->frame; avctx->coded_frame = &s->frame;
@ -259,13 +259,16 @@ static int decode_wave_header(AVCodecContext *avctx, const uint8_t *header,
return 0; return 0;
} }
static void interleave_buffer(int16_t *samples, int nchan, int blocksize, static void output_buffer(int16_t **samples, int nchan, int blocksize,
int32_t **buffer) int32_t **buffer)
{ {
int i, chan; int i, ch;
for (i=0; i<blocksize; i++) for (ch = 0; ch < nchan; ch++) {
for (chan=0; chan < nchan; chan++) int32_t *in = buffer[ch];
*samples++ = av_clip_int16(buffer[chan][i]); 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] = { static const int fixed_coeffs[3][3] = {
@ -583,8 +586,8 @@ static int shorten_decode_frame(AVCodecContext *avctx, void *data,
return ret; return ret;
} }
/* interleave output */ /* interleave output */
interleave_buffer((int16_t *)s->frame.data[0], s->channels, output_buffer((int16_t **)s->frame.extended_data, s->channels,
s->blocksize, s->decoded); s->blocksize, s->decoded);
*got_frame_ptr = 1; *got_frame_ptr = 1;
*(AVFrame *)data = s->frame; *(AVFrame *)data = s->frame;
@ -637,4 +640,6 @@ AVCodec ff_shorten_decoder = {
.decode = shorten_decode_frame, .decode = shorten_decode_frame,
.capabilities = CODEC_CAP_DELAY | CODEC_CAP_DR1, .capabilities = CODEC_CAP_DELAY | CODEC_CAP_DR1,
.long_name = NULL_IF_CONFIG_SMALL("Shorten"), .long_name = NULL_IF_CONFIG_SMALL("Shorten"),
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
AV_SAMPLE_FMT_NONE },
}; };