tizenaudio-policy: Support BT-SCO device for voice-information role 37/142137/2 accepted/tizen/4.0/unified/20170829.020134 accepted/tizen/unified/20170804.133301 submit/tizen/20170804.052139 submit/tizen_4.0/20170828.100004 submit/tizen_4.0/20170828.110004
authorSangchul Lee <sc11.lee@samsung.com>
Thu, 3 Aug 2017 00:40:25 +0000 (09:40 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Thu, 3 Aug 2017 00:48:01 +0000 (09:48 +0900)
A stream which has voice-information role can open BT-SCO actively
only if A2DP is not available while SCO is available now.

[Version] 5.0.167
[Issue Type] Enhancement

Change-Id: I676936aae44f241e594782c22863ae662db8ece4
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/pulseaudio-modules-tizen.spec
src/module-tizenaudio-policy.c
src/stream-manager.h

index a1197030c91bf1ff1dc6bc5d0d906b3d9934f079..a92d1318214fa309ef8ba9a4ae14c509d1cd2e0e 100644 (file)
@@ -1,6 +1,6 @@
 Name:             pulseaudio-modules-tizen
 Summary:          Pulseaudio modules for Tizen
-Version:          5.0.166
+Version:          5.0.167
 Release:          0
 Group:            Multimedia/Audio
 License:          LGPL-2.1+
index b060506746c9ed57d9b3ad88a2cafda0adb3f0ff..66ac4cfb0472bb5279271dbe0708be14c2c3c70f 100644 (file)
@@ -243,6 +243,35 @@ static pa_tz_device* _get_sco_connected_device(pa_device_manager *dm) {
     return NULL;
 }
 
+static bool is_bt_sco_connected(pa_device_manager *dm) {
+    pa_tz_device *bt_device;
+
+    pa_assert(dm);
+
+    if ((bt_device = _get_sco_connected_device(dm)))
+        return true;
+
+    return false;
+}
+
+static bool is_bt_a2dp_connected(pa_device_manager *dm) {
+    pa_idxset *device_list;
+    pa_tz_device *device;
+    uint32_t device_idx;
+
+    pa_assert(dm);
+
+    device_list = pa_device_manager_get_device_list(dm);
+
+    PA_IDXSET_FOREACH(device, device_list, device_idx) {
+        if (pa_streq(device->type, DEVICE_TYPE_BT_A2DP)) {
+            return true;
+        }
+    }
+
+    return false;
+}
+
 static bool is_bt_sco_opened(pa_device_manager *dm) {
     dm_device_bt_sco_status_t sco_status;
     pa_tz_device *bt_device;
@@ -540,13 +569,20 @@ static bool skip_bt_sco_device(struct userdata *u, const char *stream_role, cons
     pa_assert(device_type);
 
     if (pa_streq(stream_role, STREAM_ROLE_VOICE_INFORMATION) && pa_streq(device_type, DEVICE_TYPE_BT_SCO)) {
+        if (!is_bt_sco_connected(u->device_manager)) {
+            pa_log_warn("It is VOICE_INFORMATION, BT SCO is not connected, skip this device");
+            return true;
+        }
         if (is_bt_sco_opened(u->device_manager)) {
             /* remove the request of closing SCO */
             if (u->time_event_bt_sco_close) {
                 u->core->mainloop->time_free(u->time_event_bt_sco_close);
                 u->time_event_bt_sco_close = NULL;
             }
-            pa_log_info("It is VOICE_INFORMATION, BT SCO is already opened, do not skip this device");
+            pa_log_info("It is VOICE_INFORMATION, BT SCO is already opened, use BT SCO");
+            return false;
+        } else if (!is_bt_a2dp_connected(u->device_manager)) {
+            pa_log_info("It is VOICE_INFORMATION, BT SCO is connected, BT A2DP is not available, use BT SCO");
             return false;
         } else {
             pa_log_info("It is VOICE_INFORMATION, BT SCO is not opened, skip this device");
index 5c0d97fb134bde2da4b521430de7d5d1d3bca871..ab1dd09e79b47ebf767d04e54357822983dfdbfc 100644 (file)
@@ -50,7 +50,8 @@
 #define IS_ROLE_AVAILABLE_BT_SCO_OPEN(stream_role) \
     (stream_role && (pa_streq(stream_role, STREAM_ROLE_CALL_VOICE) || pa_streq(stream_role, STREAM_ROLE_CALL_VIDEO) || \
                      pa_streq(stream_role, STREAM_ROLE_VOIP) || pa_streq(stream_role, STREAM_ROLE_RINGBACKTONE_CALL) || \
-                     pa_streq(stream_role, STREAM_ROLE_VOICE_RECOGNITION) || pa_streq(stream_role, STREAM_ROLE_VOICE_RECOGNITION_SERVICE)))
+                     pa_streq(stream_role, STREAM_ROLE_VOICE_RECOGNITION) || pa_streq(stream_role, STREAM_ROLE_VOICE_RECOGNITION_SERVICE) || \
+                     pa_streq(stream_role, STREAM_ROLE_VOICE_INFORMATION)))
 
 #define CONVERT_TO_DEVICE_ROLE(x_stream_role, x_device_role) \
 do { \