summaryrefslogtreecommitdiffstats
path: root/libao2
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-04-22 22:33:06 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-04-22 22:33:06 +0000
commitceda76523a167b9d47cdc32b1738fe848c257323 (patch)
tree8e582bf1f0dc89cad4abcf2e89088dc3b42a9d31 /libao2
parentb8f39a4f863e6da5eb7b98c5045f4ff4b82f1d88 (diff)
downloadmpv-ceda76523a167b9d47cdc32b1738fe848c257323.tar.bz2
mpv-ceda76523a167b9d47cdc32b1738fe848c257323.tar.xz
AFMT_AC3 autodetect/fallback to S16
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@5791 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libao2')
-rw-r--r--libao2/ao_alsa1x.c6
-rw-r--r--libao2/ao_alsa5.c6
-rw-r--r--libao2/ao_alsa9.c6
-rw-r--r--libao2/ao_nas.c6
-rw-r--r--libao2/ao_oss.c16
5 files changed, 35 insertions, 5 deletions
diff --git a/libao2/ao_alsa1x.c b/libao2/ao_alsa1x.c
index 0f35f2e819..f95d21a84b 100644
--- a/libao2/ao_alsa1x.c
+++ b/libao2/ao_alsa1x.c
@@ -125,9 +125,15 @@ static int init(int rate_hz, int channels, int format, int flags)
case AFMT_U16_BE:
alsa_format = SND_PCM_FORMAT_U16_BE;
break;
+#ifndef WORDS_BIGENDIAN
+ case AFMT_AC3:
+#endif
case AFMT_S16_LE:
alsa_format = SND_PCM_FORMAT_S16_LE;
break;
+#ifdef WORDS_BIGENDIAN
+ case AFMT_AC3:
+#endif
case AFMT_S16_BE:
alsa_format = SND_PCM_FORMAT_S16_BE;
break;
diff --git a/libao2/ao_alsa5.c b/libao2/ao_alsa5.c
index 211bf6a7c2..13653306fb 100644
--- a/libao2/ao_alsa5.c
+++ b/libao2/ao_alsa5.c
@@ -87,9 +87,15 @@ static int init(int rate_hz, int channels, int format, int flags)
case AFMT_U16_BE:
alsa_format.format = SND_PCM_SFMT_U16_BE;
break;
+#ifndef WORDS_BIGENDIAN
+ case AFMT_AC3:
+#endif
case AFMT_S16_LE:
alsa_format.format = SND_PCM_SFMT_S16_LE;
break;
+#ifdef WORDS_BIGENDIAN
+ case AFMT_AC3:
+#endif
case AFMT_S16_BE:
alsa_format.format = SND_PCM_SFMT_S16_BE;
break;
diff --git a/libao2/ao_alsa9.c b/libao2/ao_alsa9.c
index 0f35f2e819..f95d21a84b 100644
--- a/libao2/ao_alsa9.c
+++ b/libao2/ao_alsa9.c
@@ -125,9 +125,15 @@ static int init(int rate_hz, int channels, int format, int flags)
case AFMT_U16_BE:
alsa_format = SND_PCM_FORMAT_U16_BE;
break;
+#ifndef WORDS_BIGENDIAN
+ case AFMT_AC3:
+#endif
case AFMT_S16_LE:
alsa_format = SND_PCM_FORMAT_S16_LE;
break;
+#ifdef WORDS_BIGENDIAN
+ case AFMT_AC3:
+#endif
case AFMT_S16_BE:
alsa_format = SND_PCM_FORMAT_S16_BE;
break;
diff --git a/libao2/ao_nas.c b/libao2/ao_nas.c
index 7a651324f7..8118e6256d 100644
--- a/libao2/ao_nas.c
+++ b/libao2/ao_nas.c
@@ -291,7 +291,13 @@ static unsigned char nas_aformat_to_auformat(unsigned int format)
case AFMT_S8: return AuFormatLinearSigned8;
case AFMT_U16_LE: return AuFormatLinearUnsigned16LSB;
case AFMT_U16_BE: return AuFormatLinearUnsigned16MSB;
+#ifndef WORDS_BIGENDIAN
+ case AFMT_AC3:
+#endif
case AFMT_S16_LE: return AuFormatLinearSigned16LSB;
+#ifdef WORDS_BIGENDIAN
+ case AFMT_AC3:
+#endif
case AFMT_S16_BE: return AuFormatLinearSigned16MSB;
case AFMT_MU_LAW: return AuFormatULAW8;
default: return 0;
diff --git a/libao2/ao_oss.c b/libao2/ao_oss.c
index 1ac3b79a5c..17e6fc4fd5 100644
--- a/libao2/ao_oss.c
+++ b/libao2/ao_oss.c
@@ -123,12 +123,18 @@ static int init(int rate,int channels,int format,int flags){
ao_data.samplerate=rate;
ioctl (audio_fd, SNDCTL_DSP_SPEED, &ao_data.samplerate);
}
-
+
+ac3_retry:
ao_data.format=format;
- ioctl (audio_fd, SNDCTL_DSP_SETFMT, &ao_data.format);
- if(format == AFMT_AC3 && ao_data.format != AFMT_AC3) {
- printf("Can't set audio device %s to AC3 output\n", dsp);
- return 0;
+ if( ioctl(audio_fd, SNDCTL_DSP_SETFMT, &ao_data.format)<0 ||
+ ao_data.format != format) if(format == AFMT_AC3){
+ printf("Can't set audio device %s to AC3 output, trying S16...\n", dsp);
+#ifdef WORDS_BIGENDIAN
+ format=AFMT_S16_BE;
+#else
+ format=AFMT_S16_LE;
+#endif
+ goto ac3_retry;
}
printf("audio_setup: sample format: %s (requested: %s)\n",
audio_out_format_name(ao_data.format), audio_out_format_name(format));