bluez5-util: Add pa_bluetooth_transport_set_delay() and related HOOK 45/240945/1
authorSangchul Lee <sc11.lee@samsung.com>
Wed, 12 Aug 2020 10:56:32 +0000 (19:56 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Thu, 13 Aug 2020 03:51:26 +0000 (12:51 +0900)
This delay originates from the AVDTP 1.3 Delay Reporting feature.

This function sets the delay(us) to the bluetooth transport and notifies
the change via PA_BLUETOOTH_HOOK_TRANSPORT_DELAY_CHANGED hook.

[Version] 13.0-12
[Issue Type] New feature

Change-Id: I7d639e5f52d4b65c9a012d5716a4d544757d00e6
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/pulseaudio.spec
src/modules/bluetooth/bluez5-util.c
src/modules/bluetooth/bluez5-util.h

index 2951b93..f9777d7 100644 (file)
@@ -3,7 +3,7 @@
 Name:             pulseaudio
 Summary:          Improved Linux sound server
 Version:          13.0
-Release:          11
+Release:          12
 Group:            Multimedia/Audio
 License:          LGPL-2.1
 URL:              http://pulseaudio.org
index cd02ce4..8321bfd 100644 (file)
@@ -487,6 +487,19 @@ bool pa_bluetooth_device_source_transport_connected(const pa_bluetooth_device *d
 
     return false;
 }
+
+void pa_bluetooth_transport_set_delay(pa_bluetooth_transport *t, int64_t delay) {
+    pa_assert(t);
+
+    if (t->delay == delay)
+        return;
+
+    pa_log_debug("Transport %s delay: %" PRId64 " -> %" PRId64 "us", t->path, t->delay, delay);
+
+    t->delay = delay;
+
+    pa_hook_fire(&t->device->discovery->hooks[PA_BLUETOOTH_HOOK_TRANSPORT_DELAY_CHANGED], t);
+}
 #endif
 
 static int transport_state_from_string(const char* value, pa_bluetooth_transport_state_t *state) {
@@ -538,10 +551,8 @@ static void parse_transport_property(pa_bluetooth_transport *t, DBusMessageIter
             dbus_uint16_t value;
             dbus_message_iter_get_basic(&variant_i, &value);
 
-            if (pa_streq(key, "Delay")) {
-                pa_log_debug("Delay: %d", value);
-                // TODO: need to implement additional logic of delay reporting
-            }
+            if (pa_streq(key, "Delay"))
+                pa_bluetooth_transport_set_delay(t, value * 100); /* 1/10 ms to 1 us */
 
             break;
         }
index bdb4813..e93d32c 100644 (file)
@@ -57,7 +57,8 @@ typedef enum pa_bluetooth_hook {
     PA_BLUETOOTH_HOOK_DEVICE_UNLINK,                      /* Call data: pa_bluetooth_device */
     PA_BLUETOOTH_HOOK_TRANSPORT_STATE_CHANGED,            /* Call data: pa_bluetooth_transport */
 #ifdef __TIZEN_BT__
-    PA_BLUETOOTH_HOOK_SCO_STATE_CHANGED,            /* Call data: pa_bluetooth_transport */
+    PA_BLUETOOTH_HOOK_TRANSPORT_DELAY_CHANGED,            /* Call data: pa_bluetooth_transport */
+    PA_BLUETOOTH_HOOK_SCO_STATE_CHANGED,                  /* Call data: pa_bluetooth_transport */
 #endif
     PA_BLUETOOTH_HOOK_TRANSPORT_MICROPHONE_GAIN_CHANGED,  /* Call data: pa_bluetooth_transport */
     PA_BLUETOOTH_HOOK_TRANSPORT_SPEAKER_GAIN_CHANGED,     /* Call data: pa_bluetooth_transport */
@@ -100,6 +101,9 @@ struct pa_bluetooth_transport {
 
     uint16_t microphone_gain;
     uint16_t speaker_gain;
+#ifdef __TIZEN_BT__
+    int64_t delay;
+#endif
 
     pa_bluetooth_transport_state_t state;
 
@@ -175,6 +179,7 @@ bool pa_bluetooth_device_any_transport_connected(const pa_bluetooth_device *d);
 #ifdef __TIZEN_BT__
 bool pa_bluetooth_device_sink_transport_connected(const pa_bluetooth_device *d);
 bool pa_bluetooth_device_source_transport_connected(const pa_bluetooth_device *d);
+void pa_bluetooth_transport_set_delay(pa_bluetooth_transport *t, int64_t delay);
 #endif
 
 pa_bluetooth_device* pa_bluetooth_discovery_get_device_by_path(pa_bluetooth_discovery *y, const char *path);