[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid.spec
^
|
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/src/common/conversion.c
^
|
@@ -140,6 +140,40 @@
case CONV_STRING_INPUT_FLAG:
return string_convert_num_to_str(string_conversion_table_input_flag, value, to_str);
+
+ case CONV_STRING_AUDIO_SOURCE_FANCY:
+ return string_convert_num_to_str(string_conversion_table_audio_source_fancy, value, to_str);
+ }
+
+ pa_assert_not_reached();
+ return false;
+}
+
+bool pa_string_convert_str_to_num(pa_conversion_string_t type, const char *str, uint32_t *to_value) {
+ switch (type) {
+ case CONV_STRING_FORMAT:
+ return string_convert_str_to_num(string_conversion_table_format, str, to_value);
+
+ case CONV_STRING_OUTPUT_CHANNELS:
+ return string_convert_str_to_num(string_conversion_table_output_channels, str, to_value);
+
+ case CONV_STRING_INPUT_CHANNELS:
+ return string_convert_str_to_num(string_conversion_table_input_channels, str, to_value);
+
+ case CONV_STRING_OUTPUT_DEVICE:
+ return string_convert_str_to_num(string_conversion_table_output_device, str, to_value);
+
+ case CONV_STRING_INPUT_DEVICE:
+ return string_convert_str_to_num(string_conversion_table_input_device, str, to_value);
+
+ case CONV_STRING_OUTPUT_FLAG:
+ return string_convert_str_to_num(string_conversion_table_output_flag, str, to_value);
+
+ case CONV_STRING_INPUT_FLAG:
+ return string_convert_str_to_num(string_conversion_table_input_flag, str, to_value);
+
+ case CONV_STRING_AUDIO_SOURCE_FANCY:
+ return string_convert_str_to_num(string_conversion_table_audio_source_fancy, str, to_value);
}
pa_assert_not_reached();
@@ -210,10 +244,6 @@
return string_convert_num_to_str(string_conversion_table_input_device_fancy, (uint32_t) value, to_str);
}
-bool pa_droid_audio_source_name(audio_source_t value, const char **to_str) {
- return string_convert_num_to_str(string_conversion_table_audio_source_fancy, (uint32_t) value, to_str);
-}
-
static int parse_list(const struct string_conversion *table,
const char *separator,
const char *str,
@@ -280,6 +310,10 @@
case CONV_STRING_INPUT_FLAG:
return parse_list(string_conversion_table_input_flag, separator, str, dst, unknown_entries);
+
+ /* Not handled in this context */
+ case CONV_STRING_AUDIO_SOURCE_FANCY:
+ return 0;
}
pa_assert_not_reached();
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/src/common/droid-util.c
^
|
@@ -116,6 +116,7 @@
static int input_stream_set_route(pa_droid_hw_module *hw_module, pa_droid_stream *s);
static int droid_set_parameters(pa_droid_hw_module *hw, const char *parameters);
+static bool droid_set_audio_source(pa_droid_hw_module *hw_module, audio_source_t audio_source);
static pa_droid_profile *profile_new(pa_droid_profile_set *ps,
const pa_droid_config_hw_module *module,
@@ -1414,7 +1415,7 @@
#if AUDIO_API_VERSION_MAJ >= 3
/* Go with empty address, should work
* with most devices for now. */
- , NULL
+ , ""
#endif
);
pa_droid_hw_module_unlock(module);
@@ -1638,7 +1639,7 @@
&input->stream
#if AUDIO_API_VERSION_MAJ >= 3
, 0
- , NULL /* Don't define address */
+ , "" /* Use empty address. */
, hw_module->state.audio_source
#endif
);
@@ -1752,7 +1753,11 @@
bool pa_droid_stream_reconfigure_input(pa_droid_stream *s,
const pa_sample_spec *requested_sample_spec,
- const pa_channel_map *requested_channel_map) {
+ const pa_channel_map *requested_channel_map,
+ const pa_proplist *proplist) {
+ /* Use default audio source by default */
+ audio_source_t audio_source = AUDIO_SOURCE_DEFAULT;
+
pa_assert(s);
pa_assert(s->input);
pa_assert(requested_sample_spec);
@@ -1763,6 +1768,16 @@
s->input->req_sample_spec = *requested_sample_spec;
s->input->req_channel_map = *requested_channel_map;
+ if (proplist) {
+ const char *source;
+ /* If audio source is defined in source-output proplist use that instead. */
+ if ((source = pa_proplist_gets(proplist, EXT_PROP_AUDIO_SOURCE)))
+ pa_string_convert_str_to_num(CONV_STRING_AUDIO_SOURCE_FANCY, source, &audio_source);
+ }
+
+ /* Update audio source */
+ droid_set_audio_source(s->module, audio_source);
+
input_stream_close(s);
if (input_stream_open(s, false) < 0) {
@@ -1778,6 +1793,50 @@
return true;
}
+bool pa_droid_stream_reconfigure_input_needed(pa_droid_stream *s,
+ const pa_sample_spec *requested_sample_spec,
+ const pa_channel_map *requested_channel_map,
+ const pa_proplist *proplist) {
+ bool reconfigure_needed = false;
+
+ pa_assert(s);
+ pa_assert(s->input);
+
+ if (requested_sample_spec && !pa_sample_spec_equal(&s->input->sample_spec, requested_sample_spec)) {
+ reconfigure_needed = true;
+ pa_log_debug("input reconfigure needed: sample specs not equal");
+ }
+
+ if (requested_channel_map && !pa_channel_map_equal(&s->input->channel_map, requested_channel_map)) {
+ reconfigure_needed = true;
+ pa_log_debug("input reconfigure needed: channel maps not equal");
+ }
+
+ if (proplist) {
+ const char *source;
+ audio_source_t audio_source;
+
+ /* If audio source is defined in source-output proplist use that instead. */
+ if ((source = pa_proplist_gets(proplist, EXT_PROP_AUDIO_SOURCE))) {
+ if (pa_string_convert_str_to_num(CONV_STRING_AUDIO_SOURCE_FANCY, source, &audio_source) &&
+ s->module->state.audio_source != audio_source) {
+
+ reconfigure_needed = true;
+ pa_log_debug("input reconfigure needed: " EXT_PROP_AUDIO_SOURCE " changes");
+ }
+ } else {
+ if (pa_input_device_default_audio_source(s->module->state.input_device, &audio_source) &&
+ s->module->state.audio_source != audio_source) {
+
+ reconfigure_needed = true;
+ pa_log_debug("input reconfigure needed: audio source changes");
+ }
+ }
+ }
+
+ return reconfigure_needed;
+}
+
pa_droid_stream *pa_droid_open_input_stream(pa_droid_hw_module *hw_module,
const pa_sample_spec *default_sample_spec,
const pa_channel_map *default_channel_map) {
@@ -1799,7 +1858,7 @@
s->input->default_sample_spec = *default_sample_spec;
s->input->default_channel_map = *default_channel_map;
- if (!pa_droid_stream_reconfigure_input(s, default_sample_spec, default_channel_map)) {
+ if (!pa_droid_stream_reconfigure_input(s, default_sample_spec, default_channel_map, NULL)) {
pa_droid_stream_unref(s);
s = NULL;
} else
@@ -2257,26 +2316,14 @@
return ret;
}
-bool pa_droid_hw_set_input_device(pa_droid_hw_module *hw_module,
- audio_devices_t device) {
- audio_source_t audio_source = AUDIO_SOURCE_DEFAULT;
+/* Return true if audio source changes */
+static bool droid_set_audio_source(pa_droid_hw_module *hw_module, audio_source_t audio_source) {
audio_source_t audio_source_override = AUDIO_SOURCE_DEFAULT;
- bool device_changed = false;
- bool source_changed = false;
pa_assert(hw_module);
- if (hw_module->state.input_device != device) {
- const char *name = NULL;
- pa_log_debug("Set global input to %s (%#010x)",
- pa_string_convert_input_device_num_to_str(device, &name)
- ? name : "<unknown>",
- device);
- hw_module->state.input_device = device;
- device_changed = true;
- }
-
- pa_input_device_default_audio_source(hw_module->state.input_device, &audio_source);
+ if (audio_source == AUDIO_SOURCE_DEFAULT)
+ pa_input_device_default_audio_source(hw_module->state.input_device, &audio_source);
/* Override audio source based on mode. */
switch (hw_module->state.mode) {
@@ -2292,9 +2339,9 @@
}
if (audio_source != audio_source_override) {
- const char *from, *to;
- pa_droid_audio_source_name(audio_source, &from);
- pa_droid_audio_source_name(audio_source_override, &to);
+ const char *from = NULL, *to = NULL;
+ pa_string_convert_num_to_str(CONV_STRING_AUDIO_SOURCE_FANCY, audio_source, &from);
+ pa_string_convert_num_to_str(CONV_STRING_AUDIO_SOURCE_FANCY, audio_source, &to);
pa_log_info("Audio mode %s, overriding audio source %s with %s",
audio_mode_to_string(hw_module->state.mode),
from ? from : "<unknown>",
@@ -2304,14 +2351,39 @@
if (audio_source != hw_module->state.audio_source) {
const char *name = NULL;
- pa_log_debug("set global audio source to %s (%#010x)",
- pa_droid_audio_source_name(audio_source, &name)
+ pa_log_debug("Set global audio source to %s (%#010x)",
+ pa_string_convert_num_to_str(CONV_STRING_AUDIO_SOURCE_FANCY, audio_source, &name)
? name : "<unknown>",
audio_source);
hw_module->state.audio_source = audio_source;
- source_changed = true;
+
+ /* audio source changed */
+ return true;
}
+ /* audio source did not change */
+ return false;
+}
+
+bool pa_droid_hw_set_input_device(pa_droid_hw_module *hw_module,
+ audio_devices_t device) {
+ bool device_changed = false;
+ bool source_changed = false;
+
+ pa_assert(hw_module);
+
+ if (hw_module->state.input_device != device) {
+ const char *name = NULL;
+ pa_log_debug("Set global input to %s (%#010x)",
+ pa_string_convert_input_device_num_to_str(device, &name)
+ ? name : "<unknown>",
+ device);
+ hw_module->state.input_device = device;
+ device_changed = true;
+ }
+
+ source_changed = droid_set_audio_source(hw_module, hw_module->state.audio_source);
+
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/src/common/include/droid/conversion.h
^
|
@@ -52,10 +52,12 @@
CONV_STRING_OUTPUT_DEVICE,
CONV_STRING_INPUT_DEVICE,
CONV_STRING_OUTPUT_FLAG,
- CONV_STRING_INPUT_FLAG
+ CONV_STRING_INPUT_FLAG,
+ CONV_STRING_AUDIO_SOURCE_FANCY,
} pa_conversion_string_t;
bool pa_string_convert_num_to_str(pa_conversion_string_t type, uint32_t value, const char **to_str);
+bool pa_string_convert_str_to_num(pa_conversion_string_t type, const char *str, uint32_t *to_value);
bool pa_convert_output_channel(uint32_t value, pa_conversion_field_t from, uint32_t *to_value);
bool pa_convert_input_channel(uint32_t value, pa_conversion_field_t from, uint32_t *to_value);
@@ -81,9 +83,6 @@
bool pa_droid_output_port_name(audio_devices_t value, const char **to_str);
bool pa_droid_input_port_name(audio_devices_t value, const char **to_str);
-/* Pretty audio source names */
-bool pa_droid_audio_source_name(audio_source_t value, const char **to_str);
-
int pa_conversion_parse_list(pa_conversion_string_t type, const char *separator,
const char *str, uint32_t *dst, char **unknown_entries);
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/src/common/include/droid/droid-util.h
^
|
@@ -51,6 +51,8 @@
#define PROP_DROID_INPUT_BUILTIN "droid.input.builtin"
#define PROP_DROID_INPUT_EXTERNAL "droid.input.external"
+#define EXT_PROP_AUDIO_SOURCE "audio.source"
+
#define PA_DROID_PRIMARY_DEVICE "primary"
typedef struct pa_droid_hw_module pa_droid_hw_module;
@@ -318,9 +320,15 @@
pa_droid_stream *pa_droid_open_input_stream(pa_droid_hw_module *hw_module,
const pa_sample_spec *default_sample_spec,
const pa_channel_map *default_channel_map);
+/* Test if reconfiguring of input stream is needed */
+bool pa_droid_stream_reconfigure_input_needed(pa_droid_stream *s,
+ const pa_sample_spec *requested_sample_spec,
+ const pa_channel_map *requested_channel_map,
+ const pa_proplist *proplist);
bool pa_droid_stream_reconfigure_input(pa_droid_stream *s,
const pa_sample_spec *requested_sample_spec,
- const pa_channel_map *requested_channel_map);
+ const pa_channel_map *requested_channel_map,
+ const pa_proplist *proplist);
bool pa_droid_hw_set_input_device(pa_droid_hw_module *hw_module,
audio_devices_t device);
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-14.2.94.tar.bz2/src/droid/droid-source.c
^
|
@@ -94,6 +94,7 @@
static void source_reconfigure(struct userdata *u,
const pa_sample_spec *reconfigure_sample_spec,
const pa_channel_map *reconfigure_channel_map,
+ const pa_proplist *proplist,
audio_devices_t update_device);
/* Our droid source may be left in a state of not having an input stream
@@ -347,7 +348,7 @@
if (!PA_SOURCE_IS_OPENED(u->source->state))
do_routing(u, data->device);
else
- source_reconfigure(u, NULL, NULL, data->device);
+ source_reconfigure(u, NULL, NULL, NULL, data->device);
return 0;
}
@@ -429,6 +430,7 @@
static void source_reconfigure(struct userdata *u,
const pa_sample_spec *reconfigure_sample_spec,
const pa_channel_map *reconfigure_channel_map,
+ const pa_proplist *proplist,
audio_devices_t update_device) {
pa_channel_map old_channel_map;
pa_sample_spec old_sample_spec;
@@ -453,7 +455,7 @@
if (update_device)
do_routing(u, update_device);
- if (pa_droid_stream_reconfigure_input(u->stream, &new_sample_spec, &new_channel_map))
+ if (pa_droid_stream_reconfigure_input(u->stream, &new_sample_spec, &new_channel_map, proplist))
pa_log_info("Source reconfigured.");
else
pa_log_info("Failed to reconfigure input stream, no worries, using defaults.");
@@ -487,8 +489,10 @@
if (new_data->source != u->source)
return PA_HOOK_OK;
- if (pa_sample_spec_equal(&new_data->sample_spec, pa_droid_stream_sample_spec(u->stream)) &&
- pa_channel_map_equal(&new_data->channel_map, pa_droid_stream_channel_map(u->stream)))
+ if (!pa_droid_stream_reconfigure_input_needed(u->stream,
+ &new_data->sample_spec,
+ &new_data->channel_map,
+ new_data->proplist))
return PA_HOOK_OK;
pa_log_info("New source-output connecting and our source needs to be reconfigured.");
@@ -500,10 +504,11 @@
source_reconfigure(u,
pa_droid_stream_sample_spec(primary_output),
pa_droid_stream_channel_map(primary_output),
+ new_data->proplist,
0);
} else
- source_reconfigure(u, &new_data->sample_spec, &new_data->channel_map, 0);
+ source_reconfigure(u, &new_data->sample_spec, &new_data->channel_map, new_data->proplist, 0);
return PA_HOOK_OK;
}
@@ -523,12 +528,12 @@
so = so_i;
}
- if (so) {
- if (!pa_sample_spec_equal(&so->sample_spec, pa_droid_stream_sample_spec(u->stream)) ||
- !pa_channel_map_equal(&so->channel_map, pa_droid_stream_channel_map(u->stream))) {
- pa_log_info("Source-output disconnected and our source needs to be reconfigured.");
- source_reconfigure(u, &so->sample_spec, &so->channel_map, 0);
- }
+ if (so && pa_droid_stream_reconfigure_input_needed(u->stream,
+ &so->sample_spec,
+ &so->channel_map,
+ so->proplist)) {
+ pa_log_info("Source-output disconnected and our source needs to be reconfigured.");
+ source_reconfigure(u, &so->sample_spec, &so->channel_map, so->proplist, 0);
}
}
|