From: jungsup lee Date: Tue, 5 Jan 2021 06:01:46 +0000 (+0900) Subject: device-manager: handle rtsp device X-Git-Tag: submit/tizen/20210203.005915~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c310166cd5d92259499e46aea5f133549e21ca7b;p=platform%2Fcore%2Fmultimedia%2Fpulseaudio-modules-tizen.git device-manager: handle rtsp device handle rtsp device as network type device [Version] 13.0.45 [Issue Type] Update Change-Id: I90e4965c34db184f6177b19cf6e1874a13175723 Signed-off-by: jungsup lee --- diff --git a/packaging/pulseaudio-modules-tizen.spec b/packaging/pulseaudio-modules-tizen.spec index d76a281..a88cd4f 100644 --- a/packaging/pulseaudio-modules-tizen.spec +++ b/packaging/pulseaudio-modules-tizen.spec @@ -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+ diff --git a/src/device-manager.c b/src/device-manager.c index 7fc3435..14b2b89 100644 --- a/src/device-manager.c +++ b/src/device-manager.c @@ -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"); } diff --git a/src/tizen-device-def.c b/src/tizen-device-def.c index 164146c..cca9ae2 100644 --- a/src/tizen-device-def.c +++ b/src/tizen-device-def.c @@ -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; } diff --git a/src/tizen-device-def.h b/src/tizen-device-def.h index e4232da..d3c3a76 100644 --- a/src/tizen-device-def.h +++ b/src/tizen-device-def.h @@ -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,