[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -1,9 +1,15 @@
<services>
- <service name="tar_git">
+ <!--
+ <service name="webhook">
+ <param name="repourl">https://github.com/mer-hybris/pulseaudio-modules-droid.git</param>
+ <param name="branch">master</param>
+ </service>
+ -->
+<service name="tar_git">
<param name="url">https://github.com/mer-hybris/pulseaudio-modules-droid.git</param>
<param name="branch">master</param>
- <param name="revision">HEAD</param>
+ <param name="revision">e28d1e22d3b0963e457e4fa45b952536ca415c9e</param>
<param name="token"/>
- <param name="debian"/>
- <param name="dumb"/>
-</service></services>
\ No newline at end of file
+ <param name="debian">N</param>
+ <param name="dumb">N</param>
+</service></services>
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.51.tar.bz2/README
^
|
@@ -1,6 +1,11 @@
PulseAudio Droid modules
========================
+Building of droid modules is split to two packages
+ * common (and common-devel) which contains shared library code for use in
+ PulseAudio modules in this package and for inclusion in other projects
+ * droid with actual PulseAudio modules
+
Supported Android versions:
* 4.1.x with Qualcomm extensions (tested with 4.1.2)
@@ -9,10 +14,11 @@
* 5.1
Headers for defining devices and strings for different droid versions are in
-src/droid/droid-util-XXX.h
+src/common/droid-util-XXX.h
-These headers are then included in src/droid/droid-util.h based on detected
-droid version.
+These headers are then included in src/common/droid-util.h based on detected
+droid version. Version is defined in android-version.h, included from
+android-config.h, which is part of droid hal devel package.
The purpose of droid-modules is to "replace AudioFlinger". Many hardware
adaptations use ALSA as the kernel interface, but there is no saying that
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.51.tar.bz2/src/common/droid-util-42.h
^
|
@@ -139,35 +139,6 @@
};
/* Input devices */
-#ifdef DROID_DEVICE_MAKO
-struct string_conversion string_conversion_table_input_device[] = {
- { 0x10000, "AUDIO_DEVICE_IN_COMMUNICATION" },
- { 0x20000, "AUDIO_DEVICE_IN_AMBIENT" },
- { 0x40000, "AUDIO_DEVICE_IN_BUILTIN_MIC" },
- { 0x80000, "AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET" },
- { 0x100000, "AUDIO_DEVICE_IN_WIRED_HEADSET" },
- { 0x200000, "AUDIO_DEVICE_IN_AUX_DIGITAL" },
- { 0x400000, "AUDIO_DEVICE_IN_VOICE_CALL" },
- { 0x800000, "AUDIO_DEVICE_IN_BACK_MIC" },
- { 0x40000000, "AUDIO_DEVICE_IN_DEFAULT" },
- { 0x80000000, "AUDIO_DEVICE_IN_REMOTE_SUBMIX" }, // What's this really??
- { 0, NULL }
-};
-
-struct string_conversion string_conversion_table_input_device_fancy[] = {
- { 0x10000, "input-communication" },
- { 0x20000, "input-ambient" },
- { 0x40000, "input-builtin_mic" },
- { 0x80000, "input-bluetooth_sco_headset" },
- { 0x100000, "input-wired_headset" },
- { 0x200000, "input-aux_digital" },
- { 0x400000, "input-voice_call" },
- { 0x800000, "input-back_mic" },
- { 0x40000000, "input-default" },
- { 0x80000000, "input-remote_submix" },
- { 0, NULL }
-};
-#else
struct string_conversion string_conversion_table_input_device[] = {
STRING_ENTRY(AUDIO_DEVICE_IN_COMMUNICATION),
STRING_ENTRY(AUDIO_DEVICE_IN_AMBIENT),
@@ -207,7 +178,6 @@
{ AUDIO_DEVICE_IN_DEFAULT, "input-default" },
{ 0, NULL }
};
-#endif
struct string_conversion string_conversion_table_audio_source_fancy[] = {
{ AUDIO_SOURCE_DEFAULT, "default" },
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.51.tar.bz2/src/common/droid-util-44.h
^
|
@@ -90,7 +90,7 @@
};
uint32_t conversion_table_default_audio_source[][2] = {
-#ifdef DROID_DEVICE_HAMMERHEAD
+#if defined(DROID_DEVICE_HAMMERHEAD) || defined(DROID_DEVICE_ARMANI) || defined(DROID_DEVICE_MAKO)
{ AUDIO_DEVICE_IN_COMMUNICATION, AUDIO_SOURCE_MIC },
{ AUDIO_DEVICE_IN_AMBIENT, AUDIO_SOURCE_MIC },
{ AUDIO_DEVICE_IN_BUILTIN_MIC, AUDIO_SOURCE_MIC },
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.51.tar.bz2/src/common/droid-util-51.h
^
|
@@ -218,6 +218,9 @@
STRING_ENTRY(AUDIO_DEVICE_IN_BLUETOOTH_A2DP),
STRING_ENTRY(AUDIO_DEVICE_IN_LOOPBACK),
#ifdef QCOM_HARDWARE
+#ifdef DROID_AUDIO_HAL_SECONDARY_MIC
+ STRING_ENTRY(AUDIO_DEVICE_IN_SECONDARY_MIC),
+#endif
STRING_ENTRY(AUDIO_DEVICE_IN_PROXY),
STRING_ENTRY(AUDIO_DEVICE_IN_FM_RX),
STRING_ENTRY(AUDIO_DEVICE_IN_FM_RX_A2DP),
@@ -254,6 +257,9 @@
{ AUDIO_DEVICE_IN_BLUETOOTH_A2DP, "input-bluetooth_a2dp" },
{ AUDIO_DEVICE_IN_LOOPBACK, "input-loopback" },
#ifdef QCOM_HARDWARE
+#ifdef DROID_AUDIO_HAL_SECONDARY_MIC
+ { AUDIO_DEVICE_IN_SECONDARY_MIC, "input-secondary_mic" },
+#endif
{ AUDIO_DEVICE_IN_PROXY, "input-proxy" },
{ AUDIO_DEVICE_IN_FM_RX, "input-fm_rx" },
{ AUDIO_DEVICE_IN_FM_RX_A2DP, "input-fm_rx_a2dp" },
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.51.tar.bz2/src/common/droid-util.c
^
|
@@ -55,6 +55,7 @@
#include <pulsecore/shared.h>
#include <pulsecore/mutex.h>
#include <pulsecore/strlist.h>
+#include <pulsecore/atomic.h>
#include "droid-util.h"
@@ -81,6 +82,9 @@
/* Section defining custom global configuration variables. */
#define GLOBAL_CONFIG_EXT_TAG "custom_properties"
+static const char * const droid_combined_auto_outputs[3] = { "primary", "low_latency", NULL };
+static const char * const droid_combined_auto_inputs[2] = { "primary", NULL };
+
static void droid_port_free(pa_droid_port *p);
static bool string_convert_num_to_str(const struct string_conversion *list, const uint32_t value, const char **to_str) {
@@ -828,12 +832,15 @@
return false;
}
-/* outputs or inputs string lists can be NULL, which means include all outputs and inputs
- * from module. */
+/* If outputs or inputs string list contain string *all* it means all
+ * outputs or inputs are added to the combined profile.
+ * If outputs or inputs string list contain string *auto* it means
+ * all devices that are in module and listed in droid_combined_auto_*
+ * are added to the combined profile. */
static pa_droid_profile *add_combined_profile(pa_droid_profile_set *ps,
const pa_droid_config_hw_module *module,
- pa_strlist *outputs,
- pa_strlist *inputs) {
+ const pa_strlist *outputs,
+ const pa_strlist *inputs) {
pa_droid_profile *p;
char *description;
char *o_str;
@@ -845,27 +852,65 @@
pa_assert(ps);
pa_assert(module);
- for (unsigned i = 0; i < module->outputs_size; i++) {
- if (outputs && !str_in_strlist(module->outputs[i].name, outputs))
- continue;
+ if (outputs) {
+ if (str_in_strlist(PA_DROID_COMBINED_AUTO, outputs)) {
+ for (unsigned i = 0; droid_combined_auto_outputs[i]; i++) {
+ for (unsigned j = 0; j < module->outputs_size; j++) {
+ if (pa_streq(droid_combined_auto_outputs[i], module->outputs[j].name)) {
+ pa_log_debug("Auto add to combined profile output %s", module->outputs[j].name);
+ to_outputs = pa_strlist_prepend(to_outputs, module->outputs[j].name);
+ }
+ }
+ }
+ } else {
+ for (unsigned i = 0; i < module->outputs_size; i++) {
+ if (!str_in_strlist(PA_DROID_COMBINED_ALL, outputs) &&
+ !str_in_strlist(module->outputs[i].name, outputs))
+ continue;
- to_outputs = pa_strlist_prepend(to_outputs, module->outputs[i].name);
+ to_outputs = pa_strlist_prepend(to_outputs, module->outputs[i].name);
+ }
+ }
+
+ to_outputs = pa_strlist_reverse(to_outputs);
}
- to_outputs = pa_strlist_reverse(to_outputs);
- for (unsigned i = 0; i < module->inputs_size; i++) {
- if (inputs && !str_in_strlist(module->inputs[i].name, inputs))
- continue;
+ if (inputs) {
+ if (str_in_strlist(PA_DROID_COMBINED_AUTO, inputs)) {
+ for (unsigned i = 0; droid_combined_auto_inputs[i]; i++) {
+ for (unsigned j = 0; j < module->inputs_size; j++) {
+ if (pa_streq(droid_combined_auto_inputs[i], module->inputs[j].name)) {
+ pa_log_debug("Auto add to combined profile input %s", module->inputs[j].name);
+ to_inputs = pa_strlist_prepend(to_inputs, module->inputs[j].name);
+ }
+ }
+ }
+ } else {
+ for (unsigned i = 0; i < module->inputs_size; i++) {
+ if (!str_in_strlist(PA_DROID_COMBINED_ALL, inputs) &&
+ !str_in_strlist(module->inputs[i].name, inputs))
+ continue;
- to_inputs = pa_strlist_prepend(to_inputs, module->inputs[i].name);
+ to_inputs = pa_strlist_prepend(to_inputs, module->inputs[i].name);
+ }
+ }
+
+ to_inputs = pa_strlist_reverse(to_inputs);
}
- to_inputs = pa_strlist_reverse(to_inputs);
+#if (PULSEAUDIO_VERSION >= 8)
+ o_str = pa_strlist_to_string(to_outputs);
+ i_str = pa_strlist_to_string(to_inputs);
+#else
o_str = pa_strlist_tostring(to_outputs);
i_str = pa_strlist_tostring(to_inputs);
+#endif
pa_log_debug("New combined profile: %s (outputs: %s, inputs: %s)", module->name, o_str, i_str);
+ if (!to_outputs && !to_inputs)
+ pa_log("Combined profile doesn't have any outputs or inputs!");
+
description = pa_sprintf_malloc("Combined outputs (%s) and inputs (%s) of %s.", o_str,
i_str,
module->name);
@@ -874,26 +919,30 @@
pa_xfree(o_str);
pa_xfree(i_str);
- for (unsigned i = 0; i < module->outputs_size; i++) {
- if (!str_in_strlist(module->outputs[i].name, to_outputs))
- continue;
+ if (to_outputs) {
+ for (unsigned i = 0; i < module->outputs_size; i++) {
+ if (!str_in_strlist(module->outputs[i].name, to_outputs))
+ continue;
- am = pa_droid_mapping_get(ps, PA_DIRECTION_OUTPUT, &module->outputs[i]);
- pa_droid_profile_add_mapping(p, am);
+ am = pa_droid_mapping_get(ps, PA_DIRECTION_OUTPUT, &module->outputs[i]);
+ pa_droid_profile_add_mapping(p, am);
- if (pa_streq(module->outputs[i].name, "primary"))
- p->priority += DEFAULT_PRIORITY;
+ if (pa_streq(module->outputs[i].name, "primary"))
+ p->priority += DEFAULT_PRIORITY;
+ }
}
- for (unsigned i = 0; i < module->inputs_size; i++) {
- if (!str_in_strlist(module->inputs[i].name, to_inputs))
- continue;
+ if (to_inputs) {
+ for (unsigned i = 0; i < module->inputs_size; i++) {
+ if (!str_in_strlist(module->inputs[i].name, to_inputs))
+ continue;
- am = pa_droid_mapping_get(ps, PA_DIRECTION_INPUT, &module->inputs[i]);
- pa_droid_profile_add_mapping(p, am);
+ am = pa_droid_mapping_get(ps, PA_DIRECTION_INPUT, &module->inputs[i]);
+ pa_droid_profile_add_mapping(p, am);
- if (pa_streq(module->inputs[i].name, "primary"))
- p->priority += DEFAULT_PRIORITY;
+ if (pa_streq(module->inputs[i].name, "primary"))
+ p->priority += DEFAULT_PRIORITY;
+ }
}
pa_strlist_free(to_outputs);
@@ -921,10 +970,9 @@
return ps;
}
-pa_droid_profile_set *pa_droid_profile_set_new(const pa_droid_config_hw_module *module) {
- pa_droid_profile_set *ps;
-
- ps = profile_set_new(module);
+static void add_all_profiles(pa_droid_profile_set *ps, const pa_droid_config_hw_module *module) {
+ pa_assert(ps);
+ pa_assert(module);
/* Each distinct hw module output matches one profile. If there are multiple inputs
* combinations are made so that all possible outputs and inputs can be selected.
@@ -940,15 +988,25 @@
} else
add_profile(ps, &module->outputs[o], NULL);
}
+}
+
+pa_droid_profile_set *pa_droid_profile_set_new(const pa_droid_config_hw_module *module) {
+ pa_droid_profile_set *ps;
+
+ ps = profile_set_new(module);
+ add_all_profiles(ps, module);
return ps;
}
-pa_droid_profile_set *pa_droid_profile_set_combined_new(const pa_droid_config_hw_module *module, pa_strlist *inputs, pa_strlist *outputs) {
+pa_droid_profile_set *pa_droid_profile_set_combined_new(const pa_droid_config_hw_module *module,
+ const pa_strlist *outputs,
+ const pa_strlist *inputs) {
pa_droid_profile_set *ps;
ps = profile_set_new(module);
- add_combined_profile(ps, module, inputs, outputs);
+ add_combined_profile(ps, module, outputs, inputs);
+ add_all_profiles(ps, module);
return ps;
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.51.tar.bz2/src/common/droid-util.h
^
|
@@ -29,6 +29,7 @@
#include <pulsecore/macro.h>
#include <pulsecore/mutex.h>
#include <pulsecore/strlist.h>
+#include <pulsecore/atomic.h>
#include <android-config.h>
@@ -51,9 +52,14 @@
#define PROP_DROID_DEVICES "droid.devices"
#define PROP_DROID_FLAGS "droid.flags"
#define PROP_DROID_HW_MODULE "droid.hw_module"
+#define PROP_DROID_API_STRING "droid-hal"
#define PA_DROID_PRIMARY_DEVICE "primary"
+/* Special keywords for combined profile creation. */
+#define PA_DROID_COMBINED_ALL "*all*"
+#define PA_DROID_COMBINED_AUTO "*auto*"
+
typedef struct pa_droid_hw_module pa_droid_hw_module;
typedef struct pa_droid_stream pa_droid_stream;
typedef struct pa_droid_card_data pa_droid_card_data;
@@ -84,6 +90,9 @@
pa_idxset *outputs;
pa_idxset *inputs;
+
+ pa_atomic_t active_outputs;
+ uint32_t output_device;
};
struct pa_droid_stream {
@@ -274,8 +283,8 @@
/* Profiles */
pa_droid_profile_set *pa_droid_profile_set_new(const pa_droid_config_hw_module *module);
pa_droid_profile_set *pa_droid_profile_set_combined_new(const pa_droid_config_hw_module *module,
- pa_strlist *inputs,
- pa_strlist *outputs);
+ const pa_strlist *outputs,
+ const pa_strlist *inputs);
void pa_droid_profile_set_free(pa_droid_profile_set *ps);
pa_droid_profile *pa_droid_profile_new(pa_droid_profile_set *ps, const pa_droid_config_output *output, const pa_droid_config_input *input);
@@ -334,4 +343,14 @@
audio_devices_t devices);
int pa_droid_stream_set_input_route(pa_droid_stream *s, audio_devices_t device, audio_source_t *new_source);
+bool pa_droid_stream_is_primary(pa_droid_stream *s);
+
+int pa_droid_stream_suspend(pa_droid_stream *s, bool suspend);
+
+static inline int pa_droid_output_stream_any_active(pa_droid_stream *s) {
+ return pa_atomic_load(&s->module->active_outputs);
+}
+
+bool pa_sink_is_droid_sink(pa_sink *s);
+
#endif
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.51.tar.bz2/src/droid/droid-sink.c
^
|
@@ -79,6 +79,12 @@
pa_usec_t buffer_time;
pa_usec_t write_time;
pa_usec_t write_threshold;
+ audio_devices_t prewrite_devices;
+ uint32_t prewrite_silence;
+ pa_hook_slot *sink_put_hook_slot;
+ pa_hook_slot *sink_unlink_hook_slot;
+ pa_hook_slot *sink_port_changed_hook_slot;
+ pa_sink *primary_stream_sink;
audio_devices_t primary_devices;
audio_devices_t extra_devices;
@@ -187,6 +193,14 @@
return need_update;
}
+static void clear_extra_devices(struct userdata *u) {
+ pa_assert(u);
+ pa_assert(u->extra_devices_map);
+
+ pa_hashmap_remove_all(u->extra_devices_map);
+ u->extra_devices = 0;
+}
+
/* Called from main context during voice calls, and from IO context during media operation. */
static void do_routing(struct userdata *u) {
audio_devices_t routing;
@@ -194,6 +208,9 @@
pa_assert(u);
pa_assert(u->stream);
+ if (u->use_voice_volume && u->extra_devices)
+ clear_extra_devices(u);
+
routing = u->primary_devices | u->extra_devices;
pa_droid_stream_set_output_route(u->stream, routing);
@@ -390,7 +407,7 @@
/* Sleep */
#if (PULSEAUDIO_VERSION == 5)
if ((ret = pa_rtpoll_run(u->rtpoll, true)) < 0)
-#elif (PULSEAUDIO_VERSION == 6)
+#elif (PULSEAUDIO_VERSION >= 6)
if ((ret = pa_rtpoll_run(u->rtpoll)) < 0)
#endif
goto fail;
@@ -418,7 +435,7 @@
pa_assert(u->sink);
pa_assert(u->stream->out);
- ret = u->stream->out->common.standby(&u->stream->out->common);
+ ret = pa_droid_stream_suspend(u->stream, true);
if (ret == 0) {
pa_sink_set_max_request_within_thread(u->sink, 0);
@@ -434,6 +451,8 @@
}
static int unsuspend(struct userdata *u) {
+ uint32_t i;
+
pa_assert(u);
pa_assert(u->sink);
@@ -442,6 +461,15 @@
pa_log_info("Resuming...");
+ if (u->prewrite_silence &&
+ (u->primary_devices | u->extra_devices) & u->prewrite_devices &&
+ pa_droid_output_stream_any_active(u->stream) == 0) {
+ for (i = 0; i < u->prewrite_silence; i++)
+ thread_write_silence(u);
+ }
+
+ pa_droid_stream_suspend(u->stream, false);
+
return 0;
}
@@ -606,8 +634,10 @@
u->use_hw_volume = (ret == 0);
- /* Apply callbacks */
- pa_droid_sink_set_voice_control(u->sink, false);
+ if (pa_droid_stream_is_primary(u->stream)) {
+ /* Apply callbacks */
+ pa_droid_sink_set_voice_control(u->sink, false);
+ }
}
static void set_sink_name(pa_modargs *ma, pa_sink_new_data *data, const char *module_id) {
@@ -694,6 +724,11 @@
pa_assert(u);
pa_assert(u->sink == sink);
+ if (!pa_droid_stream_is_primary(u->stream)) {
+ pa_log_debug("skipping voice volume control with non-primary stream");
+ return;
+ }
+
if (u->use_voice_volume == enable)
return;
@@ -852,6 +887,158 @@
return PA_HOOK_OK;
}
+static pa_hook_result_t sink_port_changed_hook_cb(pa_core *c, pa_sink *sink, struct userdata *u) {
+ pa_device_port *port;
+
+ pa_assert(c);
+ pa_assert(sink);
+ pa_assert(u);
+
+ if (sink != u->primary_stream_sink)
+ return PA_HOOK_OK;
+
+ port = sink->active_port;
+ pa_log_info("Set slave sink port to %s", port->name);
+ pa_sink_set_port(u->sink, port->name, false);
+
+ return PA_HOOK_OK;
+}
+
+static void unset_primary_stream_sink(struct userdata *u) {
+ pa_assert(u);
+ pa_assert(u->primary_stream_sink);
+ pa_assert(u->sink_port_changed_hook_slot);
+
+ pa_hook_slot_free(u->sink_port_changed_hook_slot);
+ u->sink_port_changed_hook_slot = NULL;
+ u->primary_stream_sink = NULL;
+}
+
+static pa_hook_result_t sink_unlink_hook_cb(pa_core *c, pa_sink *sink, struct userdata *u) {
+ pa_assert(c);
+ pa_assert(sink);
+ pa_assert(u);
+
+ if (sink != u->primary_stream_sink)
+ return PA_HOOK_OK;
+
+ pa_log_info("Primary stream sink disappeared.");
+ unset_primary_stream_sink(u);
+
+ return PA_HOOK_OK;
+}
+
+static pa_hook_result_t sink_put_hook_cb(pa_core *c, pa_sink *sink, struct userdata *u) {
+ struct userdata *sink_u;
+
+ pa_assert(c);
+ pa_assert(sink);
+ pa_assert(u);
+
+ if (!pa_sink_is_droid_sink(sink))
+ return PA_HOOK_OK;
+
+ sink_u = sink->userdata;
+
+ if (!pa_droid_stream_is_primary(sink_u->stream))
+ return PA_HOOK_OK;
+
+ u->primary_stream_sink = sink;
+
+ pa_assert(!u->sink_port_changed_hook_slot);
+ u->sink_port_changed_hook_slot = pa_hook_connect(&u->core->hooks[PA_CORE_HOOK_SINK_PORT_CHANGED], PA_HOOK_NORMAL,
+ (pa_hook_cb_t) sink_port_changed_hook_cb, u);
+
+ pa_log_info("Primary stream sink setup for slave.");
+
+ sink_port_changed_hook_cb(c, sink, u);
+
+ return PA_HOOK_OK;
+}
+
+static void setup_track_primary(struct userdata *u) {
+ pa_sink *sink;
+ struct userdata *sink_u;
+ uint32_t idx;
+
+ pa_assert(u);
+
+ u->sink_put_hook_slot = pa_hook_connect(&u->core->hooks[PA_CORE_HOOK_SINK_PUT], PA_HOOK_NORMAL,
+ (pa_hook_cb_t) sink_put_hook_cb, u);
+ u->sink_unlink_hook_slot = pa_hook_connect(&u->core->hooks[PA_CORE_HOOK_SINK_UNLINK], PA_HOOK_NORMAL,
+ (pa_hook_cb_t) sink_unlink_hook_cb, u);
+
+ PA_IDXSET_FOREACH(sink, u->core->sinks, idx) {
+ if (pa_sink_is_droid_sink(sink)) {
+ sink_u = sink->userdata;
+ if (pa_droid_stream_is_primary(sink_u->stream)) {
+ sink_put_hook_cb(u->core, sink, u);
+ break;
+ }
+ }
+ }
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.51.tar.bz2/src/droid/droid-source.c
^
|
@@ -98,8 +98,12 @@
return 0;
}
- if (u->primary_devices == devices)
- pa_log_debug("Refresh active device routing.");
+ if (u->primary_devices == devices) {
+ if (force)
+ pa_log_debug("Refresh active device routing.");
+ else
+ return 0;
+ }
old_device = u->primary_devices;
u->primary_devices = devices;
@@ -209,7 +213,7 @@
/* Sleep */
#if (PULSEAUDIO_VERSION == 5)
if ((ret = pa_rtpoll_run(u->rtpoll, true)) < 0)
-#elif (PULSEAUDIO_VERSION == 6)
+#elif (PULSEAUDIO_VERSION >= 6)
if ((ret = pa_rtpoll_run(u->rtpoll)) < 0)
#endif
goto fail;
@@ -236,7 +240,7 @@
pa_assert(u);
pa_assert(u->stream);
- ret = u->stream->in->common.standby(&u->stream->in->common);
+ ret = pa_droid_stream_suspend(u->stream, true);
if (ret == 0)
pa_log_info("Device suspended.");
@@ -245,6 +249,15 @@
}
/* Called from IO context */
+static void unsuspend(struct userdata *u) {
+ pa_assert(u);
+ pa_assert(u->stream);
+
+ pa_droid_stream_suspend(u->stream, false);
+ pa_log_info("Resuming...");
+}
+
+/* Called from IO context */
static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
struct userdata *u = PA_SOURCE(o)->userdata;
@@ -265,7 +278,7 @@
case PA_SOURCE_IDLE:
break;
case PA_SOURCE_RUNNING: {
- pa_log_info("Resuming...");
+ unsuspend(u);
u->timestamp = pa_rtclock_now();
break;
}
@@ -359,7 +372,7 @@
#if (PULSEAUDIO_VERSION == 5)
static void source_get_mute_cb(pa_source *s) {
-#elif (PULSEAUDIO_VERSION == 6)
+#elif (PULSEAUDIO_VERSION >= 6)
static int source_get_mute_cb(pa_source *s, bool *muted) {
#endif
struct userdata *u = s->userdata;
@@ -379,7 +392,7 @@
#if (PULSEAUDIO_VERSION == 5)
if (ret == 0)
s->muted = b;
-#elif (PULSEAUDIO_VERSION == 6)
+#elif (PULSEAUDIO_VERSION >= 6)
if (ret == 0)
*muted = b;
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.51.tar.bz2/src/droid/module-droid-card.c
^
|
@@ -107,6 +107,7 @@
"deferred_volume",
"mute_routing_before",
"mute_routing_after",
+ "prewrite_on_resume",
"config",
"voice_property_key",
"voice_property_value",
@@ -469,7 +470,8 @@
return true;
}
-#if DROID_HAL == 1
+#if (DROID_HAL == 1) || \
+ (defined(QCOM_HARDWARE) && ANDROID_VERSION_MAJOR == 5 && ANDROID_VERSION_MINOR == 1)
static bool voicecall_record_profile_event_cb(struct userdata *u, pa_droid_profile *p, bool enabling) {
pa_queue *source_outputs = NULL;
pa_droid_mapping *am;
@@ -504,15 +506,13 @@
}
} else {
- /* don't do anything if voicecall source has already been destroyed. */
- if (!u->voicecall_source)
- return true;
-
pa_log_info("Disabling voice call record.");
- source_outputs = pa_source_move_all_start(u->voicecall_source, source_outputs);
- pa_droid_source_free(u->voicecall_source);
- u->voicecall_source = NULL;
+ if (u->voicecall_source) {
+ source_outputs = pa_source_move_all_start(u->voicecall_source, source_outputs);
+ pa_droid_source_free(u->voicecall_source);
+ u->voicecall_source = NULL;
+ }
am = pa_droid_idxset_get_primary(u->old_profile->input_mappings);
@@ -817,16 +817,38 @@
u->card_data.userdata = u;
if (combine) {
- char *tmp;
pa_strlist *o = NULL;
+ pa_strlist *i = NULL;
+
+ if (pa_streq(combine, PA_DROID_COMBINED_AUTO)) {
+ o = pa_strlist_parse(PA_DROID_COMBINED_AUTO);
+ i = pa_strlist_parse(PA_DROID_COMBINED_AUTO);
+ } else {
+ char *tmp, *d;
+ const char *inputs = NULL;
+ const char *outputs = NULL;
+
+ tmp = pa_replace(combine, ",", " ");
+
+ outputs = tmp;
+ if ((d = strstr(tmp, ":"))) {
+ d[0] = '\0';
+ inputs = d + 1;
+ }
+
+ if (outputs)
+ o = pa_strlist_parse(outputs);
+
+ if (inputs)
+ i = pa_strlist_parse(inputs);
+
+ pa_xfree(tmp);
+ }
- tmp = pa_replace(combine, ",", " ");
- o = pa_strlist_parse(tmp);
+ u->profile_set = pa_droid_profile_set_combined_new(u->hw_module->enabled_module, o, i);
- u->profile_set = pa_droid_profile_set_combined_new(u->hw_module->enabled_module,
- o, NULL);
pa_strlist_free(o);
- pa_xfree(tmp);
+ pa_strlist_free(i);
} else
u->profile_set = pa_droid_profile_set_new(u->hw_module->enabled_module);
|
[-]
[+]
|
Changed |
_service:tar_git:pulseaudio-modules-droid-8.0.51.tar.bz2/src/droid/module-droid-sink.c
^
|
@@ -62,6 +62,7 @@
"module_id",
"mute_routing_before",
"mute_routing_after",
+ "prewrite_on_resume",
"sink_buffer",
"deferred_volume",
"voice_property_key",
|