Revert "Fix Sparc/Linux host breakage by df70204db53e3611af986f434e74a882bce190ca"
[qemu] / audio / audio.c
1 /*
2  * QEMU Audio subsystem
3  *
4  * Copyright (c) 2003-2005 Vassili Karpov (malc)
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
24 #include "hw/hw.h"
25 #include "audio.h"
26 #include "monitor.h"
27 #include "qemu-timer.h"
28 #include "sysemu.h"
29
30 #define AUDIO_CAP "audio"
31 #include "audio_int.h"
32
33 /* #define DEBUG_PLIVE */
34 /* #define DEBUG_LIVE */
35 /* #define DEBUG_OUT */
36 /* #define DEBUG_CAPTURE */
37 /* #define DEBUG_POLL */
38
39 #define SW_NAME(sw) (sw)->name ? (sw)->name : "unknown"
40
41
42 /* Order of CONFIG_AUDIO_DRIVERS is import.
43    The 1st one is the one used by default, that is the reason
44     that we generate the list.
45 */
46 static struct audio_driver *drvtab[] = {
47     CONFIG_AUDIO_DRIVERS
48     &no_audio_driver,
49     &wav_audio_driver
50 };
51
52 struct fixed_settings {
53     int enabled;
54     int nb_voices;
55     int greedy;
56     struct audsettings settings;
57 };
58
59 static struct {
60     struct fixed_settings fixed_out;
61     struct fixed_settings fixed_in;
62     union {
63         int hertz;
64         int64_t ticks;
65     } period;
66     int plive;
67     int log_to_monitor;
68     int try_poll_in;
69     int try_poll_out;
70 } conf = {
71     .fixed_out = { /* DAC fixed settings */
72         .enabled = 1,
73         .nb_voices = 1,
74         .greedy = 1,
75         .settings = {
76             .freq = 44100,
77             .nchannels = 2,
78             .fmt = AUD_FMT_S16,
79             .endianness =  AUDIO_HOST_ENDIANNESS,
80         }
81     },
82
83     .fixed_in = { /* ADC fixed settings */
84         .enabled = 1,
85         .nb_voices = 1,
86         .greedy = 1,
87         .settings = {
88             .freq = 44100,
89             .nchannels = 2,
90             .fmt = AUD_FMT_S16,
91             .endianness = AUDIO_HOST_ENDIANNESS,
92         }
93     },
94
95     .period = { .hertz = 250 },
96     .plive = 0,
97     .log_to_monitor = 0,
98     .try_poll_in = 1,
99     .try_poll_out = 1,
100 };
101
102 static AudioState glob_audio_state;
103
104 struct mixeng_volume nominal_volume = {
105     .mute = 0,
106 #ifdef FLOAT_MIXENG
107     .r = 1.0,
108     .l = 1.0,
109 #else
110     .r = 1ULL << 32,
111     .l = 1ULL << 32,
112 #endif
113 };
114
115 #ifdef AUDIO_IS_FLAWLESS_AND_NO_CHECKS_ARE_REQURIED
116 #error No its not
117 #else
118 int audio_bug (const char *funcname, int cond)
119 {
120     if (cond) {
121         static int shown;
122
123         AUD_log (NULL, "A bug was just triggered in %s\n", funcname);
124         if (!shown) {
125             shown = 1;
126             AUD_log (NULL, "Save all your work and restart without audio\n");
127             AUD_log (NULL, "Please send bug report to malc@pulsesoft.com\n");
128             AUD_log (NULL, "I am sorry\n");
129         }
130         AUD_log (NULL, "Context:\n");
131
132 #if defined AUDIO_BREAKPOINT_ON_BUG
133 #  if defined HOST_I386
134 #    if defined __GNUC__
135         __asm__ ("int3");
136 #    elif defined _MSC_VER
137         _asm _emit 0xcc;
138 #    else
139         abort ();
140 #    endif
141 #  else
142         abort ();
143 #  endif
144 #endif
145     }
146
147     return cond;
148 }
149 #endif
150
151 static inline int audio_bits_to_index (int bits)
152 {
153     switch (bits) {
154     case 8:
155         return 0;
156
157     case 16:
158         return 1;
159
160     case 32:
161         return 2;
162
163     default:
164         audio_bug ("bits_to_index", 1);
165         AUD_log (NULL, "invalid bits %d\n", bits);
166         return 0;
167     }
168 }
169
170 void *audio_calloc (const char *funcname, int nmemb, size_t size)
171 {
172     int cond;
173     size_t len;
174
175     len = nmemb * size;
176     cond = !nmemb || !size;
177     cond |= nmemb < 0;
178     cond |= len < size;
179
180     if (audio_bug ("audio_calloc", cond)) {
181         AUD_log (NULL, "%s passed invalid arguments to audio_calloc\n",
182                  funcname);
183         AUD_log (NULL, "nmemb=%d size=%zu (len=%zu)\n", nmemb, size, len);
184         return NULL;
185     }
186
187     return qemu_mallocz (len);
188 }
189
190 static char *audio_alloc_prefix (const char *s)
191 {
192     const char qemu_prefix[] = "QEMU_";
193     size_t len, i;
194     char *r, *u;
195
196     if (!s) {
197         return NULL;
198     }
199
200     len = strlen (s);
201     r = qemu_malloc (len + sizeof (qemu_prefix));
202
203     u = r + sizeof (qemu_prefix) - 1;
204
205     pstrcpy (r, len + sizeof (qemu_prefix), qemu_prefix);
206     pstrcat (r, len + sizeof (qemu_prefix), s);
207
208     for (i = 0; i < len; ++i) {
209         u[i] = qemu_toupper(u[i]);
210     }
211
212     return r;
213 }
214
215 static const char *audio_audfmt_to_string (audfmt_e fmt)
216 {
217     switch (fmt) {
218     case AUD_FMT_U8:
219         return "U8";
220
221     case AUD_FMT_U16:
222         return "U16";
223
224     case AUD_FMT_S8:
225         return "S8";
226
227     case AUD_FMT_S16:
228         return "S16";
229
230     case AUD_FMT_U32:
231         return "U32";
232
233     case AUD_FMT_S32:
234         return "S32";
235     }
236
237     dolog ("Bogus audfmt %d returning S16\n", fmt);
238     return "S16";
239 }
240
241 static audfmt_e audio_string_to_audfmt (const char *s, audfmt_e defval,
242                                         int *defaultp)
243 {
244     if (!strcasecmp (s, "u8")) {
245         *defaultp = 0;
246         return AUD_FMT_U8;
247     }
248     else if (!strcasecmp (s, "u16")) {
249         *defaultp = 0;
250         return AUD_FMT_U16;
251     }
252     else if (!strcasecmp (s, "u32")) {
253         *defaultp = 0;
254         return AUD_FMT_U32;
255     }
256     else if (!strcasecmp (s, "s8")) {
257         *defaultp = 0;
258         return AUD_FMT_S8;
259     }
260     else if (!strcasecmp (s, "s16")) {
261         *defaultp = 0;
262         return AUD_FMT_S16;
263     }
264     else if (!strcasecmp (s, "s32")) {
265         *defaultp = 0;
266         return AUD_FMT_S32;
267     }
268     else {
269         dolog ("Bogus audio format `%s' using %s\n",
270                s, audio_audfmt_to_string (defval));
271         *defaultp = 1;
272         return defval;
273     }
274 }
275
276 static audfmt_e audio_get_conf_fmt (const char *envname,
277                                     audfmt_e defval,
278                                     int *defaultp)
279 {
280     const char *var = getenv (envname);
281     if (!var) {
282         *defaultp = 1;
283         return defval;
284     }
285     return audio_string_to_audfmt (var, defval, defaultp);
286 }
287
288 static int audio_get_conf_int (const char *key, int defval, int *defaultp)
289 {
290     int val;
291     char *strval;
292
293     strval = getenv (key);
294     if (strval) {
295         *defaultp = 0;
296         val = atoi (strval);
297         return val;
298     }
299     else {
300         *defaultp = 1;
301         return defval;
302     }
303 }
304
305 static const char *audio_get_conf_str (const char *key,
306                                        const char *defval,
307                                        int *defaultp)
308 {
309     const char *val = getenv (key);
310     if (!val) {
311         *defaultp = 1;
312         return defval;
313     }
314     else {
315         *defaultp = 0;
316         return val;
317     }
318 }
319
320 void AUD_vlog (const char *cap, const char *fmt, va_list ap)
321 {
322     if (conf.log_to_monitor) {
323         if (cap) {
324             monitor_printf(cur_mon, "%s: ", cap);
325         }
326
327         monitor_vprintf(cur_mon, fmt, ap);
328     }
329     else {
330         if (cap) {
331             fprintf (stderr, "%s: ", cap);
332         }
333
334         vfprintf (stderr, fmt, ap);
335     }
336 }
337
338 void AUD_log (const char *cap, const char *fmt, ...)
339 {
340     va_list ap;
341
342     va_start (ap, fmt);
343     AUD_vlog (cap, fmt, ap);
344     va_end (ap);
345 }
346
347 static void audio_print_options (const char *prefix,
348                                  struct audio_option *opt)
349 {
350     char *uprefix;
351
352     if (!prefix) {
353         dolog ("No prefix specified\n");
354         return;
355     }
356
357     if (!opt) {
358         dolog ("No options\n");
359         return;
360     }
361
362     uprefix = audio_alloc_prefix (prefix);
363
364     for (; opt->name; opt++) {
365         const char *state = "default";
366         printf ("  %s_%s: ", uprefix, opt->name);
367
368         if (opt->overriddenp && *opt->overriddenp) {
369             state = "current";
370         }
371
372         switch (opt->tag) {
373         case AUD_OPT_BOOL:
374             {
375                 int *intp = opt->valp;
376                 printf ("boolean, %s = %d\n", state, *intp ? 1 : 0);
377             }
378             break;
379
380         case AUD_OPT_INT:
381             {
382                 int *intp = opt->valp;
383                 printf ("integer, %s = %d\n", state, *intp);
384             }
385             break;
386
387         case AUD_OPT_FMT:
388             {
389                 audfmt_e *fmtp = opt->valp;
390                 printf (
391                     "format, %s = %s, (one of: U8 S8 U16 S16 U32 S32)\n",
392                     state,
393                     audio_audfmt_to_string (*fmtp)
394                     );
395             }
396             break;
397
398         case AUD_OPT_STR:
399             {
400                 const char **strp = opt->valp;
401                 printf ("string, %s = %s\n",
402                         state,
403                         *strp ? *strp : "(not set)");
404             }
405             break;
406
407         default:
408             printf ("???\n");
409             dolog ("Bad value tag for option %s_%s %d\n",
410                    uprefix, opt->name, opt->tag);
411             break;
412         }
413         printf ("    %s\n", opt->descr);
414     }
415
416     qemu_free (uprefix);
417 }
418
419 static void audio_process_options (const char *prefix,
420                                    struct audio_option *opt)
421 {
422     char *optname;
423     const char qemu_prefix[] = "QEMU_";
424     size_t preflen, optlen;
425
426     if (audio_bug (AUDIO_FUNC, !prefix)) {
427         dolog ("prefix = NULL\n");
428         return;
429     }
430
431     if (audio_bug (AUDIO_FUNC, !opt)) {
432         dolog ("opt = NULL\n");
433         return;
434     }
435
436     preflen = strlen (prefix);
437
438     for (; opt->name; opt++) {
439         size_t len, i;
440         int def;
441
442         if (!opt->valp) {
443             dolog ("Option value pointer for `%s' is not set\n",
444                    opt->name);
445             continue;
446         }
447
448         len = strlen (opt->name);
449         /* len of opt->name + len of prefix + size of qemu_prefix
450          * (includes trailing zero) + zero + underscore (on behalf of
451          * sizeof) */
452         optlen = len + preflen + sizeof (qemu_prefix) + 1;
453         optname = qemu_malloc (optlen);
454
455         pstrcpy (optname, optlen, qemu_prefix);
456
457         /* copy while upper-casing, including trailing zero */
458         for (i = 0; i <= preflen; ++i) {
459             optname[i + sizeof (qemu_prefix) - 1] = qemu_toupper(prefix[i]);
460         }
461         pstrcat (optname, optlen, "_");
462         pstrcat (optname, optlen, opt->name);
463
464         def = 1;
465         switch (opt->tag) {
466         case AUD_OPT_BOOL:
467         case AUD_OPT_INT:
468             {
469                 int *intp = opt->valp;
470                 *intp = audio_get_conf_int (optname, *intp, &def);
471             }
472             break;
473
474         case AUD_OPT_FMT:
475             {
476                 audfmt_e *fmtp = opt->valp;
477                 *fmtp = audio_get_conf_fmt (optname, *fmtp, &def);
478             }
479             break;
480
481         case AUD_OPT_STR:
482             {
483                 const char **strp = opt->valp;
484                 *strp = audio_get_conf_str (optname, *strp, &def);
485             }
486             break;
487
488         default:
489             dolog ("Bad value tag for option `%s' - %d\n",
490                    optname, opt->tag);
491             break;
492         }
493
494         if (!opt->overriddenp) {
495             opt->overriddenp = &opt->overridden;
496         }
497         *opt->overriddenp = !def;
498         qemu_free (optname);
499     }
500 }
501
502 static void audio_print_settings (struct audsettings *as)
503 {
504     dolog ("frequency=%d nchannels=%d fmt=", as->freq, as->nchannels);
505
506     switch (as->fmt) {
507     case AUD_FMT_S8:
508         AUD_log (NULL, "S8");
509         break;
510     case AUD_FMT_U8:
511         AUD_log (NULL, "U8");
512         break;
513     case AUD_FMT_S16:
514         AUD_log (NULL, "S16");
515         break;
516     case AUD_FMT_U16:
517         AUD_log (NULL, "U16");
518         break;
519     case AUD_FMT_S32:
520         AUD_log (NULL, "S32");
521         break;
522     case AUD_FMT_U32:
523         AUD_log (NULL, "U32");
524         break;
525     default:
526         AUD_log (NULL, "invalid(%d)", as->fmt);
527         break;
528     }
529
530     AUD_log (NULL, " endianness=");
531     switch (as->endianness) {
532     case 0:
533         AUD_log (NULL, "little");
534         break;
535     case 1:
536         AUD_log (NULL, "big");
537         break;
538     default:
539         AUD_log (NULL, "invalid");
540         break;
541     }
542     AUD_log (NULL, "\n");
543 }
544
545 static int audio_validate_settings (struct audsettings *as)
546 {
547     int invalid;
548
549     invalid = as->nchannels != 1 && as->nchannels != 2;
550     invalid |= as->endianness != 0 && as->endianness != 1;
551
552     switch (as->fmt) {
553     case AUD_FMT_S8:
554     case AUD_FMT_U8:
555     case AUD_FMT_S16:
556     case AUD_FMT_U16:
557     case AUD_FMT_S32:
558     case AUD_FMT_U32:
559         break;
560     default:
561         invalid = 1;
562         break;
563     }
564
565     invalid |= as->freq <= 0;
566     return invalid ? -1 : 0;
567 }
568
569 static int audio_pcm_info_eq (struct audio_pcm_info *info, struct audsettings *as)
570 {
571     int bits = 8, sign = 0;
572
573     switch (as->fmt) {
574     case AUD_FMT_S8:
575         sign = 1;
576     case AUD_FMT_U8:
577         break;
578
579     case AUD_FMT_S16:
580         sign = 1;
581     case AUD_FMT_U16:
582         bits = 16;
583         break;
584
585     case AUD_FMT_S32:
586         sign = 1;
587     case AUD_FMT_U32:
588         bits = 32;
589         break;
590     }
591     return info->freq == as->freq
592         && info->nchannels == as->nchannels
593         && info->sign == sign
594         && info->bits == bits
595         && info->swap_endianness == (as->endianness != AUDIO_HOST_ENDIANNESS);
596 }
597
598 void audio_pcm_init_info (struct audio_pcm_info *info, struct audsettings *as)
599 {
600     int bits = 8, sign = 0, shift = 0;
601
602     switch (as->fmt) {
603     case AUD_FMT_S8:
604         sign = 1;
605     case AUD_FMT_U8:
606         break;
607
608     case AUD_FMT_S16:
609         sign = 1;
610     case AUD_FMT_U16:
611         bits = 16;
612         shift = 1;
613         break;
614
615     case AUD_FMT_S32:
616         sign = 1;
617     case AUD_FMT_U32:
618         bits = 32;
619         shift = 2;
620         break;
621     }
622
623     info->freq = as->freq;
624     info->bits = bits;
625     info->sign = sign;
626     info->nchannels = as->nchannels;
627     info->shift = (as->nchannels == 2) + shift;
628     info->align = (1 << info->shift) - 1;
629     info->bytes_per_second = info->freq << info->shift;
630     info->swap_endianness = (as->endianness != AUDIO_HOST_ENDIANNESS);
631 }
632
633 void audio_pcm_info_clear_buf (struct audio_pcm_info *info, void *buf, int len)
634 {
635     if (!len) {
636         return;
637     }
638
639     if (info->sign) {
640         memset (buf, 0x00, len << info->shift);
641     }
642     else {
643         switch (info->bits) {
644         case 8:
645             memset (buf, 0x80, len << info->shift);
646             break;
647
648         case 16:
649             {
650                 int i;
651                 uint16_t *p = buf;
652                 int shift = info->nchannels - 1;
653                 short s = INT16_MAX;
654
655                 if (info->swap_endianness) {
656                     s = bswap16 (s);
657                 }
658
659                 for (i = 0; i < len << shift; i++) {
660                     p[i] = s;
661                 }
662             }
663             break;
664
665         case 32:
666             {
667                 int i;
668                 uint32_t *p = buf;
669                 int shift = info->nchannels - 1;
670                 int32_t s = INT32_MAX;
671
672                 if (info->swap_endianness) {
673                     s = bswap32 (s);
674                 }
675
676                 for (i = 0; i < len << shift; i++) {
677                     p[i] = s;
678                 }
679             }
680             break;
681
682         default:
683             AUD_log (NULL, "audio_pcm_info_clear_buf: invalid bits %d\n",
684                      info->bits);
685             break;
686         }
687     }
688 }
689
690 /*
691  * Capture
692  */
693 static void noop_conv (struct st_sample *dst, const void *src,
694                        int samples, struct mixeng_volume *vol)
695 {
696     (void) src;
697     (void) dst;
698     (void) samples;
699     (void) vol;
700 }
701
702 static CaptureVoiceOut *audio_pcm_capture_find_specific (
703     struct audsettings *as
704     )
705 {
706     CaptureVoiceOut *cap;
707     AudioState *s = &glob_audio_state;
708
709     for (cap = s->cap_head.lh_first; cap; cap = cap->entries.le_next) {
710         if (audio_pcm_info_eq (&cap->hw.info, as)) {
711             return cap;
712         }
713     }
714     return NULL;
715 }
716
717 static void audio_notify_capture (CaptureVoiceOut *cap, audcnotification_e cmd)
718 {
719     struct capture_callback *cb;
720
721 #ifdef DEBUG_CAPTURE
722     dolog ("notification %d sent\n", cmd);
723 #endif
724     for (cb = cap->cb_head.lh_first; cb; cb = cb->entries.le_next) {
725         cb->ops.notify (cb->opaque, cmd);
726     }
727 }
728
729 static void audio_capture_maybe_changed (CaptureVoiceOut *cap, int enabled)
730 {
731     if (cap->hw.enabled != enabled) {
732         audcnotification_e cmd;
733         cap->hw.enabled = enabled;
734         cmd = enabled ? AUD_CNOTIFY_ENABLE : AUD_CNOTIFY_DISABLE;
735         audio_notify_capture (cap, cmd);
736     }
737 }
738
739 static void audio_recalc_and_notify_capture (CaptureVoiceOut *cap)
740 {
741     HWVoiceOut *hw = &cap->hw;
742     SWVoiceOut *sw;
743     int enabled = 0;
744
745     for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) {
746         if (sw->active) {
747             enabled = 1;
748             break;
749         }
750     }
751     audio_capture_maybe_changed (cap, enabled);
752 }
753
754 static void audio_detach_capture (HWVoiceOut *hw)
755 {
756     SWVoiceCap *sc = hw->cap_head.lh_first;
757
758     while (sc) {
759         SWVoiceCap *sc1 = sc->entries.le_next;
760         SWVoiceOut *sw = &sc->sw;
761         CaptureVoiceOut *cap = sc->cap;
762         int was_active = sw->active;
763
764         if (sw->rate) {
765             st_rate_stop (sw->rate);
766             sw->rate = NULL;
767         }
768
769         QLIST_REMOVE (sw, entries);
770         QLIST_REMOVE (sc, entries);
771         qemu_free (sc);
772         if (was_active) {
773             /* We have removed soft voice from the capture:
774                this might have changed the overall status of the capture
775                since this might have been the only active voice */
776             audio_recalc_and_notify_capture (cap);
777         }
778         sc = sc1;
779     }
780 }
781
782 static int audio_attach_capture (HWVoiceOut *hw)
783 {
784     AudioState *s = &glob_audio_state;
785     CaptureVoiceOut *cap;
786
787     audio_detach_capture (hw);
788     for (cap = s->cap_head.lh_first; cap; cap = cap->entries.le_next) {
789         SWVoiceCap *sc;
790         SWVoiceOut *sw;
791         HWVoiceOut *hw_cap = &cap->hw;
792
793         sc = audio_calloc (AUDIO_FUNC, 1, sizeof (*sc));
794         if (!sc) {
795             dolog ("Could not allocate soft capture voice (%zu bytes)\n",
796                    sizeof (*sc));
797             return -1;
798         }
799
800         sc->cap = cap;
801         sw = &sc->sw;
802         sw->hw = hw_cap;
803         sw->info = hw->info;
804         sw->empty = 1;
805         sw->active = hw->enabled;
806         sw->conv = noop_conv;
807         sw->ratio = ((int64_t) hw_cap->info.freq << 32) / sw->info.freq;
808         sw->rate = st_rate_start (sw->info.freq, hw_cap->info.freq);
809         if (!sw->rate) {
810             dolog ("Could not start rate conversion for `%s'\n", SW_NAME (sw));
811             qemu_free (sw);
812             return -1;
813         }
814         QLIST_INSERT_HEAD (&hw_cap->sw_head, sw, entries);
815         QLIST_INSERT_HEAD (&hw->cap_head, sc, entries);
816 #ifdef DEBUG_CAPTURE
817         asprintf (&sw->name, "for %p %d,%d,%d",
818                   hw, sw->info.freq, sw->info.bits, sw->info.nchannels);
819         dolog ("Added %s active = %d\n", sw->name, sw->active);
820 #endif
821         if (sw->active) {
822             audio_capture_maybe_changed (cap, 1);
823         }
824     }
825     return 0;
826 }
827
828 /*
829  * Hard voice (capture)
830  */
831 static int audio_pcm_hw_find_min_in (HWVoiceIn *hw)
832 {
833     SWVoiceIn *sw;
834     int m = hw->total_samples_captured;
835
836     for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) {
837         if (sw->active) {
838             m = audio_MIN (m, sw->total_hw_samples_acquired);
839         }
840     }
841     return m;
842 }
843
844 int audio_pcm_hw_get_live_in (HWVoiceIn *hw)
845 {
846     int live = hw->total_samples_captured - audio_pcm_hw_find_min_in (hw);
847     if (audio_bug (AUDIO_FUNC, live < 0 || live > hw->samples)) {
848         dolog ("live=%d hw->samples=%d\n", live, hw->samples);
849         return 0;
850     }
851     return live;
852 }
853
854 /*
855  * Soft voice (capture)
856  */
857 static int audio_pcm_sw_get_rpos_in (SWVoiceIn *sw)
858 {
859     HWVoiceIn *hw = sw->hw;
860     int live = hw->total_samples_captured - sw->total_hw_samples_acquired;
861     int rpos;
862
863     if (audio_bug (AUDIO_FUNC, live < 0 || live > hw->samples)) {
864         dolog ("live=%d hw->samples=%d\n", live, hw->samples);
865         return 0;
866     }
867
868     rpos = hw->wpos - live;
869     if (rpos >= 0) {
870         return rpos;
871     }
872     else {
873         return hw->samples + rpos;
874     }
875 }
876
877 int audio_pcm_sw_read (SWVoiceIn *sw, void *buf, int size)
878 {
879     HWVoiceIn *hw = sw->hw;
880     int samples, live, ret = 0, swlim, isamp, osamp, rpos, total = 0;
881     struct st_sample *src, *dst = sw->buf;
882
883     rpos = audio_pcm_sw_get_rpos_in (sw) % hw->samples;
884
885     live = hw->total_samples_captured - sw->total_hw_samples_acquired;
886     if (audio_bug (AUDIO_FUNC, live < 0 || live > hw->samples)) {
887         dolog ("live_in=%d hw->samples=%d\n", live, hw->samples);
888         return 0;
889     }
890
891     samples = size >> sw->info.shift;
892     if (!live) {
893         return 0;
894     }
895
896     swlim = (live * sw->ratio) >> 32;
897     swlim = audio_MIN (swlim, samples);
898
899     while (swlim) {
900         src = hw->conv_buf + rpos;
901         isamp = hw->wpos - rpos;
902         /* XXX: <= ? */
903         if (isamp <= 0) {
904             isamp = hw->samples - rpos;
905         }
906
907         if (!isamp) {
908             break;
909         }
910         osamp = swlim;
911
912         if (audio_bug (AUDIO_FUNC, osamp < 0)) {
913             dolog ("osamp=%d\n", osamp);
914             return 0;
915         }
916
917         st_rate_flow (sw->rate, src, dst, &isamp, &osamp);
918         swlim -= osamp;
919         rpos = (rpos + isamp) % hw->samples;
920         dst += osamp;
921         ret += osamp;
922         total += isamp;
923     }
924
925     sw->clip (buf, sw->buf, ret);
926     sw->total_hw_samples_acquired += total;
927     return ret << sw->info.shift;
928 }
929
930 /*
931  * Hard voice (playback)
932  */
933 static int audio_pcm_hw_find_min_out (HWVoiceOut *hw, int *nb_livep)
934 {
935     SWVoiceOut *sw;
936     int m = INT_MAX;
937     int nb_live = 0;
938
939     for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) {
940         if (sw->active || !sw->empty) {
941             m = audio_MIN (m, sw->total_hw_samples_mixed);
942             nb_live += 1;
943         }
944     }
945
946     *nb_livep = nb_live;
947     return m;
948 }
949
950 int audio_pcm_hw_get_live_out2 (HWVoiceOut *hw, int *nb_live)
951 {
952     int smin;
953
954     smin = audio_pcm_hw_find_min_out (hw, nb_live);
955
956     if (!*nb_live) {
957         return 0;
958     }
959     else {
960         int live = smin;
961
962         if (audio_bug (AUDIO_FUNC, live < 0 || live > hw->samples)) {
963             dolog ("live=%d hw->samples=%d\n", live, hw->samples);
964             return 0;
965         }
966         return live;
967     }
968 }
969
970 int audio_pcm_hw_get_live_out (HWVoiceOut *hw)
971 {
972     int nb_live;
973     int live;
974
975     live = audio_pcm_hw_get_live_out2 (hw, &nb_live);
976     if (audio_bug (AUDIO_FUNC, live < 0 || live > hw->samples)) {
977         dolog ("live=%d hw->samples=%d\n", live, hw->samples);
978         return 0;
979     }
980     return live;
981 }
982
983 /*
984  * Soft voice (playback)
985  */
986 int audio_pcm_sw_write (SWVoiceOut *sw, void *buf, int size)
987 {
988     int hwsamples, samples, isamp, osamp, wpos, live, dead, left, swlim, blck;
989     int ret = 0, pos = 0, total = 0;
990
991     if (!sw) {
992         return size;
993     }
994
995     hwsamples = sw->hw->samples;
996
997     live = sw->total_hw_samples_mixed;
998     if (audio_bug (AUDIO_FUNC, live < 0 || live > hwsamples)){
999         dolog ("live=%d hw->samples=%d\n", live, hwsamples);
1000         return 0;
1001     }
1002
1003     if (live == hwsamples) {
1004 #ifdef DEBUG_OUT
1005         dolog ("%s is full %d\n", sw->name, live);
1006 #endif
1007         return 0;
1008     }
1009
1010     wpos = (sw->hw->rpos + live) % hwsamples;
1011     samples = size >> sw->info.shift;
1012
1013     dead = hwsamples - live;
1014     swlim = ((int64_t) dead << 32) / sw->ratio;
1015     swlim = audio_MIN (swlim, samples);
1016     if (swlim) {
1017         sw->conv (sw->buf, buf, swlim, &sw->vol);
1018     }
1019
1020     while (swlim) {
1021         dead = hwsamples - live;
1022         left = hwsamples - wpos;
1023         blck = audio_MIN (dead, left);
1024         if (!blck) {
1025             break;
1026         }
1027         isamp = swlim;
1028         osamp = blck;
1029         st_rate_flow_mix (
1030             sw->rate,
1031             sw->buf + pos,
1032             sw->hw->mix_buf + wpos,
1033             &isamp,
1034             &osamp
1035             );
1036         ret += isamp;
1037         swlim -= isamp;
1038         pos += isamp;
1039         live += osamp;
1040         wpos = (wpos + osamp) % hwsamples;
1041         total += osamp;
1042     }
1043
1044     sw->total_hw_samples_mixed += total;
1045     sw->empty = sw->total_hw_samples_mixed == 0;
1046
1047 #ifdef DEBUG_OUT
1048     dolog (
1049         "%s: write size %d ret %d total sw %d\n",
1050         SW_NAME (sw),
1051         size >> sw->info.shift,
1052         ret,
1053         sw->total_hw_samples_mixed
1054         );
1055 #endif
1056
1057     return ret << sw->info.shift;
1058 }
1059
1060 #ifdef DEBUG_AUDIO
1061 static void audio_pcm_print_info (const char *cap, struct audio_pcm_info *info)
1062 {
1063     dolog ("%s: bits %d, sign %d, freq %d, nchan %d\n",
1064            cap, info->bits, info->sign, info->freq, info->nchannels);
1065 }
1066 #endif
1067
1068 #define DAC
1069 #include "audio_template.h"
1070 #undef DAC
1071 #include "audio_template.h"
1072
1073 /*
1074  * Timer
1075  */
1076 static void audio_timer (void *opaque)
1077 {
1078     AudioState *s = opaque;
1079
1080     audio_run ("timer");
1081     qemu_mod_timer (s->ts, qemu_get_clock (vm_clock) + conf.period.ticks);
1082 }
1083
1084
1085 static int audio_is_timer_needed (void)
1086 {
1087     HWVoiceIn *hwi = NULL;
1088     HWVoiceOut *hwo = NULL;
1089
1090     while ((hwo = audio_pcm_hw_find_any_enabled_out (hwo))) {
1091         if (!hwo->poll_mode) return 1;
1092     }
1093     while ((hwi = audio_pcm_hw_find_any_enabled_in (hwi))) {
1094         if (!hwi->poll_mode) return 1;
1095     }
1096     return 0;
1097 }
1098
1099 static void audio_reset_timer (void)
1100 {
1101     AudioState *s = &glob_audio_state;
1102
1103     if (audio_is_timer_needed ()) {
1104         qemu_mod_timer (s->ts, qemu_get_clock (vm_clock) + 1);
1105     }
1106     else {
1107         qemu_del_timer (s->ts);
1108     }
1109 }
1110
1111 /*
1112  * Public API
1113  */
1114 int AUD_write (SWVoiceOut *sw, void *buf, int size)
1115 {
1116     int bytes;
1117
1118     if (!sw) {
1119         /* XXX: Consider options */
1120         return size;
1121     }
1122
1123     if (!sw->hw->enabled) {
1124         dolog ("Writing to disabled voice %s\n", SW_NAME (sw));
1125         return 0;
1126     }
1127
1128     bytes = sw->hw->pcm_ops->write (sw, buf, size);
1129     return bytes;
1130 }
1131
1132 int AUD_read (SWVoiceIn *sw, void *buf, int size)
1133 {
1134     int bytes;
1135
1136     if (!sw) {
1137         /* XXX: Consider options */
1138         return size;
1139     }
1140
1141     if (!sw->hw->enabled) {
1142         dolog ("Reading from disabled voice %s\n", SW_NAME (sw));
1143         return 0;
1144     }
1145
1146     bytes = sw->hw->pcm_ops->read (sw, buf, size);
1147     return bytes;
1148 }
1149
1150 int AUD_get_buffer_size_out (SWVoiceOut *sw)
1151 {
1152     return sw->hw->samples << sw->hw->info.shift;
1153 }
1154
1155 void AUD_set_active_out (SWVoiceOut *sw, int on)
1156 {
1157     HWVoiceOut *hw;
1158
1159     if (!sw) {
1160         return;
1161     }
1162
1163     hw = sw->hw;
1164     if (sw->active != on) {
1165         AudioState *s = &glob_audio_state;
1166         SWVoiceOut *temp_sw;
1167         SWVoiceCap *sc;
1168
1169         if (on) {
1170             hw->pending_disable = 0;
1171             if (!hw->enabled) {
1172                 hw->enabled = 1;
1173                 if (s->vm_running) {
1174                     hw->pcm_ops->ctl_out (hw, VOICE_ENABLE, conf.try_poll_out);
1175                     audio_reset_timer ();
1176                 }
1177             }
1178         }
1179         else {
1180             if (hw->enabled) {
1181                 int nb_active = 0;
1182
1183                 for (temp_sw = hw->sw_head.lh_first; temp_sw;
1184                      temp_sw = temp_sw->entries.le_next) {
1185                     nb_active += temp_sw->active != 0;
1186                 }
1187
1188                 hw->pending_disable = nb_active == 1;
1189             }
1190         }
1191
1192         for (sc = hw->cap_head.lh_first; sc; sc = sc->entries.le_next) {
1193             sc->sw.active = hw->enabled;
1194             if (hw->enabled) {
1195                 audio_capture_maybe_changed (sc->cap, 1);
1196             }
1197         }
1198         sw->active = on;
1199     }
1200 }
1201
1202 void AUD_set_active_in (SWVoiceIn *sw, int on)
1203 {
1204     HWVoiceIn *hw;
1205
1206     if (!sw) {
1207         return;
1208     }
1209
1210     hw = sw->hw;
1211     if (sw->active != on) {
1212         AudioState *s = &glob_audio_state;
1213         SWVoiceIn *temp_sw;
1214
1215         if (on) {
1216             if (!hw->enabled) {
1217                 hw->enabled = 1;
1218                 if (s->vm_running) {
1219                     hw->pcm_ops->ctl_in (hw, VOICE_ENABLE, conf.try_poll_in);
1220                 }
1221             }
1222             sw->total_hw_samples_acquired = hw->total_samples_captured;
1223         }
1224         else {
1225             if (hw->enabled) {
1226                 int nb_active = 0;
1227
1228                 for (temp_sw = hw->sw_head.lh_first; temp_sw;
1229                      temp_sw = temp_sw->entries.le_next) {
1230                     nb_active += temp_sw->active != 0;
1231                 }
1232
1233                 if (nb_active == 1) {
1234                     hw->enabled = 0;
1235                     hw->pcm_ops->ctl_in (hw, VOICE_DISABLE);
1236                 }
1237             }
1238         }
1239         sw->active = on;
1240     }
1241 }
1242
1243 static int audio_get_avail (SWVoiceIn *sw)
1244 {
1245     int live;
1246
1247     if (!sw) {
1248         return 0;
1249     }
1250
1251     live = sw->hw->total_samples_captured - sw->total_hw_samples_acquired;
1252     if (audio_bug (AUDIO_FUNC, live < 0 || live > sw->hw->samples)) {
1253         dolog ("live=%d sw->hw->samples=%d\n", live, sw->hw->samples);
1254         return 0;
1255     }
1256
1257     ldebug (
1258         "%s: get_avail live %d ret %" PRId64 "\n",
1259         SW_NAME (sw),
1260         live, (((int64_t) live << 32) / sw->ratio) << sw->info.shift
1261         );
1262
1263     return (((int64_t) live << 32) / sw->ratio) << sw->info.shift;
1264 }
1265
1266 static int audio_get_free (SWVoiceOut *sw)
1267 {
1268     int live, dead;
1269
1270     if (!sw) {
1271         return 0;
1272     }
1273
1274     live = sw->total_hw_samples_mixed;
1275
1276     if (audio_bug (AUDIO_FUNC, live < 0 || live > sw->hw->samples)) {
1277         dolog ("live=%d sw->hw->samples=%d\n", live, sw->hw->samples);
1278         return 0;
1279     }
1280
1281     dead = sw->hw->samples - live;
1282
1283 #ifdef DEBUG_OUT
1284     dolog ("%s: get_free live %d dead %d ret %" PRId64 "\n",
1285            SW_NAME (sw),
1286            live, dead, (((int64_t) dead << 32) / sw->ratio) << sw->info.shift);
1287 #endif
1288
1289     return (((int64_t) dead << 32) / sw->ratio) << sw->info.shift;
1290 }
1291
1292 static void audio_capture_mix_and_clear (HWVoiceOut *hw, int rpos, int samples)
1293 {
1294     int n;
1295
1296     if (hw->enabled) {
1297         SWVoiceCap *sc;
1298
1299         for (sc = hw->cap_head.lh_first; sc; sc = sc->entries.le_next) {
1300             SWVoiceOut *sw = &sc->sw;
1301             int rpos2 = rpos;
1302
1303             n = samples;
1304             while (n) {
1305                 int till_end_of_hw = hw->samples - rpos2;
1306                 int to_write = audio_MIN (till_end_of_hw, n);
1307                 int bytes = to_write << hw->info.shift;
1308                 int written;
1309
1310                 sw->buf = hw->mix_buf + rpos2;
1311                 written = audio_pcm_sw_write (sw, NULL, bytes);
1312                 if (written - bytes) {
1313                     dolog ("Could not mix %d bytes into a capture "
1314                            "buffer, mixed %d\n",
1315                            bytes, written);
1316                     break;
1317                 }
1318                 n -= to_write;
1319                 rpos2 = (rpos2 + to_write) % hw->samples;
1320             }
1321         }
1322     }
1323
1324     n = audio_MIN (samples, hw->samples - rpos);
1325     mixeng_clear (hw->mix_buf + rpos, n);
1326     mixeng_clear (hw->mix_buf, samples - n);
1327 }
1328
1329 static void audio_run_out (AudioState *s)
1330 {
1331     HWVoiceOut *hw = NULL;
1332     SWVoiceOut *sw;
1333
1334     while ((hw = audio_pcm_hw_find_any_enabled_out (hw))) {
1335         int played;
1336         int live, free, nb_live, cleanup_required, prev_rpos;
1337
1338         live = audio_pcm_hw_get_live_out2 (hw, &nb_live);
1339         if (!nb_live) {
1340             live = 0;
1341         }
1342
1343         if (audio_bug (AUDIO_FUNC, live < 0 || live > hw->samples)) {
1344             dolog ("live=%d hw->samples=%d\n", live, hw->samples);
1345             continue;
1346         }
1347
1348         if (hw->pending_disable && !nb_live) {
1349             SWVoiceCap *sc;
1350 #ifdef DEBUG_OUT
1351             dolog ("Disabling voice\n");
1352 #endif
1353             hw->enabled = 0;
1354             hw->pending_disable = 0;
1355             hw->pcm_ops->ctl_out (hw, VOICE_DISABLE);
1356             for (sc = hw->cap_head.lh_first; sc; sc = sc->entries.le_next) {
1357                 sc->sw.active = 0;
1358                 audio_recalc_and_notify_capture (sc->cap);
1359             }
1360             continue;
1361         }
1362
1363         if (!live) {
1364             for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) {
1365                 if (sw->active) {
1366                     free = audio_get_free (sw);
1367                     if (free > 0) {
1368                         sw->callback.fn (sw->callback.opaque, free);
1369                     }
1370                 }
1371             }
1372             continue;
1373         }
1374
1375         prev_rpos = hw->rpos;
1376         played = hw->pcm_ops->run_out (hw);
1377         if (audio_bug (AUDIO_FUNC, hw->rpos >= hw->samples)) {
1378             dolog ("hw->rpos=%d hw->samples=%d played=%d\n",
1379                    hw->rpos, hw->samples, played);
1380             hw->rpos = 0;
1381         }
1382
1383 #ifdef DEBUG_OUT
1384         dolog ("played=%d\n", played);
1385 #endif
1386
1387         if (played) {
1388             hw->ts_helper += played;
1389             audio_capture_mix_and_clear (hw, prev_rpos, played);
1390         }
1391
1392         cleanup_required = 0;
1393         for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) {
1394             if (!sw->active && sw->empty) {
1395                 continue;
1396             }
1397
1398             if (audio_bug (AUDIO_FUNC, played > sw->total_hw_samples_mixed)) {
1399                 dolog ("played=%d sw->total_hw_samples_mixed=%d\n",
1400                        played, sw->total_hw_samples_mixed);
1401                 played = sw->total_hw_samples_mixed;
1402             }
1403
1404             sw->total_hw_samples_mixed -= played;
1405
1406             if (!sw->total_hw_samples_mixed) {
1407                 sw->empty = 1;
1408                 cleanup_required |= !sw->active && !sw->callback.fn;
1409             }
1410
1411             if (sw->active) {
1412                 free = audio_get_free (sw);
1413                 if (free > 0) {
1414                     sw->callback.fn (sw->callback.opaque, free);
1415                 }
1416             }
1417         }
1418
1419         if (cleanup_required) {
1420             SWVoiceOut *sw1;
1421
1422             sw = hw->sw_head.lh_first;
1423             while (sw) {
1424                 sw1 = sw->entries.le_next;
1425                 if (!sw->active && !sw->callback.fn) {
1426 #ifdef DEBUG_PLIVE
1427                     dolog ("Finishing with old voice\n");
1428 #endif
1429                     audio_close_out (sw);
1430                 }
1431                 sw = sw1;
1432             }
1433         }
1434     }
1435 }
1436
1437 static void audio_run_in (AudioState *s)
1438 {
1439     HWVoiceIn *hw = NULL;
1440
1441     while ((hw = audio_pcm_hw_find_any_enabled_in (hw))) {
1442         SWVoiceIn *sw;
1443         int captured, min;
1444
1445         captured = hw->pcm_ops->run_in (hw);
1446
1447         min = audio_pcm_hw_find_min_in (hw);
1448         hw->total_samples_captured += captured - min;
1449         hw->ts_helper += captured;
1450
1451         for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) {
1452             sw->total_hw_samples_acquired -= min;
1453
1454             if (sw->active) {
1455                 int avail;
1456
1457                 avail = audio_get_avail (sw);
1458                 if (avail > 0) {
1459                     sw->callback.fn (sw->callback.opaque, avail);
1460                 }
1461             }
1462         }
1463     }
1464 }
1465
1466 static void audio_run_capture (AudioState *s)
1467 {
1468     CaptureVoiceOut *cap;
1469
1470     for (cap = s->cap_head.lh_first; cap; cap = cap->entries.le_next) {
1471         int live, rpos, captured;
1472         HWVoiceOut *hw = &cap->hw;
1473         SWVoiceOut *sw;
1474
1475         captured = live = audio_pcm_hw_get_live_out (hw);
1476         rpos = hw->rpos;
1477         while (live) {
1478             int left = hw->samples - rpos;
1479             int to_capture = audio_MIN (live, left);
1480             struct st_sample *src;
1481             struct capture_callback *cb;
1482
1483             src = hw->mix_buf + rpos;
1484             hw->clip (cap->buf, src, to_capture);
1485             mixeng_clear (src, to_capture);
1486
1487             for (cb = cap->cb_head.lh_first; cb; cb = cb->entries.le_next) {
1488                 cb->ops.capture (cb->opaque, cap->buf,
1489                                  to_capture << hw->info.shift);
1490             }
1491             rpos = (rpos + to_capture) % hw->samples;
1492             live -= to_capture;
1493         }
1494         hw->rpos = rpos;
1495
1496         for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) {
1497             if (!sw->active && sw->empty) {
1498                 continue;
1499             }
1500
1501             if (audio_bug (AUDIO_FUNC, captured > sw->total_hw_samples_mixed)) {
1502                 dolog ("captured=%d sw->total_hw_samples_mixed=%d\n",
1503                        captured, sw->total_hw_samples_mixed);
1504                 captured = sw->total_hw_samples_mixed;
1505             }
1506
1507             sw->total_hw_samples_mixed -= captured;
1508             sw->empty = sw->total_hw_samples_mixed == 0;
1509         }
1510     }
1511 }
1512
1513 void audio_run (const char *msg)
1514 {
1515     AudioState *s = &glob_audio_state;
1516
1517     audio_run_out (s);
1518     audio_run_in (s);
1519     audio_run_capture (s);
1520 #ifdef DEBUG_POLL
1521     {
1522         static double prevtime;
1523         double currtime;
1524         struct timeval tv;
1525
1526         if (gettimeofday (&tv, NULL)) {
1527             perror ("audio_run: gettimeofday");
1528             return;
1529         }
1530
1531         currtime = tv.tv_sec + tv.tv_usec * 1e-6;
1532         dolog ("Elapsed since last %s: %f\n", msg, currtime - prevtime);
1533         prevtime = currtime;
1534     }
1535 #endif
1536 }
1537
1538 static struct audio_option audio_options[] = {
1539     /* DAC */
1540     {
1541         .name  = "DAC_FIXED_SETTINGS",
1542         .tag   = AUD_OPT_BOOL,
1543         .valp  = &conf.fixed_out.enabled,
1544         .descr = "Use fixed settings for host DAC"
1545     },
1546     {
1547         .name  = "DAC_FIXED_FREQ",
1548         .tag   = AUD_OPT_INT,
1549         .valp  = &conf.fixed_out.settings.freq,
1550         .descr = "Frequency for fixed host DAC"
1551     },
1552     {
1553         .name  = "DAC_FIXED_FMT",
1554         .tag   = AUD_OPT_FMT,
1555         .valp  = &conf.fixed_out.settings.fmt,
1556         .descr = "Format for fixed host DAC"
1557     },
1558     {
1559         .name  = "DAC_FIXED_CHANNELS",
1560         .tag   = AUD_OPT_INT,
1561         .valp  = &conf.fixed_out.settings.nchannels,
1562         .descr = "Number of channels for fixed DAC (1 - mono, 2 - stereo)"
1563     },
1564     {
1565         .name  = "DAC_VOICES",
1566         .tag   = AUD_OPT_INT,
1567         .valp  = &conf.fixed_out.nb_voices,
1568         .descr = "Number of voices for DAC"
1569     },
1570     {
1571         .name  = "DAC_TRY_POLL",
1572         .tag   = AUD_OPT_BOOL,
1573         .valp  = &conf.try_poll_out,
1574         .descr = "Attempt using poll mode for DAC"
1575     },
1576     /* ADC */
1577     {
1578         .name  = "ADC_FIXED_SETTINGS",
1579         .tag   = AUD_OPT_BOOL,
1580         .valp  = &conf.fixed_in.enabled,
1581         .descr = "Use fixed settings for host ADC"
1582     },
1583     {
1584         .name  = "ADC_FIXED_FREQ",
1585         .tag   = AUD_OPT_INT,
1586         .valp  = &conf.fixed_in.settings.freq,
1587         .descr = "Frequency for fixed host ADC"
1588     },
1589     {
1590         .name  = "ADC_FIXED_FMT",
1591         .tag   = AUD_OPT_FMT,
1592         .valp  = &conf.fixed_in.settings.fmt,
1593         .descr = "Format for fixed host ADC"
1594     },
1595     {
1596         .name  = "ADC_FIXED_CHANNELS",
1597         .tag   = AUD_OPT_INT,
1598         .valp  = &conf.fixed_in.settings.nchannels,
1599         .descr = "Number of channels for fixed ADC (1 - mono, 2 - stereo)"
1600     },
1601     {
1602         .name  = "ADC_VOICES",
1603         .tag   = AUD_OPT_INT,
1604         .valp  = &conf.fixed_in.nb_voices,
1605         .descr = "Number of voices for ADC"
1606     },
1607     {
1608         .name  = "ADC_TRY_POLL",
1609         .tag   = AUD_OPT_BOOL,
1610         .valp  = &conf.try_poll_in,
1611         .descr = "Attempt using poll mode for ADC"
1612     },
1613     /* Misc */
1614     {
1615         .name  = "TIMER_PERIOD",
1616         .tag   = AUD_OPT_INT,
1617         .valp  = &conf.period.hertz,
1618         .descr = "Timer period in HZ (0 - use lowest possible)"
1619     },
1620     {
1621         .name  = "PLIVE",
1622         .tag   = AUD_OPT_BOOL,
1623         .valp  = &conf.plive,
1624         .descr = "(undocumented)"
1625     },
1626     {
1627         .name  = "LOG_TO_MONITOR",
1628         .tag   = AUD_OPT_BOOL,
1629         .valp  = &conf.log_to_monitor,
1630         .descr = "Print logging messages to monitor instead of stderr"
1631     },
1632     { /* End of list */ }
1633 };
1634
1635 static void audio_pp_nb_voices (const char *typ, int nb)
1636 {
1637     switch (nb) {
1638     case 0:
1639         printf ("Does not support %s\n", typ);
1640         break;
1641     case 1:
1642         printf ("One %s voice\n", typ);
1643         break;
1644     case INT_MAX:
1645         printf ("Theoretically supports many %s voices\n", typ);
1646         break;
1647     default:
1648         printf ("Theoretically supports upto %d %s voices\n", nb, typ);
1649         break;
1650     }
1651
1652 }
1653
1654 void AUD_help (void)
1655 {
1656     size_t i;
1657
1658     audio_process_options ("AUDIO", audio_options);
1659     for (i = 0; i < ARRAY_SIZE (drvtab); i++) {
1660         struct audio_driver *d = drvtab[i];
1661         if (d->options) {
1662             audio_process_options (d->name, d->options);
1663         }
1664     }
1665
1666     printf ("Audio options:\n");
1667     audio_print_options ("AUDIO", audio_options);
1668     printf ("\n");
1669
1670     printf ("Available drivers:\n");
1671
1672     for (i = 0; i < ARRAY_SIZE (drvtab); i++) {
1673         struct audio_driver *d = drvtab[i];
1674
1675         printf ("Name: %s\n", d->name);
1676         printf ("Description: %s\n", d->descr);
1677
1678         audio_pp_nb_voices ("playback", d->max_voices_out);
1679         audio_pp_nb_voices ("capture", d->max_voices_in);
1680
1681         if (d->options) {
1682             printf ("Options:\n");
1683             audio_print_options (d->name, d->options);
1684         }
1685         else {
1686             printf ("No options\n");
1687         }
1688         printf ("\n");
1689     }
1690
1691     printf (
1692         "Options are settable through environment variables.\n"
1693         "Example:\n"
1694 #ifdef _WIN32
1695         "  set QEMU_AUDIO_DRV=wav\n"
1696         "  set QEMU_WAV_PATH=c:\\tune.wav\n"
1697 #else
1698         "  export QEMU_AUDIO_DRV=wav\n"
1699         "  export QEMU_WAV_PATH=$HOME/tune.wav\n"
1700         "(for csh replace export with setenv in the above)\n"
1701 #endif
1702         "  qemu ...\n\n"
1703         );
1704 }
1705
1706 static int audio_driver_init (AudioState *s, struct audio_driver *drv)
1707 {
1708     if (drv->options) {
1709         audio_process_options (drv->name, drv->options);
1710     }
1711     s->drv_opaque = drv->init ();
1712
1713     if (s->drv_opaque) {
1714         audio_init_nb_voices_out (drv);
1715         audio_init_nb_voices_in (drv);
1716         s->drv = drv;
1717         return 0;
1718     }
1719     else {
1720         dolog ("Could not init `%s' audio driver\n", drv->name);
1721         return -1;
1722     }
1723 }
1724
1725 static void audio_vm_change_state_handler (void *opaque, int running,
1726                                            int reason)
1727 {
1728     AudioState *s = opaque;
1729     HWVoiceOut *hwo = NULL;
1730     HWVoiceIn *hwi = NULL;
1731     int op = running ? VOICE_ENABLE : VOICE_DISABLE;
1732
1733     s->vm_running = running;
1734     while ((hwo = audio_pcm_hw_find_any_enabled_out (hwo))) {
1735         hwo->pcm_ops->ctl_out (hwo, op, conf.try_poll_out);
1736     }
1737
1738     while ((hwi = audio_pcm_hw_find_any_enabled_in (hwi))) {
1739         hwi->pcm_ops->ctl_in (hwi, op, conf.try_poll_in);
1740     }
1741     audio_reset_timer ();
1742 }
1743
1744 static void audio_atexit (void)
1745 {
1746     AudioState *s = &glob_audio_state;
1747     HWVoiceOut *hwo = NULL;
1748     HWVoiceIn *hwi = NULL;
1749
1750     while ((hwo = audio_pcm_hw_find_any_enabled_out (hwo))) {
1751         SWVoiceCap *sc;
1752
1753         hwo->pcm_ops->ctl_out (hwo, VOICE_DISABLE);
1754         hwo->pcm_ops->fini_out (hwo);
1755
1756         for (sc = hwo->cap_head.lh_first; sc; sc = sc->entries.le_next) {
1757             CaptureVoiceOut *cap = sc->cap;
1758             struct capture_callback *cb;
1759
1760             for (cb = cap->cb_head.lh_first; cb; cb = cb->entries.le_next) {
1761                 cb->ops.destroy (cb->opaque);
1762             }
1763         }
1764     }
1765
1766     while ((hwi = audio_pcm_hw_find_any_enabled_in (hwi))) {
1767         hwi->pcm_ops->ctl_in (hwi, VOICE_DISABLE);
1768         hwi->pcm_ops->fini_in (hwi);
1769     }
1770
1771     if (s->drv) {
1772         s->drv->fini (s->drv_opaque);
1773     }
1774 }
1775
1776 static void audio_save (QEMUFile *f, void *opaque)
1777 {
1778     (void) f;
1779     (void) opaque;
1780 }
1781
1782 static int audio_load (QEMUFile *f, void *opaque, int version_id)
1783 {
1784     (void) f;
1785     (void) opaque;
1786
1787     if (version_id != 1) {
1788         return -EINVAL;
1789     }
1790
1791     return 0;
1792 }
1793
1794 static void audio_init (void)
1795 {
1796     size_t i;
1797     int done = 0;
1798     const char *drvname;
1799     VMChangeStateEntry *e;
1800     AudioState *s = &glob_audio_state;
1801
1802     if (s->drv) {
1803         return;
1804     }
1805
1806     QLIST_INIT (&s->hw_head_out);
1807     QLIST_INIT (&s->hw_head_in);
1808     QLIST_INIT (&s->cap_head);
1809     atexit (audio_atexit);
1810
1811     s->ts = qemu_new_timer (vm_clock, audio_timer, s);
1812     if (!s->ts) {
1813         hw_error("Could not create audio timer\n");
1814     }
1815
1816     audio_process_options ("AUDIO", audio_options);
1817
1818     s->nb_hw_voices_out = conf.fixed_out.nb_voices;
1819     s->nb_hw_voices_in = conf.fixed_in.nb_voices;
1820
1821     if (s->nb_hw_voices_out <= 0) {
1822         dolog ("Bogus number of playback voices %d, setting to 1\n",
1823                s->nb_hw_voices_out);
1824         s->nb_hw_voices_out = 1;
1825     }
1826
1827     if (s->nb_hw_voices_in <= 0) {
1828         dolog ("Bogus number of capture voices %d, setting to 0\n",
1829                s->nb_hw_voices_in);
1830         s->nb_hw_voices_in = 0;
1831     }
1832
1833     {
1834         int def;
1835         drvname = audio_get_conf_str ("QEMU_AUDIO_DRV", NULL, &def);
1836     }
1837
1838     if (drvname) {
1839         int found = 0;
1840
1841         for (i = 0; i < ARRAY_SIZE (drvtab); i++) {
1842             if (!strcmp (drvname, drvtab[i]->name)) {
1843                 done = !audio_driver_init (s, drvtab[i]);
1844                 found = 1;
1845                 break;
1846             }
1847         }
1848
1849         if (!found) {
1850             dolog ("Unknown audio driver `%s'\n", drvname);
1851             dolog ("Run with -audio-help to list available drivers\n");
1852         }
1853     }
1854
1855     if (!done) {
1856         for (i = 0; !done && i < ARRAY_SIZE (drvtab); i++) {
1857             if (drvtab[i]->can_be_default) {
1858                 done = !audio_driver_init (s, drvtab[i]);
1859             }
1860         }
1861     }
1862
1863     if (!done) {
1864         done = !audio_driver_init (s, &no_audio_driver);
1865         if (!done) {
1866             hw_error("Could not initialize audio subsystem\n");
1867         }
1868         else {
1869             dolog ("warning: Using timer based audio emulation\n");
1870         }
1871     }
1872
1873     if (conf.period.hertz <= 0) {
1874         if (conf.period.hertz < 0) {
1875             dolog ("warning: Timer period is negative - %d "
1876                    "treating as zero\n",
1877                    conf.period.hertz);
1878         }
1879         conf.period.ticks = 1;
1880     } else {
1881         conf.period.ticks = get_ticks_per_sec() / conf.period.hertz;
1882     }
1883
1884     e = qemu_add_vm_change_state_handler (audio_vm_change_state_handler, s);
1885     if (!e) {
1886         dolog ("warning: Could not register change state handler\n"
1887                "(Audio can continue looping even after stopping the VM)\n");
1888     }
1889
1890     QLIST_INIT (&s->card_head);
1891     register_savevm ("audio", 0, 1, audio_save, audio_load, s);
1892 }
1893
1894 void AUD_register_card (const char *name, QEMUSoundCard *card)
1895 {
1896     audio_init ();
1897     card->name = qemu_strdup (name);
1898     memset (&card->entries, 0, sizeof (card->entries));
1899     QLIST_INSERT_HEAD (&glob_audio_state.card_head, card, entries);
1900 }
1901
1902 void AUD_remove_card (QEMUSoundCard *card)
1903 {
1904     QLIST_REMOVE (card, entries);
1905     qemu_free (card->name);
1906 }
1907
1908
1909 CaptureVoiceOut *AUD_add_capture (
1910     struct audsettings *as,
1911     struct audio_capture_ops *ops,
1912     void *cb_opaque
1913     )
1914 {
1915     AudioState *s = &glob_audio_state;
1916     CaptureVoiceOut *cap;
1917     struct capture_callback *cb;
1918
1919     if (audio_validate_settings (as)) {
1920         dolog ("Invalid settings were passed when trying to add capture\n");
1921         audio_print_settings (as);
1922         goto err0;
1923     }
1924
1925     cb = audio_calloc (AUDIO_FUNC, 1, sizeof (*cb));
1926     if (!cb) {
1927         dolog ("Could not allocate capture callback information, size %zu\n",
1928                sizeof (*cb));
1929         goto err0;
1930     }
1931     cb->ops = *ops;
1932     cb->opaque = cb_opaque;
1933
1934     cap = audio_pcm_capture_find_specific (as);
1935     if (cap) {
1936         QLIST_INSERT_HEAD (&cap->cb_head, cb, entries);
1937         return cap;
1938     }
1939     else {
1940         HWVoiceOut *hw;
1941         CaptureVoiceOut *cap;
1942
1943         cap = audio_calloc (AUDIO_FUNC, 1, sizeof (*cap));
1944         if (!cap) {
1945             dolog ("Could not allocate capture voice, size %zu\n",
1946                    sizeof (*cap));
1947             goto err1;
1948         }
1949
1950         hw = &cap->hw;
1951         QLIST_INIT (&hw->sw_head);
1952         QLIST_INIT (&cap->cb_head);
1953
1954         /* XXX find a more elegant way */
1955         hw->samples = 4096 * 4;
1956         hw->mix_buf = audio_calloc (AUDIO_FUNC, hw->samples,
1957                                     sizeof (struct st_sample));
1958         if (!hw->mix_buf) {
1959             dolog ("Could not allocate capture mix buffer (%d samples)\n",
1960                    hw->samples);
1961             goto err2;
1962         }
1963
1964         audio_pcm_init_info (&hw->info, as);
1965
1966         cap->buf = audio_calloc (AUDIO_FUNC, hw->samples, 1 << hw->info.shift);
1967         if (!cap->buf) {
1968             dolog ("Could not allocate capture buffer "
1969                    "(%d samples, each %d bytes)\n",
1970                    hw->samples, 1 << hw->info.shift);
1971             goto err3;
1972         }
1973
1974         hw->clip = mixeng_clip
1975             [hw->info.nchannels == 2]
1976             [hw->info.sign]
1977             [hw->info.swap_endianness]
1978             [audio_bits_to_index (hw->info.bits)];
1979
1980         QLIST_INSERT_HEAD (&s->cap_head, cap, entries);
1981         QLIST_INSERT_HEAD (&cap->cb_head, cb, entries);
1982
1983         hw = NULL;
1984         while ((hw = audio_pcm_hw_find_any_out (hw))) {
1985             audio_attach_capture (hw);
1986         }
1987         return cap;
1988
1989     err3:
1990         qemu_free (cap->hw.mix_buf);
1991     err2:
1992         qemu_free (cap);
1993     err1:
1994         qemu_free (cb);
1995     err0:
1996         return NULL;
1997     }
1998 }
1999
2000 void AUD_del_capture (CaptureVoiceOut *cap, void *cb_opaque)
2001 {
2002     struct capture_callback *cb;
2003
2004     for (cb = cap->cb_head.lh_first; cb; cb = cb->entries.le_next) {
2005         if (cb->opaque == cb_opaque) {
2006             cb->ops.destroy (cb_opaque);
2007             QLIST_REMOVE (cb, entries);
2008             qemu_free (cb);
2009
2010             if (!cap->cb_head.lh_first) {
2011                 SWVoiceOut *sw = cap->hw.sw_head.lh_first, *sw1;
2012
2013                 while (sw) {
2014                     SWVoiceCap *sc = (SWVoiceCap *) sw;
2015 #ifdef DEBUG_CAPTURE
2016                     dolog ("freeing %s\n", sw->name);
2017 #endif
2018
2019                     sw1 = sw->entries.le_next;
2020                     if (sw->rate) {
2021                         st_rate_stop (sw->rate);
2022                         sw->rate = NULL;
2023                     }
2024                     QLIST_REMOVE (sw, entries);
2025                     QLIST_REMOVE (sc, entries);
2026                     qemu_free (sc);
2027                     sw = sw1;
2028                 }
2029                 QLIST_REMOVE (cap, entries);
2030                 qemu_free (cap);
2031             }
2032             return;
2033         }
2034     }
2035 }
2036
2037 void AUD_set_volume_out (SWVoiceOut *sw, int mute, uint8_t lvol, uint8_t rvol)
2038 {
2039     if (sw) {
2040         sw->vol.mute = mute;
2041         sw->vol.l = nominal_volume.l * lvol / 255;
2042         sw->vol.r = nominal_volume.r * rvol / 255;
2043     }
2044 }
2045
2046 void AUD_set_volume_in (SWVoiceIn *sw, int mute, uint8_t lvol, uint8_t rvol)
2047 {
2048     if (sw) {
2049         sw->vol.mute = mute;
2050         sw->vol.l = nominal_volume.l * lvol / 255;
2051         sw->vol.r = nominal_volume.r * rvol / 255;
2052     }
2053 }