| 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "media/base/audio_decoder_config.h" | 6 #include "media/base/audio_decoder_config.h" |
| 7 #include "media/base/decoder_buffer.h" | 7 #include "media/base/decoder_buffer.h" |
| 8 #include "media/base/mock_callback.h" | 8 #include "media/base/mock_callback.h" |
| 9 #include "media/base/mock_demuxer_host.h" | 9 #include "media/base/mock_demuxer_host.h" |
| 10 #include "media/base/test_data_util.h" | 10 #include "media/base/test_data_util.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 } | 83 } |
| 84 | 84 |
| 85 class MockChunkDemuxerClient : public ChunkDemuxerClient { | 85 class MockChunkDemuxerClient : public ChunkDemuxerClient { |
| 86 public: | 86 public: |
| 87 MockChunkDemuxerClient() {} | 87 MockChunkDemuxerClient() {} |
| 88 virtual ~MockChunkDemuxerClient() {} | 88 virtual ~MockChunkDemuxerClient() {} |
| 89 | 89 |
| 90 MOCK_METHOD1(DemuxerOpened, void(ChunkDemuxer* demuxer)); | 90 MOCK_METHOD1(DemuxerOpened, void(ChunkDemuxer* demuxer)); |
| 91 MOCK_METHOD0(DemuxerClosed, void()); | 91 MOCK_METHOD0(DemuxerClosed, void()); |
| 92 // TODO(xhwang): This is a workaround of the issue that move-only parameters | 92 // TODO(xhwang): This is a workaround of the issue that move-only parameters |
| 93 // are not supported in mocked methods. Remove this when the issue is fixed. | 93 // are not supported in mocked methods. Remove this when the issue is fixed |
| 94 // See http://code.google.com/p/googletest/issues/detail?id=395 | 94 // (http://code.google.com/p/googletest/issues/detail?id=395) or when we use |
| 95 MOCK_METHOD2(KeyNeededMock, void(const uint8* init_data, int init_data_size)); | 95 // std::string instead of scoped_array<uint8> (http://crbug.com/130689). |
| 96 void KeyNeeded(scoped_array<uint8> init_data, int init_data_size) { | 96 MOCK_METHOD2(NeedKeyMock, void(const uint8* init_data, int init_data_size)); |
| 97 KeyNeededMock(init_data.get(), init_data_size); | 97 void DemuxerNeedKey(scoped_array<uint8> init_data, int init_data_size) { |
| 98 NeedKeyMock(init_data.get(), init_data_size); |
| 98 } | 99 } |
| 99 | 100 |
| 100 private: | 101 private: |
| 101 DISALLOW_COPY_AND_ASSIGN(MockChunkDemuxerClient); | 102 DISALLOW_COPY_AND_ASSIGN(MockChunkDemuxerClient); |
| 102 }; | 103 }; |
| 103 | 104 |
| 104 class ChunkDemuxerTest : public testing::Test { | 105 class ChunkDemuxerTest : public testing::Test { |
| 105 protected: | 106 protected: |
| 106 enum CodecsIndex { | 107 enum CodecsIndex { |
| 107 AUDIO, | 108 AUDIO, |
| (...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 bool has_video = (i & 0x2) != 0; | 584 bool has_video = (i & 0x2) != 0; |
| 584 bool video_content_encoded = (i & 0x4) != 0; | 585 bool video_content_encoded = (i & 0x4) != 0; |
| 585 | 586 |
| 586 // No test on invalid combination. | 587 // No test on invalid combination. |
| 587 if (!has_video && video_content_encoded) | 588 if (!has_video && video_content_encoded) |
| 588 continue; | 589 continue; |
| 589 | 590 |
| 590 client_.reset(new MockChunkDemuxerClient()); | 591 client_.reset(new MockChunkDemuxerClient()); |
| 591 demuxer_ = new ChunkDemuxer(client_.get()); | 592 demuxer_ = new ChunkDemuxer(client_.get()); |
| 592 if (has_video && video_content_encoded) | 593 if (has_video && video_content_encoded) |
| 593 EXPECT_CALL(*client_, KeyNeededMock(NotNull(), 16)); | 594 EXPECT_CALL(*client_, NeedKeyMock(NotNull(), 16)); |
| 594 | 595 |
| 595 ASSERT_TRUE(InitDemuxer(has_audio, has_video, video_content_encoded)); | 596 ASSERT_TRUE(InitDemuxer(has_audio, has_video, video_content_encoded)); |
| 596 | 597 |
| 597 scoped_refptr<DemuxerStream> audio_stream = | 598 scoped_refptr<DemuxerStream> audio_stream = |
| 598 demuxer_->GetStream(DemuxerStream::AUDIO); | 599 demuxer_->GetStream(DemuxerStream::AUDIO); |
| 599 if (has_audio) { | 600 if (has_audio) { |
| 600 ASSERT_TRUE(audio_stream); | 601 ASSERT_TRUE(audio_stream); |
| 601 | 602 |
| 602 const AudioDecoderConfig& config = audio_stream->audio_decoder_config(); | 603 const AudioDecoderConfig& config = audio_stream->audio_decoder_config(); |
| 603 EXPECT_EQ(kCodecVorbis, config.codec()); | 604 EXPECT_EQ(kCodecVorbis, config.codec()); |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 889 ASSERT_TRUE(AppendData(cluster->data(), cluster->size())); | 890 ASSERT_TRUE(AppendData(cluster->data(), cluster->size())); |
| 890 | 891 |
| 891 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_NETWORK)); | 892 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_NETWORK)); |
| 892 demuxer_->EndOfStream(PIPELINE_ERROR_NETWORK); | 893 demuxer_->EndOfStream(PIPELINE_ERROR_NETWORK); |
| 893 } | 894 } |
| 894 | 895 |
| 895 // Helper class to reduce duplicate code when testing end of stream | 896 // Helper class to reduce duplicate code when testing end of stream |
| 896 // Read() behavior. | 897 // Read() behavior. |
| 897 class EndOfStreamHelper { | 898 class EndOfStreamHelper { |
| 898 public: | 899 public: |
| 899 EndOfStreamHelper(const scoped_refptr<Demuxer> demuxer) | 900 explicit EndOfStreamHelper(const scoped_refptr<Demuxer> demuxer) |
| 900 : demuxer_(demuxer), | 901 : demuxer_(demuxer), |
| 901 audio_read_done_(false), | 902 audio_read_done_(false), |
| 902 video_read_done_(false) { | 903 video_read_done_(false) { |
| 903 } | 904 } |
| 904 | 905 |
| 905 // Request a read on the audio and video streams. | 906 // Request a read on the audio and video streams. |
| 906 void RequestReads() { | 907 void RequestReads() { |
| 907 EXPECT_FALSE(audio_read_done_); | 908 EXPECT_FALSE(audio_read_done_); |
| 908 EXPECT_FALSE(video_read_done_); | 909 EXPECT_FALSE(video_read_done_); |
| 909 | 910 |
| (...skipping 706 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1616 NewExpectedStatusCB(PIPELINE_OK)); | 1617 NewExpectedStatusCB(PIPELINE_OK)); |
| 1617 | 1618 |
| 1618 // Generate a cluster to fulfill this seek, where audio timecode begins 25ms | 1619 // Generate a cluster to fulfill this seek, where audio timecode begins 25ms |
| 1619 // after the video. | 1620 // after the video. |
| 1620 scoped_ptr<Cluster> middle_cluster(GenerateCluster(5025, 5000, 8)); | 1621 scoped_ptr<Cluster> middle_cluster(GenerateCluster(5025, 5000, 8)); |
| 1621 ASSERT_TRUE(AppendData(middle_cluster->data(), middle_cluster->size())); | 1622 ASSERT_TRUE(AppendData(middle_cluster->data(), middle_cluster->size())); |
| 1622 GenerateExpectedReads(5025, 5000, 8, audio, video); | 1623 GenerateExpectedReads(5025, 5000, 8, audio, video); |
| 1623 } | 1624 } |
| 1624 | 1625 |
| 1625 } // namespace media | 1626 } // namespace media |
| OLD | NEW |