On Wed, 2012-06-20 at 17:33 +0200, Fr?d?ric Dalleau wrote: > At module-loopback load, if no sink is given, the default sink is used. If the > stream has a media.role property, the property cannot be used because a the > source or sink is forced to default. Both module-intended-roles and > module-device-manager are affected. The same apply to sources. > > With this patch, if sink or source is missing, routing modules can be used. Thanks, pushed with some changes (see below). > @@ -683,8 +685,21 @@ int pa__init(pa_module *m) { > goto fail; > } > > - ss = sink->sample_spec; > - map = sink->channel_map; > + if (sink) { > + ss = sink->sample_spec; > + map = sink->channel_map; > + } else if (source) { > + ss = source->sample_spec; > + map = source->channel_map; > + } else { > + /* Dummy sample format */ I expanded this comment to say that the dummy stream format shouldn't be needed and pa_sink_input_new() should be fixed. I filed a bug too: https://bugs.freedesktop.org/show_bug.cgi?id=51719 > @@ -723,20 +740,16 @@ int pa__init(pa_module *m) { > goto fail; > } > > - if (!pa_proplist_contains(sink_input_data.proplist, PA_PROP_MEDIA_NAME)) > - pa_proplist_setf(sink_input_data.proplist, PA_PROP_MEDIA_NAME, "Loopback from %s", > - pa_strnull(pa_proplist_gets(source->proplist, PA_PROP_DEVICE_DESCRIPTION))); > - > if (!pa_proplist_contains(sink_input_data.proplist, PA_PROP_MEDIA_ROLE)) > pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_ROLE, "abstract"); > > - if (!pa_proplist_contains(sink_input_data.proplist, PA_PROP_MEDIA_ICON_NAME) > - && (n = pa_proplist_gets(source->proplist, PA_PROP_DEVICE_ICON_NAME))) > - pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_ICON_NAME, n); > - > pa_sink_input_new_data_set_sample_spec(&sink_input_data, &ss); > pa_sink_input_new_data_set_channel_map(&sink_input_data, &map); > - sink_input_data.flags = PA_SINK_INPUT_VARIABLE_RATE | (remix ? 0 : PA_SINK_INPUT_NO_REMIX); > + if (sink || source) { > + sink_input_data.flags = PA_SINK_INPUT_VARIABLE_RATE | (remix ? 0 : PA_SINK_INPUT_NO_REMIX); These flags should be set always, not only when sink or source is defined. > + } else { > + sink_input_data.flags = PA_SINK_INPUT_FIX_FORMAT | PA_SINK_INPUT_FIX_RATE | PA_SINK_INPUT_FIX_CHANNELS; > + } I realized that the user may give, for example, only the "format" module argument, in which case PA_SINK_INPUT_FIX_FORMAT shouldn't be used but FIX_RATE and FIX_CHANNELS should. I added three boolean variables: format_set, rate_set and channels_set, and added code to enable the flags individually if one or more of those variables are not set. -- Tanu