• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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