Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(482)

Unified Diff: media/audio/linux/alsa_output_unittest.cc

Issue 1618006: Assume pending buffered bytes is zero when ALSA has underrun. (Closed)
Patch Set: Tiny fix Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/linux/alsa_output.cc ('k') | media/audio/linux/alsa_wrapper.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/linux/alsa_output_unittest.cc
diff --git a/media/audio/linux/alsa_output_unittest.cc b/media/audio/linux/alsa_output_unittest.cc
index 3dcc6106e52a1ac24b50e76d2b684b97854f483e..598ca985b798453f4e6e715b183b2c6864339afb 100644
--- a/media/audio/linux/alsa_output_unittest.cc
+++ b/media/audio/linux/alsa_output_unittest.cc
@@ -47,6 +47,7 @@ class MockAlsaWrapper : public AlsaWrapper {
unsigned int latency));
MOCK_METHOD1(PcmName, const char*(snd_pcm_t* handle));
MOCK_METHOD1(PcmAvailUpdate, snd_pcm_sframes_t (snd_pcm_t* handle));
+ MOCK_METHOD1(PcmState, snd_pcm_state_t (snd_pcm_t* handle));
MOCK_METHOD1(StrError, const char*(int errnum));
};
@@ -400,6 +401,9 @@ TEST_F(AlsaPcmOutputStreamTest, StartStop) {
// Expect the pre-roll.
MockAudioSourceCallback mock_callback;
+ EXPECT_CALL(mock_alsa_wrapper_, PcmState(kFakeHandle))
+ .Times(2)
+ .WillRepeatedly(Return(SND_PCM_STATE_RUNNING));
EXPECT_CALL(mock_alsa_wrapper_, PcmDelay(kFakeHandle, _))
.Times(2)
.WillRepeatedly(DoAll(SetArgumentPointee<1>(0), Return(0)));
@@ -494,6 +498,8 @@ TEST_F(AlsaPcmOutputStreamTest, BufferPacket) {
// Return a partially filled packet.
MockAudioSourceCallback mock_callback;
+ EXPECT_CALL(mock_alsa_wrapper_, PcmState(_))
+ .WillOnce(Return(SND_PCM_STATE_RUNNING));
EXPECT_CALL(mock_alsa_wrapper_, PcmDelay(_, _))
.WillOnce(DoAll(SetArgumentPointee<1>(1), Return(0)));
EXPECT_CALL(mock_callback,
@@ -508,6 +514,46 @@ TEST_F(AlsaPcmOutputStreamTest, BufferPacket) {
EXPECT_EQ(10u, packet_.size);
}
+TEST_F(AlsaPcmOutputStreamTest, BufferPacket_Negative) {
+ packet_.used = packet_.size;
+
+ // Simulate where the underrun has occurred right after checking the delay.
+ MockAudioSourceCallback mock_callback;
+ EXPECT_CALL(mock_alsa_wrapper_, PcmState(_))
+ .WillOnce(Return(SND_PCM_STATE_RUNNING));
+ EXPECT_CALL(mock_alsa_wrapper_, PcmDelay(_, _))
+ .WillOnce(DoAll(SetArgumentPointee<1>(-1), Return(0)));
+ EXPECT_CALL(mock_callback,
+ OnMoreData(test_stream_.get(), packet_.buffer.get(),
+ packet_.capacity, 0))
+ .WillOnce(Return(10));
+
+ test_stream_->shared_data_.set_source_callback(&mock_callback);
+ test_stream_->BufferPacket(&packet_);
+
+ EXPECT_EQ(0u, packet_.used);
+ EXPECT_EQ(10u, packet_.size);
+}
+
+TEST_F(AlsaPcmOutputStreamTest, BufferPacket_Underrun) {
+ packet_.used = packet_.size;
+
+ // If ALSA has underrun then we should assume a delay of zero.
+ MockAudioSourceCallback mock_callback;
+ EXPECT_CALL(mock_alsa_wrapper_, PcmState(_))
+ .WillOnce(Return(SND_PCM_STATE_XRUN));
+ EXPECT_CALL(mock_callback,
+ OnMoreData(test_stream_.get(), packet_.buffer.get(),
+ packet_.capacity, 0))
+ .WillOnce(Return(10));
+
+ test_stream_->shared_data_.set_source_callback(&mock_callback);
+ test_stream_->BufferPacket(&packet_);
+
+ EXPECT_EQ(0u, packet_.used);
+ EXPECT_EQ(10u, packet_.size);
+}
+
TEST_F(AlsaPcmOutputStreamTest, BufferPacket_UnfinishedPacket) {
// No expectations set on the strict mock because nothing should be called.
test_stream_->BufferPacket(&packet_);
« no previous file with comments | « media/audio/linux/alsa_output.cc ('k') | media/audio/linux/alsa_wrapper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698