| 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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 FFmpegDemuxerTest() {} | 65 FFmpegDemuxerTest() {} |
| 66 | 66 |
| 67 virtual ~FFmpegDemuxerTest() { | 67 virtual ~FFmpegDemuxerTest() { |
| 68 if (demuxer_) { | 68 if (demuxer_) { |
| 69 WaitableMessageLoopEvent event; | 69 WaitableMessageLoopEvent event; |
| 70 demuxer_->Stop(event.GetClosure()); | 70 demuxer_->Stop(event.GetClosure()); |
| 71 event.RunAndWait(); | 71 event.RunAndWait(); |
| 72 } | 72 } |
| 73 } | 73 } |
| 74 | 74 |
| 75 void CreateDemuxer(const std::string& name) { | 75 void CreateDemuxerText(const std::string& name, bool enable_text) { |
| 76 CHECK(!demuxer_); | 76 CHECK(!demuxer_); |
| 77 | 77 |
| 78 EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber()); | 78 EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber()); |
| 79 EXPECT_CALL(host_, AddBufferedByteRange(_, _)).Times(AnyNumber()); | 79 EXPECT_CALL(host_, AddBufferedByteRange(_, _)).Times(AnyNumber()); |
| 80 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber()); | 80 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber()); |
| 81 | 81 |
| 82 CreateDataSource(name); | 82 CreateDataSource(name); |
| 83 | 83 |
| 84 Demuxer::NeedKeyCB need_key_cb = | 84 Demuxer::NeedKeyCB need_key_cb = |
| 85 base::Bind(&FFmpegDemuxerTest::NeedKeyCB, base::Unretained(this)); | 85 base::Bind(&FFmpegDemuxerTest::NeedKeyCB, base::Unretained(this)); |
| 86 |
| 86 demuxer_.reset(new FFmpegDemuxer(message_loop_.message_loop_proxy(), | 87 demuxer_.reset(new FFmpegDemuxer(message_loop_.message_loop_proxy(), |
| 87 data_source_.get(), | 88 data_source_.get(), |
| 88 need_key_cb, | 89 need_key_cb, |
| 90 enable_text, |
| 89 new MediaLog())); | 91 new MediaLog())); |
| 90 } | 92 } |
| 91 | 93 |
| 94 void CreateDemuxer(const std::string& name) { |
| 95 CreateDemuxerText(name, false); |
| 96 } |
| 97 |
| 92 MOCK_METHOD1(CheckPoint, void(int v)); | 98 MOCK_METHOD1(CheckPoint, void(int v)); |
| 93 | 99 |
| 94 void InitializeDemuxer() { | 100 void InitializeDemuxer() { |
| 95 EXPECT_CALL(host_, SetDuration(_)); | 101 EXPECT_CALL(host_, SetDuration(_)); |
| 96 WaitableMessageLoopEvent event; | 102 WaitableMessageLoopEvent event; |
| 97 demuxer_->Initialize(&host_, event.GetPipelineStatusCB()); | 103 demuxer_->Initialize(&host_, event.GetPipelineStatusCB()); |
| 98 event.RunAndWaitForStatus(PIPELINE_OK); | 104 event.RunAndWaitForStatus(PIPELINE_OK); |
| 99 } | 105 } |
| 100 | 106 |
| 101 MOCK_METHOD2(OnReadDoneCalled, void(int, int64)); | 107 MOCK_METHOD2(OnReadDoneCalled, void(int, int64)); |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 // Audio stream should be Vorbis. | 297 // Audio stream should be Vorbis. |
| 292 stream = demuxer_->GetStream(DemuxerStream::AUDIO); | 298 stream = demuxer_->GetStream(DemuxerStream::AUDIO); |
| 293 ASSERT_TRUE(stream); | 299 ASSERT_TRUE(stream); |
| 294 EXPECT_EQ(DemuxerStream::AUDIO, stream->type()); | 300 EXPECT_EQ(DemuxerStream::AUDIO, stream->type()); |
| 295 EXPECT_EQ(kCodecVorbis, stream->audio_decoder_config().codec()); | 301 EXPECT_EQ(kCodecVorbis, stream->audio_decoder_config().codec()); |
| 296 | 302 |
| 297 // Unknown stream should never be present. | 303 // Unknown stream should never be present. |
| 298 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN)); | 304 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN)); |
| 299 } | 305 } |
| 300 | 306 |
| 307 TEST_F(FFmpegDemuxerTest, Initialize_MultitrackText) { |
| 308 // Open a file containing the following streams: |
| 309 // Stream #0: Video (VP8) |
| 310 // Stream #1: Audio (Vorbis) |
| 311 // Stream #2: Text (WebVTT) |
| 312 |
| 313 CreateDemuxerText("bear-vp8-webvtt.webm", true); |
| 314 InitializeDemuxer(); |
| 315 |
| 316 // Video stream should be VP8. |
| 317 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); |
| 318 ASSERT_TRUE(stream); |
| 319 EXPECT_EQ(DemuxerStream::VIDEO, stream->type()); |
| 320 EXPECT_EQ(kCodecVP8, stream->video_decoder_config().codec()); |
| 321 |
| 322 // Audio stream should be Vorbis. |
| 323 stream = demuxer_->GetStream(DemuxerStream::AUDIO); |
| 324 ASSERT_TRUE(stream); |
| 325 EXPECT_EQ(DemuxerStream::AUDIO, stream->type()); |
| 326 EXPECT_EQ(kCodecVorbis, stream->audio_decoder_config().codec()); |
| 327 |
| 328 // Text stream should also be present. |
| 329 ASSERT_EQ(host_.text_streams_.size(), 1); |
| 330 |
| 331 // Unknown stream should never be present. |
| 332 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN)); |
| 333 } |
| 334 |
| 301 TEST_F(FFmpegDemuxerTest, Initialize_Encrypted) { | 335 TEST_F(FFmpegDemuxerTest, Initialize_Encrypted) { |
| 302 EXPECT_CALL(*this, NeedKeyCBMock(kWebMEncryptInitDataType, NotNull(), | 336 EXPECT_CALL(*this, NeedKeyCBMock(kWebMEncryptInitDataType, NotNull(), |
| 303 DecryptConfig::kDecryptionKeySize)) | 337 DecryptConfig::kDecryptionKeySize)) |
| 304 .Times(Exactly(2)); | 338 .Times(Exactly(2)); |
| 305 | 339 |
| 306 CreateDemuxer("bear-320x240-av_enc-av.webm"); | 340 CreateDemuxer("bear-320x240-av_enc-av.webm"); |
| 307 InitializeDemuxer(); | 341 InitializeDemuxer(); |
| 308 } | 342 } |
| 309 | 343 |
| 310 TEST_F(FFmpegDemuxerTest, Read_Audio) { | 344 TEST_F(FFmpegDemuxerTest, Read_Audio) { |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 576 TEST_F(FFmpegDemuxerTest, MP4_ZeroStszEntry) { | 610 TEST_F(FFmpegDemuxerTest, MP4_ZeroStszEntry) { |
| 577 #if !defined(USE_PROPRIETARY_CODECS) | 611 #if !defined(USE_PROPRIETARY_CODECS) |
| 578 return; | 612 return; |
| 579 #endif | 613 #endif |
| 580 CreateDemuxer("bear-1280x720-zero-stsz-entry.mp4"); | 614 CreateDemuxer("bear-1280x720-zero-stsz-entry.mp4"); |
| 581 InitializeDemuxer(); | 615 InitializeDemuxer(); |
| 582 ReadUntilEndOfStream(); | 616 ReadUntilEndOfStream(); |
| 583 } | 617 } |
| 584 | 618 |
| 585 } // namespace media | 619 } // namespace media |
| OLD | NEW |