<div dir="ltr"><p><br>
>><br>
>><br>
>> ><br>
>> >> do loopback module assume sink is not running when it start source capture?<br>
>> >><br>
>> > Sink and source are started independently. Source data is discarded until the sink-input has<br>
>> > called pop() the first time.<br>
>><br>
>> But you cannot skip more than 9ms source data since you need 1ms( or  25ms fragment time when not using timer schedule mode) to capture<br>
>><br>
>> If you are using usb as source and hda as sink, hda fifo trigger dma transfer whenever the fifo fill level is less than fifo threshold, you need to fill 256 bytes at first write to avoid fifo underrun<br>
>><br>
>><br>
> Yes, if the source takes too long to start up, there will be an an underrun.<br>
> But as I said, I fill the memblockq with silence to the full requested<br>
> end-to-end latency before starting source or sink. This is usually sufficient<br>
> to avoid underruns at startup.<br>
> Additionally the new loopback code contains an underrun protection,<br>
> if the configured end-to-end latency is too small. After 3 underruns it<br>
> will increase the target latency by 5 ms until no underruns occur.<br>
><br>
></p>
<p>Your method require source and sink suppport same rate and format, how about usb webcam mic support only 16000Hz and hda sink which do not support 16000Hz?</p>
<p>How about those fixed latency sound cards which does not support latency adjust (e.g. granularity is period time 25ms)  pcm pointer only increase by period size when interrupt occur</p><p><br></p><p>ar 30 21:46:01 pico1 pulseaudio[11846]: [alsa-sink-USB Audio] alsa-sink.c: Starting playback.</p><p>Mar 30 21:46:01 pico1 pulseaudio[11846]: [pulseaudio] module-suspend-on-idle.c: Sink alsa_output.usb-0d8c_C-Media_USB_Headphone_Set-00.analog-stereo becomes idle, timeout in 5 seconds.</p><p>Mar 30 21:46:01 pico1 pulseaudio[11846]: [alsa-sink-USB Audio] ratelimit.c: 322 events suppressed</p><p>Mar 30 21:46:01 pico1 pulseaudio[11846]: [alsa-sink-USB Audio] alsa-sink.c: Cutting sleep time for the initial iterations by half.</p><p>Mar 30 21:46:01 pico1 pulseaudio[11846]: [alsa-sink-USB Audio] alsa-sink.c: Cutting sleep time for the initial iterations by half.</p><p>why 322 events suppressed ?</p><p><br></p><p>0 21:46:01 pico1 pulseaudio[11846]: [pulseaudio] module-loopback.c: Minimum possible latency: 2,50</p><p>Mar 30 21:46:01 pico1 pulseaudio[11846]: [alsa-sink-USB Audio] alsa-sink.c: Cutting sleep time for the initial iterations by half.</p><p>Mar 30 21:46:01 pico1 pulseaudio[11846]: [alsa-sink-USB Audio] alsa-sink.c: Cutting sleep time for the initial iterations by half.</p><p>will module loopback stop when user specify latency less than minimum possible ?</p><p><br></p>
<p>How do you know there is no underrun when stop threshold is set to boundary?</p>
<p>How do you recover underrun when source capture less data than sink playback?  Do loopback inject some data?</p>
<p>The lowest latency is hardware dependent, will the loopback module recalcuate  after user switch sink or source  ? </p>
<p>Neither alsa avail nor delay increase like a straight line, the main problem is you don't know the process time for your to skip and copy data from input to output, </p>
<p>how can the latency be accurate? </p>
</div>