Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 91d1d9a6 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "hal: Reset A2DP backend before SCO is started"

parents 3de340e9 53a4e2f4
Loading
Loading
Loading
Loading
+46 −28
Original line number Diff line number Diff line
@@ -879,7 +879,7 @@ static int a2dp_set_backend_cfg()
        }

        /* Set Tx backend sample rate */
        if (a2dp.abr_config.is_abr_enabled)
        if (a2dp.abr_config.is_abr_enabled) {
            rate_str = ABR_TX_SAMPLE_RATE;

            ALOGD("%s: set backend tx sample rate = %s", __func__, rate_str);
@@ -894,6 +894,7 @@ static int a2dp_set_backend_cfg()
                ALOGE("%s: Failed to set backend sample rate = %s", __func__, rate_str);
                return -ENOSYS;
            }
        }
    } else {
        /* Fallback to legacy approch if MIXER_SAMPLE_RATE_RX and
        MIXER_SAMPLE_RATE_TX is not supported */
@@ -986,6 +987,7 @@ static int a2dp_reset_backend_cfg()
            return -ENOSYS;
        }

        if (a2dp.abr_config.is_abr_enabled) {
            ctl_sample_rate_tx = mixer_get_ctl_by_name(a2dp.adev->mixer,
                                            MIXER_SAMPLE_RATE_TX);
            if (!ctl_sample_rate_tx) {
@@ -997,6 +999,7 @@ static int a2dp_reset_backend_cfg()
                ALOGE("%s: Failed to reset Tx backend sample rate = %s", __func__, rate_str);
                return -ENOSYS;
            }
        }
    } else {

        ctl_sample_rate_rx = mixer_get_ctl_by_name(a2dp.adev->mixer,
@@ -1805,6 +1808,15 @@ static int reset_a2dp_dec_config_params()
    return ret;
}

static void reset_a2dp_config() {
    reset_a2dp_enc_config_params();
    reset_a2dp_dec_config_params();
    a2dp_reset_backend_cfg();
    if (a2dp.abr_config.is_abr_enabled && a2dp.abr_config.abr_started)
        stop_abr();
    a2dp.abr_config.is_abr_enabled = false;
}

int audio_extn_a2dp_stop_playback()
{
    int ret =0;
@@ -1824,13 +1836,9 @@ int audio_extn_a2dp_stop_playback()
        if (ret < 0)
            ALOGE("stop stream to BT IPC lib failed");
        else
            ALOGV("stop steam to BT IPC lib successful");
        reset_a2dp_enc_config_params();
        reset_a2dp_dec_config_params();
        a2dp_reset_backend_cfg();
        if (a2dp.abr_config.is_abr_enabled && a2dp.abr_config.abr_started)
            stop_abr();
        a2dp.abr_config.is_abr_enabled = false;
            ALOGV("stop stream to BT IPC lib successful");
        if (!a2dp.a2dp_suspended)
            reset_a2dp_config();
        a2dp.a2dp_started = false;
    }
    if(!a2dp.a2dp_total_active_session_request)
@@ -1895,8 +1903,7 @@ void audio_extn_a2dp_set_parameters(struct str_parms *parms)
                        pthread_mutex_lock(&a2dp.adev->lock);
                    }
                }
                reset_a2dp_enc_config_params();
                reset_a2dp_dec_config_params();
                reset_a2dp_config();
                if (a2dp.audio_suspend_stream)
                   a2dp.audio_suspend_stream();
            } else if (a2dp.a2dp_suspended == true) {
@@ -1924,8 +1931,19 @@ void audio_extn_a2dp_set_parameters(struct str_parms *parms)
                        if (ret != 0) {
                            ALOGE("BT controller start failed");
                            a2dp.a2dp_started = false;
                        } else {
                            if (!configure_a2dp_encoder_format()) {
                                ALOGE("%s: Encoder params configuration failed post suspend", __func__);
                                a2dp.a2dp_started = false;
                                ret = -ETIMEDOUT;
                            }
                        }
                    }
                    if (a2dp.a2dp_started) {
                        a2dp_set_backend_cfg();
                        if (a2dp.abr_config.is_abr_enabled)
                            start_abr();
                    }
                }
                list_for_each(node, &a2dp.adev->usecase_list) {
                    uc_info = node_to_item(node, struct audio_usecase, list);