Mercurial > mplayer.hg
comparison libmpcodecs/ad_pcm.c @ 25315:dfa8a510c81c
Fix all current known multi-channel wrong order problems by adding
common functions for channel reordering.
This fixes these modules by adding channel reordering code for 5.0/5.1 audio:
ao: pcm
ad: dmo, faad, ffmpeg(ac3, dca, libfaad, liba52), pcm
ae: faac, lavc(ac3, libfaac), pcm
author | ulion |
---|---|
date | Mon, 10 Dec 2007 16:53:30 +0000 |
parents | 666efb20e7d5 |
children | 0f1b5b68af32 |
comparison
equal
deleted
inserted
replaced
25314:02e2e7a5599a | 25315:dfa8a510c81c |
---|---|
3 #include <unistd.h> | 3 #include <unistd.h> |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "ad_internal.h" | 6 #include "ad_internal.h" |
7 #include "libaf/af_format.h" | 7 #include "libaf/af_format.h" |
8 #include "libaf/reorder_ch.h" | |
8 | 9 |
9 static ad_info_t info = | 10 static ad_info_t info = |
10 { | 11 { |
11 "Uncompressed PCM audio decoder", | 12 "Uncompressed PCM audio decoder", |
12 "pcm", | 13 "pcm", |
124 if (len > maxlen) | 125 if (len > maxlen) |
125 // if someone needs hundreds of channels adjust audio_out_minsize | 126 // if someone needs hundreds of channels adjust audio_out_minsize |
126 // based on channels in preinit() | 127 // based on channels in preinit() |
127 return -1; | 128 return -1; |
128 len=demux_read_data(sh_audio->ds,buf,len); | 129 len=demux_read_data(sh_audio->ds,buf,len); |
130 if (len > 0 && sh_audio->channels >= 5) { | |
131 reorder_channel_nch(buf, AF_CHANNEL_LAYOUT_WAVEEX_DEFAULT, | |
132 AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT, | |
133 sh_audio->channels, | |
134 len / sh_audio->samplesize, sh_audio->samplesize); | |
135 } | |
129 return len; | 136 return len; |
130 } | 137 } |