summaryrefslogtreecommitdiff
path: root/cras/src/tests/alsa_helpers_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cras/src/tests/alsa_helpers_unittest.cc')
-rw-r--r--cras/src/tests/alsa_helpers_unittest.cc293
1 files changed, 0 insertions, 293 deletions
diff --git a/cras/src/tests/alsa_helpers_unittest.cc b/cras/src/tests/alsa_helpers_unittest.cc
deleted file mode 100644
index 32df30af..00000000
--- a/cras/src/tests/alsa_helpers_unittest.cc
+++ /dev/null
@@ -1,293 +0,0 @@
-// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <gtest/gtest.h>
-
-#include <vector>
-
-extern "C" {
-// For static function test.
-#include "cras_alsa_helpers.c"
-}
-
-static int snd_pcm_sw_params_set_tstamp_type_called;
-static int snd_pcm_sw_params_set_tstamp_mode_called;
-static snd_pcm_uframes_t snd_pcm_htimestamp_avail_ret_val;
-static timespec snd_pcm_htimestamp_tstamp_ret_val;
-static std::vector<int> snd_pcm_sw_params_ret_vals;
-
-static void ResetStubData() {
- snd_pcm_sw_params_set_tstamp_type_called = 0;
- snd_pcm_sw_params_set_tstamp_mode_called = 0;
- snd_pcm_htimestamp_avail_ret_val = 0;
- snd_pcm_htimestamp_tstamp_ret_val.tv_sec = 0;
- snd_pcm_htimestamp_tstamp_ret_val.tv_nsec = 0;
- snd_pcm_sw_params_ret_vals.clear();
-}
-
-namespace {
-
-static snd_pcm_chmap_query_t* create_chmap_cap(snd_pcm_chmap_type type,
- size_t channels) {
- snd_pcm_chmap_query_t* c;
- c = (snd_pcm_chmap_query_t*)calloc(channels + 2, sizeof(int));
- c->type = type;
- c->map.channels = channels;
- return c;
-}
-
-TEST(AlsaHelper, MatchChannelMapCapabilityStereo) {
- snd_pcm_chmap_query_t** caps;
- snd_pcm_chmap_query_t* c;
- struct cras_audio_format* fmt;
-
- caps = (snd_pcm_chmap_query_t**)calloc(4, sizeof(*caps));
-
- /* Layout (CRAS_CH_RL, CRAS_CH_RR) corresponds to
- * ALSA channel map (5, 6)
- */
- int8_t channel_layout[CRAS_CH_MAX] = {-1, -1, 0, 1, -1, -1,
- -1, -1, -1, -1, -1};
-
- fmt = cras_audio_format_create(SND_PCM_FORMAT_S16_LE, 44100, 2);
- cras_audio_format_set_channel_layout(fmt, channel_layout);
-
- /* Create a list of capabilities */
- c = create_chmap_cap(SND_CHMAP_TYPE_FIXED, 3);
- c->map.pos[0] = 3;
- c->map.pos[1] = 4;
- c->map.pos[2] = 5;
- caps[0] = c;
-
- c = create_chmap_cap(SND_CHMAP_TYPE_VAR, 2);
- c->map.pos[0] = 5;
- c->map.pos[1] = 6;
- caps[1] = c;
-
- c = create_chmap_cap(SND_CHMAP_TYPE_VAR, 2);
- c->map.pos[0] = 9;
- c->map.pos[1] = 10;
- caps[2] = c;
-
- caps[3] = NULL;
-
- /* Test if there's a cap matches fmt */
- c = cras_chmap_caps_match(caps, fmt);
- ASSERT_NE((void*)NULL, c);
-
- caps[1]->map.pos[0] = 5;
- caps[1]->map.pos[1] = 7;
-
- c = cras_chmap_caps_match(caps, fmt);
- ASSERT_EQ((void*)NULL, c);
-
- free(caps[0]);
- free(caps[1]);
- free(caps[2]);
- free(caps[3]);
- free(caps);
- cras_audio_format_destroy(fmt);
-}
-
-TEST(AlsaHelper, MatchChannelMapCapability51) {
- snd_pcm_chmap_query_t** caps = NULL;
- snd_pcm_chmap_query_t* c = NULL;
- struct cras_audio_format* fmt;
-
- caps = (snd_pcm_chmap_query_t**)calloc(4, sizeof(*caps));
-
- /* Layout (CRAS_CH_FL, CRAS_CH_FR, CRAS_CH_RL, CRAS_CH_RR, CRAS_CH_FC)
- * corresponds to ALSA channel map (3, 4, 5, 6, 7)
- */
- int8_t channel_layout[CRAS_CH_MAX] = {0, 1, 2, 3, 4, 5, -1, -1, -1, -1, -1};
-
- fmt = cras_audio_format_create(SND_PCM_FORMAT_S16_LE, 44100, 6);
- cras_audio_format_set_channel_layout(fmt, channel_layout);
-
- /* Create a list of capabilities */
- c = create_chmap_cap(SND_CHMAP_TYPE_FIXED, 6);
- c->map.pos[0] = 3;
- c->map.pos[1] = 4;
- c->map.pos[2] = 5;
- c->map.pos[3] = 6;
- c->map.pos[4] = 7;
- c->map.pos[5] = 8;
- caps[0] = c;
-
- c = create_chmap_cap(SND_CHMAP_TYPE_VAR, 2);
- c->map.pos[0] = 6;
- c->map.pos[1] = 4;
- caps[1] = c;
-
- c = create_chmap_cap(SND_CHMAP_TYPE_VAR, 6);
- c->map.pos[0] = 9;
- c->map.pos[1] = 10;
- c->map.pos[2] = 5;
- c->map.pos[3] = 6;
- c->map.pos[4] = 7;
- c->map.pos[5] = 8;
- caps[2] = c;
- caps[3] = NULL;
-
- /* Test if there's a cap matches fmt */
- c = cras_chmap_caps_match(caps, fmt);
- ASSERT_NE((void*)NULL, c);
-
- caps[0]->map.pos[0] = 7;
- caps[0]->map.pos[1] = 8;
- caps[0]->map.pos[4] = 3;
- caps[0]->map.pos[5] = 4;
- c = cras_chmap_caps_match(caps, fmt);
- ASSERT_EQ((void*)NULL, c);
-
- caps[0]->type = SND_CHMAP_TYPE_PAIRED;
- c = cras_chmap_caps_match(caps, fmt);
- ASSERT_NE((void*)NULL, c);
-
- caps[0]->map.pos[0] = 8;
- caps[0]->map.pos[1] = 7;
- c = cras_chmap_caps_match(caps, fmt);
- ASSERT_EQ((void*)NULL, c);
-
- caps[0]->type = SND_CHMAP_TYPE_VAR;
- c = cras_chmap_caps_match(caps, fmt);
- ASSERT_NE((void*)NULL, c);
-
- free(caps[0]);
- free(caps[1]);
- free(caps[2]);
- free(caps[3]);
- free(caps);
- cras_audio_format_destroy(fmt);
-}
-
-TEST(AlsaHelper, Htimestamp) {
- snd_pcm_t* mock_handle = reinterpret_cast<snd_pcm_t*>(0x1);
- snd_pcm_uframes_t used;
- snd_pcm_uframes_t severe_underrun_frames = 480;
- struct timespec tstamp;
- const char* dev_name = "dev_name";
-
- ResetStubData();
- tstamp.tv_sec = 0;
- tstamp.tv_nsec = 0;
- snd_pcm_htimestamp_avail_ret_val = 20000;
- snd_pcm_htimestamp_tstamp_ret_val.tv_sec = 10;
- snd_pcm_htimestamp_tstamp_ret_val.tv_nsec = 10000;
-
- cras_alsa_get_avail_frames(mock_handle, 48000, severe_underrun_frames,
- dev_name, &used, &tstamp);
- EXPECT_EQ(used, snd_pcm_htimestamp_avail_ret_val);
- EXPECT_EQ(tstamp.tv_sec, snd_pcm_htimestamp_tstamp_ret_val.tv_sec);
- EXPECT_EQ(tstamp.tv_nsec, snd_pcm_htimestamp_tstamp_ret_val.tv_nsec);
-}
-
-TEST(AlsaHelper, GetAvailFramesSevereUnderrun) {
- snd_pcm_t* mock_handle = reinterpret_cast<snd_pcm_t*>(0x1);
- snd_pcm_uframes_t avail;
- snd_pcm_uframes_t severe_underrun_frames = 480;
- snd_pcm_uframes_t buffer_size = 48000;
- struct timespec tstamp;
- int rc;
- const char* dev_name = "dev_name";
-
- ResetStubData();
- snd_pcm_htimestamp_avail_ret_val = buffer_size + severe_underrun_frames + 1;
- rc = cras_alsa_get_avail_frames(mock_handle, buffer_size,
- severe_underrun_frames, dev_name, &avail,
- &tstamp);
- // Returns -EPIPE when severe underrun happens.
- EXPECT_EQ(rc, -EPIPE);
-
- ResetStubData();
- snd_pcm_htimestamp_avail_ret_val = buffer_size + severe_underrun_frames;
- rc = cras_alsa_get_avail_frames(mock_handle, buffer_size,
- severe_underrun_frames, dev_name, &avail,
- &tstamp);
- // Underrun which is not severe enough will be masked.
- // avail will be adjusted to buffer_size.
- EXPECT_EQ(avail, buffer_size);
- EXPECT_EQ(rc, 0);
-
- ResetStubData();
- snd_pcm_htimestamp_avail_ret_val = buffer_size - 1;
- rc = cras_alsa_get_avail_frames(mock_handle, buffer_size,
- severe_underrun_frames, dev_name, &avail,
- &tstamp);
- // When avail < buffer_size, there is no underrun.
- EXPECT_EQ(avail, buffer_size - 1);
- EXPECT_EQ(rc, 0);
-}
-} // namespace
-
-extern "C" {
-
-int snd_pcm_sw_params_current(snd_pcm_t* pcm, snd_pcm_sw_params_t* params) {
- return 0;
-}
-
-int snd_pcm_sw_params_get_boundary(const snd_pcm_sw_params_t* params,
- snd_pcm_uframes_t* val) {
- return 0;
-}
-
-int snd_pcm_sw_params_set_stop_threshold(snd_pcm_t* pcm,
- snd_pcm_sw_params_t* params,
- snd_pcm_uframes_t val) {
- return 0;
-}
-
-int snd_pcm_sw_params_set_start_threshold(snd_pcm_t* pcm,
- snd_pcm_sw_params_t* params,
- snd_pcm_uframes_t val) {
- return 0;
-}
-
-int snd_pcm_sw_params_set_period_event(snd_pcm_t* pcm,
- snd_pcm_sw_params_t* params,
- int val) {
- return 0;
-}
-
-int snd_pcm_sw_params_set_tstamp_mode(snd_pcm_t* pcm,
- snd_pcm_sw_params_t* params,
- snd_pcm_tstamp_t val) {
- snd_pcm_sw_params_set_tstamp_mode_called++;
- return 0;
-}
-
-int snd_pcm_sw_params_set_tstamp_type(snd_pcm_t* pcm,
- snd_pcm_sw_params_t* params,
- snd_pcm_tstamp_type_t val) {
- snd_pcm_sw_params_set_tstamp_type_called++;
- return 0;
-}
-
-int snd_pcm_sw_params(snd_pcm_t* pcm, snd_pcm_sw_params_t* params) {
- int rc;
-
- if (snd_pcm_sw_params_ret_vals.size() == 0)
- return 0;
- rc = snd_pcm_sw_params_ret_vals.back();
- snd_pcm_sw_params_ret_vals.pop_back();
- return rc;
-}
-
-snd_pcm_sframes_t snd_pcm_avail(snd_pcm_t* pcm) {
- return snd_pcm_htimestamp_avail_ret_val;
-}
-
-int snd_pcm_htimestamp(snd_pcm_t* pcm,
- snd_pcm_uframes_t* avail,
- snd_htimestamp_t* tstamp) {
- *avail = snd_pcm_htimestamp_avail_ret_val;
- *tstamp = snd_pcm_htimestamp_tstamp_ret_val;
- return 0;
-}
-}
-
-int main(int argc, char** argv) {
- ::testing::InitGoogleTest(&argc, argv);
- return RUN_ALL_TESTS();
-}