summaryrefslogtreecommitdiffstats
path: root/libao2/ao_oss.c
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-01-25 15:04:07 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-01-25 15:07:30 +0200
commit69fe2522f8c2a04eda112eee6319ca2e85d7038b (patch)
tree83a8b19997e621309344ca1f3997a48886ef0944 /libao2/ao_oss.c
parent9436e0452fad48e671d7320cb18c588655f3d230 (diff)
parent1cda8b002fb19c3da14760fe1f9fc76992a05c29 (diff)
downloadmpv-69fe2522f8c2a04eda112eee6319ca2e85d7038b.tar.bz2
mpv-69fe2522f8c2a04eda112eee6319ca2e85d7038b.tar.xz
Merge svn changes up to r30301
Diffstat (limited to 'libao2/ao_oss.c')
-rw-r--r--libao2/ao_oss.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/libao2/ao_oss.c b/libao2/ao_oss.c
index 6872b15946..58d3b233cc 100644
--- a/libao2/ao_oss.c
+++ b/libao2/ao_oss.c
@@ -96,7 +96,7 @@ static int format2oss(int format)
case AF_FORMAT_MPEG2: return AFMT_MPEG;
#endif
#ifdef AFMT_AC3
- case AF_FORMAT_AC3: return AFMT_AC3;
+ case AF_FORMAT_AC3_NE: return AFMT_AC3;
#endif
}
mp_msg(MSGT_AO, MSGL_V, "OSS: Unknown/not supported internal format: %s\n", af_fmt2str_short(format));
@@ -139,7 +139,7 @@ static int oss2format(int format)
case AFMT_MPEG: return AF_FORMAT_MPEG2;
#endif
#ifdef AFMT_AC3
- case AFMT_AC3: return AF_FORMAT_AC3;
+ case AFMT_AC3: return AF_FORMAT_AC3_NE;
#endif
}
mp_tmsg(MSGT_GLOBAL,MSGL_ERR,"[AO OSS] Unknown/Unsupported OSS format: %x.\n", format);
@@ -208,7 +208,7 @@ static int control(int cmd,void *arg){
return CONTROL_OK;
#endif
- if(ao_data.format == AF_FORMAT_AC3)
+ if(AF_FORMAT_IS_AC3(ao_data.format))
return CONTROL_TRUE;
if ((fd = open(oss_mixer_device, O_RDONLY)) > 0)
@@ -326,12 +326,14 @@ static int init(int rate,int channels,int format,int flags){
fcntl(audio_fd, F_SETFD, FD_CLOEXEC);
#endif
- if(format == AF_FORMAT_AC3) {
+ if(AF_FORMAT_IS_AC3(format)) {
ao_data.samplerate=rate;
ioctl (audio_fd, SNDCTL_DSP_SPEED, &ao_data.samplerate);
}
ac3_retry:
+ if (AF_FORMAT_IS_AC3(format))
+ format = AF_FORMAT_AC3_NE;
ao_data.format=format;
oss_format=format2oss(format);
if (oss_format == -1) {
@@ -361,7 +363,7 @@ ac3_retry:
af_fmt2str_short(ao_data.format), af_fmt2str_short(format));
ao_data.channels = channels;
- if(format != AF_FORMAT_AC3) {
+ if(!AF_FORMAT_IS_AC3(format)) {
// We only use SNDCTL_DSP_CHANNELS for >2 channels, in case some drivers don't have it
if (ao_data.channels > 2) {
if ( ioctl(audio_fd, SNDCTL_DSP_CHANNELS, &ao_data.channels) == -1 ||
@@ -476,10 +478,10 @@ static void reset(void){
#endif
oss_format = format2oss(ao_data.format);
- if(ao_data.format == AF_FORMAT_AC3)
+ if(AF_FORMAT_IS_AC3(ao_data.format))
ioctl (audio_fd, SNDCTL_DSP_SPEED, &ao_data.samplerate);
ioctl (audio_fd, SNDCTL_DSP_SETFMT, &oss_format);
- if(ao_data.format != AF_FORMAT_AC3) {
+ if(!AF_FORMAT_IS_AC3(ao_data.format)) {
if (ao_data.channels > 2)
ioctl (audio_fd, SNDCTL_DSP_CHANNELS, &ao_data.channels);
else {