annotate libao2/ao_oss.c @ 9593:e9a2af584986

Add the new -vf option wich is the same as vop in reverse order. Syntax is we decided, so you can give the nomes or not with both vop and vf. vf take precedence over vop.
author albeu
date Sat, 15 Mar 2003 18:01:02 +0000
parents 20793317e5ff
children 12b1790038b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
1 #include <stdio.h>
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
2 #include <stdlib.h>
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
3
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
4 #include <sys/ioctl.h>
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
5 #include <unistd.h>
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
6 #include <sys/time.h>
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
7 #include <sys/types.h>
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
8 #include <sys/stat.h>
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
9 #include <fcntl.h>
5204
6bbf3271a694 non-blocking open - patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4803
diff changeset
10 #include <errno.h>
6bbf3271a694 non-blocking open - patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4803
diff changeset
11 #include <string.h>
1532
cb9bc07f3d4c AFMT_AC3 fixed
arpi
parents: 1528
diff changeset
12 //#include <sys/soundcard.h>
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
13
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
14 #include "../config.h"
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
15 #include "../mp_msg.h"
4788
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
16 #include "../mixer.h"
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
17
1532
cb9bc07f3d4c AFMT_AC3 fixed
arpi
parents: 1528
diff changeset
18 #include "afmt.h"
cb9bc07f3d4c AFMT_AC3 fixed
arpi
parents: 1528
diff changeset
19
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
20 #include "audio_out.h"
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
21 #include "audio_out_internal.h"
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
22
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
23 static ao_info_t info =
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
24 {
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
25 "OSS/ioctl audio output",
956
a6cecd9a1bad '-ao' switch (including '-ao help'), fixing Arpi's bug (short name 'null' for both of oss and null driver ;)
lgb
parents: 954
diff changeset
26 "oss",
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
27 "A'rpi",
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
28 ""
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
29 };
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
30
3181
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
31 /* Support for >2 output channels added 2001-11-25 - Steve Davies <steve@daviesfam.org> */
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
32
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
33 LIBAO_EXTERN(oss)
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
34
4803
5b4fd881200a using PATH_DEV_*
alex
parents: 4788
diff changeset
35 static char *dsp=PATH_DEV_DSP;
1020
72cacd3b8f30 Solaris 8 support - patch by Marcus Comstedt <marcus@idonex.se>
arpi_esp
parents: 956
diff changeset
36 static audio_buf_info zz;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
37 static int audio_fd=-1;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
38
4803
5b4fd881200a using PATH_DEV_*
alex
parents: 4788
diff changeset
39 char *oss_mixer_device = PATH_DEV_MIXER;
1191
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
40
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
41 // to set/get/query special features/parameters
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
42 static int control(int cmd,int arg){
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
43 switch(cmd){
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
44 case AOCONTROL_SET_DEVICE:
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
45 dsp=(char*)arg;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
46 return CONTROL_OK;
6795
776b686069af - add some control (ao_oss, pl_extrastereo)
pontscho
parents: 6588
diff changeset
47 case AOCONTROL_GET_DEVICE:
776b686069af - add some control (ao_oss, pl_extrastereo)
pontscho
parents: 6588
diff changeset
48 (char*)arg=dsp;
776b686069af - add some control (ao_oss, pl_extrastereo)
pontscho
parents: 6588
diff changeset
49 return CONTROL_OK;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
50 case AOCONTROL_QUERY_FORMAT:
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
51 return CONTROL_TRUE;
1191
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
52 case AOCONTROL_GET_VOLUME:
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
53 case AOCONTROL_SET_VOLUME:
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
54 {
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
55 ao_control_vol_t *vol = (ao_control_vol_t *)arg;
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7118
diff changeset
56 int fd, v, devs;
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1456
diff changeset
57
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
58 if(ao_data.format == AFMT_AC3)
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1456
diff changeset
59 return CONTROL_TRUE;
1191
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
60
4788
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
61 if ((fd = open(oss_mixer_device, O_RDONLY)) > 0)
1191
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
62 {
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
63 ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devs);
4788
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
64 if (devs & SOUND_MASK_PCM)
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
65 {
1191
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
66 if (cmd == AOCONTROL_GET_VOLUME)
4788
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
67 {
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
68 ioctl(fd, SOUND_MIXER_READ_PCM, &v);
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
69 vol->right = (v & 0xFF00) >> 8;
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
70 vol->left = v & 0x00FF;
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
71 }
1191
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
72 else
4788
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
73 {
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
74 v = ((int)vol->right << 8) | (int)vol->left;
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
75 ioctl(fd, SOUND_MIXER_WRITE_PCM, &v);
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
76 }
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
77 }
1191
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
78 else
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
79 {
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
80 close(fd);
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
81 return CONTROL_ERROR;
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
82 }
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
83 close(fd);
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
84 return CONTROL_OK;
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
85 }
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
86 }
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
87 return CONTROL_ERROR;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
88 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
89 return CONTROL_UNKNOWN;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
90 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
91
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
92 // open & setup audio device
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
93 // return: 1=success 0=fail
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
94 static int init(int rate,int channels,int format,int flags){
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
95
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
96 mp_msg(MSGT_AO,MSGL_V,"ao2: %d Hz %d chans %s\n",rate,channels,
3181
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
97 audio_out_format_name(format));
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
98
1191
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
99 if (ao_subdevice)
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
100 dsp = ao_subdevice;
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
101
4788
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
102 if(mixer_device)
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
103 oss_mixer_device=mixer_device;
d678ce495a75 Moved HW dependent mixer stuff to libao and removed master switch
anders
parents: 4184
diff changeset
104
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
105 mp_msg(MSGT_AO,MSGL_V,"audio_setup: using '%s' dsp device\n", dsp);
1191
f9a46e7843ee ao_subdevice support
al3x
parents: 1079
diff changeset
106
5907
d8c34a35ccb9 nonblock open is not legal for OSS (see OSS api docs), and causes problems on freebsd (and maybe other OSs)
arpi
parents: 5872
diff changeset
107 #ifdef __linux__
5204
6bbf3271a694 non-blocking open - patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4803
diff changeset
108 audio_fd=open(dsp, O_WRONLY | O_NONBLOCK);
5907
d8c34a35ccb9 nonblock open is not legal for OSS (see OSS api docs), and causes problems on freebsd (and maybe other OSs)
arpi
parents: 5872
diff changeset
109 #else
d8c34a35ccb9 nonblock open is not legal for OSS (see OSS api docs), and causes problems on freebsd (and maybe other OSs)
arpi
parents: 5872
diff changeset
110 audio_fd=open(dsp, O_WRONLY);
d8c34a35ccb9 nonblock open is not legal for OSS (see OSS api docs), and causes problems on freebsd (and maybe other OSs)
arpi
parents: 5872
diff changeset
111 #endif
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
112 if(audio_fd<0){
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
113 mp_msg(MSGT_AO,MSGL_ERR,"audio_setup: Can't open audio device %s: %s\n", dsp, strerror(errno));
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
114 return 0;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
115 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
116
5907
d8c34a35ccb9 nonblock open is not legal for OSS (see OSS api docs), and causes problems on freebsd (and maybe other OSs)
arpi
parents: 5872
diff changeset
117 #ifdef __linux__
5204
6bbf3271a694 non-blocking open - patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4803
diff changeset
118 /* Remove the non-blocking flag */
6bbf3271a694 non-blocking open - patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4803
diff changeset
119 if(fcntl(audio_fd, F_SETFL, 0) < 0) {
8304
2dcdd2ae333f 1l, opposite meaning of what's intended!
rfelker
parents: 8303
diff changeset
120 mp_msg(MSGT_AO,MSGL_ERR,"audio_setup: Can't make filedescriptor blocking: %s\n", strerror(errno));
5204
6bbf3271a694 non-blocking open - patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4803
diff changeset
121 return 0;
6bbf3271a694 non-blocking open - patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4803
diff changeset
122 }
5907
d8c34a35ccb9 nonblock open is not legal for OSS (see OSS api docs), and causes problems on freebsd (and maybe other OSs)
arpi
parents: 5872
diff changeset
123 #endif
8303
322f1a91a5e7 avoid giving a /dev/dsp fd to child processes!!
rfelker
parents: 8027
diff changeset
124
322f1a91a5e7 avoid giving a /dev/dsp fd to child processes!!
rfelker
parents: 8027
diff changeset
125 #if defined(FD_CLOEXEC) && defined(F_SETFD)
322f1a91a5e7 avoid giving a /dev/dsp fd to child processes!!
rfelker
parents: 8027
diff changeset
126 fcntl(audio_fd, F_SETFD, FD_CLOEXEC);
322f1a91a5e7 avoid giving a /dev/dsp fd to child processes!!
rfelker
parents: 8027
diff changeset
127 #endif
5204
6bbf3271a694 non-blocking open - patch by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 4803
diff changeset
128
4184
f648f699eda6 hwac3 fix for cmedia 8738 by Hans-Peter Raschke <Hans-Peter.Raschke@wintermann-datenservice.de>
arpi
parents: 3455
diff changeset
129 if(format == AFMT_AC3) {
f648f699eda6 hwac3 fix for cmedia 8738 by Hans-Peter Raschke <Hans-Peter.Raschke@wintermann-datenservice.de>
arpi
parents: 3455
diff changeset
130 ao_data.samplerate=rate;
f648f699eda6 hwac3 fix for cmedia 8738 by Hans-Peter Raschke <Hans-Peter.Raschke@wintermann-datenservice.de>
arpi
parents: 3455
diff changeset
131 ioctl (audio_fd, SNDCTL_DSP_SPEED, &ao_data.samplerate);
f648f699eda6 hwac3 fix for cmedia 8738 by Hans-Peter Raschke <Hans-Peter.Raschke@wintermann-datenservice.de>
arpi
parents: 3455
diff changeset
132 }
5790
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 5204
diff changeset
133
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 5204
diff changeset
134 ac3_retry:
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
135 ao_data.format=format;
5790
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 5204
diff changeset
136 if( ioctl(audio_fd, SNDCTL_DSP_SETFMT, &ao_data.format)<0 ||
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 5204
diff changeset
137 ao_data.format != format) if(format == AFMT_AC3){
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
138 mp_msg(MSGT_AO,MSGL_WARN,"Can't set audio device %s to AC3 output, trying S16...\n", dsp);
5790
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 5204
diff changeset
139 #ifdef WORDS_BIGENDIAN
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 5204
diff changeset
140 format=AFMT_S16_BE;
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 5204
diff changeset
141 #else
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 5204
diff changeset
142 format=AFMT_S16_LE;
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 5204
diff changeset
143 #endif
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 5204
diff changeset
144 goto ac3_retry;
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1456
diff changeset
145 }
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
146 mp_msg(MSGT_AO,MSGL_V,"audio_setup: sample format: %s (requested: %s)\n",
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
147 audio_out_format_name(ao_data.format), audio_out_format_name(format));
7668
76bd62c375e8 remove nonsense warnings now that libaf is used
rfelker
parents: 7472
diff changeset
148 #if 0
6899
4a45ce284efc format incompatibility warning
arpi
parents: 6795
diff changeset
149 if(ao_data.format!=format)
4a45ce284efc format incompatibility warning
arpi
parents: 6795
diff changeset
150 mp_msg(MSGT_AO,MSGL_WARN,"WARNING! Your soundcard does NOT support %s sample format! Broken audio or bad playback speed are possible! Try with '-aop list=format'\n",audio_out_format_name(format));
7668
76bd62c375e8 remove nonsense warnings now that libaf is used
rfelker
parents: 7472
diff changeset
151 #endif
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
152
8848
arpi
parents: 8603
diff changeset
153 ao_data.channels = channels;
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1456
diff changeset
154 if(format != AFMT_AC3) {
3181
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
155 // We only use SNDCTL_DSP_CHANNELS for >2 channels, in case some drivers don't have it
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
156 if (ao_data.channels > 2) {
3319
66134af21278 fixed to check that SNDCTL_DSP_CHANNELS actually grants the requested number of channels
steve
parents: 3181
diff changeset
157 if ( ioctl(audio_fd, SNDCTL_DSP_CHANNELS, &ao_data.channels) == -1 ||
66134af21278 fixed to check that SNDCTL_DSP_CHANNELS actually grants the requested number of channels
steve
parents: 3181
diff changeset
158 ao_data.channels != channels ) {
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
159 mp_msg(MSGT_AO,MSGL_ERR,"audio_setup: Failed to set audio device to %d channels\n", channels);
3181
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
160 return 0;
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
161 }
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
162 }
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
163 else {
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
164 int c = ao_data.channels-1;
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
165 if (ioctl (audio_fd, SNDCTL_DSP_STEREO, &c) == -1) {
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
166 mp_msg(MSGT_AO,MSGL_ERR,"audio_setup: Failed to set audio device to %d channels\n", ao_data.channels);
3181
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
167 return 0;
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
168 }
9141
20793317e5ff nice 10l bug, found by Balatoni Denes <pnis@coder.hu>
arpi
parents: 8848
diff changeset
169 ao_data.channels=c+1;
3181
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
170 }
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
171 mp_msg(MSGT_AO,MSGL_V,"audio_setup: using %d channels (requested: %d)\n", ao_data.channels, channels);
3181
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
172 // set rate
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
173 ao_data.samplerate=rate;
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
174 ioctl (audio_fd, SNDCTL_DSP_SPEED, &ao_data.samplerate);
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
175 mp_msg(MSGT_AO,MSGL_V,"audio_setup: using %d Hz samplerate (requested: %d)\n",ao_data.samplerate,rate);
7668
76bd62c375e8 remove nonsense warnings now that libaf is used
rfelker
parents: 7472
diff changeset
176 #if 0
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
177 if(ao_data.samplerate!=rate)
6588
12826366a806 more informal warning and also fixed a 10l bug. Patch by tibcu
alex
parents: 6296
diff changeset
178 mp_msg(MSGT_AO,MSGL_WARN,"WARNING! Your soundcard does NOT support %d Hz samplerate! A-V sync problems or wrong speed are possible! Try with '-aop list=resample:fout=%d'\n",rate,ao_data.samplerate);
7668
76bd62c375e8 remove nonsense warnings now that libaf is used
rfelker
parents: 7472
diff changeset
179 #endif
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1456
diff changeset
180 }
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
181
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
182 if(ioctl(audio_fd, SNDCTL_DSP_GETOSPACE, &zz)==-1){
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
183 int r=0;
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
184 mp_msg(MSGT_AO,MSGL_WARN,"audio_setup: driver doesn't support SNDCTL_DSP_GETOSPACE :-(\n");
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
185 if(ioctl(audio_fd, SNDCTL_DSP_GETBLKSIZE, &r)==-1){
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
186 mp_msg(MSGT_AO,MSGL_V,"audio_setup: %d bytes/frag (config.h)\n",ao_data.outburst);
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
187 } else {
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
188 ao_data.outburst=r;
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
189 mp_msg(MSGT_AO,MSGL_V,"audio_setup: %d bytes/frag (GETBLKSIZE)\n",ao_data.outburst);
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
190 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
191 } else {
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
192 mp_msg(MSGT_AO,MSGL_V,"audio_setup: frags: %3d/%d (%d bytes/frag) free: %6d\n",
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
193 zz.fragments, zz.fragstotal, zz.fragsize, zz.bytes);
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
194 if(ao_data.buffersize==-1) ao_data.buffersize=zz.bytes;
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
195 ao_data.outburst=zz.fragsize;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
196 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
197
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
198 if(ao_data.buffersize==-1){
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
199 // Measuring buffer size:
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
200 void* data;
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
201 ao_data.buffersize=0;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
202 #ifdef HAVE_AUDIO_SELECT
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
203 data=malloc(ao_data.outburst); memset(data,0,ao_data.outburst);
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
204 while(ao_data.buffersize<0x40000){
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
205 fd_set rfds;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
206 struct timeval tv;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
207 FD_ZERO(&rfds); FD_SET(audio_fd,&rfds);
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
208 tv.tv_sec=0; tv.tv_usec = 0;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
209 if(!select(audio_fd+1, NULL, &rfds, NULL, &tv)) break;
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
210 write(audio_fd,data,ao_data.outburst);
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
211 ao_data.buffersize+=ao_data.outburst;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
212 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
213 free(data);
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
214 if(ao_data.buffersize==0){
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
215 mp_msg(MSGT_AO,MSGL_ERR,"\n *** Your audio driver DOES NOT support select() ***\n"
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
216 "Recompile mplayer with #undef HAVE_AUDIO_SELECT in config.h !\n\n");
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
217 return 0;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
218 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
219 #endif
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
220 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
221
8603
30bef3c97b8b ao_oss was not using the channel & format returned by the soundcard
arpi
parents: 8304
diff changeset
222 ao_data.bps=ao_data.channels;
30bef3c97b8b ao_oss was not using the channel & format returned by the soundcard
arpi
parents: 8304
diff changeset
223 if(ao_data.format != AFMT_U8 && ao_data.format != AFMT_S8)
30bef3c97b8b ao_oss was not using the channel & format returned by the soundcard
arpi
parents: 8304
diff changeset
224 ao_data.bps*=2;
30bef3c97b8b ao_oss was not using the channel & format returned by the soundcard
arpi
parents: 8304
diff changeset
225
6075
0b3b6d03779c fix for L<->R swap with 6ch playback - based on patch by Eric Lammerts <eric@lammerts.org>
arpi
parents: 5907
diff changeset
226 ao_data.outburst-=ao_data.outburst % ao_data.bps; // round down
8603
30bef3c97b8b ao_oss was not using the channel & format returned by the soundcard
arpi
parents: 8304
diff changeset
227 ao_data.bps*=ao_data.samplerate;
6075
0b3b6d03779c fix for L<->R swap with 6ch playback - based on patch by Eric Lammerts <eric@lammerts.org>
arpi
parents: 5907
diff changeset
228
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
229 return 1;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
230 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
231
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
232 // close audio device
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
233 static void uninit(){
7118
4332922afec4 release /dev/dsp on pause patch by Eric Lammerts <eric@lammerts.org> (and D Richard Felker III <dalias@aerifal.cx>)
alex
parents: 6899
diff changeset
234 if(audio_fd == -1) return;
1020
72cacd3b8f30 Solaris 8 support - patch by Marcus Comstedt <marcus@idonex.se>
arpi_esp
parents: 956
diff changeset
235 #ifdef SNDCTL_DSP_RESET
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
236 ioctl(audio_fd, SNDCTL_DSP_RESET, NULL);
1020
72cacd3b8f30 Solaris 8 support - patch by Marcus Comstedt <marcus@idonex.se>
arpi_esp
parents: 956
diff changeset
237 #endif
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
238 close(audio_fd);
7118
4332922afec4 release /dev/dsp on pause patch by Eric Lammerts <eric@lammerts.org> (and D Richard Felker III <dalias@aerifal.cx>)
alex
parents: 6899
diff changeset
239 audio_fd = -1;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
240 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
241
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
242 // stop playing and empty buffers (for seeking/pause)
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
243 static void reset(){
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
244 uninit();
5907
d8c34a35ccb9 nonblock open is not legal for OSS (see OSS api docs), and causes problems on freebsd (and maybe other OSs)
arpi
parents: 5872
diff changeset
245 audio_fd=open(dsp, O_WRONLY);
d8c34a35ccb9 nonblock open is not legal for OSS (see OSS api docs), and causes problems on freebsd (and maybe other OSs)
arpi
parents: 5872
diff changeset
246 if(audio_fd < 0){
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6138
diff changeset
247 mp_msg(MSGT_AO,MSGL_ERR,"\nFatal error: *** CANNOT RE-OPEN / RESET AUDIO DEVICE *** %s\n", strerror(errno));
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
248 return;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
249 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
250
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
251 ioctl (audio_fd, SNDCTL_DSP_SETFMT, &ao_data.format);
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
252 if(ao_data.format != AFMT_AC3) {
3181
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
253 if (ao_data.channels > 2)
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
254 ioctl (audio_fd, SNDCTL_DSP_CHANNELS, &ao_data.channels);
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
255 else {
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
256 int c = ao_data.channels-1;
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
257 ioctl (audio_fd, SNDCTL_DSP_STEREO, &c);
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
258 }
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3137
diff changeset
259 ioctl (audio_fd, SNDCTL_DSP_SPEED, &ao_data.samplerate);
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1456
diff changeset
260 }
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
261 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
262
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1020
diff changeset
263 // stop playing, keep buffers (for pause)
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1020
diff changeset
264 static void audio_pause()
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1020
diff changeset
265 {
7118
4332922afec4 release /dev/dsp on pause patch by Eric Lammerts <eric@lammerts.org> (and D Richard Felker III <dalias@aerifal.cx>)
alex
parents: 6899
diff changeset
266 uninit();
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1020
diff changeset
267 }
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1020
diff changeset
268
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1020
diff changeset
269 // resume playing, after audio_pause()
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1020
diff changeset
270 static void audio_resume()
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1020
diff changeset
271 {
7118
4332922afec4 release /dev/dsp on pause patch by Eric Lammerts <eric@lammerts.org> (and D Richard Felker III <dalias@aerifal.cx>)
alex
parents: 6899
diff changeset
272 reset();
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1020
diff changeset
273 }
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1020
diff changeset
274
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1020
diff changeset
275
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
276 // return: how many bytes can be played without blocking
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
277 static int get_space(){
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
278 int playsize=ao_data.outburst;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
279
1020
72cacd3b8f30 Solaris 8 support - patch by Marcus Comstedt <marcus@idonex.se>
arpi_esp
parents: 956
diff changeset
280 #ifdef SNDCTL_DSP_GETOSPACE
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
281 if(ioctl(audio_fd, SNDCTL_DSP_GETOSPACE, &zz)!=-1){
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
282 // calculate exact buffer space:
3455
921a78c7b4aa limit get_space return <= MAX_OUTBURST, whilst always an exact number of fragments
steve
parents: 3319
diff changeset
283 playsize = zz.fragments*zz.fragsize;
921a78c7b4aa limit get_space return <= MAX_OUTBURST, whilst always an exact number of fragments
steve
parents: 3319
diff changeset
284 if (playsize > MAX_OUTBURST)
921a78c7b4aa limit get_space return <= MAX_OUTBURST, whilst always an exact number of fragments
steve
parents: 3319
diff changeset
285 playsize = (MAX_OUTBURST / zz.fragsize) * zz.fragsize;
921a78c7b4aa limit get_space return <= MAX_OUTBURST, whilst always an exact number of fragments
steve
parents: 3319
diff changeset
286 return playsize;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
287 }
1020
72cacd3b8f30 Solaris 8 support - patch by Marcus Comstedt <marcus@idonex.se>
arpi_esp
parents: 956
diff changeset
288 #endif
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
289
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
290 // check buffer
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
291 #ifdef HAVE_AUDIO_SELECT
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
292 { fd_set rfds;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
293 struct timeval tv;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
294 FD_ZERO(&rfds);
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
295 FD_SET(audio_fd, &rfds);
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
296 tv.tv_sec = 0;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
297 tv.tv_usec = 0;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
298 if(!select(audio_fd+1, NULL, &rfds, NULL, &tv)) return 0; // not block!
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
299 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
300 #endif
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
301
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
302 return ao_data.outburst;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
303 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
304
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
305 // plays 'len' bytes of 'data'
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
306 // it should round it down to outburst*n
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
307 // return: number of bytes played
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
308 static int play(void* data,int len,int flags){
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
309 len/=ao_data.outburst;
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
310 len=write(audio_fd,data,len*ao_data.outburst);
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
311 return len;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
312 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
313
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
314 static int audio_delay_method=2;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
315
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
316 // return: delay in seconds between first and last sample in buffer
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
317 static float get_delay(){
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
318 /* Calculate how many bytes/second is sent out */
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
319 if(audio_delay_method==2){
5872
02576893af2a OpenBSD, NetBSD portability patches by
arpi
parents: 5790
diff changeset
320 #ifdef SNDCTL_DSP_GETODELAY
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
321 int r=0;
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
322 if(ioctl(audio_fd, SNDCTL_DSP_GETODELAY, &r)!=-1)
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
323 return ((float)r)/(float)ao_data.bps;
5872
02576893af2a OpenBSD, NetBSD portability patches by
arpi
parents: 5790
diff changeset
324 #endif
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
325 audio_delay_method=1; // fallback if not supported
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
326 }
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
327 if(audio_delay_method==1){
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
328 // SNDCTL_DSP_GETOSPACE
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
329 if(ioctl(audio_fd, SNDCTL_DSP_GETOSPACE, &zz)!=-1)
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
330 return ((float)(ao_data.buffersize-zz.bytes))/(float)ao_data.bps;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
331 audio_delay_method=0; // fallback if not supported
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
332 }
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2080
diff changeset
333 return ((float)ao_data.buffersize)/(float)ao_data.bps;
954
db20b90dd34d audio out drivers
arpi_esp
parents:
diff changeset
334 }