@ -328,11 +328,23 @@ static int mlp_parse(AVCodecParserContext *s,
if ( ! avctx - > channels | | ! avctx - > channel_layout ) {
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 {