diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2012-12-16 11:02:39 -0500 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2012-12-22 01:35:28 -0500 |
commit | aef5150719f03ce87e67c17d2006e24d8961aa17 (patch) | |
tree | 8ac0aef0807bf331b17647f17dae5cfe864b4e0f /libavcodec | |
parent | 9378be9f3252bfa6970405c235c776df3f75533a (diff) | |
download | ffmpeg-aef5150719f03ce87e67c17d2006e24d8961aa17.tar.gz |
flac: only set channel layout if not previously set or on channel count change
Fixes Bug 402
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/flac_parser.c | 7 | ||||
-rw-r--r-- | libavcodec/flacdec.c | 3 |
2 files changed, 7 insertions, 3 deletions
diff --git a/libavcodec/flac_parser.c b/libavcodec/flac_parser.c index f0a37f310e..3d8e17f995 100644 --- a/libavcodec/flac_parser.c +++ b/libavcodec/flac_parser.c @@ -457,9 +457,12 @@ static int get_best_header(FLACParseContext* fpc, const uint8_t **poutbuf, check_header_mismatch(fpc, header, child, 0); } + if (header->fi.channels != fpc->avctx->channels || + (!fpc->avctx->channel_layout && header->fi.channels <= 6)) { + fpc->avctx->channels = header->fi.channels; + ff_flac_set_channel_layout(fpc->avctx); + } fpc->avctx->sample_rate = header->fi.samplerate; - fpc->avctx->channels = header->fi.channels; - ff_flac_set_channel_layout(fpc->avctx); fpc->pc->duration = header->fi.blocksize; *poutbuf = flac_fifo_read_wrap(fpc, header->offset, *poutbuf_size, &fpc->wrap_buf, diff --git a/libavcodec/flacdec.c b/libavcodec/flacdec.c index fd47929c50..51fd19628c 100644 --- a/libavcodec/flacdec.c +++ b/libavcodec/flacdec.c @@ -426,7 +426,8 @@ static int decode_frame(FLACContext *s) return ret; } s->channels = s->avctx->channels = fi.channels; - ff_flac_set_channel_layout(s->avctx); + if (!s->avctx->channel_layout && s->channels <= 6) + ff_flac_set_channel_layout(s->avctx); s->ch_mode = fi.ch_mode; if (!s->bps && !fi.bps) { |