Merge pull request #104 from jusa/bt_sco
Set BT_SCO parameter for Bluetooth routes.
This commit is contained in:
commit
8f936ba66f
1 changed files with 45 additions and 3 deletions
|
|
@ -99,9 +99,21 @@ struct droid_quirk valid_quirks[] = {
|
|||
#define DEFAULT_AUDIO_FORMAT (AUDIO_FORMAT_PCM_16_BIT)
|
||||
|
||||
|
||||
#ifndef AUDIO_PARAMETER_VALUE_ON
|
||||
#define AUDIO_PARAMETER_VALUE_ON "on"
|
||||
#endif
|
||||
|
||||
#ifndef AUDIO_PARAMETER_VALUE_OFF
|
||||
#define AUDIO_PARAMETER_VALUE_OFF "off"
|
||||
#endif
|
||||
|
||||
#define AUDIO_PARAMETER_BT_SCO_ON "BT_SCO=" AUDIO_PARAMETER_VALUE_ON
|
||||
#define AUDIO_PARAMETER_BT_SCO_OFF "BT_SCO=" AUDIO_PARAMETER_VALUE_OFF
|
||||
|
||||
static void droid_port_free(pa_droid_port *p);
|
||||
|
||||
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 pa_droid_profile *profile_new(pa_droid_profile_set *ps,
|
||||
const pa_droid_config_hw_module *module,
|
||||
|
|
@ -1861,11 +1873,30 @@ static int droid_output_stream_set_route(pa_droid_stream *s, audio_devices_t dev
|
|||
pa_mutex_lock(s->module->output_mutex);
|
||||
|
||||
if (output->flags & AUDIO_OUTPUT_FLAG_PRIMARY || pa_droid_hw_primary_output_stream(s->module) == NULL) {
|
||||
int set_bt_sco = -1;
|
||||
|
||||
parameters = pa_sprintf_malloc("%s=%u;", AUDIO_PARAMETER_STREAM_ROUTING, device);
|
||||
|
||||
/* Set BT_SCO parameter for Bluetooth voice/voip call routes. */
|
||||
if (device != output->device &&
|
||||
(device | output->device) & (AUDIO_DEVICE_OUT_BLUETOOTH_SCO |
|
||||
AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET |
|
||||
AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT)) {
|
||||
|
||||
set_bt_sco = (device & (AUDIO_DEVICE_OUT_BLUETOOTH_SCO |
|
||||
AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET |
|
||||
AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT)) ? 1 : 0;
|
||||
}
|
||||
|
||||
if (set_bt_sco == 1)
|
||||
droid_set_parameters(s->module, AUDIO_PARAMETER_BT_SCO_ON);
|
||||
|
||||
pa_log_debug("output stream %p set_parameters(%s) %#010x", (void *) s, parameters, device);
|
||||
ret = output->stream->common.set_parameters(&output->stream->common, parameters);
|
||||
|
||||
if (set_bt_sco == 0)
|
||||
droid_set_parameters(s->module, AUDIO_PARAMETER_BT_SCO_OFF);
|
||||
|
||||
if (ret < 0) {
|
||||
if (ret == -ENOSYS)
|
||||
pa_log_warn("output set_parameters(%s) not allowed while stream is active", parameters);
|
||||
|
|
@ -2002,16 +2033,14 @@ int pa_droid_stream_set_parameters(pa_droid_stream *s, const char *parameters) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
int pa_droid_set_parameters(pa_droid_hw_module *hw, const char *parameters) {
|
||||
static int droid_set_parameters(pa_droid_hw_module *hw, const char *parameters) {
|
||||
int ret;
|
||||
|
||||
pa_assert(hw);
|
||||
pa_assert(parameters);
|
||||
|
||||
pa_log_debug("hw %p set_parameters(%s)", (void *) hw, parameters);
|
||||
pa_mutex_lock(hw->hw_mutex);
|
||||
ret = hw->device->set_parameters(hw->device, parameters);
|
||||
pa_mutex_unlock(hw->hw_mutex);
|
||||
|
||||
if (ret < 0)
|
||||
pa_log("hw module %p set_parameters(%s) failed: %d", (void *) hw, parameters, ret);
|
||||
|
|
@ -2019,6 +2048,19 @@ int pa_droid_set_parameters(pa_droid_hw_module *hw, const char *parameters) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
int pa_droid_set_parameters(pa_droid_hw_module *hw, const char *parameters) {
|
||||
int ret;
|
||||
|
||||
pa_assert(hw);
|
||||
pa_assert(parameters);
|
||||
|
||||
pa_mutex_lock(hw->hw_mutex);
|
||||
ret = droid_set_parameters(hw, parameters);
|
||||
pa_mutex_unlock(hw->hw_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool pa_droid_stream_is_primary(pa_droid_stream *s) {
|
||||
pa_assert(s);
|
||||
pa_assert(s->output || s->input);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue