}
#endif
+#ifdef __TIZEN_TV_EXTERNAL_TV_SOURCE__
+static bool pulse_device_is_tvsource(pa_object *pdevice) {
+ pa_proplist *prop = pulse_device_get_proplist(pdevice);
+
+ if (pa_sink_isinstance(pdevice))
+ return false;
+
+ return pa_safe_streq(pa_proplist_gets(prop, "device.type"), DEVICE_TYPE_FORWARDING);
+}
+#endif
+
+
static bool pulse_device_is_hdmi(pa_object *pdevice) {
const char *bus_path_name = NULL;
pa_proplist *prop = pulse_device_get_proplist(pdevice);
prop = pulse_device_get_proplist(pdevice);
+#ifdef __TIZEN_TV_EXTERNAL_TV_SOURCE__
+ if (pulse_device_is_tvsource(pdevice))
+ return pa_proplist_gets(prop, PA_PROP_DEVICE_DESCRIPTION);
+#endif
+
if (pulse_device_is_usb(pdevice) || pulse_device_is_hdmi(pdevice))
return pa_proplist_gets(prop, "sysfs.path");
else if (pulse_device_is_bluez(pdevice))
}
#endif /* __TIZEN_TV_EXTERNAL_BT_SCO__ */
+#ifdef __TIZEN_TV_EXTERNAL_TV_SOURCE__
+static void handle_external_tvsource_pulse_device(pa_object *pdevice, bool is_loaded, pa_device_manager *dm) {
+ const char *name, *system_id;
+ dm_device_direction_t direction;
+ pa_tz_device *device;
+
+ pa_assert(pdevice);
+ pa_assert(dm);
+
+ pa_log_info("Handle tvsource pulse device");
+
+ system_id = pulse_device_get_system_id(pdevice);
+ direction = pulse_device_get_direction(pdevice);
+
+ if (is_loaded) {
+ pa_tz_device_new_data data;
+ pa_proplist *prop;
+
+ prop = pulse_device_get_proplist(pdevice);
+ name = pa_proplist_gets(prop, PA_PROP_DEVICE_DESCRIPTION);
+
+ pa_tz_device_new_data_init(&data, dm->device_list, dm->comm, NULL);
+ pa_tz_device_new_data_set_type(&data, DEVICE_TYPE_FORWARDING);
+ pa_tz_device_new_data_set_name(&data, name);
+ pa_tz_device_new_data_set_direction(&data, direction);
+ pa_tz_device_new_data_set_system_id(&data, system_id);
+ pa_tz_device_new_data_set_use_internal_codec(&data, false);
+ pa_tz_device_new_data_add_source(&data, DEVICE_ROLE_NORMAL, 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_FORWARDING, NULL, system_id)))
+ pa_log_warn("Can't get tvsource device for %s", system_id);
+ else
+ pa_tz_device_free(device);
+ }
+}
+#endif /* __TIZEN_TV_EXTERNAL_TV_SOURCE__ */
+
+
static void handle_internal_pulse_device(pa_object *pdevice, bool is_loaded, pa_device_manager *dm) {
pa_tz_device *device;
struct composite_type *ctype;
if (pulse_device_is_monitor(PA_OBJECT(source)))
return PA_HOOK_OK;
+#ifdef __TIZEN_TV_EXTERNAL_TV_SOURCE__
+ if (pulse_device_is_tvsource(PA_OBJECT(source))) {
+ pulse_device_set_use_internal_codec(PA_OBJECT(source), false);
+ handle_external_tvsource_pulse_device(PA_OBJECT(source), true, dm);
+ return PA_HOOK_OK;
+ }
+#endif
+
if (pulse_device_is_usb(PA_OBJECT(source))) {
pulse_device_set_use_internal_codec(PA_OBJECT(source), false);
handle_usb_pulse_device(PA_OBJECT(source), true, dm);
} else if (pulse_device_is_btsco(PA_OBJECT(source))) {
pulse_device_set_use_internal_codec(PA_OBJECT(source), false);
handle_external_btsco_pulse_device(PA_OBJECT(source), true, dm);
+ return PA_HOOK_OK;
#endif
}
if (pulse_device_is_monitor(PA_OBJECT(source)))
return PA_HOOK_OK;
+#ifdef __TIZEN_TV_EXTERNAL_TV_SOURCE__
+ if (pulse_device_is_tvsource(PA_OBJECT(source))) {
+ handle_external_tvsource_pulse_device(PA_OBJECT(source), false, dm);
+ return PA_HOOK_OK;
+ }
+#endif
+
if (pulse_device_is_usb(PA_OBJECT(source))) {
handle_usb_pulse_device(PA_OBJECT(source), false, dm);
return PA_HOOK_OK;
return 0;
}
+#ifndef __TIZEN_TV_EXTERNAL_TV_SOURCE__
static pa_tz_device* _load_forwarding_device(pa_device_manager *dm) {
pa_tz_device_new_data data;
pa_tz_device *spk_device, *forwarding_device;
return forwarding_device;
}
+#endif
/*
Handle device connection detected through dbus.
pa_tz_device_new(&data);
pa_tz_device_new_data_done(&data);
+#ifndef __TIZEN_TV_EXTERNAL_TV_SOURCE__
} else if (device_type_is_equal(type, DEVICE_TYPE_FORWARDING)) {
_load_forwarding_device(dm);
+#endif
} else {
dm_device_direction_t direction;
bool use_internal_codec = true;
} else if (device_type_is_equal(type, DEVICE_TYPE_HDMI)) {
device_set_detected(manager, type, NULL, NULL, DEVICE_DISCONNECTED);
-
+#ifndef __TIZEN_TV_EXTERNAL_TV_SOURCE__
} else if (device_type_is_equal(type, DEVICE_TYPE_FORWARDING)) {
int miracast_wfd_status = 0;
if (vconf_get_bool(VCONFKEY_MIRACAST_WFD_SOURCE_STATUS, &miracast_wfd_status) < 0) {
}
if (miracast_wfd_status == FORWARDING_CONNECTED)
device_set_detected(manager, type, NULL, NULL, DEVICE_CONNECTED);
-
+#endif
} else {
device_set_detected(manager, type, NULL, NULL, DEVICE_CONNECTED);
}
return source->device_item;
}
-
+#ifndef __TIZEN_TV_EXTERNAL_TV_SOURCE__
pa_tz_device* pa_device_manager_load_forwarding(pa_device_manager *dm) {
return _load_forwarding_device(dm);
}
+#endif
void pa_device_manager_unload_forwarding(pa_device_manager *dm) {
pa_tz_device *forwarding_device;
return ret;
}
+#ifndef __TIZEN_TV_EXTERNAL_TV_SOURCE__
static void update_mirroring_streams(pa_stream_manager *m, pa_source_output *o, bool put) {
const char *role;
return 0;
}
+#endif
static void set_new_data_stream_to_null_sink_source(pa_stream_manager *m, void *stream, stream_type_t type) {
pa_sink *null_sink;
if (is_invalid_role(m, role))
return PROCESS_STREAM_RESULT_SKIP;
+#ifndef __TIZEN_TV_EXTERNAL_TV_SOURCE__
/* load forwarding device */
if (type == STREAM_SOURCE_OUTPUT && pa_safe_streq(role, STREAM_ROLE_LOOPBACK_MIRRORING))
update_forwarding_device(m, true);
+#endif
}
/* update the priority of this stream */
if (!update_priority_of_stream(m, stream, type, role, is_new_data)) {
}
}
+#ifndef __TIZEN_TV_EXTERNAL_TV_SOURCE__
/* unload forwarding device */
if (type == STREAM_SOURCE_OUTPUT && pa_safe_streq(role, STREAM_ROLE_LOOPBACK_MIRRORING))
update_forwarding_device(m, false);
+#endif
/* skip roles */
if (is_invalid_role(m, role))
pa_log_info("source-output(%p, index:%u)", o, o->index);
+#ifndef __TIZEN_TV_EXTERNAL_TV_SOURCE__
update_mirroring_streams(m, o, true);
+#endif
process_stream(m, o, STREAM_SOURCE_OUTPUT, PROCESS_COMMAND_ADD_STREAM, false);
process_stream(m, o, STREAM_SOURCE_OUTPUT, PROCESS_COMMAND_UPDATE_VOLUME, false);
if (is_stream_related_call_active_routing(PA_OBJECT(o))) {
m->on_call = false;
set_media_active_device(m);
}
+#ifndef __TIZEN_TV_EXTERNAL_TV_SOURCE__
update_mirroring_streams(m, o, false);
+#endif
process_stream(m, o, STREAM_SOURCE_OUTPUT, PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_ENDED, false);
process_stream(m, o, STREAM_SOURCE_OUTPUT, PROCESS_COMMAND_REMOVE_STREAM, false);
init_filters(m);
m->stream_parents = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
m->muted_streams = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+#ifndef __TIZEN_TV_EXTERNAL_TV_SOURCE__
m->mirroring_streams = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+#endif
m->stream_duckings = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
m->sink_input_new_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_INPUT_NEW], PA_HOOK_EARLY, (pa_hook_cb_t) sink_input_new_cb, m);
pa_hashmap_free(m->muted_streams);
}
+#ifndef __TIZEN_TV_EXTERNAL_TV_SOURCE__
if (m->mirroring_streams) {
if (pa_idxset_size(m->mirroring_streams))
update_forwarding_device(m, false);
pa_idxset_free(m->mirroring_streams, NULL);
}
+#endif
if (m->stream_parents)
pa_hashmap_free(m->stream_parents);