Lines Matching full:sw
55 #define SW_NAME(sw) (sw)->name ? (sw)->name : "unknown" argument
426 SWVoiceOut *sw; in audio_recalc_and_notify_capture() local
429 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_recalc_and_notify_capture()
430 if (sw->active) { in audio_recalc_and_notify_capture()
444 SWVoiceOut *sw = &sc->sw; in audio_detach_capture() local
446 int was_active = sw->active; in audio_detach_capture()
448 if (sw->rate) { in audio_detach_capture()
449 st_rate_stop (sw->rate); in audio_detach_capture()
450 sw->rate = NULL; in audio_detach_capture()
453 QLIST_REMOVE (sw, entries); in audio_detach_capture()
474 SWVoiceOut *sw; in audio_attach_capture() local
480 sw = &sc->sw; in audio_attach_capture()
481 sw->hw = hw_cap; in audio_attach_capture()
482 sw->info = hw->info; in audio_attach_capture()
483 sw->empty = 1; in audio_attach_capture()
484 sw->active = hw->enabled; in audio_attach_capture()
485 sw->vol = nominal_volume; in audio_attach_capture()
486 sw->rate = st_rate_start (sw->info.freq, hw_cap->info.freq); in audio_attach_capture()
487 QLIST_INSERT_HEAD (&hw_cap->sw_head, sw, entries); in audio_attach_capture()
490 sw->name = g_strdup_printf ("for %p %d,%d,%d", in audio_attach_capture()
491 hw, sw->info.freq, sw->info.bits, in audio_attach_capture()
492 sw->info.nchannels); in audio_attach_capture()
493 dolog ("Added %s active = %d\n", sw->name, sw->active); in audio_attach_capture()
495 if (sw->active) { in audio_attach_capture()
507 SWVoiceIn *sw; in audio_pcm_hw_find_min_in() local
510 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_pcm_hw_find_min_in()
511 if (sw->active) { in audio_pcm_hw_find_min_in()
512 m = MIN (m, sw->total_hw_samples_acquired); in audio_pcm_hw_find_min_in()
549 static void audio_pcm_sw_resample_in(SWVoiceIn *sw, in audio_pcm_sw_resample_in() argument
553 HWVoiceIn *hw = sw->hw; in audio_pcm_sw_resample_in()
557 live = hw->total_samples_captured - sw->total_hw_samples_acquired; in audio_pcm_sw_resample_in()
563 dst = sw->resample_buf.buffer; in audio_pcm_sw_resample_in()
565 st_rate_flow(sw->rate, src, dst, &frames_in, &frames_out); in audio_pcm_sw_resample_in()
576 st_rate_flow(sw->rate, src, dst, &frames_in, &frames_out); in audio_pcm_sw_resample_in()
582 static size_t audio_pcm_sw_read(SWVoiceIn *sw, void *buf, size_t buf_len) in audio_pcm_sw_read() argument
584 HWVoiceIn *hw = sw->hw; in audio_pcm_sw_read()
587 live = hw->total_samples_captured - sw->total_hw_samples_acquired; in audio_pcm_sw_read()
596 frames_out_max = MIN(buf_len / sw->info.bytes_per_frame, in audio_pcm_sw_read()
597 sw->resample_buf.size); in audio_pcm_sw_read()
599 audio_pcm_sw_resample_in(sw, live, frames_out_max, &total_in, &total_out); in audio_pcm_sw_read()
602 mixeng_volume(sw->resample_buf.buffer, total_out, &sw->vol); in audio_pcm_sw_read()
604 sw->clip(buf, sw->resample_buf.buffer, total_out); in audio_pcm_sw_read()
606 sw->total_hw_samples_acquired += total_in; in audio_pcm_sw_read()
607 return total_out * sw->info.bytes_per_frame; in audio_pcm_sw_read()
615 SWVoiceOut *sw; in audio_pcm_hw_find_min_out() local
619 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_pcm_hw_find_min_out()
620 if (sw->active || !sw->empty) { in audio_pcm_hw_find_min_out()
621 m = MIN (m, sw->total_hw_samples_mixed); in audio_pcm_hw_find_min_out()
680 static void audio_pcm_sw_resample_out(SWVoiceOut *sw, in audio_pcm_sw_resample_out() argument
684 HWVoiceOut *hw = sw->hw; in audio_pcm_sw_resample_out()
688 live = sw->total_hw_samples_mixed; in audio_pcm_sw_resample_out()
692 src = sw->resample_buf.buffer; in audio_pcm_sw_resample_out()
696 st_rate_flow_mix(sw->rate, src, dst, &frames_in, &frames_out); in audio_pcm_sw_resample_out()
707 st_rate_flow_mix(sw->rate, src, dst, &frames_in, &frames_out); in audio_pcm_sw_resample_out()
713 static size_t audio_pcm_sw_write(SWVoiceOut *sw, void *buf, size_t buf_len) in audio_pcm_sw_write() argument
715 HWVoiceOut *hw = sw->hw; in audio_pcm_sw_write()
719 live = sw->total_hw_samples_mixed; in audio_pcm_sw_write()
727 dolog ("%s is full %zu\n", sw->name, live); in audio_pcm_sw_write()
736 sw_max = st_rate_frames_in(sw->rate, frames_out_max); in audio_pcm_sw_write()
737 fe_max = MIN(buf_len / sw->info.bytes_per_frame + sw->resample_buf.pos, in audio_pcm_sw_write()
738 sw->resample_buf.size); in audio_pcm_sw_write()
745 if (frames_in_max > sw->resample_buf.pos) { in audio_pcm_sw_write()
746 sw->conv(sw->resample_buf.buffer + sw->resample_buf.pos, in audio_pcm_sw_write()
747 buf, frames_in_max - sw->resample_buf.pos); in audio_pcm_sw_write()
748 if (!sw->hw->pcm_ops->volume_out) { in audio_pcm_sw_write()
749 mixeng_volume(sw->resample_buf.buffer + sw->resample_buf.pos, in audio_pcm_sw_write()
750 frames_in_max - sw->resample_buf.pos, &sw->vol); in audio_pcm_sw_write()
754 audio_pcm_sw_resample_out(sw, frames_in_max, frames_out_max, in audio_pcm_sw_write()
757 sw->total_hw_samples_mixed += total_out; in audio_pcm_sw_write()
758 sw->empty = sw->total_hw_samples_mixed == 0; in audio_pcm_sw_write()
768 *sw->resample_buf.buffer = *(sw->resample_buf.buffer + total_in); in audio_pcm_sw_write()
769 total_in += 1 - sw->resample_buf.pos; in audio_pcm_sw_write()
770 sw->resample_buf.pos = 1; in audio_pcm_sw_write()
771 } else if (total_in >= sw->resample_buf.pos) { in audio_pcm_sw_write()
772 total_in -= sw->resample_buf.pos; in audio_pcm_sw_write()
773 sw->resample_buf.pos = 0; in audio_pcm_sw_write()
779 SW_NAME(sw), in audio_pcm_sw_write()
780 buf_len / sw->info.bytes_per_frame, in audio_pcm_sw_write()
782 sw->total_hw_samples_mixed in audio_pcm_sw_write()
786 return total_in * sw->info.bytes_per_frame; in audio_pcm_sw_write()
862 size_t AUD_write(SWVoiceOut *sw, void *buf, size_t size) in AUD_write() argument
866 if (!sw) { in AUD_write()
870 hw = sw->hw; in AUD_write()
873 dolog ("Writing to disabled voice %s\n", SW_NAME (sw)); in AUD_write()
878 return audio_pcm_sw_write(sw, buf, size); in AUD_write()
884 size_t AUD_read(SWVoiceIn *sw, void *buf, size_t size) in AUD_read() argument
888 if (!sw) { in AUD_read()
892 hw = sw->hw; in AUD_read()
895 dolog ("Reading from disabled voice %s\n", SW_NAME (sw)); in AUD_read()
900 return audio_pcm_sw_read(sw, buf, size); in AUD_read()
906 int AUD_get_buffer_size_out(SWVoiceOut *sw) in AUD_get_buffer_size_out() argument
908 return sw->hw->samples * sw->hw->info.bytes_per_frame; in AUD_get_buffer_size_out()
911 void AUD_set_active_out (SWVoiceOut *sw, int on) in AUD_set_active_out() argument
915 if (!sw) { in AUD_set_active_out()
919 hw = sw->hw; in AUD_set_active_out()
920 if (sw->active != on) { in AUD_set_active_out()
921 AudioState *s = sw->s; in AUD_set_active_out()
950 sc->sw.active = hw->enabled; in AUD_set_active_out()
955 sw->active = on; in AUD_set_active_out()
959 void AUD_set_active_in (SWVoiceIn *sw, int on) in AUD_set_active_in() argument
963 if (!sw) { in AUD_set_active_in()
967 hw = sw->hw; in AUD_set_active_in()
968 if (sw->active != on) { in AUD_set_active_in()
969 AudioState *s = sw->s; in AUD_set_active_in()
982 sw->total_hw_samples_acquired = hw->total_samples_captured; in AUD_set_active_in()
1000 sw->active = on; in AUD_set_active_in()
1004 static size_t audio_get_avail (SWVoiceIn *sw) in audio_get_avail() argument
1008 if (!sw) { in audio_get_avail()
1012 live = sw->hw->total_samples_captured - sw->total_hw_samples_acquired; in audio_get_avail()
1013 if (audio_bug(__func__, live > sw->hw->conv_buf.size)) { in audio_get_avail()
1014 dolog("live=%zu sw->hw->conv_buf.size=%zu\n", live, in audio_get_avail()
1015 sw->hw->conv_buf.size); in audio_get_avail()
1021 SW_NAME (sw), in audio_get_avail()
1022 live, st_rate_frames_out(sw->rate, live) in audio_get_avail()
1028 static size_t audio_get_free(SWVoiceOut *sw) in audio_get_free() argument
1032 if (!sw) { in audio_get_free()
1036 live = sw->total_hw_samples_mixed; in audio_get_free()
1038 if (audio_bug(__func__, live > sw->hw->mix_buf.size)) { in audio_get_free()
1039 dolog("live=%zu sw->hw->mix_buf.size=%zu\n", live, in audio_get_free()
1040 sw->hw->mix_buf.size); in audio_get_free()
1044 dead = sw->hw->mix_buf.size - live; in audio_get_free()
1048 SW_NAME(sw), live, dead, st_rate_frames_in(sw->rate, dead)); in audio_get_free()
1063 SWVoiceOut *sw = &sc->sw; in audio_capture_mix_and_clear() local
1072 sw->resample_buf.buffer = hw->mix_buf.buffer + rpos2; in audio_capture_mix_and_clear()
1073 sw->resample_buf.size = to_read; in audio_capture_mix_and_clear()
1074 live = sw->total_hw_samples_mixed; in audio_capture_mix_and_clear()
1076 audio_pcm_sw_resample_out(sw, in audio_capture_mix_and_clear()
1077 to_read, sw->hw->mix_buf.size - live, in audio_capture_mix_and_clear()
1080 sw->total_hw_samples_mixed += frames_out; in audio_capture_mix_and_clear()
1081 sw->empty = sw->total_hw_samples_mixed == 0; in audio_capture_mix_and_clear()
1140 SWVoiceOut *sw; in audio_run_out() local
1148 /* there is exactly 1 sw for each hw with no mixeng */ in audio_run_out()
1149 sw = hw->sw_head.lh_first; in audio_run_out()
1159 if (sw->active) { in audio_run_out()
1160 sw->callback.fn(sw->callback.opaque, in audio_run_out()
1161 hw_free * sw->info.bytes_per_frame); in audio_run_out()
1171 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_run_out()
1172 if (sw->active) { in audio_run_out()
1173 size_t sw_free = audio_get_free(sw); in audio_run_out()
1176 if (hw_free > sw->total_hw_samples_mixed) { in audio_run_out()
1177 free = st_rate_frames_in(sw->rate, in audio_run_out()
1178 MIN(sw_free, hw_free - sw->total_hw_samples_mixed)); in audio_run_out()
1182 if (free > sw->resample_buf.pos) { in audio_run_out()
1183 free = MIN(free, sw->resample_buf.size) in audio_run_out()
1184 - sw->resample_buf.pos; in audio_run_out()
1185 sw->callback.fn(sw->callback.opaque, in audio_run_out()
1186 free * sw->info.bytes_per_frame); in audio_run_out()
1212 sc->sw.active = 0; in audio_run_out()
1243 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_run_out()
1244 if (!sw->active && sw->empty) { in audio_run_out()
1248 if (audio_bug(__func__, played > sw->total_hw_samples_mixed)) { in audio_run_out()
1249 dolog("played=%zu sw->total_hw_samples_mixed=%zu\n", in audio_run_out()
1250 played, sw->total_hw_samples_mixed); in audio_run_out()
1251 played = sw->total_hw_samples_mixed; in audio_run_out()
1254 sw->total_hw_samples_mixed -= played; in audio_run_out()
1256 if (!sw->total_hw_samples_mixed) { in audio_run_out()
1257 sw->empty = 1; in audio_run_out()
1297 /* there is exactly 1 sw for each hw with no mixeng */ in audio_run_in()
1298 SWVoiceIn *sw = hw->sw_head.lh_first; in audio_run_in() local
1299 if (sw->active) { in audio_run_in()
1300 sw->callback.fn(sw->callback.opaque, INT_MAX); in audio_run_in()
1307 SWVoiceIn *sw; in audio_run_in() local
1321 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_run_in()
1322 sw->total_hw_samples_acquired -= min; in audio_run_in()
1324 if (sw->active) { in audio_run_in()
1325 size_t sw_avail = audio_get_avail(sw); in audio_run_in()
1328 avail = st_rate_frames_out(sw->rate, sw_avail); in audio_run_in()
1330 avail = MIN(avail, sw->resample_buf.size); in audio_run_in()
1331 sw->callback.fn(sw->callback.opaque, in audio_run_in()
1332 avail * sw->info.bytes_per_frame); in audio_run_in()
1346 SWVoiceOut *sw; in audio_run_capture() local
1369 for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) { in audio_run_capture()
1370 if (!sw->active && sw->empty) { in audio_run_capture()
1374 if (audio_bug(__func__, captured > sw->total_hw_samples_mixed)) { in audio_run_capture()
1375 dolog("captured=%zu sw->total_hw_samples_mixed=%zu\n", in audio_run_capture()
1376 captured, sw->total_hw_samples_mixed); in audio_run_capture()
1377 captured = sw->total_hw_samples_mixed; in audio_run_capture()
1380 sw->total_hw_samples_mixed -= captured; in audio_run_capture()
1381 sw->empty = sw->total_hw_samples_mixed == 0; in audio_run_capture()
1918 SWVoiceOut *sw = cap->hw.sw_head.lh_first, *sw1; in AUD_del_capture() local
1920 while (sw) { in AUD_del_capture()
1921 SWVoiceCap *sc = (SWVoiceCap *) sw; in AUD_del_capture()
1923 dolog ("freeing %s\n", sw->name); in AUD_del_capture()
1926 sw1 = sw->entries.le_next; in AUD_del_capture()
1927 if (sw->rate) { in AUD_del_capture()
1928 st_rate_stop (sw->rate); in AUD_del_capture()
1929 sw->rate = NULL; in AUD_del_capture()
1931 QLIST_REMOVE (sw, entries); in AUD_del_capture()
1934 sw = sw1; in AUD_del_capture()
1946 void AUD_set_volume_out (SWVoiceOut *sw, int mute, uint8_t lvol, uint8_t rvol) in AUD_set_volume_out() argument
1949 audio_set_volume_out(sw, &vol); in AUD_set_volume_out()
1952 void audio_set_volume_out(SWVoiceOut *sw, Volume *vol) in audio_set_volume_out() argument
1954 if (sw) { in audio_set_volume_out()
1955 HWVoiceOut *hw = sw->hw; in audio_set_volume_out()
1957 sw->vol.mute = vol->mute; in audio_set_volume_out()
1958 sw->vol.l = nominal_volume.l * vol->vol[0] / 255; in audio_set_volume_out()
1959 sw->vol.r = nominal_volume.l * vol->vol[vol->channels > 1 ? 1 : 0] / in audio_set_volume_out()
1968 void AUD_set_volume_in (SWVoiceIn *sw, int mute, uint8_t lvol, uint8_t rvol) in AUD_set_volume_in() argument
1971 audio_set_volume_in(sw, &vol); in AUD_set_volume_in()
1974 void audio_set_volume_in(SWVoiceIn *sw, Volume *vol) in audio_set_volume_in() argument
1976 if (sw) { in audio_set_volume_in()
1977 HWVoiceIn *hw = sw->hw; in audio_set_volume_in()
1979 sw->vol.mute = vol->mute; in audio_set_volume_in()
1980 sw->vol.l = nominal_volume.l * vol->vol[0] / 255; in audio_set_volume_in()
1981 sw->vol.r = nominal_volume.r * vol->vol[vol->channels > 1 ? 1 : 0] / in audio_set_volume_in()