diff options
author | ulion <ulion@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-12-10 16:53:30 +0000 |
---|---|---|
committer | ulion <ulion@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-12-10 16:53:30 +0000 |
commit | 1ed6e96cfba3c822d333f58c3181d18e0de95d14 (patch) | |
tree | c6162cae9d8a01ddc7bd22931817cd118beffbad /libao2 | |
parent | 24dafeee09a6e724dadf0bf904df1b911020154c (diff) | |
download | mpv-1ed6e96cfba3c822d333f58c3181d18e0de95d14.tar.bz2 mpv-1ed6e96cfba3c822d333f58c3181d18e0de95d14.tar.xz |
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
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25343 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libao2')
-rw-r--r-- | libao2/ao_pcm.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/libao2/ao_pcm.c b/libao2/ao_pcm.c index f3c4f9dbab..7182630fe2 100644 --- a/libao2/ao_pcm.c +++ b/libao2/ao_pcm.c @@ -8,6 +8,7 @@ #include "mpbswap.h" #include "subopt-helper.h" #include "libaf/af_format.h" +#include "libaf/reorder_ch.h" #include "audio_out.h" #include "audio_out_internal.h" #include "mp_msg.h" @@ -200,6 +201,15 @@ static int play(void* data,int len,int flags){ } #endif + if (ao_data.channels == 6 || ao_data.channels == 5) { + int frame_size = le2me_16(wavhdr.bits) / 8; + len -= len % (frame_size * ao_data.channels); + reorder_channel_nch(data, AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT, + AF_CHANNEL_LAYOUT_WAVEEX_DEFAULT, + ao_data.channels, + len / frame_size, frame_size); + } + //printf("PCM: Writing chunk!\n"); fwrite(data,len,1,fp); |