device-manager : Add Interface to load forwarding device 49/89349/7
authorMok Jeongho <jho.mok@samsung.com>
Fri, 23 Sep 2016 07:07:06 +0000 (16:07 +0900)
committerMok Jeongho <jho.mok@samsung.com>
Tue, 27 Sep 2016 02:32:18 +0000 (11:32 +0900)
[Version] 5.0.78
[Profile] Common
[Issue Type] Feature

Change-Id: Icf7ee44fb45dbf34188e889794b8e83b6cac0010

packaging/pulseaudio-modules-tizen.spec
src/device-manager.c
src/device-manager.h

index c7b62d7..ab20110 100644 (file)
@@ -1,6 +1,6 @@
 Name:             pulseaudio-modules-tizen
 Summary:          Pulseaudio modules for Tizen
-Version:          5.0.77
+Version:          5.0.78
 Release:          0
 Group:            Multimedia/Audio
 License:          LGPL-2.1+
index 81ed0c2..3cbd7c9 100644 (file)
@@ -1820,6 +1820,43 @@ static int _load_type_devices(struct device_type_info *type_info, bool is_playba
     return 0;
 }
 
+static pa_tz_device* _load_forwarding_device(pa_device_manager *dm) {
+    pa_tz_device_new_data data;
+    pa_tz_device *spk_device, *forwarding_device;
+    pa_sink *spk_sink;
+
+    pa_assert(dm);
+
+    pa_log_info("Load forwarding device");
+
+    if ((forwarding_device = _device_list_get_device(dm, DEVICE_TYPE_FORWARDING, NULL))) {
+        pa_log_info("Forwarding device already exists");
+        return forwarding_device;
+    }
+
+    if ((spk_device = _device_list_get_device(dm, DEVICE_TYPE_SPEAKER, NULL)) == NULL) {
+        pa_log_error("Get speaker device failed");
+        return NULL;
+    }
+
+    if ((spk_sink = pa_tz_device_get_sink(spk_device, DEVICE_ROLE_NORMAL)) == NULL) {
+        pa_log_error("Get speaker sink failed");
+        return NULL;
+    }
+
+    pa_tz_device_new_data_init(&data, dm->device_list, dm->comm, NULL);
+    _fill_new_data_basic(&data, DEVICE_TYPE_FORWARDING, DM_DEVICE_DIRECTION_BOTH, true, dm);
+    pa_tz_device_new_data_add_sink(&data, DEVICE_ROLE_NORMAL, spk_sink);
+    pa_tz_device_new_data_add_source(&data, DEVICE_ROLE_NORMAL, spk_sink->monitor_source);
+
+    if ((forwarding_device = pa_tz_device_new(&data)) == NULL)
+        pa_log_error("Failed to create forwarding device");
+
+    pa_tz_device_new_data_done(&data);
+
+    return forwarding_device;
+}
+
 /*
     Handle device connection detected through dbus.
     First, update device-status hashmap.
@@ -1891,25 +1928,7 @@ static void handle_device_connected(pa_device_manager *dm, const char *type, con
         pa_tz_device_new(&data);
         pa_tz_device_new_data_done(&data);
     } else if (device_type_is_equal(type, device_profile, DEVICE_TYPE_FORWARDING, NULL)) {
-        pa_tz_device *spk_device;
-        pa_sink *spk_sink;
-
-        if (!(spk_device = _device_list_get_device(dm, DEVICE_TYPE_SPEAKER, NULL))) {
-            pa_log_error("Get speaker device failed");
-            return;
-        }
-        if (!(spk_sink = pa_tz_device_get_sink(spk_device, DEVICE_ROLE_NORMAL))) {
-            pa_log_error("Get speaker sink failed");
-            return;
-        }
-
-        pa_tz_device_new_data_init(&data, dm->device_list, dm->comm, NULL);
-        _fill_new_data_basic(&data, DEVICE_TYPE_FORWARDING, DM_DEVICE_DIRECTION_BOTH, true, dm);
-        pa_tz_device_new_data_add_sink(&data, DEVICE_ROLE_NORMAL, spk_sink);
-        pa_tz_device_new_data_add_source(&data, DEVICE_ROLE_NORMAL, spk_sink->monitor_source);
-
-        pa_tz_device_new(&data);
-        pa_tz_device_new_data_done(&data);
+        _load_forwarding_device(dm);
     } else {
         dm_device_direction_t direction;
 
@@ -3049,6 +3068,20 @@ pa_tz_device* pa_device_manager_get_device_with_source(pa_source *source) {
     return source->device_item;
 }
 
+pa_tz_device* pa_device_manager_load_forwarding(pa_device_manager *dm) {
+    return _load_forwarding_device(dm);
+}
+
+void pa_device_manager_unload_forwarding(pa_device_manager *dm) {
+    pa_tz_device *forwarding_device;
+
+    forwarding_device = _device_list_get_device(dm, DEVICE_TYPE_FORWARDING, NULL);
+    if (forwarding_device)
+        pa_tz_device_free(forwarding_device);
+    else
+        pa_log_warn("There is no forwarding device");
+}
+
 int pa_device_manager_load_sink(pa_device_manager *dm, const char *type, const char *device_profile, const char *role) {
     const char *device_string, *params;
     struct device_type_info *type_info;
index 8e2c04d..12abeeb 100644 (file)
@@ -44,6 +44,10 @@ pa_tz_device* pa_device_manager_get_device_by_id(pa_device_manager *dm, uint32_t
 pa_tz_device* pa_device_manager_get_device_with_sink(pa_sink *sink);
 pa_tz_device* pa_device_manager_get_device_with_source(pa_source *source);
 
+/* trigger for create/destroy forwarding device */
+pa_tz_device* pa_device_manager_load_forwarding(pa_device_manager *dm);
+void pa_device_manager_unload_forwarding(pa_device_manager *dm);
+
 /* load pulse device */
 int pa_device_manager_load_sink(pa_device_manager *dm, const char *device_type, const char *device_profile, const char *role);
 int pa_device_manager_load_source(pa_device_manager *dm, const char *device_type, const char *device_profile, const char *role);