summaryrefslogtreecommitdiff
path: root/cras
diff options
context:
space:
mode:
authorCheng-Yi Chiang <cychiang@chromium.org>2016-06-03 17:25:50 +0800
committerchrome-bot <chrome-bot@chromium.org>2016-06-24 04:35:44 -0700
commit3e9cedd2bd4a69bdd9189e707153c1f1b7a31e24 (patch)
treeff7377cf9b9de44a089d0f340a7892c96fc2be30 /cras
parent7c9a26c8ad7c005c5468e19ca7d5f6ef0f6badab (diff)
downloadadhd-3e9cedd2bd4a69bdd9189e707153c1f1b7a31e24.tar.gz
CRAS: alsa_ucm - Add method to enable no_stream ops
The flag will be used in the next patch to enable optimization of no_stream ops on alsa_io. BUG=chromium:519942 TEST=make check Signed-off-by: Cheng-Yi Chiang <cychiang@chromium.org> Change-Id: I124232d981d192a0e5116a31f77393f64b9016f6 Reviewed-on: https://chromium-review.googlesource.com/349520 Reviewed-by: Dylan Reid <dgreid@chromium.org>
Diffstat (limited to 'cras')
-rw-r--r--cras/src/server/cras_alsa_ucm.c13
-rw-r--r--cras/src/server/cras_alsa_ucm.h9
-rw-r--r--cras/src/tests/alsa_ucm_unittest.cc18
3 files changed, 40 insertions, 0 deletions
diff --git a/cras/src/server/cras_alsa_ucm.c b/cras/src/server/cras_alsa_ucm.c
index 32512e2f..b670e123 100644
--- a/cras/src/server/cras_alsa_ucm.c
+++ b/cras/src/server/cras_alsa_ucm.c
@@ -36,6 +36,7 @@ static const char max_software_gain[] = "MaxSoftwareGain";
static const char hotword_model_prefix[] = "Hotword Model";
static const char fully_specified_ucm_var[] = "FullySpecifiedUCM";
static const char main_volume_names[] = "MainVolumeNames";
+static const char optimize_no_stream[] = "OptimizeNoStream";
/* Represents a list of section names found in UCM. */
struct section_name {
@@ -880,3 +881,15 @@ unsigned int ucm_get_period_frames_for_dev(snd_use_case_mgr_t *mgr,
return 0;
return value;
}
+
+unsigned int ucm_get_optimize_no_stream_flag(snd_use_case_mgr_t *mgr)
+{
+ char *flag;
+ int ret = 0;
+ flag = ucm_get_flag(mgr, optimize_no_stream);
+ if (!flag)
+ return 0;
+ ret = !strcmp(flag, "1");
+ free(flag);
+ return ret;
+}
diff --git a/cras/src/server/cras_alsa_ucm.h b/cras/src/server/cras_alsa_ucm.h
index 3912ac9c..80e150f8 100644
--- a/cras/src/server/cras_alsa_ucm.h
+++ b/cras/src/server/cras_alsa_ucm.h
@@ -361,4 +361,13 @@ int ucm_get_jack_switch_for_dev(snd_use_case_mgr_t *mgr, const char *dev);
unsigned int ucm_get_period_frames_for_dev(snd_use_case_mgr_t *mgr,
const char *dev);
+/* Gets the flag of optimization for no stream state.
+ * This flag enables no_stream ops in alsa_io.
+ * Args:
+ * mgr - The snd_use_case_mgr_t pointer returned from alsa_ucm_create.
+ * Returns:
+ * 1 if the flag is enabled. 0 otherwise.
+ */
+unsigned int ucm_get_optimize_no_stream_flag(snd_use_case_mgr_t *mgr);
+
#endif /* _CRAS_ALSA_UCM_H */
diff --git a/cras/src/tests/alsa_ucm_unittest.cc b/cras/src/tests/alsa_ucm_unittest.cc
index 48a0805c..196322e6 100644
--- a/cras/src/tests/alsa_ucm_unittest.cc
+++ b/cras/src/tests/alsa_ucm_unittest.cc
@@ -721,6 +721,24 @@ TEST(AlsaUcm, MaxSoftwareGain) {
ASSERT_TRUE(ret);
}
+TEST(AlsaUcm, OptimizeNoStream) {
+ snd_use_case_mgr_t* mgr = reinterpret_cast<snd_use_case_mgr_t*>(0x55);
+ std::string id = "=OptimizeNoStream//HiFi";
+ std::string value = "1";
+
+ ResetStubData();
+
+ /* Value can be found in UCM. */
+ snd_use_case_get_value[id] = value;
+
+ EXPECT_EQ(1, ucm_get_optimize_no_stream_flag(mgr));
+
+ ResetStubData();
+
+ /* Value can not be found in UCM. */
+ EXPECT_EQ(0, ucm_get_optimize_no_stream_flag(mgr));
+}
+
TEST(AlsaUCM, UseFullySpecifiedUCMConfig) {
snd_use_case_mgr_t* mgr = reinterpret_cast<snd_use_case_mgr_t*>(0x55);
int fully_specified_flag;