diff --git a/debian/changelog b/debian/changelog
index 661cafa..0cacd17 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-pulseaudio-modules-droid-modern (16.1.1+gemian1) unstable; urgency=medium
+pulseaudio-modules-droid-modern (16.1.101+gemian1) unstable; urgency=medium
* New upstream nabbed from droidian
diff --git a/rpm/pulseaudio-modules-droid.spec b/rpm/pulseaudio-modules-droid.spec
index 3dd3601..3fee623 100644
--- a/rpm/pulseaudio-modules-droid.spec
+++ b/rpm/pulseaudio-modules-droid.spec
@@ -5,7 +5,7 @@
Name: pulseaudio-modules-droid
Summary: PulseAudio Droid HAL modules
-Version: %{pulsemajorminor}.97
+Version: %{pulsemajorminor}.101
Release: 1
License: LGPLv2+
URL: https://github.com/mer-hybris/pulseaudio-modules-droid
diff --git a/src/common/config-parser-xml.c b/src/common/config-parser-xml.c
index b3a6116..a27fcb5 100644
--- a/src/common/config-parser-xml.c
+++ b/src/common/config-parser-xml.c
@@ -215,6 +215,12 @@ static const struct element_parser element_parse_attached_devices = {
&element_parse_item
};
+/* Entries like
+ *
+ *
+ *
+ * Where other.xml contains module elements
+ */
static const struct element_parser element_parse_module_include = {
ELEMENT_include,
parse_module_include,
@@ -223,11 +229,25 @@ static const struct element_parser element_parse_module_include = {
NULL
};
+/* Entries like
+ *
+ *
+ *
+ * Where other.xml contains ...
+ */
+static const struct element_parser element_parse_modules_include = {
+ ELEMENT_include,
+ parse_module_include,
+ NULL,
+ NULL,
+ NULL
+};
+
static const struct element_parser element_parse_module = {
ELEMENT_module,
parse_module,
NULL,
- NULL,
+ &element_parse_modules_include,
&element_parse_module_include
};
@@ -723,7 +743,7 @@ static bool parse_mix_port(struct parser_data *data, const char *element_name, c
/* maxActiveCount is not mandatory element attribute */
if (get_element_attr(data, attributes, false, ATTRIBUTE_maxActiveCount, &max_active_count))
- pa_atoi(max_open_count, &p->max_active_count);
+ pa_atoi(max_active_count, &p->max_active_count);
parsed = true;
done:
@@ -1007,6 +1027,27 @@ static dm_config_port *config_mix_port_new(dm_config_module *module,
return c_mix_port;
}
+/* If a devicePort doesn't have any profiles defined let's just make something
+ * up that could work. */
+static struct profile *default_profile(const char *role) {
+ struct profile *p;
+ bool output;
+
+ output = pa_safe_streq(role, PORT_TYPE_sink);
+
+ p = pa_xmalloc0(sizeof(*p));
+
+ p->name = pa_sprintf_malloc("generated-default");
+ pa_assert(pa_string_convert_str_to_num(CONV_STRING_FORMAT, "AUDIO_FORMAT_PCM_16_BIT", &p->format));
+ p->sampling_rates[0] = 48000;
+ pa_assert(pa_string_convert_str_to_num(output ? CONV_STRING_OUTPUT_CHANNELS : CONV_STRING_INPUT_CHANNELS,
+ output ? "AUDIO_CHANNEL_OUT_STEREO" : "AUDIO_CHANNEL_IN_STEREO",
+ &p->channel_masks[0]));
+ p->next = NULL;
+
+ return p;
+}
+
static void generate_config_for_module(struct module *module, dm_config_device *config) {
dm_config_module *c_module;
struct mix_port *mix_port;
@@ -1034,8 +1075,8 @@ static void generate_config_for_module(struct module *module, dm_config_device *
dm_config_port *c_device_port;
if (!device_port->profiles) {
- pa_log("No profile defined for devicePort %s", device_port->tag_name);
- continue;
+ pa_log_info("No profile defined for devicePort %s, generating default.", device_port->tag_name);
+ SLLIST_APPEND(struct profile, device_port->profiles, default_profile(device_port->role));
}
c_device_port = config_device_port_new(c_module, device_port);
@@ -1181,8 +1222,8 @@ dm_config_device *pa_parse_droid_audio_config_xml(const char *filename) {
SLLIST_FOREACH(data.current_include, data.conf->includes) {
char *fn = NULL;
- if (!data.current_include->module)
- continue;
+// if (!data.current_include->module)
+// continue;
if (data.current_include->href[0] != '/')
fn = build_path(filename, data.current_include->href);
diff --git a/src/common/droid-util-audio.h b/src/common/droid-util-audio.h
index 942e44e..7543a88 100644
--- a/src/common/droid-util-audio.h
+++ b/src/common/droid-util-audio.h
@@ -89,8 +89,9 @@ uint32_t conversion_table_input_channel[][2] = {
uint32_t conversion_table_format[][2] = {
{ PA_SAMPLE_U8, AUDIO_FORMAT_PCM_8_BIT },
{ PA_SAMPLE_S16LE, AUDIO_FORMAT_PCM_16_BIT },
- { PA_SAMPLE_S32LE, AUDIO_FORMAT_PCM_32_BIT },
- { PA_SAMPLE_S24LE, AUDIO_FORMAT_PCM_8_24_BIT }
+ { PA_SAMPLE_S24_32LE, AUDIO_FORMAT_PCM_8_24_BIT },
+ { PA_SAMPLE_S24LE, AUDIO_FORMAT_PCM_24_BIT_PACKED },
+ { PA_SAMPLE_S32LE, AUDIO_FORMAT_PCM_32_BIT }
};
uint32_t conversion_table_default_audio_source[][2] = {
diff --git a/src/common/droid-util.c b/src/common/droid-util.c
index ffbbad4..758a71c 100644
--- a/src/common/droid-util.c
+++ b/src/common/droid-util.c
@@ -209,7 +209,7 @@ static pa_droid_mapping *droid_mapping_update(pa_droid_mapping *droid_mapping,
map = output_mapping ? profile_set->output_mappings : profile_set->input_mappings;
if (!(droid_mapping = pa_hashmap_get(map, mix_port->name))) {
- pa_log_debug("New %s mapping \"%s\"", output_mapping ? "output" : "input", mix_port->name);
+ pa_log("New %s mapping \"%s\"", output_mapping ? "output" : "input", mix_port->name);
droid_mapping = pa_xnew0(pa_droid_mapping, 1);
droid_mapping->module = module;
@@ -274,8 +274,10 @@ static void update_mapping(pa_droid_profile_set *profile_set,
droid_mapping = droid_mapping_update(droid_mapping, profile_set, module, sink, source);
} else {
- pa_log("Internal data structures are confused, source pt: %d, sink pt: %d.", source->port_type, sink->port_type);
- pa_assert_not_reached();
+ pa_log("Internal data structures are confused, source %s: %d, sink %s: %d.", source->name, source->port_type, sink->name, sink->port_type);
+ // GEMIAN - disabled assert as this totally stops things working, will need to revisit this later but for now this lets some audio out
+ //pa_assert_not_reached();
+ put = false;
}
@@ -326,6 +328,7 @@ static void auto_add_profiles(pa_droid_profile_set *profile_set,
dm_config_port *source;
DM_LIST_FOREACH_DATA(source, route->sources, state2) {
+ pa_log("auto_add_profiles %s: %d, rt: %d, sink: %s", source->name, source->port_type, route->type, route->sink->name);
update_mapping(profile_set, profile, module, source, route->sink);
}
}