summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/ad_ffmpeg.c
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/ad_ffmpeg.c
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/ad_ffmpeg.c')
-rw-r--r--libmpcodecs/ad_ffmpeg.c20
1 files changed, 6 insertions, 14 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;