annotate libao2/ao_alsa5.c @ 13252:7dfd84faaa09

Some minor vo_jpeg fixes: Removed unused variable dst. MPlayer now exits if it is unable to create a file for JPEG output and prints an appropriate message, instead of going on if all is right (which is not). Added line to authors file.
author ivo
date Sun, 05 Sep 2004 17:54:09 +0000
parents 99798c3cdb93
children c1955840883d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
1 /*
1046
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
2 ao_alsa5 - ALSA-0.5.x output plugin for MPlayer
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
3
10366
faa09ea4ed6d removing my (non-working) email address
alex
parents: 9670
diff changeset
4 (C) Alex Beregszaszi
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
5
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
6 Thanks to Arpi for helping me ;)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
7 */
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
8
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
9 #include <errno.h>
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
10 #include <sys/asoundlib.h>
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
11
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
12 #include "../config.h"
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
13
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
14 #include "audio_out.h"
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
15 #include "audio_out_internal.h"
1058
cab5ba9ffc6c fixed AFMT_ stuff (inclue afmt.h)
arpi_esp
parents: 1055
diff changeset
16 #include "afmt.h"
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
17
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
18 #include "../mp_msg.h"
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
19
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
20 static ao_info_t info =
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
21 {
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
22 "ALSA-0.5.x audio output",
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
23 "alsa5",
10366
faa09ea4ed6d removing my (non-working) email address
alex
parents: 9670
diff changeset
24 "Alex Beregszaszi",
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
25 ""
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
26 };
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
27
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
28 LIBAO_EXTERN(alsa5)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
29
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
30 static snd_pcm_t *alsa_handler;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
31 static snd_pcm_format_t alsa_format;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
32 static int alsa_rate = SND_PCM_RATE_CONTINUOUS;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
33
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
34 /* to set/get/query special features/parameters */
9633
12b1790038b0 64bit libao2 fix by Jens Axboe <mplayer-dev@kernel.dk>
alex
parents: 8027
diff changeset
35 static int control(int cmd, void *arg)
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
36 {
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
37 return(CONTROL_UNKNOWN);
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
38 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
39
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
40 /*
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
41 open & setup audio device
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
42 return: 1=success 0=fail
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
43 */
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
44 static int init(int rate_hz, int channels, int format, int flags)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
45 {
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
46 int err;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
47 int cards = -1;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
48 snd_pcm_channel_params_t params;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
49 snd_pcm_channel_setup_t setup;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
50 snd_pcm_info_t info;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
51 snd_pcm_channel_info_t chninfo;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
52
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
53 mp_msg(MSGT_AO, MSGL_INFO, "alsa-init: requested format: %d Hz, %d channels, %s\n", rate_hz,
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
54 channels, audio_out_format_name(format));
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
55
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
56 alsa_handler = NULL;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
57
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
58 mp_msg(MSGT_AO, MSGL_V, "alsa-init: compiled for ALSA-%s (%d)\n", SND_LIB_VERSION_STR,
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
59 SND_LIB_VERSION);
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
60
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
61 if ((cards = snd_cards()) < 0)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
62 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
63 mp_msg(MSGT_AO, MSGL_ERR, "alsa-init: no soundcards found\n");
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
64 return(0);
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
65 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
66
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
67 ao_data.format = format;
7659
b10df387019c updated for libaf...
arpi
parents: 5902
diff changeset
68 ao_data.channels = channels;
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
69 ao_data.samplerate = rate_hz;
7659
b10df387019c updated for libaf...
arpi
parents: 5902
diff changeset
70 ao_data.bps = ao_data.samplerate*ao_data.channels;
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
71 ao_data.outburst = OUTBURST;
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
72 ao_data.buffersize = 16384;
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
73
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
74 memset(&alsa_format, 0, sizeof(alsa_format));
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
75 switch (format)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
76 {
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
77 case AFMT_S8:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
78 alsa_format.format = SND_PCM_SFMT_S8;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
79 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
80 case AFMT_U8:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
81 alsa_format.format = SND_PCM_SFMT_U8;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
82 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
83 case AFMT_U16_LE:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
84 alsa_format.format = SND_PCM_SFMT_U16_LE;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
85 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
86 case AFMT_U16_BE:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
87 alsa_format.format = SND_PCM_SFMT_U16_BE;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
88 break;
5790
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 3700
diff changeset
89 #ifndef WORDS_BIGENDIAN
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 3700
diff changeset
90 case AFMT_AC3:
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 3700
diff changeset
91 #endif
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
92 case AFMT_S16_LE:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
93 alsa_format.format = SND_PCM_SFMT_S16_LE;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
94 break;
5790
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 3700
diff changeset
95 #ifdef WORDS_BIGENDIAN
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 3700
diff changeset
96 case AFMT_AC3:
d141f1e9cc36 AFMT_AC3 autodetect/fallback to S16
arpi
parents: 3700
diff changeset
97 #endif
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
98 case AFMT_S16_BE:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
99 alsa_format.format = SND_PCM_SFMT_S16_BE;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
100 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
101 default:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
102 alsa_format.format = SND_PCM_SFMT_MPEG;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
103 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
104 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
105
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
106 switch(alsa_format.format)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
107 {
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
108 case SND_PCM_SFMT_S16_LE:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
109 case SND_PCM_SFMT_U16_LE:
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
110 ao_data.bps *= 2;
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
111 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
112 case -1:
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
113 mp_msg(MSGT_AO, MSGL_ERR, "alsa-init: invalid format (%s) requested - output disabled\n",
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
114 audio_out_format_name(format));
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
115 return(0);
1111
a3c3e1de6f02 little -Wall fix
al3x
parents: 1058
diff changeset
116 default:
a3c3e1de6f02 little -Wall fix
al3x
parents: 1058
diff changeset
117 break;
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
118 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
119
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
120 switch(rate_hz)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
121 {
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
122 case 8000:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
123 alsa_rate = SND_PCM_RATE_8000;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
124 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
125 case 11025:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
126 alsa_rate = SND_PCM_RATE_11025;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
127 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
128 case 16000:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
129 alsa_rate = SND_PCM_RATE_16000;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
130 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
131 case 22050:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
132 alsa_rate = SND_PCM_RATE_22050;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
133 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
134 case 32000:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
135 alsa_rate = SND_PCM_RATE_32000;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
136 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
137 case 44100:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
138 alsa_rate = SND_PCM_RATE_44100;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
139 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
140 case 48000:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
141 alsa_rate = SND_PCM_RATE_48000;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
142 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
143 case 88200:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
144 alsa_rate = SND_PCM_RATE_88200;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
145 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
146 case 96000:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
147 alsa_rate = SND_PCM_RATE_96000;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
148 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
149 case 176400:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
150 alsa_rate = SND_PCM_RATE_176400;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
151 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
152 case 192000:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
153 alsa_rate = SND_PCM_RATE_192000;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
154 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
155 default:
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
156 alsa_rate = SND_PCM_RATE_CONTINUOUS;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
157 break;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
158 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
159
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
160 alsa_format.rate = ao_data.samplerate;
9670
88e4f274df48 10l to arpi with commit r1.12, noticed by Daniel Mario Vega <dv5a@dc.uba.ar>
alex
parents: 9633
diff changeset
161 alsa_format.voices = ao_data.channels;
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
162 alsa_format.interleave = 1;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
163
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
164 if ((err = snd_pcm_open(&alsa_handler, 0, 0, SND_PCM_OPEN_PLAYBACK)) < 0)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
165 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
166 mp_msg(MSGT_AO, MSGL_ERR, "alsa-init: playback open error: %s\n", snd_strerror(err));
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
167 return(0);
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
168 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
169
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
170 if ((err = snd_pcm_info(alsa_handler, &info)) < 0)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
171 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
172 mp_msg(MSGT_AO, MSGL_ERR, "alsa-init: pcm info error: %s\n", snd_strerror(err));
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
173 return(0);
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
174 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
175
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
176 mp_msg(MSGT_AO, MSGL_INFO, "alsa-init: %d soundcard(s) found, using: %s\n",
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
177 cards, info.name);
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
178
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
179 if (info.flags & SND_PCM_INFO_PLAYBACK)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
180 {
3700
91f801a94a59 memset is more portable than bzero ("BSD"ism)
pl
parents: 3095
diff changeset
181 memset(&chninfo, 0, sizeof(chninfo));
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
182 chninfo.channel = SND_PCM_CHANNEL_PLAYBACK;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
183 if ((err = snd_pcm_channel_info(alsa_handler, &chninfo)) < 0)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
184 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
185 mp_msg(MSGT_AO, MSGL_ERR, "alsa-init: pcm channel info error: %s\n", snd_strerror(err));
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
186 return(0);
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
187 }
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
188
3087
08947e067d80 compiling under qnx, hope it works on all qnx release :)
alex
parents: 1111
diff changeset
189 #ifndef __QNX__
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
190 if (chninfo.buffer_size)
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
191 ao_data.buffersize = chninfo.buffer_size;
3087
08947e067d80 compiling under qnx, hope it works on all qnx release :)
alex
parents: 1111
diff changeset
192 #endif
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
193
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
194 mp_msg(MSGT_AO, MSGL_V, "alsa-init: setting preferred buffer size from driver: %d bytes\n",
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
195 ao_data.buffersize);
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
196 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
197
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
198 memset(&params, 0, sizeof(params));
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
199 params.channel = SND_PCM_CHANNEL_PLAYBACK;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
200 params.mode = SND_PCM_MODE_STREAM;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
201 params.format = alsa_format;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
202 params.start_mode = SND_PCM_START_DATA;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
203 params.stop_mode = SND_PCM_STOP_ROLLOVER;
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
204 params.buf.stream.queue_size = ao_data.buffersize;
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
205 params.buf.stream.fill = SND_PCM_FILL_NONE;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
206
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
207 if ((err = snd_pcm_channel_params(alsa_handler, &params)) < 0)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
208 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
209 mp_msg(MSGT_AO, MSGL_ERR, "alsa-init: error setting parameters: %s\n", snd_strerror(err));
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
210 return(0);
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
211 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
212
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
213 memset(&setup, 0, sizeof(setup));
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
214 setup.channel = SND_PCM_CHANNEL_PLAYBACK;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
215 setup.mode = SND_PCM_MODE_STREAM;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
216 setup.format = alsa_format;
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
217 setup.buf.stream.queue_size = ao_data.buffersize;
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
218 setup.msbits_per_sample = ao_data.bps;
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
219
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
220 if ((err = snd_pcm_channel_setup(alsa_handler, &setup)) < 0)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
221 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
222 mp_msg(MSGT_AO, MSGL_ERR, "alsa-init: error setting up channel: %s\n", snd_strerror(err));
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
223 return(0);
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
224 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
225
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
226 if ((err = snd_pcm_channel_prepare(alsa_handler, SND_PCM_CHANNEL_PLAYBACK)) < 0)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
227 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
228 mp_msg(MSGT_AO, MSGL_ERR, "alsa-init: channel prepare error: %s\n", snd_strerror(err));
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
229 return(0);
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
230 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
231
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
232 mp_msg(MSGT_AO, MSGL_INFO, "AUDIO: %d Hz/%d channels/%d bps/%d bytes buffer/%s\n",
7659
b10df387019c updated for libaf...
arpi
parents: 5902
diff changeset
233 ao_data.samplerate, ao_data.channels, ao_data.bps, ao_data.buffersize,
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
234 snd_pcm_get_format_name(alsa_format.format));
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
235 return(1);
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
236 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
237
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
238 /* close audio device */
12145
99798c3cdb93 uninit immed flag
alex
parents: 11678
diff changeset
239 static void uninit(int immed)
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
240 {
1055
50c49c976f23 Added missing declaration of variables 'err'.
bertrand
parents: 1046
diff changeset
241 int err;
50c49c976f23 Added missing declaration of variables 'err'.
bertrand
parents: 1046
diff changeset
242
1046
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
243 if ((err = snd_pcm_playback_drain(alsa_handler)) < 0)
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
244 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
245 mp_msg(MSGT_AO, MSGL_ERR, "alsa-uninit: playback drain error: %s\n", snd_strerror(err));
1046
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
246 return;
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
247 }
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
248
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
249 if ((err = snd_pcm_channel_flush(alsa_handler, SND_PCM_CHANNEL_PLAYBACK)) < 0)
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
250 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
251 mp_msg(MSGT_AO, MSGL_ERR, "alsa-uninit: playback flush error: %s\n", snd_strerror(err));
1046
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
252 return;
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
253 }
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
254
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
255 if ((err = snd_pcm_close(alsa_handler)) < 0)
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
256 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
257 mp_msg(MSGT_AO, MSGL_ERR, "alsa-uninit: pcm close error: %s\n", snd_strerror(err));
1046
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
258 return;
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
259 }
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
260 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
261
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
262 /* stop playing and empty buffers (for seeking/pause) */
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
263 static void reset()
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
264 {
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
265 int err;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
266
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
267 if ((err = snd_pcm_playback_drain(alsa_handler)) < 0)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
268 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
269 mp_msg(MSGT_AO, MSGL_ERR, "alsa-reset: playback drain error: %s\n", snd_strerror(err));
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
270 return;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
271 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
272
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
273 if ((err = snd_pcm_channel_flush(alsa_handler, SND_PCM_CHANNEL_PLAYBACK)) < 0)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
274 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
275 mp_msg(MSGT_AO, MSGL_ERR, "alsa-reset: playback flush error: %s\n", snd_strerror(err));
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
276 return;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
277 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
278
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
279 if ((err = snd_pcm_channel_prepare(alsa_handler, SND_PCM_CHANNEL_PLAYBACK)) < 0)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
280 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
281 mp_msg(MSGT_AO, MSGL_ERR, "alsa-reset: channel prepare error: %s\n", snd_strerror(err));
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
282 return;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
283 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
284 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
285
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 996
diff changeset
286 /* stop playing, keep buffers (for pause) */
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 996
diff changeset
287 static void audio_pause()
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 996
diff changeset
288 {
1046
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
289 int err;
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
290
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
291 if ((err = snd_pcm_playback_drain(alsa_handler)) < 0)
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
292 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
293 mp_msg(MSGT_AO, MSGL_ERR, "alsa-pause: playback drain error: %s\n", snd_strerror(err));
1046
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
294 return;
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
295 }
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
296
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
297 if ((err = snd_pcm_channel_flush(alsa_handler, SND_PCM_CHANNEL_PLAYBACK)) < 0)
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
298 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
299 mp_msg(MSGT_AO, MSGL_ERR, "alsa-pause: playback flush error: %s\n", snd_strerror(err));
1046
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
300 return;
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
301 }
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 996
diff changeset
302 }
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 996
diff changeset
303
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 996
diff changeset
304 /* resume playing, after audio_pause() */
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 996
diff changeset
305 static void audio_resume()
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 996
diff changeset
306 {
1055
50c49c976f23 Added missing declaration of variables 'err'.
bertrand
parents: 1046
diff changeset
307 int err;
1046
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
308 if ((err = snd_pcm_channel_prepare(alsa_handler, SND_PCM_CHANNEL_PLAYBACK)) < 0)
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
309 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
310 mp_msg(MSGT_AO, MSGL_ERR, "alsa-resume: channel prepare error: %s\n", snd_strerror(err));
1046
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
311 return;
59fc1f75e486 audio_pause/resume implementacio es kozmetikai valtoztatasok
al3x
parents: 1038
diff changeset
312 }
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 996
diff changeset
313 }
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 996
diff changeset
314
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
315 /*
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
316 plays 'len' bytes of 'data'
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
317 returns: number of bytes played
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
318 */
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
319 static int play(void* data, int len, int flags)
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
320 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
321 int got_len;
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
322
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
323 if (!len)
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
324 return(0);
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
325
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
326 if ((got_len = snd_pcm_write(alsa_handler, data, len)) < 0)
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
327 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
328 if (got_len == -EPIPE) /* underrun? */
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
329 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
330 mp_msg(MSGT_AO, MSGL_ERR, "alsa-play: alsa underrun, resetting stream\n");
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
331 if ((got_len = snd_pcm_channel_prepare(alsa_handler, SND_PCM_CHANNEL_PLAYBACK)) < 0)
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
332 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
333 mp_msg(MSGT_AO, MSGL_ERR, "alsa-play: playback prepare error: %s\n", snd_strerror(got_len));
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
334 return(0);
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
335 }
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
336 if ((got_len = snd_pcm_write(alsa_handler, data, len)) < 0)
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
337 {
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
338 mp_msg(MSGT_AO, MSGL_ERR, "alsa-play: write error after reset: %s - giving up\n",
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
339 snd_strerror(got_len));
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
340 return(0);
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
341 }
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
342 return(got_len); /* 2nd write was ok */
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
343 }
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
344 mp_msg(MSGT_AO, MSGL_ERR, "alsa-play: output error: %s\n", snd_strerror(got_len));
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
345 return(0);
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
346 }
5902
2639d60fe5c2 play() fix by Jimen Ching <jching@flex.com>, additional printf->mp_msg conversions (for coming i18n support)
alex
parents: 5790
diff changeset
347 return(got_len);
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
348 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
349
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
350 /* how many byes are free in the buffer */
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
351 static int get_space()
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
352 {
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
353 snd_pcm_channel_status_t ch_stat;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
354
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
355 ch_stat.channel = SND_PCM_CHANNEL_PLAYBACK;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
356
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
357 if (snd_pcm_channel_status(alsa_handler, &ch_stat) < 0)
11678
972d1998bde9 occured --> occurred typo patch by Clinton Roy <croy@dstc.edu.au>
diego
parents: 10366
diff changeset
358 return(0); /* error occurred */
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
359 else
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
360 return(ch_stat.free);
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
361 }
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
362
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
363 /* delay in seconds between first and last sample in buffer */
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
364 static float get_delay()
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
365 {
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
366 snd_pcm_channel_status_t ch_stat;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
367
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
368 ch_stat.channel = SND_PCM_CHANNEL_PLAYBACK;
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
369
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
370 if (snd_pcm_channel_status(alsa_handler, &ch_stat) < 0)
11678
972d1998bde9 occured --> occurred typo patch by Clinton Roy <croy@dstc.edu.au>
diego
parents: 10366
diff changeset
371 return((float)ao_data.buffersize/(float)ao_data.bps); /* error occurred */
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
372 else
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 3087
diff changeset
373 return((float)ch_stat.count/(float)ao_data.bps);
996
a97eb50a2c3b initial alsa support by al3x
pontscho
parents:
diff changeset
374 }