diff options
author | Anton Khirnov <anton@khirnov.net> | 2012-09-28 22:46:20 +0400 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2012-09-29 11:25:40 +0400 |
commit | 12e1e834611afed8121ccc368a83e7eb5c564565 (patch) | |
tree | 66f087bfa19f9e5164ccd4a5038cfd60be174095 /libavcodec | |
parent | 7d1d4469902bbbdcb225eedd64f84c884cffbc2d (diff) |
lavc: set channel count from channel layout in avcodec_open2().
Some decoders (e.g. nellymoser) only set channel_layout and do not set
channel count.
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/utils.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/libavcodec/utils.c b/libavcodec/utils.c index c08bad5e02..7c02d332b9 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -856,10 +856,15 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code if (av_codec_is_decoder(avctx->codec)) { /* validate channel layout from the decoder */ - if (avctx->channel_layout && - av_get_channel_layout_nb_channels(avctx->channel_layout) != avctx->channels) { - av_log(avctx, AV_LOG_WARNING, "channel layout does not match number of channels\n"); - avctx->channel_layout = 0; + if (avctx->channel_layout) { + int channels = av_get_channel_layout_nb_channels(avctx->channel_layout); + if (!avctx->channels) + avctx->channels = channels; + else if (channels != avctx->channels) { + av_log(avctx, AV_LOG_WARNING, + "channel layout does not match number of channels\n"); + avctx->channel_layout = 0; + } } } end: |