summaryrefslogtreecommitdiff
path: root/libavcodec/utils.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2012-09-28 20:46:20 +0200
committerAnton Khirnov <anton@khirnov.net>2012-09-29 09:25:40 +0200
commit12e1e834611afed8121ccc368a83e7eb5c564565 (patch)
tree66f087bfa19f9e5164ccd4a5038cfd60be174095 /libavcodec/utils.c
parent7d1d4469902bbbdcb225eedd64f84c884cffbc2d (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/utils.c')
-rw-r--r--libavcodec/utils.c13
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: