hal: Avoid derive playback snd device for capture usecase
In case of capture usecase, out stream would be invalid.
Avoid calling derive_playback_snd_device() if usecase type is
capture to avoid invalid out stream access.
CRs-Fixed: 2022593
Change-Id: Ibfcad0446ca2dd12f4167aa4ae91ea8e0cfc8e61
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index a42158e..35f7fe6 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1087,19 +1087,17 @@
platform_get_snd_device_name(snd_device),
platform_get_snd_device_name(usecase->out_snd_device),
platform_check_backends_match(snd_device, usecase->out_snd_device));
- uc_derive_snd_device = derive_playback_snd_device(adev->platform,
- usecase, uc_info, snd_device);
- if (usecase->type != PCM_CAPTURE &&
- usecase != uc_info &&
- ((uc_derive_snd_device != usecase->out_snd_device) || force_routing) &&
- ((usecase->devices & AUDIO_DEVICE_OUT_ALL_CODEC_BACKEND) ||
- (usecase->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL) ||
- (usecase->devices & AUDIO_DEVICE_OUT_USB_DEVICE) ||
- (usecase->devices & AUDIO_DEVICE_OUT_ALL_A2DP) ||
- (usecase->devices & AUDIO_DEVICE_OUT_ALL_SCO)) &&
- ((force_restart_session) ||
- (platform_check_backends_match(snd_device, usecase->out_snd_device)))) {
-
+ if ((usecase->type != PCM_CAPTURE) && (usecase != uc_info)) {
+ uc_derive_snd_device = derive_playback_snd_device(adev->platform,
+ usecase, uc_info, snd_device);
+ if (((uc_derive_snd_device != usecase->out_snd_device) || force_routing) &&
+ ((usecase->devices & AUDIO_DEVICE_OUT_ALL_CODEC_BACKEND) ||
+ (usecase->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL) ||
+ (usecase->devices & AUDIO_DEVICE_OUT_USB_DEVICE) ||
+ (usecase->devices & AUDIO_DEVICE_OUT_ALL_A2DP) ||
+ (usecase->devices & AUDIO_DEVICE_OUT_ALL_SCO)) &&
+ ((force_restart_session) ||
+ (platform_check_backends_match(snd_device, usecase->out_snd_device)))) {
ALOGD("%s:becf: check_usecases (%s) is active on (%s) - disabling ..",
__func__, use_case_table[usecase->id],
platform_get_snd_device_name(usecase->out_snd_device));
@@ -1108,6 +1106,7 @@
/* Enable existing usecase on derived playback device */
derive_snd_device[usecase->id] = uc_derive_snd_device;
num_uc_to_switch++;
+ }
}
}