comparison libmpcodecs/ae_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 ed8f90096c65
children 0f1b5b68af32
comparison
equal deleted inserted replaced
25314:02e2e7a5599a 25315:dfa8a510c81c
6 #include <sys/types.h> 6 #include <sys/types.h>
7 #include "m_option.h" 7 #include "m_option.h"
8 #include "mp_msg.h" 8 #include "mp_msg.h"
9 #include "libmpdemux/aviheader.h" 9 #include "libmpdemux/aviheader.h"
10 #include "libaf/af_format.h" 10 #include "libaf/af_format.h"
11 #include "libaf/reorder_ch.h"
11 #include "libmpdemux/ms_hdr.h" 12 #include "libmpdemux/ms_hdr.h"
12 #include "stream/stream.h" 13 #include "stream/stream.h"
13 #include "libmpdemux/muxer.h" 14 #include "libmpdemux/muxer.h"
14 #include "ae_pcm.h" 15 #include "ae_pcm.h"
15 16
36 } 37 }
37 38
38 static int encode_pcm(audio_encoder_t *encoder, uint8_t *dest, void *src, int nsamples, int max_size) 39 static int encode_pcm(audio_encoder_t *encoder, uint8_t *dest, void *src, int nsamples, int max_size)
39 { 40 {
40 max_size = FFMIN(nsamples, max_size); 41 max_size = FFMIN(nsamples, max_size);
42 if (encoder->params.channels == 6 || encoder->params.channels == 5) {
43 max_size -= max_size % (encoder->params.channels * 2);
44 reorder_channel_copy_nch(src, AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT,
45 dest, AF_CHANNEL_LAYOUT_WAVEEX_DEFAULT,
46 encoder->params.channels,
47 max_size / 2, 2);
48 }
49 else
41 memcpy(dest, src, max_size); 50 memcpy(dest, src, max_size);
42 return max_size; 51 return max_size;
43 } 52 }
44 53
45 static int set_decoded_len(audio_encoder_t *encoder, int len) 54 static int set_decoded_len(audio_encoder_t *encoder, int len)