Merge "Scan and verify audio device parameters on open"
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 75bb41d..845f0e6 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1262,6 +1262,7 @@
char value[32];
int ret, val = 0;
bool select_new_device = false;
+ int status = 0;
ALOGD("%s: enter: usecase(%d: %s) kvpairs: %s",
__func__, out->usecase, use_case_table[out->usecase], kvpairs);
@@ -1331,8 +1332,8 @@
}
str_parms_destroy(parms);
- ALOGV("%s: exit: code(%d)", __func__, ret);
- return ret;
+ ALOGV("%s: exit: code(%d)", __func__, status);
+ return status;
}
static char* out_get_parameters(const struct audio_stream *stream, const char *keys)
@@ -1706,6 +1707,7 @@
char *str;
char value[32];
int ret, val = 0;
+ int status = 0;
ALOGV("%s: enter: kvpairs=%s", __func__, kvpairs);
parms = str_parms_create_str(kvpairs);
@@ -1723,13 +1725,14 @@
}
ret = str_parms_get_str(parms, AUDIO_PARAMETER_STREAM_ROUTING, value, sizeof(value));
+
if (ret >= 0) {
val = atoi(value);
if ((in->device != val) && (val != 0)) {
in->device = val;
/* If recording is in progress, change the tx device to new device */
if (!in->standby)
- ret = select_devices(adev, in->usecase);
+ status = select_devices(adev, in->usecase);
}
}
@@ -1737,8 +1740,8 @@
pthread_mutex_unlock(&in->lock);
str_parms_destroy(parms);
- ALOGV("%s: exit: status(%d)", __func__, ret);
- return ret;
+ ALOGV("%s: exit: status(%d)", __func__, status);
+ return status;
}
static char* in_get_parameters(const struct audio_stream *stream,
@@ -2038,6 +2041,7 @@
char value[32];
int val;
int ret;
+ int status = 0;
ALOGV("%s: enter: %s", __func__, kvpairs);
@@ -2102,27 +2106,30 @@
break;
default:
ALOGE("%s: unexpected rotation of %d", __func__, val);
+ status = -EINVAL;
}
- pthread_mutex_lock(&adev->lock);
- if (adev->speaker_lr_swap != reverse_speakers) {
- adev->speaker_lr_swap = reverse_speakers;
- // only update the selected device if there is active pcm playback
- struct audio_usecase *usecase;
- struct listnode *node;
- list_for_each(node, &adev->usecase_list) {
- usecase = node_to_item(node, struct audio_usecase, list);
- if (usecase->type == PCM_PLAYBACK) {
- select_devices(adev, usecase->id);
- break;
+ if (status == 0) {
+ pthread_mutex_lock(&adev->lock);
+ if (adev->speaker_lr_swap != reverse_speakers) {
+ adev->speaker_lr_swap = reverse_speakers;
+ // only update the selected device if there is active pcm playback
+ struct audio_usecase *usecase;
+ struct listnode *node;
+ list_for_each(node, &adev->usecase_list) {
+ usecase = node_to_item(node, struct audio_usecase, list);
+ if (usecase->type == PCM_PLAYBACK) {
+ select_devices(adev, usecase->id);
+ break;
+ }
}
}
+ pthread_mutex_unlock(&adev->lock);
}
- pthread_mutex_unlock(&adev->lock);
}
str_parms_destroy(parms);
- ALOGV("%s: exit with code(%d)", __func__, ret);
- return ret;
+ ALOGV("%s: exit with code(%d)", __func__, status);
+ return status;
}
static char* adev_get_parameters(const struct audio_hw_device *dev,