1 // Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <gtest/gtest.h>
6
7 extern "C" {
8 // Test static functions
9 #include "cras_audio_format.c"
10 }
11
12 namespace {
13
14 class ChannelConvMtxTestSuite : public testing::Test {
15 protected:
SetUp()16 virtual void SetUp() {
17 int i;
18 in_fmt = cras_audio_format_create(SND_PCM_FORMAT_S16_LE, 44100, 6);
19 out_fmt = cras_audio_format_create(SND_PCM_FORMAT_S16_LE, 44100, 6);
20 for (i = 0; i < CRAS_CH_MAX; i++) {
21 in_fmt->channel_layout[i] = -1;
22 out_fmt->channel_layout[i] = -1;
23 }
24 }
25
TearDown()26 virtual void TearDown() {
27 cras_audio_format_destroy(in_fmt);
28 cras_audio_format_destroy(out_fmt);
29 if (conv_mtx)
30 cras_channel_conv_matrix_destroy(conv_mtx, 6);
31 }
32
33 struct cras_audio_format* in_fmt;
34 struct cras_audio_format* out_fmt;
35 float** conv_mtx;
36 };
37
TEST_F(ChannelConvMtxTestSuite,MatrixCreateSuccess)38 TEST_F(ChannelConvMtxTestSuite, MatrixCreateSuccess) {
39 in_fmt->channel_layout[0] = 5;
40 in_fmt->channel_layout[1] = 4;
41 in_fmt->channel_layout[2] = 3;
42 in_fmt->channel_layout[3] = 2;
43 in_fmt->channel_layout[4] = 1;
44 in_fmt->channel_layout[5] = 0;
45
46 out_fmt->channel_layout[0] = 0;
47 out_fmt->channel_layout[1] = 1;
48 out_fmt->channel_layout[2] = 2;
49 out_fmt->channel_layout[3] = 3;
50 out_fmt->channel_layout[4] = 4;
51 out_fmt->channel_layout[5] = 5;
52
53 conv_mtx = cras_channel_conv_matrix_create(in_fmt, out_fmt);
54 ASSERT_NE(conv_mtx, (void*)NULL);
55 }
56
TEST_F(ChannelConvMtxTestSuite,MatrixCreateFail)57 TEST_F(ChannelConvMtxTestSuite, MatrixCreateFail) {
58 in_fmt->channel_layout[0] = 5;
59 in_fmt->channel_layout[1] = 4;
60 in_fmt->channel_layout[2] = 3;
61 in_fmt->channel_layout[3] = 2;
62 in_fmt->channel_layout[4] = 1;
63 in_fmt->channel_layout[5] = 0;
64
65 out_fmt->channel_layout[0] = 0;
66 out_fmt->channel_layout[1] = 1;
67 out_fmt->channel_layout[2] = 2;
68 out_fmt->channel_layout[3] = 3;
69 out_fmt->channel_layout[4] = 4;
70 out_fmt->channel_layout[7] = 5;
71
72 conv_mtx = cras_channel_conv_matrix_create(in_fmt, out_fmt);
73 ASSERT_EQ(conv_mtx, (void*)NULL);
74 }
75
TEST_F(ChannelConvMtxTestSuite,SLSRToRRRL)76 TEST_F(ChannelConvMtxTestSuite, SLSRToRRRL) {
77 in_fmt->channel_layout[0] = 0;
78 in_fmt->channel_layout[1] = 1;
79 in_fmt->channel_layout[4] = 2;
80 in_fmt->channel_layout[5] = 3;
81 /* Input format uses SL and SR*/
82 in_fmt->channel_layout[6] = 4;
83 in_fmt->channel_layout[7] = 5;
84
85 out_fmt->channel_layout[0] = 0;
86 out_fmt->channel_layout[1] = 1;
87 /* Output format uses RR and RR */
88 out_fmt->channel_layout[2] = 4;
89 out_fmt->channel_layout[3] = 5;
90 out_fmt->channel_layout[4] = 2;
91 out_fmt->channel_layout[5] = 3;
92
93 conv_mtx = cras_channel_conv_matrix_create(in_fmt, out_fmt);
94 ASSERT_NE(conv_mtx, (void*)NULL);
95 }
96
97 } // namespace
98
main(int argc,char ** argv)99 int main(int argc, char** argv) {
100 ::testing::InitGoogleTest(&argc, argv);
101 return RUN_ALL_TESTS();
102 }
103