/* Load/Unload module-loopback */
static void update_loopback_module(struct userdata *u, bool load) {
char *args = NULL;
+ const char *volume_type;
pa_assert(u);
if (!u->loopback_args.adjust_sec)
u->loopback_args.adjust_sec = LOOPBACK_DEFAULT_ADJUST_SEC;
- args = pa_sprintf_malloc("sink=%s source=%s latency_msec=%d adjust_time=%d",
+ volume_type = pa_stream_manager_get_volume_type(u->stream_manager, STREAM_SINK_INPUT, STREAM_ROLE_LOOPBACK);
+ args = pa_sprintf_malloc("sink=%s source=%s latency_msec=%d adjust_time=%d sink_input_properties=%s=%s",
u->loopback_args.sink->name, u->loopback_args.source->name,
- u->loopback_args.latency_msec, u->loopback_args.adjust_sec);
+ u->loopback_args.latency_msec, u->loopback_args.adjust_sec,
+ PA_PROP_MEDIA_TIZEN_VOLUME_TYPE, volume_type);
if (u->module_loopback)
pa_module_unload(u->module_loopback, true);
return true;
}
+const char* pa_stream_manager_get_volume_type(pa_stream_manager *m, stream_type_t stream_type, const char *role) {
+ stream_info *s = NULL;
+
+ pa_assert(m);
+ pa_assert(role);
+
+ if (!(s = pa_hashmap_get(m->stream_infos, role))) {
+ pa_log_warn("%s is not valid role, return NULL", role);
+ return NULL;
+ }
+
+ return s->volume_types[stream_type == STREAM_SINK_INPUT ? STREAM_DIRECTION_OUT : STREAM_DIRECTION_IN];
+}
+
pa_stream_manager* pa_stream_manager_get(pa_core *c) {
pa_stream_manager *m;
bool pa_stream_manager_check_name_is_vstream(void *stream, stream_type_t type, bool is_new_data);
bool pa_stream_manager_check_filter_apply_stream(void *stream, stream_type_t stream_type);
bool pa_stream_manager_is_valid_stream_role(pa_core *c, const char *role);
+const char* pa_stream_manager_get_volume_type(pa_stream_manager *m, stream_type_t stream_type, const char *role);
pa_stream_manager* pa_stream_manager_get(pa_core *c);
pa_stream_manager* pa_stream_manager_ref(pa_stream_manager *m);