pl bossart in Pulseaudio email list discussion said: " NAK. This does not work for me. You need to rewind also in the thread context:
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c index 2995c3c..4059a9b 100644 --- a/src/modules/alsa/alsa-sink.c +++ b/src/modules/alsa/alsa-sink.c @@ -953,7 +953,12 @@ static int update_sw_params(struct userdata *u) { }
pa_sink_set_max_request_within_thread(u->sink, u->hwbuf_size - u->hwbuf_unused); - pa_sink_set_max_rewind_within_thread(u->sink, u->hwbuf_size); + if (pa_alsa_pcm_is_hw(u->pcm_handle)) + pa_sink_set_max_rewind_within_thread(u->sink, u->hwbuf_size); + else { + pa_log("Disabling rewind_within_thread for device %s", u->device_name); + pa_sink_set_max_rewind_within_thread(u->sink, 0); + }
return 0; } @@ -1906,7 +1911,12 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca (double) pa_bytes_to_usec(u->hwbuf_size, &ss) / PA_USEC_PER_MSEC);
pa_sink_set_max_request(u->sink, u->hwbuf_size); - pa_sink_set_max_rewind(u->sink, u->hwbuf_size); + if (pa_alsa_pcm_is_hw(u->pcm_handle)) + pa_sink_set_max_rewind(u->sink, u->hwbuf_size); + else { + pa_log("Disabling rewind for device %s", u->device_name); + pa_sink_set_max_rewind(u->sink, 0); + }
if (u->use_tsched) { u->tsched_watermark = pa_usec_to_bytes_round_up(pa_bytes_to_usec_round_up(tsched_watermark, &requested_ss), &u->sink->sample_spec);
pa_pcm_is_hw detects a52 but allows rewind for iec958. Looks like a better fix than a hard-coded string compare. "
I didn't have a line with pa_sink_set_max_rewind_within_thread but I added it anyway with no ill effect. Probably my Pulseaudio is older.
Danny, can you update the patch with pl bossart's code?
pl bossart in Pulseaudio email list discussion said:
"
NAK. This does not work for me. You need to rewind also in the thread context:
diff --git a/src/modules/ alsa/alsa- sink.c b/src/modules/ alsa/alsa- sink.c alsa/alsa- sink.c alsa/alsa- sink.c sw_params( struct userdata *u) {
index 2995c3c..4059a9b 100644
--- a/src/modules/
+++ b/src/modules/
@@ -953,7 +953,12 @@ static int update_
}
pa_ sink_set_ max_request_ within_ thread( u->sink, u->hwbuf_size - set_max_ rewind_ within_ thread( u->sink, u->hwbuf_size); pcm_is_ hw(u->pcm_ handle) ) set_max_ rewind_ within_ thread( u->sink, u->hwbuf_size); within_ thread for device %s", u->device_name); set_max_ rewind_ within_ thread( u->sink, 0);
u->hwbuf_unused);
- pa_sink_
+ if (pa_alsa_
+ pa_sink_
+ else {
+ pa_log("Disabling rewind_
+ pa_sink_
+ }
return 0; sink_new( pa_module *m,
(double) pa_bytes_ to_usec( u->hwbuf_ size, &ss) /
}
@@ -1906,7 +1911,12 @@ pa_sink *pa_alsa_
pa_modargs *ma, const char*driver, pa_ca
PA_USEC_PER_MSEC);
pa_ sink_set_ max_request( u->sink, u->hwbuf_size); set_max_ rewind( u->sink, u->hwbuf_size); pcm_is_ hw(u->pcm_ handle) ) set_max_ rewind( u->sink, u->hwbuf_size); set_max_ rewind( u->sink, 0);
- pa_sink_
+ if (pa_alsa_
+ pa_sink_
+ else {
+ pa_log("Disabling rewind for device %s", u->device_name);
+ pa_sink_
+ }
if (u->use_tsched) {
u->tsched_ watermark = to_bytes_ round_up( pa_bytes_ to_usec_ round_up( tsched_ watermark, >sample_ spec);
pa_usec_
&requested_ss), &u->sink-
pa_pcm_is_hw detects a52 but allows rewind for iec958. Looks like a
better fix than a hard-coded string compare.
"
I didn't have a line with pa_sink_ set_max_ rewind_ within_ thread but I added it anyway with no ill effect. Probably my Pulseaudio is older.
Danny, can you update the patch with pl bossart's code?