device-manager: handle rtsp device 21/251021/1
authorjungsup lee <jungsup4.lee@samsung.com>
Tue, 5 Jan 2021 06:01:46 +0000 (15:01 +0900)
committerjungsup lee <jungsup4.lee@samsung.com>
Thu, 7 Jan 2021 03:38:41 +0000 (03:38 +0000)
handle rtsp device as network type device

[Version] 13.0.45
[Issue Type] Update

Change-Id: I90e4965c34db184f6177b19cf6e1874a13175723
Signed-off-by: jungsup lee <jungsup4.lee@samsung.com>
packaging/pulseaudio-modules-tizen.spec
src/device-manager.c
src/tizen-device-def.c
src/tizen-device-def.h

index d76a28133945c79624195760ce7d64199b31371f..a88cd4f436770bda4c84d28dfb72135d72936c27 100644 (file)
@@ -1,6 +1,6 @@
 Name:             pulseaudio-modules-tizen
 Summary:          Pulseaudio modules for Tizen
-Version:          13.0.44
+Version:          13.0.45
 Release:          0
 Group:            Multimedia/Audio
 License:          LGPL-2.1+
index 7fc34353d74f5d736a92ed740af3744ee8425df7..14b2b89f287ddadf7e7d125bbf4160578dd2cfe0 100644 (file)
@@ -82,6 +82,7 @@
 #define DEVICE_API_ACM                      "acm"
 #define DEVICE_API_RAOP                     "raop"
 #define DEVICE_API_TUNNEL                   "tunnel"
+#define DEVICE_API_RTSP                     "rtsp"
 #define DEVICE_BUS_USB                      "usb"
 #define DEVICE_CLASS_SOUND                  "sound"
 #define DEVICE_CLASS_MONITOR                "monitor"
@@ -456,6 +457,15 @@ static bool pulse_device_is_null(pa_object *pdevice) {
     }
 }
 
+static bool pulse_device_is_rtsp(pa_object *pdevice) {
+    pa_proplist *prop = pulse_device_get_proplist(pdevice);
+
+    if (!prop)
+        return false;
+
+    return pa_safe_streq(pa_proplist_gets(prop, PA_PROP_DEVICE_API), DEVICE_API_RTSP);
+}
+
 static const char* pulse_device_get_device_string_removed_argument(pa_object *pdevice) {
     static char removed_param[DEVICE_PARAM_STRING_MAX] = {0,};
     char *device_string_p = NULL;
@@ -1152,6 +1162,8 @@ static const char* pulse_device_get_system_id(pa_object *pdevice) {
         return pa_proplist_gets(prop, PA_PROP_DEVICE_STRING);
     else if (pulse_device_is_tunnel(pdevice))
         return pa_proplist_gets(prop, PA_PROP_DEVICE_DESCRIPTION);
+    else if (pulse_device_is_rtsp(pdevice))
+        return pa_proplist_gets(prop, PA_PROP_DEVICE_DESCRIPTION);
     else
         return NULL;
 }
@@ -1542,6 +1554,38 @@ static void handle_acm_pulse_device(pa_object *pdevice, bool is_loaded, pa_devic
     }
 }
 
+static void handle_rtsp_pulse_device(pa_object *pdevice, bool is_loaded, pa_device_manager *dm) {
+    pa_tz_device *device;
+    const char *system_id;
+
+    pa_assert(pdevice);
+    pa_assert(dm);
+
+    pa_log_info("Handle RTSP pulse device");
+
+    system_id = pulse_device_get_system_id(pdevice);
+
+    if (is_loaded) {
+        pa_tz_device_new_data data;
+
+        pa_proplist *prop = pulse_device_get_proplist(pdevice);
+        const char *name = pa_proplist_gets(prop, PA_PROP_DEVICE_DESCRIPTION);
+
+        pa_tz_device_new_data_init(&data, dm->device_list, dm->comm, dm->dbus_conn);
+        _fill_new_data_basic(&data, DEVICE_TYPE_NETWORK, DM_DEVICE_DIRECTION_IN, false, dm);
+        pa_tz_device_new_data_set_name(&data, name);
+        pa_tz_device_new_data_set_system_id(&data, system_id);
+        pa_tz_device_new_data_add_source(&data, DEVICE_ROLE_RTSP, PA_SOURCE(pdevice));
+        pa_tz_device_new(&data);
+        pa_tz_device_new_data_done(&data);
+    } else {
+        if (!(device = device_list_get_device(dm, DEVICE_TYPE_NETWORK, NULL, system_id)))
+            pa_log_warn("Can't get RTSP device for %s", system_id);
+        else
+            pa_tz_device_free(device);
+    }
+}
+
 static void handle_internal_pulse_device(pa_object *pdevice, bool is_loaded, pa_device_manager *dm) {
     pa_tz_device *device;
     struct composite_type *ctype;
@@ -1698,6 +1742,10 @@ static pa_hook_result_t source_put_hook_callback(pa_core *c, pa_source *source,
         pulse_device_set_use_internal_codec(PA_OBJECT(source), true);
         handle_internal_pulse_device(PA_OBJECT(source), true, dm);
         return PA_HOOK_OK;
+    } else if (pulse_device_is_rtsp(PA_OBJECT(source))) {
+        pulse_device_set_use_internal_codec(PA_OBJECT(source), false);
+        handle_rtsp_pulse_device(PA_OBJECT(source), true, dm);
+        return PA_HOOK_OK;
     } else {
         pa_log_debug("Don't care this source");
     }
@@ -1736,6 +1784,9 @@ static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *sourc
     } else if (pulse_device_is_alsa(PA_OBJECT(source)) || pulse_device_is_tizenaudio(PA_OBJECT(source))) {
         handle_internal_pulse_device(PA_OBJECT(source), false, dm);
         return PA_HOOK_OK;
+    } else if (pulse_device_is_rtsp(PA_OBJECT(source))) {
+        handle_rtsp_pulse_device(PA_OBJECT(source), false, dm);
+        return PA_HOOK_OK;
     } else {
         pa_log_debug("Don't care this source");
     }
index 164146c770a420cb66f5393e61788ab54a4e9a4d..cca9ae2ddc866cad328f2e9cb70ef5586a31363d 100644 (file)
@@ -181,6 +181,8 @@ bool device_role_is_valid(const char *device_role) {
         return true;
     else if (pa_safe_streq(device_role, DEVICE_ROLE_ACM))
         return true;
+    else if (pa_safe_streq(device_role, DEVICE_ROLE_RTSP))
+        return true;
     else
         return false;
 }
index e4232dafd1cec26a36c2950fe0a0daac4551ac33..d3c3a767e60515d747bd8ac9b350cb9059e93a74 100644 (file)
@@ -29,6 +29,7 @@
 #define DEVICE_ROLE_RAOP                    "raop"
 #define DEVICE_ROLE_TUNNEL                  "tunnel"
 #define DEVICE_ROLE_ACM                     "acm"
+#define DEVICE_ROLE_RTSP                    "rtsp"
 
 typedef enum dm_device_direction_type {
     DM_DEVICE_DIRECTION_NONE,