Lines Matching defs:sw

95 static void glue (audio_pcm_sw_free_resources_, TYPE) (SW *sw)
97 if (sw->buf) {
98 qemu_free (sw->buf);
101 if (sw->rate) {
102 st_rate_stop (sw->rate);
105 sw->buf = NULL;
106 sw->rate = NULL;
107 sw->buf_samples = 0;
110 static int glue (audio_pcm_sw_alloc_resources_, TYPE) (SW *sw)
114 samples = ((int64_t) sw->hw->samples << 32) / sw->ratio;
115 sw->buf_samples = 0;
117 sw->buf = audio_calloc (AUDIO_FUNC, samples, sizeof (st_sample_t));
118 if (!sw->buf) {
120 SW_NAME (sw), samples);
125 sw->rate = st_rate_start (sw->info.freq, sw->hw->info.freq);
127 sw->rate = st_rate_start (sw->hw->info.freq, sw->info.freq);
129 if (!sw->rate) {
130 qemu_free (sw->buf);
131 sw->buf = NULL;
135 sw->buf_samples = samples;
140 SW *sw,
148 audio_pcm_init_info (&sw->info, as);
149 sw->hw = hw;
150 sw->active = 0;
152 sw->ratio = ((int64_t) sw->hw->info.freq << 32) / sw->info.freq;
153 sw->total_hw_samples_mixed = 0;
154 sw->empty = 1;
156 sw->ratio = ((int64_t) sw->info.freq << 32) / sw->hw->info.freq;
160 sw->conv = mixeng_conv
162 sw->clip = mixeng_clip
164 [sw->info.nchannels == 2]
165 [sw->info.sign]
166 [sw->info.swap_endianness]
167 [audio_bits_to_index (sw->info.bits)];
169 sw->name = qemu_strdup (name);
170 err = glue (audio_pcm_sw_alloc_resources_, TYPE) (sw);
172 qemu_strfree (sw->name);
173 sw->name = NULL;
178 static void glue (audio_pcm_sw_fini_, TYPE) (SW *sw)
180 glue (audio_pcm_sw_free_resources_, TYPE) (sw);
181 if (sw->name) {
182 qemu_strfree (sw->name);
183 sw->name = NULL;
187 static void glue (audio_pcm_hw_add_sw_, TYPE) (HW *hw, SW *sw)
189 LIST_INSERT_HEAD (&hw->sw_head, sw, entries);
192 static void glue (audio_pcm_hw_del_sw_, TYPE) (SW *sw)
194 LIST_REMOVE (sw, entries);
342 SW *sw;
353 sw = audio_calloc (AUDIO_FUNC, 1, sizeof (*sw));
354 if (!sw) {
356 sw_name ? sw_name : "unknown", sizeof (*sw));
365 glue (audio_pcm_hw_add_sw_, TYPE) (hw, sw);
367 if (glue (audio_pcm_sw_init_, TYPE) (sw, hw, sw_name, as)) {
371 return sw;
374 glue (audio_pcm_hw_del_sw_, TYPE) (sw);
377 qemu_free (sw);
382 static void glue (audio_close_, TYPE) (AudioState *s, SW *sw)
384 glue (audio_pcm_sw_fini_, TYPE) (sw);
385 glue (audio_pcm_hw_del_sw_, TYPE) (sw);
386 glue (audio_pcm_hw_gc_, TYPE) (s, &sw->hw);
387 qemu_free (sw);
390 void glue (AUD_close_, TYPE) (QEMUSoundCard *card, SW *sw)
392 if (sw) {
399 glue (audio_close_, TYPE) (card->audio, sw);
405 SW *sw,
443 if (sw && audio_pcm_info_eq (&sw->info, as)) {
444 return sw;
448 if (conf.plive && sw && (!sw->active && !sw->empty)) {
449 live = sw->total_hw_samples_mixed;
452 dolog ("Replacing voice %s with %d live samples\n", SW_NAME (sw), live);
454 SW_NAME (sw), sw->info.freq, sw->info.bits, sw->info.nchannels);
463 old_sw = sw;
465 sw = NULL;
470 if (!glue (conf.fixed_, TYPE).enabled && sw) {
471 glue (AUD_close_, TYPE) (card, sw);
472 sw = NULL;
475 if (sw) {
476 HW *hw = sw->hw;
480 SW_NAME (sw));
484 glue (audio_pcm_sw_fini_, TYPE) (sw);
485 if (glue (audio_pcm_sw_init_, TYPE) (sw, hw, name, as)) {
490 sw = glue (audio_pcm_create_voice_pair_, TYPE) (s, name, as);
491 if (!sw) {
497 if (sw) {
498 sw->vol = nominal_volume;
499 sw->callback.fn = callback_fn;
500 sw->callback.opaque = callback_opaque;
507 / sw->info.bytes_per_second;
512 sw->total_hw_samples_mixed += mixed;
518 audio_pcm_print_info ("hw", &sw->hw->info);
519 audio_pcm_print_info ("sw", &sw->info);
523 return sw;
526 glue (AUD_close_, TYPE) (card, sw);
530 int glue (AUD_is_active_, TYPE) (SW *sw)
532 return sw ? sw->active : 0;
535 void glue (AUD_init_time_stamp_, TYPE) (SW *sw, QEMUAudioTimeStamp *ts)
537 if (!sw) {
541 ts->old_ts = sw->hw->ts_helper;
544 uint64_t glue (AUD_get_elapsed_usec_, TYPE) (SW *sw, QEMUAudioTimeStamp *ts)
548 if (!sw) {
552 cur_ts = sw->hw->ts_helper;
567 return (delta * sw->hw->info.freq) / 1000000;