summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbugmen0t <@>2013-12-03 20:43:31 +0000
committerwm4 <wm4@nowhere>2013-12-04 00:07:40 +0100
commit7ee074813b98b7b862d45e7125dd0ec0f6d89afc (patch)
tree24e1813266c0136cb174fa5002312c9386e63b48
parent9fcf88e42b7e17e555157e2237b25089ba22c5e6 (diff)
downloadmpv-7ee074813b98b7b862d45e7125dd0ec0f6d89afc.tar.bz2
mpv-7ee074813b98b7b862d45e7125dd0ec0f6d89afc.tar.xz
ao_oss: when falling back from unknown prefer larger format
-rw-r--r--audio/out/ao_oss.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/audio/out/ao_oss.c b/audio/out/ao_oss.c
index a03c8e0339..3f37b34b60 100644
--- a/audio/out/ao_oss.c
+++ b/audio/out/ao_oss.c
@@ -299,12 +299,28 @@ ac3_retry:
if (oss_format == -1) {
MP_VERBOSE(ao, "Unknown/not supported internal format: %s\n",
af_fmt_to_str(ao->format));
+#if defined(AFMT_S32_LE) && defined(AFMT_S32_BE)
+#if BYTE_ORDER == BIG_ENDIAN
+ oss_format = AFMT_S32_BE;
+#else
+ oss_format = AFMT_S32_LE;
+#endif
+ ao->format = AF_FORMAT_S32;
+#elif defined(AFMT_S24_LE) && defined(AFMT_S24_BE)
+#if BYTE_ORDER == BIG_ENDIAN
+ oss_format = AFMT_S24_BE;
+#else
+ oss_format = AFMT_S24_LE;
+#endif
+ ao->format = AF_FORMAT_S24;
+#else
#if BYTE_ORDER == BIG_ENDIAN
oss_format = AFMT_S16_BE;
#else
oss_format = AFMT_S16_LE;
#endif
ao->format = AF_FORMAT_S16;
+#endif
}
if (ioctl(p->audio_fd, SNDCTL_DSP_SETFMT, &oss_format) < 0 ||
oss_format != format2oss(ao->format))