| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/message_loop.h" | 5 #include "base/message_loop.h" |
| 6 #include "base/stringprintf.h" | 6 #include "base/stringprintf.h" |
| 7 #include "media/audio/linux/alsa_output.h" | 7 #include "media/audio/linux/alsa_output.h" |
| 8 #include "media/audio/linux/alsa_wrapper.h" | 8 #include "media/audio/linux/alsa_wrapper.h" |
| 9 #include "media/audio/linux/audio_manager_linux.h" | 9 #include "media/audio/linux/audio_manager_linux.h" |
| 10 #include "media/base/data_buffer.h" | 10 #include "media/base/data_buffer.h" |
| (...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 651 AlsaPcmOutputStream::kDefaultDevice, | 651 AlsaPcmOutputStream::kDefaultDevice, |
| 652 kSurround40, kSurround50, kSurround51, | 652 kSurround40, kSurround50, kSurround51, |
| 653 kSurround70, kSurround71, | 653 kSurround70, kSurround71, |
| 654 AlsaPcmOutputStream::kDefaultDevice }; | 654 AlsaPcmOutputStream::kDefaultDevice }; |
| 655 bool kExpectedDownmix[] = { false, false, false, false, false, true, | 655 bool kExpectedDownmix[] = { false, false, false, false, false, true, |
| 656 false, false, false, false }; | 656 false, false, false, false }; |
| 657 ChannelLayout kExpectedLayouts[] = { CHANNEL_LAYOUT_NONE, | 657 ChannelLayout kExpectedLayouts[] = { CHANNEL_LAYOUT_NONE, |
| 658 CHANNEL_LAYOUT_MONO, | 658 CHANNEL_LAYOUT_MONO, |
| 659 CHANNEL_LAYOUT_STEREO, | 659 CHANNEL_LAYOUT_STEREO, |
| 660 CHANNEL_LAYOUT_SURROUND, | 660 CHANNEL_LAYOUT_SURROUND, |
| 661 CHANNEL_LAYOUT_4POINT0, | 661 CHANNEL_LAYOUT_4_0, |
| 662 CHANNEL_LAYOUT_5POINT0, | 662 CHANNEL_LAYOUT_5_0, |
| 663 CHANNEL_LAYOUT_5POINT1, | 663 CHANNEL_LAYOUT_5_1, |
| 664 CHANNEL_LAYOUT_7POINT0, | 664 CHANNEL_LAYOUT_7_0, |
| 665 CHANNEL_LAYOUT_7POINT1 }; | 665 CHANNEL_LAYOUT_7_1 }; |
| 666 | 666 |
| 667 | 667 |
| 668 for (int i = 1; i < 9; ++i) { | 668 for (int i = 1; i < 9; ++i) { |
| 669 if (i == 3 || i == 4 || i == 5) // invalid number of channels | 669 if (i == 3 || i == 4 || i == 5) // invalid number of channels |
| 670 continue; | 670 continue; |
| 671 SCOPED_TRACE(base::StringPrintf("Attempting %d Channel", i)); | 671 SCOPED_TRACE(base::StringPrintf("Attempting %d Channel", i)); |
| 672 | 672 |
| 673 // Hints will only be grabbed for channel numbers that have non-default | 673 // Hints will only be grabbed for channel numbers that have non-default |
| 674 // devices associated with them. | 674 // devices associated with them. |
| 675 if (kExpectedDeviceName[i] != AlsaPcmOutputStream::kDefaultDevice) { | 675 if (kExpectedDeviceName[i] != AlsaPcmOutputStream::kDefaultDevice) { |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 InSequence s; | 739 InSequence s; |
| 740 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, StrEq(first_try.c_str()), _, _)) | 740 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, StrEq(first_try.c_str()), _, _)) |
| 741 .WillOnce(Return(kTestFailedErrno)); | 741 .WillOnce(Return(kTestFailedErrno)); |
| 742 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, StrEq(second_try.c_str()), _, _)) | 742 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, StrEq(second_try.c_str()), _, _)) |
| 743 .WillOnce(Return(kTestFailedErrno)); | 743 .WillOnce(Return(kTestFailedErrno)); |
| 744 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, StrEq(third_try.c_str()), _, _)) | 744 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, StrEq(third_try.c_str()), _, _)) |
| 745 .WillOnce(Return(kTestFailedErrno)); | 745 .WillOnce(Return(kTestFailedErrno)); |
| 746 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, StrEq(fourth_try.c_str()), _, _)) | 746 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, StrEq(fourth_try.c_str()), _, _)) |
| 747 .WillOnce(Return(kTestFailedErrno)); | 747 .WillOnce(Return(kTestFailedErrno)); |
| 748 | 748 |
| 749 AlsaPcmOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_5POINT0); | 749 AlsaPcmOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_5_0); |
| 750 EXPECT_FALSE(test_stream->AutoSelectDevice(5)); | 750 EXPECT_FALSE(test_stream->AutoSelectDevice(5)); |
| 751 test_stream->Close(); | 751 test_stream->Close(); |
| 752 } | 752 } |
| 753 | 753 |
| 754 TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_HintFail) { | 754 TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_HintFail) { |
| 755 // Should get |kDefaultDevice|, and force a 2-channel downmix on a failure to | 755 // Should get |kDefaultDevice|, and force a 2-channel downmix on a failure to |
| 756 // enumerate devices. | 756 // enumerate devices. |
| 757 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameHint(_, _, _)) | 757 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameHint(_, _, _)) |
| 758 .WillRepeatedly(Return(kTestFailedErrno)); | 758 .WillRepeatedly(Return(kTestFailedErrno)); |
| 759 EXPECT_CALL(mock_alsa_wrapper_, | 759 EXPECT_CALL(mock_alsa_wrapper_, |
| 760 PcmOpen(_, StrEq(AlsaPcmOutputStream::kDefaultDevice), _, _)) | 760 PcmOpen(_, StrEq(AlsaPcmOutputStream::kDefaultDevice), _, _)) |
| 761 .WillOnce(DoAll(SetArgumentPointee<0>(kFakeHandle), Return(0))); | 761 .WillOnce(DoAll(SetArgumentPointee<0>(kFakeHandle), Return(0))); |
| 762 EXPECT_CALL(mock_alsa_wrapper_, | 762 EXPECT_CALL(mock_alsa_wrapper_, |
| 763 PcmSetParams(kFakeHandle, _, _, 2, _, _, _)) | 763 PcmSetParams(kFakeHandle, _, _, 2, _, _, _)) |
| 764 .WillOnce(Return(0)); | 764 .WillOnce(Return(0)); |
| 765 EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno)) | 765 EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno)) |
| 766 .WillOnce(Return(kDummyMessage)); | 766 .WillOnce(Return(kDummyMessage)); |
| 767 | 767 |
| 768 AlsaPcmOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_5POINT0); | 768 AlsaPcmOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_5_0); |
| 769 EXPECT_TRUE(test_stream->AutoSelectDevice(5)); | 769 EXPECT_TRUE(test_stream->AutoSelectDevice(5)); |
| 770 EXPECT_TRUE(test_stream->should_downmix_); | 770 EXPECT_TRUE(test_stream->should_downmix_); |
| 771 test_stream->Close(); | 771 test_stream->Close(); |
| 772 } | 772 } |
| 773 | 773 |
| 774 TEST_F(AlsaPcmOutputStreamTest, BufferPacket_StopStream) { | 774 TEST_F(AlsaPcmOutputStreamTest, BufferPacket_StopStream) { |
| 775 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); | 775 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
| 776 InitBuffer(test_stream); | 776 InitBuffer(test_stream); |
| 777 test_stream->stop_stream_ = true; | 777 test_stream->stop_stream_ = true; |
| 778 bool source_exhausted; | 778 bool source_exhausted; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 817 test_stream->stop_stream_ = true; | 817 test_stream->stop_stream_ = true; |
| 818 test_stream->ScheduleNextWrite(true); | 818 test_stream->ScheduleNextWrite(true); |
| 819 | 819 |
| 820 // TODO(ajwong): Find a way to test whether or not another task has been | 820 // TODO(ajwong): Find a way to test whether or not another task has been |
| 821 // posted so we can verify that the Alsa code will indeed break the task | 821 // posted so we can verify that the Alsa code will indeed break the task |
| 822 // posting loop. | 822 // posting loop. |
| 823 | 823 |
| 824 test_stream->TransitionTo(AlsaPcmOutputStream::kIsClosed); | 824 test_stream->TransitionTo(AlsaPcmOutputStream::kIsClosed); |
| 825 test_stream->Close(); | 825 test_stream->Close(); |
| 826 } | 826 } |
| OLD | NEW |