blob: f03f6878639a0cd77d0fc72a37fb2b8970296ac5 [file] [log] [blame]
// 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>
extern "C" {
// Test static functions
#include "cras_audio_format.c"
}
namespace {
class ChannelConvMtxTestSuite : public testing::Test {
protected:
virtual void SetUp() {
int i;
in_fmt = cras_audio_format_create(SND_PCM_FORMAT_S16_LE, 44100, 6);
out_fmt = cras_audio_format_create(SND_PCM_FORMAT_S16_LE, 44100, 6);
for (i = 0; i < CRAS_CH_MAX; i++) {
in_fmt->channel_layout[i] = -1;
out_fmt->channel_layout[i] = -1;
}
}
virtual void TearDown() {
cras_audio_format_destroy(in_fmt);
cras_audio_format_destroy(out_fmt);
if (conv_mtx)
cras_channel_conv_matrix_destroy(conv_mtx, 6);
}
struct cras_audio_format* in_fmt;
struct cras_audio_format* out_fmt;
float** conv_mtx;
};
TEST_F(ChannelConvMtxTestSuite, MatrixCreateSuccess) {
in_fmt->channel_layout[0] = 5;
in_fmt->channel_layout[1] = 4;
in_fmt->channel_layout[2] = 3;
in_fmt->channel_layout[3] = 2;
in_fmt->channel_layout[4] = 1;
in_fmt->channel_layout[5] = 0;
out_fmt->channel_layout[0] = 0;
out_fmt->channel_layout[1] = 1;
out_fmt->channel_layout[2] = 2;
out_fmt->channel_layout[3] = 3;
out_fmt->channel_layout[4] = 4;
out_fmt->channel_layout[5] = 5;
conv_mtx = cras_channel_conv_matrix_create(in_fmt, out_fmt);
ASSERT_NE(conv_mtx, (void*)NULL);
}
TEST_F(ChannelConvMtxTestSuite, MatrixCreateFail) {
in_fmt->channel_layout[0] = 5;
in_fmt->channel_layout[1] = 4;
in_fmt->channel_layout[2] = 3;
in_fmt->channel_layout[3] = 2;
in_fmt->channel_layout[4] = 1;
in_fmt->channel_layout[5] = 0;
out_fmt->channel_layout[0] = 0;
out_fmt->channel_layout[1] = 1;
out_fmt->channel_layout[2] = 2;
out_fmt->channel_layout[3] = 3;
out_fmt->channel_layout[4] = 4;
out_fmt->channel_layout[7] = 5;
conv_mtx = cras_channel_conv_matrix_create(in_fmt, out_fmt);
ASSERT_EQ(conv_mtx, (void*)NULL);
}
TEST_F(ChannelConvMtxTestSuite, SLSRToRRRL) {
in_fmt->channel_layout[0] = 0;
in_fmt->channel_layout[1] = 1;
in_fmt->channel_layout[4] = 2;
in_fmt->channel_layout[5] = 3;
/* Input format uses SL and SR*/
in_fmt->channel_layout[6] = 4;
in_fmt->channel_layout[7] = 5;
out_fmt->channel_layout[0] = 0;
out_fmt->channel_layout[1] = 1;
/* Output format uses RR and RR */
out_fmt->channel_layout[2] = 4;
out_fmt->channel_layout[3] = 5;
out_fmt->channel_layout[4] = 2;
out_fmt->channel_layout[5] = 3;
conv_mtx = cras_channel_conv_matrix_create(in_fmt, out_fmt);
ASSERT_NE(conv_mtx, (void*)NULL);
}
} // namespace
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}