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

Side by Side Diff: media/filters/ffmpeg_demuxer_unittest.cc

Issue 11316293: Replace WaitableEvents and ConditionalVariables in VideoRendererBase tests with MessageLoop. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <algorithm> 5 #include <algorithm>
6 #include <deque> 6 #include <deque>
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/file_path.h" 10 #include "base/file_path.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 80
81 CreateDataSource(name); 81 CreateDataSource(name);
82 demuxer_ = new FFmpegDemuxer(message_loop_.message_loop_proxy(), 82 demuxer_ = new FFmpegDemuxer(message_loop_.message_loop_proxy(),
83 data_source_); 83 data_source_);
84 } 84 }
85 85
86 MOCK_METHOD1(CheckPoint, void(int v)); 86 MOCK_METHOD1(CheckPoint, void(int v));
87 87
88 void InitializeDemuxer() { 88 void InitializeDemuxer() {
89 EXPECT_CALL(host_, SetDuration(_)); 89 EXPECT_CALL(host_, SetDuration(_));
90 demuxer_->Initialize(&host_, NewStatusCB(PIPELINE_OK)); 90 demuxer_->Initialize(&host_, NewExpectedStatusAndQuitCB(PIPELINE_OK));
91 message_loop_.Run(); 91 message_loop_.Run();
92 } 92 }
93 93
94 MOCK_METHOD2(OnReadDoneCalled, void(int, int64)); 94 MOCK_METHOD2(OnReadDoneCalled, void(int, int64));
95 95
96 // Verifies that |buffer| has a specific |size| and |timestamp|. 96 // Verifies that |buffer| has a specific |size| and |timestamp|.
97 // |location| simply indicates where the call to this function was made. 97 // |location| simply indicates where the call to this function was made.
98 // This makes it easier to track down where test failures occur. 98 // This makes it easier to track down where test failures occur.
99 void OnReadDone(const tracked_objects::Location& location, 99 void OnReadDone(const tracked_objects::Location& location,
100 int size, int64 timestampInMicroseconds, 100 int size, int64 timestampInMicroseconds,
(...skipping 14 matching lines...) Expand all
115 message_loop_.PostTask(FROM_HERE, MessageLoop::QuitWhenIdleClosure()); 115 message_loop_.PostTask(FROM_HERE, MessageLoop::QuitWhenIdleClosure());
116 } 116 }
117 117
118 DemuxerStream::ReadCB NewReadCB(const tracked_objects::Location& location, 118 DemuxerStream::ReadCB NewReadCB(const tracked_objects::Location& location,
119 int size, int64 timestampInMicroseconds) { 119 int size, int64 timestampInMicroseconds) {
120 EXPECT_CALL(*this, OnReadDoneCalled(size, timestampInMicroseconds)); 120 EXPECT_CALL(*this, OnReadDoneCalled(size, timestampInMicroseconds));
121 return base::Bind(&FFmpegDemuxerTest::OnReadDone, base::Unretained(this), 121 return base::Bind(&FFmpegDemuxerTest::OnReadDone, base::Unretained(this),
122 location, size, timestampInMicroseconds); 122 location, size, timestampInMicroseconds);
123 } 123 }
124 124
125 PipelineStatusCB NewStatusCB(PipelineStatus expected) {
126 return base::Bind(&FFmpegDemuxerTest::OnStatusDone,
127 base::Unretained(this), expected);
128 }
129
130 void OnStatusDone(PipelineStatus expected, PipelineStatus status) {
131 EXPECT_EQ(expected, status);
132
133 DCHECK_EQ(&message_loop_, MessageLoop::current());
134 message_loop_.PostTask(FROM_HERE, MessageLoop::QuitWhenIdleClosure());
135 }
136
137 // Accessor to demuxer internals. 125 // Accessor to demuxer internals.
138 void set_duration_known(bool duration_known) { 126 void set_duration_known(bool duration_known) {
139 demuxer_->duration_known_ = duration_known; 127 demuxer_->duration_known_ = duration_known;
140 } 128 }
141 129
142 bool IsStreamStopped(DemuxerStream::Type type) { 130 bool IsStreamStopped(DemuxerStream::Type type) {
143 DemuxerStream* stream = demuxer_->GetStream(type); 131 DemuxerStream* stream = demuxer_->GetStream(type);
144 CHECK(stream); 132 CHECK(stream);
145 return static_cast<FFmpegDemuxerStream*>(stream)->stopped_; 133 return static_cast<FFmpegDemuxerStream*>(stream)->stopped_;
146 } 134 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 data_source_ = new FileDataSource(); 173 data_source_ = new FileDataSource();
186 EXPECT_TRUE(data_source_->Initialize(file_path)); 174 EXPECT_TRUE(data_source_->Initialize(file_path));
187 } 175 }
188 176
189 DISALLOW_COPY_AND_ASSIGN(FFmpegDemuxerTest); 177 DISALLOW_COPY_AND_ASSIGN(FFmpegDemuxerTest);
190 }; 178 };
191 179
192 TEST_F(FFmpegDemuxerTest, Initialize_OpenFails) { 180 TEST_F(FFmpegDemuxerTest, Initialize_OpenFails) {
193 // Simulate avformat_open_input() failing. 181 // Simulate avformat_open_input() failing.
194 CreateDemuxer("ten_byte_file"); 182 CreateDemuxer("ten_byte_file");
195 demuxer_->Initialize(&host_, NewStatusCB(DEMUXER_ERROR_COULD_NOT_OPEN)); 183 demuxer_->Initialize(
184 &host_, NewExpectedStatusAndQuitCB(DEMUXER_ERROR_COULD_NOT_OPEN));
196 message_loop_.Run(); 185 message_loop_.Run();
197 } 186 }
198 187
199 // TODO(acolwell): Uncomment this test when we discover a file that passes 188 // TODO(acolwell): Uncomment this test when we discover a file that passes
200 // avformat_open_input(), but has avformat_find_stream_info() fail. 189 // avformat_open_input(), but has avformat_find_stream_info() fail.
201 // 190 //
202 //TEST_F(FFmpegDemuxerTest, Initialize_ParseFails) { 191 //TEST_F(FFmpegDemuxerTest, Initialize_ParseFails) {
203 // ("find_stream_info_fail.webm"); 192 // ("find_stream_info_fail.webm");
204 // demuxer_->Initialize( 193 // demuxer_->Initialize(
205 // &host_, NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_PARSE)); 194 // &host_, NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_PARSE));
206 // message_loop_.RunUntilIdle(); 195 // message_loop_.RunUntilIdle();
207 //} 196 //}
208 197
209 TEST_F(FFmpegDemuxerTest, Initialize_NoStreams) { 198 TEST_F(FFmpegDemuxerTest, Initialize_NoStreams) {
210 // Open a file with no streams whatsoever. 199 // Open a file with no streams whatsoever.
211 CreateDemuxer("no_streams.webm"); 200 CreateDemuxer("no_streams.webm");
212 demuxer_->Initialize(&host_, NewStatusCB(DEMUXER_ERROR_NO_SUPPORTED_STREAMS)); 201 demuxer_->Initialize(
202 &host_, NewExpectedStatusAndQuitCB(DEMUXER_ERROR_NO_SUPPORTED_STREAMS));
213 message_loop_.Run(); 203 message_loop_.Run();
214 } 204 }
215 205
216 TEST_F(FFmpegDemuxerTest, Initialize_NoAudioVideo) { 206 TEST_F(FFmpegDemuxerTest, Initialize_NoAudioVideo) {
217 // Open a file containing streams but none of which are audio/video streams. 207 // Open a file containing streams but none of which are audio/video streams.
218 CreateDemuxer("no_audio_video.webm"); 208 CreateDemuxer("no_audio_video.webm");
219 demuxer_->Initialize(&host_, NewStatusCB(DEMUXER_ERROR_NO_SUPPORTED_STREAMS)); 209 demuxer_->Initialize(
210 &host_, NewExpectedStatusAndQuitCB(DEMUXER_ERROR_NO_SUPPORTED_STREAMS));
220 message_loop_.Run(); 211 message_loop_.Run();
221 } 212 }
222 213
223 TEST_F(FFmpegDemuxerTest, Initialize_Successful) { 214 TEST_F(FFmpegDemuxerTest, Initialize_Successful) {
224 CreateDemuxer("bear-320x240.webm"); 215 CreateDemuxer("bear-320x240.webm");
225 InitializeDemuxer(); 216 InitializeDemuxer();
226 217
227 // Video stream should be present. 218 // Video stream should be present.
228 scoped_refptr<DemuxerStream> stream = 219 scoped_refptr<DemuxerStream> stream =
229 demuxer_->GetStream(DemuxerStream::VIDEO); 220 demuxer_->GetStream(DemuxerStream::VIDEO);
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 demuxer_->GetStream(DemuxerStream::AUDIO); 365 demuxer_->GetStream(DemuxerStream::AUDIO);
375 ASSERT_TRUE(video); 366 ASSERT_TRUE(video);
376 ASSERT_TRUE(audio); 367 ASSERT_TRUE(audio);
377 368
378 // Read a video packet and release it. 369 // Read a video packet and release it.
379 video->Read(NewReadCB(FROM_HERE, 22084, 0)); 370 video->Read(NewReadCB(FROM_HERE, 22084, 0));
380 message_loop_.Run(); 371 message_loop_.Run();
381 372
382 // Issue a simple forward seek, which should discard queued packets. 373 // Issue a simple forward seek, which should discard queued packets.
383 demuxer_->Seek(base::TimeDelta::FromMicroseconds(1000000), 374 demuxer_->Seek(base::TimeDelta::FromMicroseconds(1000000),
384 NewStatusCB(PIPELINE_OK)); 375 NewExpectedStatusAndQuitCB(PIPELINE_OK));
385 message_loop_.Run(); 376 message_loop_.Run();
386 377
387 // Audio read #1. 378 // Audio read #1.
388 audio->Read(NewReadCB(FROM_HERE, 145, 803000)); 379 audio->Read(NewReadCB(FROM_HERE, 145, 803000));
389 message_loop_.Run(); 380 message_loop_.Run();
390 381
391 // Audio read #2. 382 // Audio read #2.
392 audio->Read(NewReadCB(FROM_HERE, 148, 826000)); 383 audio->Read(NewReadCB(FROM_HERE, 148, 826000));
393 message_loop_.Run(); 384 message_loop_.Run();
394 385
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 demuxer_->GetStream(DemuxerStream::AUDIO); 538 demuxer_->GetStream(DemuxerStream::AUDIO);
548 ASSERT_TRUE(video); 539 ASSERT_TRUE(video);
549 ASSERT_TRUE(audio); 540 ASSERT_TRUE(audio);
550 541
551 // Read a video packet and release it. 542 // Read a video packet and release it.
552 video->Read(NewReadCB(FROM_HERE, 22084, 0)); 543 video->Read(NewReadCB(FROM_HERE, 22084, 0));
553 message_loop_.Run(); 544 message_loop_.Run();
554 545
555 // Issue a simple forward seek, which should discard queued packets. 546 // Issue a simple forward seek, which should discard queued packets.
556 demuxer_->Seek(base::TimeDelta::FromMicroseconds(2500000), 547 demuxer_->Seek(base::TimeDelta::FromMicroseconds(2500000),
557 NewStatusCB(PIPELINE_OK)); 548 NewExpectedStatusAndQuitCB(PIPELINE_OK));
558 message_loop_.Run(); 549 message_loop_.Run();
559 550
560 // Audio read #1. 551 // Audio read #1.
561 audio->Read(NewReadCB(FROM_HERE, 40, 2403000)); 552 audio->Read(NewReadCB(FROM_HERE, 40, 2403000));
562 message_loop_.Run(); 553 message_loop_.Run();
563 554
564 // Audio read #2. 555 // Audio read #2.
565 audio->Read(NewReadCB(FROM_HERE, 42, 2406000)); 556 audio->Read(NewReadCB(FROM_HERE, 42, 2406000));
566 message_loop_.Run(); 557 message_loop_.Run();
567 558
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 TEST_F(FFmpegDemuxerTest, UnsupportedVideoSupportedAudioDemux) { 607 TEST_F(FFmpegDemuxerTest, UnsupportedVideoSupportedAudioDemux) {
617 CreateDemuxer("vorbis_audio_wmv_video.mkv"); 608 CreateDemuxer("vorbis_audio_wmv_video.mkv");
618 InitializeDemuxer(); 609 InitializeDemuxer();
619 610
620 // Ensure the expected streams are present. 611 // Ensure the expected streams are present.
621 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::VIDEO)); 612 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::VIDEO));
622 EXPECT_TRUE(demuxer_->GetStream(DemuxerStream::AUDIO)); 613 EXPECT_TRUE(demuxer_->GetStream(DemuxerStream::AUDIO));
623 } 614 }
624 615
625 } // namespace media 616 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698