summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
authortack <tack@b3059339-0415-0410-9bf9-f77b7e298cf2>2009-08-18 22:24:36 +0000
committertack <tack@b3059339-0415-0410-9bf9-f77b7e298cf2>2009-08-18 22:24:36 +0000
commitf89696a8e2225fb9e65e8b0699cf2ce632dcef2e (patch)
treec2b2e508a8ecf2ef8d5fedb9e364d0edfbc893a9 /libmpcodecs
parent3961e12fca2f1ec10c64e3ff298828feecca52c9 (diff)
downloadmpv-f89696a8e2225fb9e65e8b0699cf2ce632dcef2e.tar.bz2
mpv-f89696a8e2225fb9e65e8b0699cf2ce632dcef2e.tar.xz
Fix incorrect channel ordering for lavc audio codecs (specifically ffac3,
ffdca, ffflac, ffaac, fftruehd). In the process, adds support for 32-bit samples. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29533 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs')
-rw-r--r--libmpcodecs/ad_ffmpeg.c20
-rw-r--r--libmpcodecs/ae_lavc.c2
2 files changed, 7 insertions, 15 deletions
diff --git a/libmpcodecs/ad_ffmpeg.c b/libmpcodecs/ad_ffmpeg.c
index 770ff946e7..06a033a60f 100644
--- a/libmpcodecs/ad_ffmpeg.c
+++ b/libmpcodecs/ad_ffmpeg.c
@@ -174,27 +174,19 @@ static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int m
if(len2>0){
if (((AVCodecContext *)sh_audio->context)->channels >= 5) {
int src_ch_layout = AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT;
+ int samplesize = av_get_bits_per_sample_format(((AVCodecContext *)
+ sh_audio->context)->sample_fmt) / 8;
const char *codec=((AVCodecContext*)sh_audio->context)->codec->name;
- if (!strcasecmp(codec, "ac3")
- || !strcasecmp(codec, "eac3"))
- src_ch_layout = AF_CHANNEL_LAYOUT_LAVC_AC3_DEFAULT;
- else if (!strcasecmp(codec, "dca"))
- src_ch_layout = AF_CHANNEL_LAYOUT_LAVC_DCA_DEFAULT;
- else if (!strcasecmp(codec, "libfaad")
- || !strcasecmp(codec, "mpeg4aac"))
- src_ch_layout = AF_CHANNEL_LAYOUT_AAC_DEFAULT;
- else if (!strcasecmp(codec, "liba52"))
- src_ch_layout = AF_CHANNEL_LAYOUT_LAVC_LIBA52_DEFAULT;
+ if (!strcasecmp(codec, "aac"))
+ src_ch_layout = AF_CHANNEL_LAYOUT_LAVC_AAC_DEC_DEFAULT;
else if (!strcasecmp(codec, "vorbis"))
src_ch_layout = AF_CHANNEL_LAYOUT_VORBIS_DEFAULT;
- else if (!strcasecmp(codec, "flac"))
- src_ch_layout = AF_CHANNEL_LAYOUT_FLAC_DEFAULT;
else
- src_ch_layout = AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT;
+ src_ch_layout = AF_CHANNEL_LAYOUT_LAVC_DEFAULT;
reorder_channel_nch(buf, src_ch_layout,
AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT,
((AVCodecContext *)sh_audio->context)->channels,
- len2 / 2, 2);
+ len2 / samplesize, samplesize);
}
//len=len2;break;
if(len<0) len=len2; else len+=len2;
diff --git a/libmpcodecs/ae_lavc.c b/libmpcodecs/ae_lavc.c
index 781a100ff5..858123cee9 100644
--- a/libmpcodecs/ae_lavc.c
+++ b/libmpcodecs/ae_lavc.c
@@ -109,7 +109,7 @@ static int encode_lavc(audio_encoder_t *encoder, uint8_t *dest, void *src, int s
!strcmp(lavc_acodec->name,"libfaac"))) {
int isac3 = !strcmp(lavc_acodec->name,"ac3");
reorder_channel_nch(src, AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT,
- isac3 ? AF_CHANNEL_LAYOUT_LAVC_AC3_DEFAULT
+ isac3 ? AF_CHANNEL_LAYOUT_LAVC_DEFAULT
: AF_CHANNEL_LAYOUT_AAC_DEFAULT,
encoder->params.channels,
size / 2, 2);