null-sink: Change block size to 50 msec when norewinds is set 54/248554/2
authorJaechul Lee <jcsing.lee@samsung.com>
Fri, 6 Nov 2020 01:52:33 +0000 (10:52 +0900)
committerJaechul Lee <jcsing.lee@samsung.com>
Mon, 30 Nov 2020 01:09:50 +0000 (10:09 +0900)
playing sound through null sink takes almost 2 seconds at first time
playback when norewinds is set. Because block_usec is set 2 seconds at
initializing time. The value will be changed 50 msec after calling
update_request_latency callback.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/406>

[jcsing.lee: backport mainline commit 1e7adb4fd for null-sink latency]

Change-Id: I2f47c14ae8497421a0ab8f27e9043674191e95c4

packaging/pulseaudio.spec
src/modules/module-null-sink.c

index 0a919d6..6579991 100644 (file)
@@ -3,7 +3,7 @@
 Name:             pulseaudio
 Summary:          Improved Linux sound server
 Version:          13.0
-Release:          22
+Release:          23
 Group:            Multimedia/Audio
 License:          LGPL-2.1
 URL:              http://pulseaudio.org
index 5b0627f..e644262 100644 (file)
@@ -57,8 +57,8 @@ PA_MODULE_USAGE(
         "norewinds=<disable rewinds>");
 
 #define DEFAULT_SINK_NAME "null"
-#define BLOCK_USEC (PA_USEC_PER_SEC * 2)
-#define NOREWINDS_MAX_LATENCY_USEC (50*PA_USEC_PER_MSEC)
+#define BLOCK_USEC (2 * PA_USEC_PER_SEC)
+#define BLOCK_USEC_NOREWINDS (50 * PA_USEC_PER_MSEC)
 
 struct userdata {
     pa_core *core;
@@ -318,6 +318,7 @@ int pa__init(pa_module*m) {
     u->core = m->core;
     u->module = m;
     u->rtpoll = pa_rtpoll_new();
+    u->block_usec = BLOCK_USEC;
 
     if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
         pa_log("pa_thread_mq_init() failed.");
@@ -385,13 +386,15 @@ int pa__init(pa_module*m) {
     pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
     pa_sink_set_rtpoll(u->sink, u->rtpoll);
 
-    u->block_usec = BLOCK_USEC;
-    nbytes = pa_usec_to_bytes(u->block_usec, &u->sink->sample_spec);
-
     if(pa_modargs_get_value_boolean(ma, "norewinds", &u->norewinds) < 0){
         pa_log("Invalid argument, norewinds expects a boolean value.");
     }
 
+    if (u->norewinds)
+        u->block_usec = BLOCK_USEC_NOREWINDS;
+
+    nbytes = pa_usec_to_bytes(u->block_usec, &u->sink->sample_spec);
+
     if(u->norewinds){
         pa_sink_set_max_rewind(u->sink, 0);
     } else {
@@ -405,11 +408,7 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
-    if(u->norewinds){
-        pa_sink_set_latency_range(u->sink, 0, NOREWINDS_MAX_LATENCY_USEC);
-    } else {
-        pa_sink_set_latency_range(u->sink, 0, BLOCK_USEC);
-    }
+    pa_sink_set_latency_range(u->sink, 0, u->block_usec);
 
     pa_sink_put(u->sink);