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

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

Issue 105503011: Update FFmpegDemuxer unknown duration logic to work for video-only streams. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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 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/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 // Fixture members. 160 // Fixture members.
161 scoped_ptr<FileDataSource> data_source_; 161 scoped_ptr<FileDataSource> data_source_;
162 scoped_ptr<FFmpegDemuxer> demuxer_; 162 scoped_ptr<FFmpegDemuxer> demuxer_;
163 StrictMock<MockDemuxerHost> host_; 163 StrictMock<MockDemuxerHost> host_;
164 base::MessageLoop message_loop_; 164 base::MessageLoop message_loop_;
165 165
166 AVFormatContext* format_context() { 166 AVFormatContext* format_context() {
167 return demuxer_->glue_->format_context(); 167 return demuxer_->glue_->format_context();
168 } 168 }
169 169
170 void ReadUntilEndOfStream() { 170 void ReadUntilEndOfStream(DemuxerStream* stream) {
171 // We should expect an end of stream buffer.
172 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO);
173
174 bool got_eos_buffer = false; 171 bool got_eos_buffer = false;
175 const int kMaxBuffers = 170; 172 const int kMaxBuffers = 170;
176 for (int i = 0; !got_eos_buffer && i < kMaxBuffers; i++) { 173 for (int i = 0; !got_eos_buffer && i < kMaxBuffers; i++) {
177 audio->Read(base::Bind(&EosOnReadDone, &got_eos_buffer)); 174 stream->Read(base::Bind(&EosOnReadDone, &got_eos_buffer));
178 message_loop_.Run(); 175 message_loop_.Run();
179 } 176 }
180 177
181 EXPECT_TRUE(got_eos_buffer); 178 EXPECT_TRUE(got_eos_buffer);
182 } 179 }
183 180
184 private: 181 private:
185 void CreateDataSource(const std::string& name) { 182 void CreateDataSource(const std::string& name) {
186 CHECK(!data_source_); 183 CHECK(!data_source_);
187 184
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 message_loop_.Run(); 404 message_loop_.Run();
408 405
409 // Verify that the start time is equal to the lowest timestamp (ie the audio). 406 // Verify that the start time is equal to the lowest timestamp (ie the audio).
410 EXPECT_EQ(demuxer_->GetStartTime().InMicroseconds(), 396000); 407 EXPECT_EQ(demuxer_->GetStartTime().InMicroseconds(), 396000);
411 } 408 }
412 409
413 TEST_F(FFmpegDemuxerTest, Read_EndOfStream) { 410 TEST_F(FFmpegDemuxerTest, Read_EndOfStream) {
414 // Verify that end of stream buffers are created. 411 // Verify that end of stream buffers are created.
415 CreateDemuxer("bear-320x240.webm"); 412 CreateDemuxer("bear-320x240.webm");
416 InitializeDemuxer(); 413 InitializeDemuxer();
417 ReadUntilEndOfStream(); 414 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO));
418 } 415 }
419 416
420 TEST_F(FFmpegDemuxerTest, Read_EndOfStreamText) { 417 TEST_F(FFmpegDemuxerTest, Read_EndOfStreamText) {
421 // Verify that end of stream buffers are created. 418 // Verify that end of stream buffers are created.
422 CreateDemuxer("bear-vp8-webvtt.webm"); 419 CreateDemuxer("bear-vp8-webvtt.webm");
423 DemuxerStream* text_stream = NULL; 420 DemuxerStream* text_stream = NULL;
424 EXPECT_CALL(host_, AddTextStream(_, _)) 421 EXPECT_CALL(host_, AddTextStream(_, _))
425 .WillOnce(SaveArg<0>(&text_stream)); 422 .WillOnce(SaveArg<0>(&text_stream));
426 InitializeDemuxerText(true); 423 InitializeDemuxerText(true);
427 ASSERT_TRUE(text_stream); 424 ASSERT_TRUE(text_stream);
428 EXPECT_EQ(DemuxerStream::TEXT, text_stream->type()); 425 EXPECT_EQ(DemuxerStream::TEXT, text_stream->type());
429 426
430 bool got_eos_buffer = false; 427 bool got_eos_buffer = false;
431 const int kMaxBuffers = 10; 428 const int kMaxBuffers = 10;
432 for (int i = 0; !got_eos_buffer && i < kMaxBuffers; i++) { 429 for (int i = 0; !got_eos_buffer && i < kMaxBuffers; i++) {
433 text_stream->Read(base::Bind(&EosOnReadDone, &got_eos_buffer)); 430 text_stream->Read(base::Bind(&EosOnReadDone, &got_eos_buffer));
434 message_loop_.Run(); 431 message_loop_.Run();
435 } 432 }
436 433
437 EXPECT_TRUE(got_eos_buffer); 434 EXPECT_TRUE(got_eos_buffer);
438 } 435 }
439 436
440 TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration) { 437 TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration) {
441 // Verify that end of stream buffers are created. 438 // Verify that end of stream buffers are created.
442 CreateDemuxer("bear-320x240.webm"); 439 CreateDemuxer("bear-320x240.webm");
443 InitializeDemuxer(); 440 InitializeDemuxer();
444 set_duration_known(false); 441 set_duration_known(false);
445 EXPECT_CALL(host_, SetDuration(_)); 442 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2767)));
446 ReadUntilEndOfStream(); 443 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO));
444 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::VIDEO));
445 }
446
447 TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration_VideoOnly) {
448 // Verify that end of stream buffers are created.
449 CreateDemuxer("bear-320x240-video-only.webm");
450 InitializeDemuxer();
451 set_duration_known(false);
452 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2703)));
453 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::VIDEO));
454 }
455
456 TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration_AudioOnly) {
457 // Verify that end of stream buffers are created.
458 CreateDemuxer("bear-320x240-audio-only.webm");
459 InitializeDemuxer();
460 set_duration_known(false);
461 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2767)));
462 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO));
447 } 463 }
448 464
449 TEST_F(FFmpegDemuxerTest, Seek) { 465 TEST_F(FFmpegDemuxerTest, Seek) {
450 // We're testing that the demuxer frees all queued packets when it receives 466 // We're testing that the demuxer frees all queued packets when it receives
451 // a Seek(). 467 // a Seek().
452 CreateDemuxer("bear-320x240.webm"); 468 CreateDemuxer("bear-320x240.webm");
453 InitializeDemuxer(); 469 InitializeDemuxer();
454 470
455 // Get our streams. 471 // Get our streams.
456 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO); 472 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO);
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 } 712 }
697 713
698 // FFmpeg returns null data pointers when samples have zero size, leading to 714 // FFmpeg returns null data pointers when samples have zero size, leading to
699 // mistakenly creating end of stream buffers http://crbug.com/169133 715 // mistakenly creating end of stream buffers http://crbug.com/169133
700 TEST_F(FFmpegDemuxerTest, MP4_ZeroStszEntry) { 716 TEST_F(FFmpegDemuxerTest, MP4_ZeroStszEntry) {
701 #if !defined(USE_PROPRIETARY_CODECS) 717 #if !defined(USE_PROPRIETARY_CODECS)
702 return; 718 return;
703 #endif 719 #endif
704 CreateDemuxer("bear-1280x720-zero-stsz-entry.mp4"); 720 CreateDemuxer("bear-1280x720-zero-stsz-entry.mp4");
705 InitializeDemuxer(); 721 InitializeDemuxer();
706 ReadUntilEndOfStream(); 722 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO));
707 } 723 }
708 724
709 } // namespace media 725 } // namespace media
OLDNEW
« media/filters/ffmpeg_demuxer.cc ('K') | « media/filters/ffmpeg_demuxer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698