#define DEVICE_API_BLUEZ "bluez"
#define DEVICE_API_ALSA "alsa"
#define DEVICE_API_NULL "null"
+#define DEVICE_API_RAOP "raop"
#define DEVICE_BUS_USB "usb"
#define DEVICE_CLASS_SOUND "sound"
#define DEVICE_CLASS_MONITOR "monitor"
}
}
+static bool pulse_device_is_raop(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_RAOP);
+}
+
+
static bool pulse_device_is_tizenaudio(pa_object *pdevice) {
if (!pdevice)
return false;
return pa_proplist_gets(prop, "sysfs.path");
else if (pulse_device_is_bluez(pdevice))
return pa_proplist_gets(prop, "bluez.path");
+ else if (pulse_device_is_raop(pdevice))
+ return pa_proplist_gets(prop, PA_PROP_DEVICE_STRING);
else
return NULL;
}
}
}
+static void handle_raop_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 RAOP 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_RAOP, DM_DEVICE_DIRECTION_OUT, 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_sink(&data, DEVICE_ROLE_NORMAL, PA_SINK(pdevice));
+ pa_tz_device_new(&data);
+ pa_tz_device_new_data_done(&data);
+ } else {
+ if (!(device = device_list_get_device(dm, DEVICE_TYPE_RAOP, system_id)))
+ pa_log_warn("Can't get RAOP 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(sink), false);
handle_bt_pulse_device(PA_OBJECT(sink), true, dm);
return PA_HOOK_OK;
+ } else if (pulse_device_is_raop(PA_OBJECT(sink))) {
+ pulse_device_set_use_internal_codec(PA_OBJECT(sink), false);
+ handle_raop_pulse_device(PA_OBJECT(sink), true, dm);
+ return PA_HOOK_OK;
} else if (pulse_device_is_alsa(PA_OBJECT(sink)) || pulse_device_is_tizenaudio(PA_OBJECT(sink))) {
pulse_device_set_use_internal_codec(PA_OBJECT(sink), true);
handle_internal_pulse_device(PA_OBJECT(sink), true, dm);
} else if (pulse_device_is_bluez(PA_OBJECT(sink))) {
handle_bt_pulse_device(PA_OBJECT(sink), false, dm);
return PA_HOOK_OK;
+ } else if (pulse_device_is_raop(PA_OBJECT(sink))) {
+ handle_raop_pulse_device(PA_OBJECT(sink), false, dm);
+ return PA_HOOK_OK;
} else if (pulse_device_is_alsa(PA_OBJECT(sink)) || pulse_device_is_tizenaudio(PA_OBJECT(sink))) {
handle_internal_pulse_device(PA_OBJECT(sink), false, dm);
return PA_HOOK_OK;
return true;
else if (pa_streq(device_type, DEVICE_TYPE_USB_AUDIO))
return true;
+ else if (pa_streq(device_type, DEVICE_TYPE_RAOP))
+ return true;
else
return false;
}
return true;
else if (pa_streq(device_type, DEVICE_TYPE_BT_A2DP))
return true;
+ else if (pa_streq(device_type, DEVICE_TYPE_RAOP))
+ return true;
else
return false;
}
return true;
else if (pa_streq(device_type, DEVICE_TYPE_USB_AUDIO))
return true;
+ else if (pa_streq(device_type, DEVICE_TYPE_RAOP))
+ return true;
else
return false;
}
return direction == DM_DEVICE_DIRECTION_BOTH;
else if (pa_streq(device_type, DEVICE_TYPE_USB_AUDIO))
return direction == DM_DEVICE_DIRECTION_BOTH || direction == DM_DEVICE_DIRECTION_OUT || direction == DM_DEVICE_DIRECTION_IN;
+ else if (pa_streq(device_type, DEVICE_TYPE_RAOP))
+ return direction == DM_DEVICE_DIRECTION_OUT;
else
return false;
}