summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2021-10-06 22:53:41 +0000
committerXin Li <delphij@google.com>2021-10-06 22:53:41 +0000
commitebee23489af601f5d54ed016b4214badd862df74 (patch)
tree9c30a735dcf582b3da4cd815d7373da1e28b3769
parent5e29fcd9a6dad5b1cd36dcf37a66dc16ed9b572b (diff)
parentea1b825f58d5bc76699ec1e92ce3617ebc099ad7 (diff)
downloadaudio-ebee23489af601f5d54ed016b4214badd862df74.tar.gz
Merge Android 12
Bug: 202323961 Merged-In: I1f60cd434a6cda1c1039dd05f3690d9dcc65f7e2 Change-Id: I063b6465043c929947be927381ab6008a67ea922
-rw-r--r--hal/audio_extn/a2dp.c1
-rw-r--r--hal/audio_extn/maxxaudio.c1
-rw-r--r--hal/audio_extn/usb.c4
-rw-r--r--hal/audio_hw.c53
-rw-r--r--hal/audio_hw.h1
-rw-r--r--hal/msm8974/platform.c1
6 files changed, 37 insertions, 24 deletions
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index d7e2e2a..d594dc0 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -1424,6 +1424,7 @@ int audio_extn_a2dp_start_playback()
if (ret != 0 ) {
ALOGE("%s: Bluetooth controller start failed", __func__);
a2dp.a2dp_started = false;
+ ret = -ETIMEDOUT;
} else {
if (configure_a2dp_encoder_format() == true) {
a2dp.a2dp_started = true;
diff --git a/hal/audio_extn/maxxaudio.c b/hal/audio_extn/maxxaudio.c
index 5079233..3b92d14 100644
--- a/hal/audio_extn/maxxaudio.c
+++ b/hal/audio_extn/maxxaudio.c
@@ -20,6 +20,7 @@
#include <audio_hw.h>
#include <cutils/str_parms.h>
#include <dlfcn.h>
+#include <fcntl.h>
#include <log/log.h>
#include <math.h>
#include <platform_api.h>
diff --git a/hal/audio_extn/usb.c b/hal/audio_extn/usb.c
index b0b5049..4bf6a32 100644
--- a/hal/audio_extn/usb.c
+++ b/hal/audio_extn/usb.c
@@ -336,7 +336,7 @@ static int usb_get_capability(int type,
char *bit_width_str = NULL;
struct usb_device_config * usb_device_info;
bool check = false;
- int tries=5;
+ int tries=3;
memset(path, 0, sizeof(path));
ALOGV("%s: for %s", __func__, (type == USB_PLAYBACK) ?
@@ -354,7 +354,7 @@ static int usb_get_capability(int type,
// TODO: figure up if this wait is needed any more
while (tries--) {
if (access(path, F_OK) < 0) {
- ALOGW("stream %s doesn't exist retrying\n", path);
+ ALOGW("stream %s doesn't exist retrying %d more times\n", path, tries);
sleep(1);
continue;
}
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 28faffc..d165668 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -803,10 +803,13 @@ int enable_snd_device(struct audio_device *adev,
ALOGD("%s: snd_device(%d: %s)", __func__, snd_device, device_name);
- if (is_a2dp_device(snd_device) &&
- (audio_extn_a2dp_start_playback() < 0)) {
- ALOGE("%s: failed to configure A2DP control path", __func__);
- goto on_error;
+ if (is_a2dp_device(snd_device)) {
+ if (audio_extn_a2dp_start_playback() < 0) {
+ ALOGE("%s: failed to configure A2DP control path", __func__);
+ goto on_error;
+ } else {
+ adev->a2dp_started = true;
+ }
}
audio_route_apply_and_update_path(adev->audio_route, device_name);
@@ -839,9 +842,10 @@ int disable_snd_device(struct audio_device *adev,
if (adev->snd_dev_ref_cnt[snd_device] == 0) {
audio_extn_dsm_feedback_enable(adev, snd_device, false);
- if (is_a2dp_device(snd_device))
+ if (is_a2dp_device(snd_device)) {
audio_extn_a2dp_stop_playback();
-
+ adev->a2dp_started = false;
+ }
if ((snd_device == SND_DEVICE_OUT_SPEAKER ||
snd_device == SND_DEVICE_OUT_SPEAKER_SAFE ||
snd_device == SND_DEVICE_OUT_SPEAKER_REVERSE ||
@@ -2469,16 +2473,13 @@ int start_output_stream(struct stream_out *out)
}
if (out->devices & AUDIO_DEVICE_OUT_ALL_A2DP) {
- if (!audio_extn_a2dp_is_ready()) {
- if (out->devices & (AUDIO_DEVICE_OUT_SPEAKER | AUDIO_DEVICE_OUT_SPEAKER_SAFE)) {
- a2dp_combo = true;
- } else {
- if (!(out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD)) {
- ALOGE("%s: A2DP profile is not ready, return error", __func__);
- ret = -EAGAIN;
- goto error_config;
- }
- }
+ if (out->devices & (AUDIO_DEVICE_OUT_SPEAKER | AUDIO_DEVICE_OUT_SPEAKER_SAFE)) {
+ a2dp_combo = true;
+ } else if (!audio_extn_a2dp_is_ready() &&
+ !(out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD)) {
+ ALOGE("%s: A2DP profile is not ready, return error", __func__);
+ ret = -EAGAIN;
+ goto error_config;
}
}
out->pcm_device_id = platform_get_pcm_device_id(out->usecase, PCM_PLAYBACK);
@@ -2511,11 +2512,14 @@ int start_output_stream(struct stream_out *out)
audio_streaming_hint_start();
audio_extn_perf_lock_acquire();
+ if (!(out->devices & AUDIO_DEVICE_OUT_ALL_A2DP) ||
+ audio_extn_a2dp_is_ready()) {
+ select_devices(adev, out->usecase);
+ }
+
if ((out->devices & AUDIO_DEVICE_OUT_ALL_A2DP) &&
- (!audio_extn_a2dp_is_ready())) {
- if (!a2dp_combo) {
- check_a2dp_restore_l(adev, out, false);
- } else {
+ (!audio_extn_a2dp_is_ready() || !adev->a2dp_started)) {
+ if (a2dp_combo) {
audio_devices_t dev = out->devices;
if (dev & AUDIO_DEVICE_OUT_SPEAKER_SAFE)
out->devices = AUDIO_DEVICE_OUT_SPEAKER_SAFE;
@@ -2523,9 +2527,13 @@ int start_output_stream(struct stream_out *out)
out->devices = AUDIO_DEVICE_OUT_SPEAKER;
select_devices(adev, out->usecase);
out->devices = dev;
+ } else if (!audio_extn_a2dp_is_ready()) {
+ check_a2dp_restore_l(adev, out, false);
+ } else {
+ ALOGE("%s: A2DP is not started, return error", __func__);
+ ret = -EINVAL;
+ goto error_open;
}
- } else {
- select_devices(adev, out->usecase);
}
audio_extn_extspk_update(adev->extspk);
@@ -6602,6 +6610,7 @@ static int adev_open(const hw_module_t *module, const char *name,
adev->primary_output = NULL;
adev->bluetooth_nrec = true;
adev->acdb_settings = TTY_MODE_OFF;
+ adev->a2dp_started = false;
/* adev->cur_hdmi_channels = 0; by calloc() */
adev->snd_dev_ref_cnt = calloc(SND_DEVICE_MAX, sizeof(int));
voice_init(adev);
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index e980e88..b709b1d 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -431,6 +431,7 @@ struct audio_device {
snd_device_t last_logged_snd_device[AUDIO_USECASE_MAX][2]; /* [out, in] */
int camera_orientation; /* CAMERA_BACK_LANDSCAPE ... CAMERA_FRONT_PORTRAIT */
bool bt_sco_on;
+ bool a2dp_started;
};
int select_devices(struct audio_device *adev,
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 8fa9826..2d35365 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -19,6 +19,7 @@
#include <stdlib.h>
#include <dlfcn.h>
+#include <fcntl.h>
#include <pthread.h>
#include <unistd.h>
#include <log/log.h>