<p><br>
>>><br>
>>> Dear developers,<br>
>>><br>
>>><br>
>>> I have question something about selecting logic between timer-based<br>
>>> and IRQ scheduling.<br>
>>><br>
>>> When I tried to load 'module-alsa-sink' with 'mmap=0 tsched=1'<br>
>>> parameters, tsched(timer-based scheduling) becomes disabled by below<br>
>>> codes.<br>
>>><br>
>>> It seems tsched is allowed only mmap supported ALSA devices. Why<br>
>>> tsched disabled while use non-mmap driven ALSA?<br>
>><br>
>><br>
>> Because rewinding is not available in non-mmap mode. That is, it's not<br>
>> possible to rewrite previously written data in non-mmap mode. In<br>
>> timer-based scheduling mode PulseAudio uses bigger buffer size, which<br>
>> causes problems if rewinding isn't available.<br>
><br>
><br>
> Sorry, rewinding is actually available in non-mmap mode. And, pulseaudio can rewind even without tsched (i.e., tsched == 0 does not imply max_rewind == 0). So the reasoning must be different. But I don't know the answer.<br><br></p>
<p><a href="http://cgit.freedesktop.org/pulseaudio/pulseaudio/log/src/modules/alsa?qt=grep&q=tsched">http://cgit.freedesktop.org/pulseaudio/pulseaudio/log/src/modules/alsa?qt=grep&q=tsched</a></p>
<p>set latency range only in tsched mode</p>
<p>don't enabled tsched on software ALSA devices<br></p>
<p>pa_bool_t pa_alsa_pcm_is_hw(snd_pcm_t *pcm) {<br>
+    snd_pcm_info_t* info;<br>
+    snd_pcm_info_alloca(&info);<br>
+<br>
+    pa_assert(pcm);<br>
+<br>
+    if (snd_pcm_info(pcm, info) < 0)<br>
+        return FALSE;<br>
+<br>
+    return snd_pcm_info_get_card(info) >= 0;</p>
<p>This patch seem strange since only those io plugin (e.g. a52) fail the test, most plugins pass the above test<br><br></p>
<p>alsa: don't make use of tsched related variables when tsched is disabled</p>
<p>+    if (u->use_tsched) {<br>
+        *sleep_usec = pa_bytes_to_usec(left_to_play, &u->sink->sample_spec);<br>
 <br>
-    if (*sleep_usec > process_usec)<br>
-        *sleep_usec -= process_usec;<br>
-    else<br>
+        if (*sleep_usec > process_usec)<br>
+            *sleep_usec -= process_usec;<br>
+        else<br>
+            *sleep_usec = 0;<br>
+    } else</p>
<p>Does it mean it won't sleep for a period time but polling continuosly when timer scheduling is disabled</p>
<p>It need sound card report accurate hwptr position when  hwbuf_unused can set  to non zero values<br></p>