Promotion of av-userspace.lnx.1.0-00035.
CRs Change ID Subject
--------------------------------------------------------------------------------------------------------------
963849 963849 I1729d0bd3cff40670444a8806a05c7304d4ca6aa hal: fm: add parameter to set mute options
961105 961105 I0bb638a4ac3f219d0a161dbfccb3aa540910dfc2 hal: fix usecase selection in adev_open_output_stream
Change-Id: I60fb93f73e8404c83b05ec7621a185f8f95c1e01
CRs-Fixed: 961105, 963849
diff --git a/hal/audio_extn/fm.c b/hal/audio_extn/fm.c
index 6381e68..54700ba 100644
--- a/hal/audio_extn/fm.c
+++ b/hal/audio_extn/fm.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -35,6 +35,7 @@
#define AUDIO_PARAMETER_KEY_HANDLE_FM "handle_fm"
#define AUDIO_PARAMETER_KEY_FM_VOLUME "fm_volume"
#define AUDIO_PARAMETER_KEY_REC_PLAY_CONC "rec_play_conc_on"
+#define AUDIO_PARAMETER_KEY_FM_MUTE "fm_mute"
#define FM_LOOPBACK_DRAIN_TIME_MS 2
static struct pcm_config pcm_config_fm = {
@@ -52,6 +53,7 @@
struct pcm *fm_pcm_rx;
struct pcm *fm_pcm_tx;
bool is_fm_running;
+ bool is_fm_muted;
float fm_volume;
bool restart_fm;
int scard_state;
@@ -62,6 +64,7 @@
.fm_pcm_tx = NULL,
.fm_volume = 0,
.is_fm_running = 0,
+ .is_fm_muted = 0,
.restart_fm = 0,
.scard_state = SND_CARD_STATE_ONLINE,
};
@@ -86,6 +89,12 @@
if (persist)
fmmod.fm_volume = value;
+ if (fmmod.is_fm_muted == true && vol > 0) {
+ ALOGD("%s: fm is muted, applying '0' volume instead of '%d'.",
+ __func__, vol);
+ vol = 0;
+ }
+
if (!fmmod.is_fm_running) {
ALOGV("%s: FM not active, ignoring set_fm_volume call", __func__);
return -EIO;
@@ -286,6 +295,17 @@
fm_set_volume(adev, vol, true);
}
+ ret = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_FM_MUTE,
+ value, sizeof(value));
+ if (ret >= 0) {
+ if (value[0] == '1')
+ fmmod.is_fm_muted = true;
+ else
+ fmmod.is_fm_muted = false;
+ ALOGV("%s: set_fm_volume from param mute", __func__);
+ fm_set_volume(adev, fmmod.fm_volume, false);
+ }
+
#ifdef RECORD_PLAY_CONCURRENCY
ret = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_REC_PLAY_CONC,
value, sizeof(value));
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 8c729ff..f610096 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -3025,7 +3025,8 @@
/* Init use case and pcm_config */
if ((out->flags & AUDIO_OUTPUT_FLAG_DIRECT) &&
- !(out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) &&
+ !(out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD ||
+ (out->flags & AUDIO_OUTPUT_FLAG_DIRECT_PCM)) &&
(out->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL ||
out->devices & AUDIO_DEVICE_OUT_PROXY)) {