Mercurial > mplayer.hg
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) |