From: Tim Walker Date: Mon, 31 Dec 2012 14:33:26 +0000 (+0100) Subject: mlp_parser: account for AVCodecContext.request_channels when setting the channel... X-Git-Tag: android-x86-4.4-r1~364^2~2041 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=b0c7e3ffd09f68022429920da483ad7abed84aa1;p=android-x86%2Fexternal-ffmpeg.git mlp_parser: account for AVCodecContext.request_channels when setting the channel layout. Allows users to configure the output based on what's actually decoded, rather than the full native layout. Signed-off-by: Justin Ruggles --- diff --git a/libavcodec/mlp_parser.c b/libavcodec/mlp_parser.c index 31c79c9ca2..8c57840bd8 100644 --- a/libavcodec/mlp_parser.c +++ b/libavcodec/mlp_parser.c @@ -322,11 +322,23 @@ static int mlp_parse(AVCodecParserContext *s, if (mh.stream_type == 0xbb) { /* MLP stream */ - avctx->channels = mh.channels_mlp; - avctx->channel_layout = mh.channel_layout_mlp; + if (avctx->request_channels > 0 && avctx->request_channels <= 2 && + mh.num_substreams > 1) { + avctx->channels = 2; + avctx->channel_layout = AV_CH_LAYOUT_STEREO; + } else { + avctx->channels = mh.channels_mlp; + avctx->channel_layout = mh.channel_layout_mlp; + } } else { /* mh.stream_type == 0xba */ /* TrueHD stream */ - if (mh.channels_thd_stream2) { + if (avctx->request_channels > 0 && avctx->request_channels <= 2 && + mh.num_substreams > 1) { + avctx->channels = 2; + avctx->channel_layout = AV_CH_LAYOUT_STEREO; + } else if (mh.channels_thd_stream2 && + (avctx->request_channels <= 0 || + avctx->request_channels > mh.channels_thd_stream1)) { avctx->channels = mh.channels_thd_stream2; avctx->channel_layout = mh.channel_layout_thd_stream2; } else {