#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"
}
}
+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;
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;
}
}
}
+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;
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");
}
} 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");
}