| 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 <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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |