diff libmpcodecs/ad_faad.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 dac788e0857d
children a4c3eb7ef547
line wrap: on
line diff
--- a/libmpcodecs/ad_faad.c	Mon Dec 10 14:43:09 2007 +0000
+++ b/libmpcodecs/ad_faad.c	Mon Dec 10 16:53:30 2007 +0000
@@ -10,6 +10,7 @@
 
 #include "config.h"
 #include "ad_internal.h"
+#include "libaf/reorder_ch.h"
 
 static ad_info_t info = 
 {
@@ -277,6 +278,14 @@
       /* XXX: samples already multiplied by channels! */
       mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"FAAD: Successfully decoded frame (%ld Bytes)!\n",
       sh->samplesize*faac_finfo.samples);
+
+      if (sh->channels >= 5)
+        reorder_channel_copy_nch(faac_sample_buffer,
+                                 AF_CHANNEL_LAYOUT_AAC_DEFAULT,
+                                 buf+len, AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT,
+                                 sh->channels,
+                                 faac_finfo.samples, sh->samplesize);
+      else
       memcpy(buf+len,faac_sample_buffer, sh->samplesize*faac_finfo.samples);
       last_dec_len = sh->samplesize*faac_finfo.samples;
       len += last_dec_len;