Lines Matching refs:sw
42 #define SW_NAME(sw) (sw)->name ? (sw)->name : "unknown" argument
851 SWVoiceOut *sw; in audio_recalc_and_notify_capture() local
854 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_recalc_and_notify_capture()
855 if (sw->active) { in audio_recalc_and_notify_capture()
869 SWVoiceOut *sw = &sc->sw; in audio_detach_capture() local
871 int was_active = sw->active; in audio_detach_capture()
873 if (sw->rate) { in audio_detach_capture()
874 st_rate_stop (sw->rate); in audio_detach_capture()
875 sw->rate = NULL; in audio_detach_capture()
878 QLIST_REMOVE (sw, entries); in audio_detach_capture()
899 SWVoiceOut *sw; in audio_attach_capture() local
910 sw = &sc->sw; in audio_attach_capture()
911 sw->hw = hw_cap; in audio_attach_capture()
912 sw->info = hw->info; in audio_attach_capture()
913 sw->empty = 1; in audio_attach_capture()
914 sw->active = hw->enabled; in audio_attach_capture()
915 sw->conv = noop_conv; in audio_attach_capture()
916 sw->ratio = ((int64_t) hw_cap->info.freq << 32) / sw->info.freq; in audio_attach_capture()
917 sw->rate = st_rate_start (sw->info.freq, hw_cap->info.freq); in audio_attach_capture()
918 if (!sw->rate) { in audio_attach_capture()
919 dolog ("Could not start rate conversion for `%s'\n", SW_NAME (sw)); in audio_attach_capture()
920 qemu_free (sw); in audio_attach_capture()
923 QLIST_INSERT_HEAD (&hw_cap->sw_head, sw, entries); in audio_attach_capture()
926 asprintf (&sw->name, "for %p %d,%d,%d", in audio_attach_capture()
927 hw, sw->info.freq, sw->info.bits, sw->info.nchannels); in audio_attach_capture()
928 dolog ("Added %s active = %d\n", sw->name, sw->active); in audio_attach_capture()
930 if (sw->active) { in audio_attach_capture()
942 SWVoiceIn *sw; in audio_pcm_hw_find_min_in() local
945 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_pcm_hw_find_min_in()
946 if (sw->active) { in audio_pcm_hw_find_min_in()
947 m = audio_MIN (m, sw->total_hw_samples_acquired); in audio_pcm_hw_find_min_in()
988 static int audio_pcm_sw_get_rpos_in (SWVoiceIn *sw) in audio_pcm_sw_get_rpos_in() argument
990 HWVoiceIn *hw = sw->hw; in audio_pcm_sw_get_rpos_in()
991 int live = hw->total_samples_captured - sw->total_hw_samples_acquired; in audio_pcm_sw_get_rpos_in()
1008 int audio_pcm_sw_read (SWVoiceIn *sw, void *buf, int size) in audio_pcm_sw_read() argument
1010 HWVoiceIn *hw = sw->hw; in audio_pcm_sw_read()
1012 struct st_sample *src, *dst = sw->buf; in audio_pcm_sw_read()
1014 rpos = audio_pcm_sw_get_rpos_in (sw) % hw->samples; in audio_pcm_sw_read()
1016 live = hw->total_samples_captured - sw->total_hw_samples_acquired; in audio_pcm_sw_read()
1022 samples = size >> sw->info.shift; in audio_pcm_sw_read()
1027 swlim = (live * sw->ratio) >> 32; in audio_pcm_sw_read()
1048 st_rate_flow (sw->rate, src, dst, &isamp, &osamp); in audio_pcm_sw_read()
1056 sw->clip (buf, sw->buf, ret); in audio_pcm_sw_read()
1057 sw->total_hw_samples_acquired += total; in audio_pcm_sw_read()
1058 return ret << sw->info.shift; in audio_pcm_sw_read()
1066 SWVoiceOut *sw; in audio_pcm_hw_find_min_out() local
1070 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_pcm_hw_find_min_out()
1071 if (sw->active && !sw->empty) { in audio_pcm_hw_find_min_out()
1072 m = audio_MIN (m, sw->total_hw_samples_mixed); in audio_pcm_hw_find_min_out()
1106 int audio_pcm_sw_write (SWVoiceOut *sw, void *buf, int size) in audio_pcm_sw_write() argument
1111 if (!sw) { in audio_pcm_sw_write()
1115 hwsamples = sw->hw->samples; in audio_pcm_sw_write()
1117 live = sw->total_hw_samples_mixed; in audio_pcm_sw_write()
1125 dolog ("%s is full %d\n", sw->name, live); in audio_pcm_sw_write()
1130 wpos = (sw->hw->rpos + live) % hwsamples; in audio_pcm_sw_write()
1131 samples = size >> sw->info.shift; in audio_pcm_sw_write()
1134 swlim = ((int64_t) dead << 32) / sw->ratio; in audio_pcm_sw_write()
1137 sw->conv (sw->buf, buf, swlim, &sw->vol); in audio_pcm_sw_write()
1150 sw->rate, in audio_pcm_sw_write()
1151 sw->buf + pos, in audio_pcm_sw_write()
1152 sw->hw->mix_buf + wpos, in audio_pcm_sw_write()
1164 sw->total_hw_samples_mixed += total; in audio_pcm_sw_write()
1165 sw->empty = sw->total_hw_samples_mixed == 0; in audio_pcm_sw_write()
1170 SW_NAME (sw), in audio_pcm_sw_write()
1171 size >> sw->info.shift, in audio_pcm_sw_write()
1173 sw->total_hw_samples_mixed in audio_pcm_sw_write()
1177 return ret << sw->info.shift; in audio_pcm_sw_write()
1263 int AUD_write (SWVoiceOut *sw, void *buf, int size) in AUD_write() argument
1267 if (!sw) { in AUD_write()
1272 if (!sw->hw->enabled) { in AUD_write()
1273 dolog ("Writing to disabled voice %s\n", SW_NAME (sw)); in AUD_write()
1277 bytes = sw->hw->pcm_ops->write (sw, buf, size); in AUD_write()
1281 int AUD_read (SWVoiceIn *sw, void *buf, int size) in AUD_read() argument
1285 if (!sw) { in AUD_read()
1290 if (!sw->hw->enabled) { in AUD_read()
1291 dolog ("Reading from disabled voice %s\n", SW_NAME (sw)); in AUD_read()
1295 bytes = sw->hw->pcm_ops->read (sw, buf, size); in AUD_read()
1299 int AUD_get_buffer_size_out (SWVoiceOut *sw) in AUD_get_buffer_size_out() argument
1301 return sw->hw->samples << sw->hw->info.shift; in AUD_get_buffer_size_out()
1304 void AUD_set_active_out (SWVoiceOut *sw, int on) in AUD_set_active_out() argument
1308 if (!sw) { in AUD_set_active_out()
1312 hw = sw->hw; in AUD_set_active_out()
1313 if (sw->active != on) { in AUD_set_active_out()
1342 sc->sw.active = hw->enabled; in AUD_set_active_out()
1347 sw->active = on; in AUD_set_active_out()
1351 void AUD_set_active_in (SWVoiceIn *sw, int on) in AUD_set_active_in() argument
1355 if (!sw) { in AUD_set_active_in()
1359 hw = sw->hw; in AUD_set_active_in()
1360 if (sw->active != on) { in AUD_set_active_in()
1371 sw->total_hw_samples_acquired = hw->total_samples_captured; in AUD_set_active_in()
1388 sw->active = on; in AUD_set_active_in()
1392 static int audio_get_avail (SWVoiceIn *sw) in audio_get_avail() argument
1396 if (!sw) { in audio_get_avail()
1400 live = sw->hw->total_samples_captured - sw->total_hw_samples_acquired; in audio_get_avail()
1401 if (audio_bug (AUDIO_FUNC, live < 0 || live > sw->hw->samples)) { in audio_get_avail()
1402 dolog ("live=%d sw->hw->samples=%d\n", live, sw->hw->samples); in audio_get_avail()
1408 SW_NAME (sw), in audio_get_avail()
1409 live, (((int64_t) live << 32) / sw->ratio) << sw->info.shift in audio_get_avail()
1412 return (((int64_t) live << 32) / sw->ratio) << sw->info.shift; in audio_get_avail()
1415 static int audio_get_free (SWVoiceOut *sw) in audio_get_free() argument
1419 if (!sw) { in audio_get_free()
1423 live = sw->total_hw_samples_mixed; in audio_get_free()
1425 if (audio_bug (AUDIO_FUNC, live < 0 || live > sw->hw->samples)) { in audio_get_free()
1426 dolog ("live=%d sw->hw->samples=%d\n", live, sw->hw->samples); in audio_get_free()
1430 dead = sw->hw->samples - live; in audio_get_free()
1434 SW_NAME (sw), in audio_get_free()
1435 live, dead, (((int64_t) dead << 32) / sw->ratio) << sw->info.shift); in audio_get_free()
1438 return (((int64_t) dead << 32) / sw->ratio) << sw->info.shift; in audio_get_free()
1449 SWVoiceOut *sw = &sc->sw; in audio_capture_mix_and_clear() local
1459 sw->buf = hw->mix_buf + rpos2; in audio_capture_mix_and_clear()
1460 written = audio_pcm_sw_write (sw, NULL, bytes); in audio_capture_mix_and_clear()
1481 SWVoiceOut *sw; in audio_run_out() local
1506 sc->sw.active = 0; in audio_run_out()
1513 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_run_out()
1514 if (sw->active) { in audio_run_out()
1515 free = audio_get_free (sw); in audio_run_out()
1517 sw->callback.fn (sw->callback.opaque, free); in audio_run_out()
1542 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_run_out()
1543 if (!sw->active || sw->empty) { in audio_run_out()
1547 if (audio_bug (AUDIO_FUNC, played > sw->total_hw_samples_mixed)) { in audio_run_out()
1549 played, sw->total_hw_samples_mixed); in audio_run_out()
1550 played = sw->total_hw_samples_mixed; in audio_run_out()
1553 sw->total_hw_samples_mixed -= played; in audio_run_out()
1555 if (!sw->total_hw_samples_mixed) { in audio_run_out()
1556 sw->empty = 1; in audio_run_out()
1557 cleanup_required |= !sw->active && !sw->callback.fn; in audio_run_out()
1560 if (sw->active) { in audio_run_out()
1561 free = audio_get_free (sw); in audio_run_out()
1563 sw->callback.fn (sw->callback.opaque, free); in audio_run_out()
1571 sw = hw->sw_head.lh_first; in audio_run_out()
1572 while (sw) { in audio_run_out()
1573 sw1 = sw->entries.le_next; in audio_run_out()
1574 if (!sw->active && !sw->callback.fn) { in audio_run_out()
1578 audio_close_out (sw); in audio_run_out()
1580 sw = sw1; in audio_run_out()
1591 SWVoiceIn *sw; in audio_run_in() local
1600 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_run_in()
1601 sw->total_hw_samples_acquired -= min; in audio_run_in()
1603 if (sw->active) { in audio_run_in()
1606 avail = audio_get_avail (sw); in audio_run_in()
1608 sw->callback.fn (sw->callback.opaque, avail); in audio_run_in()
1622 SWVoiceOut *sw; in audio_run_capture() local
1645 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_run_capture()
1646 if (!sw->active && sw->empty) { in audio_run_capture()
1650 if (audio_bug (AUDIO_FUNC, captured > sw->total_hw_samples_mixed)) { in audio_run_capture()
1652 captured, sw->total_hw_samples_mixed); in audio_run_capture()
1653 captured = sw->total_hw_samples_mixed; in audio_run_capture()
1656 sw->total_hw_samples_mixed -= captured; in audio_run_capture()
1657 sw->empty = sw->total_hw_samples_mixed == 0; in audio_run_capture()
2171 SWVoiceOut *sw = cap->hw.sw_head.lh_first, *sw1; in AUD_del_capture() local
2173 while (sw) { in AUD_del_capture()
2174 SWVoiceCap *sc = (SWVoiceCap *) sw; in AUD_del_capture()
2176 dolog ("freeing %s\n", sw->name); in AUD_del_capture()
2179 sw1 = sw->entries.le_next; in AUD_del_capture()
2180 if (sw->rate) { in AUD_del_capture()
2181 st_rate_stop (sw->rate); in AUD_del_capture()
2182 sw->rate = NULL; in AUD_del_capture()
2184 QLIST_REMOVE (sw, entries); in AUD_del_capture()
2187 sw = sw1; in AUD_del_capture()
2197 void AUD_set_volume_out (SWVoiceOut *sw, int mute, uint8_t lvol, uint8_t rvol) in AUD_set_volume_out() argument
2199 if (sw) { in AUD_set_volume_out()
2200 sw->vol.mute = mute; in AUD_set_volume_out()
2201 sw->vol.l = nominal_volume.l * lvol / 255; in AUD_set_volume_out()
2202 sw->vol.r = nominal_volume.r * rvol / 255; in AUD_set_volume_out()
2206 void AUD_set_volume_in (SWVoiceIn *sw, int mute, uint8_t lvol, uint8_t rvol) in AUD_set_volume_in() argument
2208 if (sw) { in AUD_set_volume_in()
2209 sw->vol.mute = mute; in AUD_set_volume_in()
2210 sw->vol.l = nominal_volume.l * lvol / 255; in AUD_set_volume_in()
2211 sw->vol.r = nominal_volume.r * rvol / 255; in AUD_set_volume_in()