summaryrefslogtreecommitdiffstats
path: root/media/audio/linux/alsa_output_unittest.cc
diff options
context:
space:
mode:
authorannacc@chromium.org <annacc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-16 22:18:32 +0000
committerannacc@chromium.org <annacc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-16 22:18:32 +0000
commitb630cb97c620593f9c987fdad0b3271ddbf39a3e (patch)
tree21295811329d31b302e29be7e16198fdfd5bc463 /media/audio/linux/alsa_output_unittest.cc
parent99d22e8b1c2c0b6f6457147ab90ce2df98ef02d3 (diff)
downloadchromium_src-b630cb97c620593f9c987fdad0b3271ddbf39a3e.zip
chromium_src-b630cb97c620593f9c987fdad0b3271ddbf39a3e.tar.gz
chromium_src-b630cb97c620593f9c987fdad0b3271ddbf39a3e.tar.bz2
Description:
This patch gets the channel layout for surround sound channel order from ffmpeg and stores it so that chromium will be able to re-order the channels for various sound cards and OSes later. - AudioParameters gets a new field (channel_layout). - channel_layout.h stores an enum that we will use in chromium for channel values. - ffmpeg_common.h gets a new method for mapping the channel layout received from ffmpeg to an internal chromium enum value. BUG=None (though storing the channel order should help us solve some other bugs soon) TEST=media_unittests Review URL: http://codereview.chromium.org/6930039 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85541 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/linux/alsa_output_unittest.cc')
-rw-r--r--media/audio/linux/alsa_output_unittest.cc55
1 files changed, 33 insertions, 22 deletions
diff --git a/media/audio/linux/alsa_output_unittest.cc b/media/audio/linux/alsa_output_unittest.cc
index f7c3b5d..3608fcc 100644
--- a/media/audio/linux/alsa_output_unittest.cc
+++ b/media/audio/linux/alsa_output_unittest.cc
@@ -91,19 +91,20 @@ class MockAudioManagerLinux : public AudioManagerLinux {
class AlsaPcmOutputStreamTest : public testing::Test {
protected:
AlsaPcmOutputStreamTest() {
- test_stream_ = CreateStream(kTestChannels);
+ test_stream_ = CreateStream(kTestChannelLayout);
}
virtual ~AlsaPcmOutputStreamTest() {
test_stream_ = NULL;
}
- AlsaPcmOutputStream* CreateStream(int channels) {
- return CreateStream(channels, kTestFramesPerPacket);
+ AlsaPcmOutputStream* CreateStream(ChannelLayout layout) {
+ return CreateStream(layout, kTestFramesPerPacket);
}
- AlsaPcmOutputStream* CreateStream(int channels, int32 samples_per_packet) {
- AudioParameters params(kTestFormat, channels, kTestSampleRate,
+ AlsaPcmOutputStream* CreateStream(ChannelLayout layout,
+ int32 samples_per_packet) {
+ AudioParameters params(kTestFormat, layout, kTestSampleRate,
kTestBitsPerSample, samples_per_packet);
return new AlsaPcmOutputStream(kTestDeviceName,
params,
@@ -131,7 +132,7 @@ class AlsaPcmOutputStreamTest : public testing::Test {
test_stream_->buffer_->Append(packet_.get());
}
- static const int kTestChannels;
+ static const ChannelLayout kTestChannelLayout;
static const int kTestSampleRate;
static const int kTestBitsPerSample;
static const int kTestBytesPerFrame;
@@ -162,13 +163,14 @@ class AlsaPcmOutputStreamTest : public testing::Test {
DISALLOW_COPY_AND_ASSIGN(AlsaPcmOutputStreamTest);
};
-const int AlsaPcmOutputStreamTest::kTestChannels = 2;
+const ChannelLayout AlsaPcmOutputStreamTest::kTestChannelLayout =
+ CHANNEL_LAYOUT_STEREO;
const int AlsaPcmOutputStreamTest::kTestSampleRate =
AudioParameters::kAudioCDSampleRate;
const int AlsaPcmOutputStreamTest::kTestBitsPerSample = 8;
const int AlsaPcmOutputStreamTest::kTestBytesPerFrame =
AlsaPcmOutputStreamTest::kTestBitsPerSample / 8 *
- AlsaPcmOutputStreamTest::kTestChannels;
+ ChannelLayoutToChannelCount(AlsaPcmOutputStreamTest::kTestChannelLayout);
const AudioParameters::Format AlsaPcmOutputStreamTest::kTestFormat =
AudioParameters::AUDIO_PCM_LINEAR;
const char AlsaPcmOutputStreamTest::kTestDeviceName[] = "TestDevice";
@@ -196,17 +198,17 @@ TEST_F(AlsaPcmOutputStreamTest, ConstructedState) {
test_stream_->shared_data_.state());
// Should support mono.
- test_stream_ = CreateStream(1);
+ test_stream_ = CreateStream(CHANNEL_LAYOUT_MONO);
EXPECT_EQ(AlsaPcmOutputStream::kCreated,
test_stream_->shared_data_.state());
// Should support multi-channel.
- test_stream_ = CreateStream(3);
+ test_stream_ = CreateStream(CHANNEL_LAYOUT_SURROUND);
EXPECT_EQ(AlsaPcmOutputStream::kCreated,
test_stream_->shared_data_.state());
// Bad bits per sample.
- AudioParameters bad_bps_params(kTestFormat, kTestChannels,
+ AudioParameters bad_bps_params(kTestFormat, kTestChannelLayout,
kTestSampleRate, kTestBitsPerSample - 1,
kTestFramesPerPacket);
test_stream_ = new AlsaPcmOutputStream(kTestDeviceName,
@@ -219,8 +221,8 @@ TEST_F(AlsaPcmOutputStreamTest, ConstructedState) {
// Bad format.
AudioParameters bad_format_params(
- AudioParameters::AUDIO_LAST_FORMAT, kTestChannels,
- kTestSampleRate, kTestBitsPerSample, kTestFramesPerPacket);
+ AudioParameters::AUDIO_LAST_FORMAT, kTestChannelLayout, kTestSampleRate,
+ kTestBitsPerSample, kTestFramesPerPacket);
test_stream_ = new AlsaPcmOutputStream(kTestDeviceName,
bad_format_params,
&mock_alsa_wrapper_,
@@ -251,7 +253,7 @@ TEST_F(AlsaPcmOutputStreamTest, LatencyFloor) {
SetArgumentPointee<2>(kTestFramesPerPacket / 2),
Return(0)));
- test_stream_ = CreateStream(kTestChannels, kPacketFramesInMinLatency);
+ test_stream_ = CreateStream(kTestChannelLayout, kPacketFramesInMinLatency);
ASSERT_TRUE(test_stream_->Open());
message_loop_.RunAllPending();
@@ -281,7 +283,7 @@ TEST_F(AlsaPcmOutputStreamTest, LatencyFloor) {
SetArgumentPointee<2>(kTestFramesPerPacket / 2),
Return(0)));
- test_stream_ = CreateStream(kTestChannels, kOverMinLatencyPacketSize);
+ test_stream_ = CreateStream(kTestChannelLayout, kOverMinLatencyPacketSize);
ASSERT_TRUE(test_stream_->Open());
message_loop_.RunAllPending();
@@ -315,7 +317,7 @@ TEST_F(AlsaPcmOutputStreamTest, OpenClose) {
PcmSetParams(kFakeHandle,
SND_PCM_FORMAT_U8,
SND_PCM_ACCESS_RW_INTERLEAVED,
- kTestChannels,
+ ChannelLayoutToChannelCount(kTestChannelLayout),
kTestSampleRate,
1,
expected_micros))
@@ -645,8 +647,18 @@ TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_DeviceSelect) {
AlsaPcmOutputStream::kDefaultDevice };
bool kExpectedDownmix[] = { false, false, false, false, false, true,
false, false, false, false };
-
- for (int i = 1; i <= 9; ++i) {
+ ChannelLayout kExpectedLayouts[] = { CHANNEL_LAYOUT_NONE,
+ CHANNEL_LAYOUT_MONO,
+ CHANNEL_LAYOUT_STEREO,
+ CHANNEL_LAYOUT_SURROUND,
+ CHANNEL_LAYOUT_4POINT0,
+ CHANNEL_LAYOUT_5POINT0,
+ CHANNEL_LAYOUT_5POINT1,
+ CHANNEL_LAYOUT_7POINT0,
+ CHANNEL_LAYOUT_7POINT1 };
+
+
+ for (int i = 1; i < 9; ++i) {
if (i == 3 || i == 4 || i == 5) // invalid number of channels
continue;
SCOPED_TRACE(base::StringPrintf("Attempting %d Channel", i));
@@ -676,8 +688,7 @@ TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_DeviceSelect) {
EXPECT_CALL(mock_alsa_wrapper_, DeviceNameGetHint(_, StrEq("NAME")))
.WillRepeatedly(Invoke(EchoHint));
-
- test_stream_ = CreateStream(i);
+ test_stream_ = CreateStream(kExpectedLayouts[i]);
EXPECT_TRUE(test_stream_->AutoSelectDevice(i));
EXPECT_EQ(kExpectedDownmix[i], test_stream_->should_downmix_);
@@ -727,7 +738,7 @@ TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_FallbackDevices) {
EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, StrEq(fourth_try.c_str()), _, _))
.WillOnce(Return(kTestFailedErrno));
- test_stream_ = CreateStream(5);
+ test_stream_ = CreateStream(CHANNEL_LAYOUT_5POINT0);
EXPECT_FALSE(test_stream_->AutoSelectDevice(5));
}
@@ -745,7 +756,7 @@ TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_HintFail) {
EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno))
.WillOnce(Return(kDummyMessage));
- test_stream_ = CreateStream(5);
+ test_stream_ = CreateStream(CHANNEL_LAYOUT_5POINT0);
EXPECT_TRUE(test_stream_->AutoSelectDevice(5));
EXPECT_TRUE(test_stream_->should_downmix_);
}