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/mock_callback.h" | 7 #include "media/base/mock_callback.h" |
8 #include "media/base/mock_demuxer_host.h" | 8 #include "media/base/mock_demuxer_host.h" |
9 #include "media/base/test_data_util.h" | 9 #include "media/base/test_data_util.h" |
10 #include "media/filters/chunk_demuxer.h" | 10 #include "media/filters/chunk_demuxer.h" |
11 #include "media/filters/chunk_demuxer_client.h" | 11 #include "media/filters/chunk_demuxer_client.h" |
12 #include "media/webm/cluster_builder.h" | 12 #include "media/webm/cluster_builder.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 | 14 |
15 using ::testing::AnyNumber; | 15 using ::testing::AnyNumber; |
16 using ::testing::InSequence; | 16 using ::testing::InSequence; |
17 using ::testing::NotNull; | 17 using ::testing::NotNull; |
18 using ::testing::Return; | 18 using ::testing::Return; |
| 19 using ::testing::SaveArg; |
19 using ::testing::SetArgumentPointee; | 20 using ::testing::SetArgumentPointee; |
20 using ::testing::_; | 21 using ::testing::_; |
21 | 22 |
22 namespace media { | 23 namespace media { |
23 | 24 |
24 static const uint8 kTracksHeader[] = { | 25 static const uint8 kTracksHeader[] = { |
25 0x16, 0x54, 0xAE, 0x6B, // Tracks ID | 26 0x16, 0x54, 0xAE, 0x6B, // Tracks ID |
26 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tracks(size = 0) | 27 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tracks(size = 0) |
27 }; | 28 }; |
28 | 29 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 | 95 |
95 class ChunkDemuxerTest : public testing::Test { | 96 class ChunkDemuxerTest : public testing::Test { |
96 protected: | 97 protected: |
97 enum CodecsIndex { | 98 enum CodecsIndex { |
98 AUDIO, | 99 AUDIO, |
99 VIDEO, | 100 VIDEO, |
100 MAX_CODECS_INDEX | 101 MAX_CODECS_INDEX |
101 }; | 102 }; |
102 | 103 |
103 ChunkDemuxerTest() | 104 ChunkDemuxerTest() |
104 : client_(new MockChunkDemuxerClient()), | 105 : buffered_bytes_(0), |
| 106 client_(new MockChunkDemuxerClient()), |
105 demuxer_(new ChunkDemuxer(client_.get())) { | 107 demuxer_(new ChunkDemuxer(client_.get())) { |
106 } | 108 } |
107 | 109 |
108 virtual ~ChunkDemuxerTest() { | 110 virtual ~ChunkDemuxerTest() { |
109 ShutdownDemuxer(); | 111 ShutdownDemuxer(); |
110 } | 112 } |
111 | 113 |
112 void CreateInfoTracks(bool has_audio, bool has_video, | 114 void CreateInfoTracks(bool has_audio, bool has_video, |
113 bool video_content_encoded, scoped_array<uint8>* buffer, | 115 bool video_content_encoded, scoped_array<uint8>* buffer, |
114 int* size) { | 116 int* size) { |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 | 176 |
175 ChunkDemuxer::Status AddId() { | 177 ChunkDemuxer::Status AddId() { |
176 std::vector<std::string> codecs(2); | 178 std::vector<std::string> codecs(2); |
177 codecs[0] = "vp8"; | 179 codecs[0] = "vp8"; |
178 codecs[1] = "vorbis"; | 180 codecs[1] = "vorbis"; |
179 return demuxer_->AddId(kSourceId, "video/webm", codecs); | 181 return demuxer_->AddId(kSourceId, "video/webm", codecs); |
180 } | 182 } |
181 | 183 |
182 bool AppendData(const uint8* data, size_t length) { | 184 bool AppendData(const uint8* data, size_t length) { |
183 CHECK(length); | 185 CHECK(length); |
184 EXPECT_CALL(host_, SetBufferedBytes(_)).Times(AnyNumber()); | 186 EXPECT_CALL(host_, SetBufferedBytes(_)) |
| 187 .Times(AnyNumber()) |
| 188 .WillRepeatedly(SaveArg<0>(&buffered_bytes_)); |
185 EXPECT_CALL(host_, SetNetworkActivity(true)) | 189 EXPECT_CALL(host_, SetNetworkActivity(true)) |
186 .Times(AnyNumber()); | 190 .Times(AnyNumber()); |
187 return demuxer_->AppendData(kSourceId, data, length); | 191 return demuxer_->AppendData(kSourceId, data, length); |
188 } | 192 } |
189 | 193 |
190 bool AppendDataInPieces(const uint8* data, size_t length) { | 194 bool AppendDataInPieces(const uint8* data, size_t length) { |
191 return AppendDataInPieces(data, length, 7); | 195 return AppendDataInPieces(data, length, 7); |
192 } | 196 } |
193 | 197 |
194 bool AppendDataInPieces(const uint8* data, size_t length, size_t piece_size) { | 198 bool AppendDataInPieces(const uint8* data, size_t length, size_t piece_size) { |
195 const uint8* start = data; | 199 const uint8* start = data; |
196 const uint8* end = data + length; | 200 const uint8* end = data + length; |
197 while (start < end) { | 201 while (start < end) { |
| 202 int64 old_buffered_bytes = buffered_bytes_; |
198 size_t append_size = std::min(piece_size, | 203 size_t append_size = std::min(piece_size, |
199 static_cast<size_t>(end - start)); | 204 static_cast<size_t>(end - start)); |
200 if (!AppendData(start, append_size)) | 205 if (!AppendData(start, append_size)) |
201 return false; | 206 return false; |
202 start += append_size; | 207 start += append_size; |
| 208 |
| 209 EXPECT_GT(buffered_bytes_, old_buffered_bytes); |
203 } | 210 } |
204 return true; | 211 return true; |
205 } | 212 } |
206 | 213 |
207 bool AppendInfoTracks(bool has_audio, bool has_video, | 214 bool AppendInfoTracks(bool has_audio, bool has_video, |
208 bool video_content_encoded) { | 215 bool video_content_encoded) { |
209 scoped_array<uint8> info_tracks; | 216 scoped_array<uint8> info_tracks; |
210 int info_tracks_size = 0; | 217 int info_tracks_size = 0; |
211 CreateInfoTracks(has_audio, has_video, video_content_encoded, | 218 CreateInfoTracks(has_audio, has_video, video_content_encoded, |
212 &info_tracks, &info_tracks_size); | 219 &info_tracks, &info_tracks_size); |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 &video_read_done)); | 405 &video_read_done)); |
399 | 406 |
400 EXPECT_TRUE(video_read_done); | 407 EXPECT_TRUE(video_read_done); |
401 } | 408 } |
402 } | 409 } |
403 | 410 |
404 return true; | 411 return true; |
405 } | 412 } |
406 | 413 |
407 MockDemuxerHost host_; | 414 MockDemuxerHost host_; |
| 415 int64 buffered_bytes_; |
408 | 416 |
409 scoped_ptr<MockChunkDemuxerClient> client_; | 417 scoped_ptr<MockChunkDemuxerClient> client_; |
410 scoped_refptr<ChunkDemuxer> demuxer_; | 418 scoped_refptr<ChunkDemuxer> demuxer_; |
411 | 419 |
412 private: | 420 private: |
413 DISALLOW_COPY_AND_ASSIGN(ChunkDemuxerTest); | 421 DISALLOW_COPY_AND_ASSIGN(ChunkDemuxerTest); |
414 }; | 422 }; |
415 | 423 |
416 TEST_F(ChunkDemuxerTest, TestInit) { | 424 TEST_F(ChunkDemuxerTest, TestInit) { |
417 // Test no streams, audio-only, video-only, and audio & video scenarios, | 425 // Test no streams, audio-only, video-only, and audio & video scenarios, |
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1064 | 1072 |
1065 std::vector<std::string> codecs(1); | 1073 std::vector<std::string> codecs(1); |
1066 codecs[0] = "vp8"; | 1074 codecs[0] = "vp8"; |
1067 ASSERT_EQ(demuxer_->AddId(kSourceId, "video/webm", codecs), | 1075 ASSERT_EQ(demuxer_->AddId(kSourceId, "video/webm", codecs), |
1068 ChunkDemuxer::kOk); | 1076 ChunkDemuxer::kOk); |
1069 | 1077 |
1070 ASSERT_TRUE(AppendInfoTracks(true, true, false)); | 1078 ASSERT_TRUE(AppendInfoTracks(true, true, false)); |
1071 } | 1079 } |
1072 | 1080 |
1073 } // namespace media | 1081 } // namespace media |
OLD | NEW |