s->frame_size = len;
/* update codec info */
avctx->sample_rate = sample_rate;
- /* set channels,except if the user explicitly requests 1 or 2 channels, XXX/FIXME this is a bit ugly */
- if(avctx->codec_id == CODEC_ID_AC3){
- if(avctx->channels!=1 && avctx->channels!=2){
- avctx->channels = channels;
- }
+ /* allow downmixing to stereo (or mono for AC3) */
+ if(avctx->request_channels > 0 &&
+ avctx->request_channels < channels &&
+ (avctx->request_channels <= 2 ||
+ (avctx->request_channels == 1 &&
+ avctx->codec_id == CODEC_ID_AC3))) {
+ avctx->channels = avctx->request_channels;
} else {
avctx->channels = channels;
}