Loading audio/noaudio.c +17 −26 Original line number Diff line number Diff line Loading @@ -41,10 +41,9 @@ typedef struct NoVoiceIn { int64_t old_ticks; } NoVoiceIn; static size_t no_run_out(HWVoiceOut *hw, size_t live) static size_t no_write(HWVoiceOut *hw, void *buf, size_t len) { NoVoiceOut *no = (NoVoiceOut *) hw; size_t decr, samples; int64_t now; int64_t ticks; int64_t bytes; Loading @@ -52,13 +51,9 @@ static size_t no_run_out(HWVoiceOut *hw, size_t live) now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); ticks = now - no->old_ticks; bytes = muldiv64(ticks, hw->info.bytes_per_second, NANOSECONDS_PER_SECOND); bytes = MIN(bytes, SIZE_MAX); samples = bytes >> hw->info.shift; no->old_ticks = now; decr = MIN (live, samples); hw->rpos = (hw->rpos + decr) % hw->samples; return decr; return MIN(len, bytes); } static int no_init_out(HWVoiceOut *hw, struct audsettings *as, void *drv_opaque) Loading Loading @@ -92,25 +87,21 @@ static void no_fini_in (HWVoiceIn *hw) (void) hw; } static size_t no_run_in(HWVoiceIn *hw) static size_t no_read(HWVoiceIn *hw, void *buf, size_t size) { size_t to_clear; NoVoiceIn *no = (NoVoiceIn *) hw; size_t live = audio_pcm_hw_get_live_in(hw); size_t dead = hw->samples - live; size_t samples = 0; if (dead) { int64_t now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); int64_t ticks = now - no->old_ticks; int64_t bytes = muldiv64(ticks, hw->info.bytes_per_second, NANOSECONDS_PER_SECOND); no->old_ticks = now; bytes = MIN (bytes, SIZE_MAX); samples = bytes >> hw->info.shift; samples = MIN (samples, dead); } return samples; to_clear = MIN(bytes, size); audio_pcm_info_clear_buf(&hw->info, buf, to_clear >> hw->info.shift); return to_clear; } static int no_ctl_in (HWVoiceIn *hw, int cmd, ...) Loading @@ -133,12 +124,12 @@ static void no_audio_fini (void *opaque) static struct audio_pcm_ops no_pcm_ops = { .init_out = no_init_out, .fini_out = no_fini_out, .run_out = no_run_out, .write = no_write, .ctl_out = no_ctl_out, .init_in = no_init_in, .fini_in = no_fini_in, .run_in = no_run_in, .read = no_read, .ctl_in = no_ctl_in }; Loading Loading
audio/noaudio.c +17 −26 Original line number Diff line number Diff line Loading @@ -41,10 +41,9 @@ typedef struct NoVoiceIn { int64_t old_ticks; } NoVoiceIn; static size_t no_run_out(HWVoiceOut *hw, size_t live) static size_t no_write(HWVoiceOut *hw, void *buf, size_t len) { NoVoiceOut *no = (NoVoiceOut *) hw; size_t decr, samples; int64_t now; int64_t ticks; int64_t bytes; Loading @@ -52,13 +51,9 @@ static size_t no_run_out(HWVoiceOut *hw, size_t live) now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); ticks = now - no->old_ticks; bytes = muldiv64(ticks, hw->info.bytes_per_second, NANOSECONDS_PER_SECOND); bytes = MIN(bytes, SIZE_MAX); samples = bytes >> hw->info.shift; no->old_ticks = now; decr = MIN (live, samples); hw->rpos = (hw->rpos + decr) % hw->samples; return decr; return MIN(len, bytes); } static int no_init_out(HWVoiceOut *hw, struct audsettings *as, void *drv_opaque) Loading Loading @@ -92,25 +87,21 @@ static void no_fini_in (HWVoiceIn *hw) (void) hw; } static size_t no_run_in(HWVoiceIn *hw) static size_t no_read(HWVoiceIn *hw, void *buf, size_t size) { size_t to_clear; NoVoiceIn *no = (NoVoiceIn *) hw; size_t live = audio_pcm_hw_get_live_in(hw); size_t dead = hw->samples - live; size_t samples = 0; if (dead) { int64_t now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); int64_t ticks = now - no->old_ticks; int64_t bytes = muldiv64(ticks, hw->info.bytes_per_second, NANOSECONDS_PER_SECOND); no->old_ticks = now; bytes = MIN (bytes, SIZE_MAX); samples = bytes >> hw->info.shift; samples = MIN (samples, dead); } return samples; to_clear = MIN(bytes, size); audio_pcm_info_clear_buf(&hw->info, buf, to_clear >> hw->info.shift); return to_clear; } static int no_ctl_in (HWVoiceIn *hw, int cmd, ...) Loading @@ -133,12 +124,12 @@ static void no_audio_fini (void *opaque) static struct audio_pcm_ops no_pcm_ops = { .init_out = no_init_out, .fini_out = no_fini_out, .run_out = no_run_out, .write = no_write, .ctl_out = no_ctl_out, .init_in = no_init_in, .fini_in = no_fini_in, .run_in = no_run_in, .read = no_read, .ctl_in = no_ctl_in }; Loading