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

Side by Side Diff: media/formats/webm/webm_cluster_parser_unittest.cc

Issue 1242943003: Refactor WebMClusterParserTest parser creation for readability (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use explicit CreateParserX function names instead of overloads Created 5 years, 5 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <cstdlib> 6 #include <cstdlib>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "media/base/audio_decoder_config.h" 11 #include "media/base/audio_decoder_config.h"
12 #include "media/base/decrypt_config.h" 12 #include "media/base/decrypt_config.h"
13 #include "media/formats/webm/cluster_builder.h" 13 #include "media/formats/webm/cluster_builder.h"
14 #include "media/formats/webm/opus_packet_builder.h" 14 #include "media/formats/webm/opus_packet_builder.h"
15 #include "media/formats/webm/webm_cluster_parser.h" 15 #include "media/formats/webm/webm_cluster_parser.h"
16 #include "media/formats/webm/webm_constants.h" 16 #include "media/formats/webm/webm_constants.h"
17 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
19 19
20 using ::testing::InSequence; 20 using ::testing::InSequence;
21 using ::testing::Return; 21 using ::testing::Return;
22 using ::testing::_; 22 using ::testing::_;
23 23
24 namespace media { 24 namespace media {
25 25
26 typedef WebMTracksParser::TextTracks TextTracks; 26 typedef WebMTracksParser::TextTracks TextTracks;
27 27
28 namespace {
29
28 enum { 30 enum {
29 kTimecodeScale = 1000000, // Timecode scale for millisecond timestamps. 31 kTimecodeScale = 1000000, // Timecode scale for millisecond timestamps.
30 kAudioTrackNum = 1, 32 kAudioTrackNum = 1,
31 kVideoTrackNum = 2, 33 kVideoTrackNum = 2,
32 kTextTrackNum = 3, 34 kTextTrackNum = 3,
33 kTestAudioFrameDefaultDurationInMs = 13, 35 kTestAudioFrameDefaultDurationInMs = 13,
34 kTestVideoFrameDefaultDurationInMs = 17 36 kTestVideoFrameDefaultDurationInMs = 17
35 }; 37 };
36 38
37 // Test duration defaults must differ from parser estimation defaults to know 39 // Test duration defaults must differ from parser estimation defaults to know
(...skipping 18 matching lines...) Expand all
56 // parser verification. 58 // parser verification.
57 double duration; 59 double duration;
58 60
59 bool use_simple_block; 61 bool use_simple_block;
60 62
61 // Default data will be used if no data given. 63 // Default data will be used if no data given.
62 const uint8_t* data; 64 const uint8_t* data;
63 int data_length; 65 int data_length;
64 }; 66 };
65 67
66 static const BlockInfo kDefaultBlockInfo[] = { 68 const BlockInfo kDefaultBlockInfo[] = {
67 {kAudioTrackNum, 0, 23, true, NULL, 0}, 69 {kAudioTrackNum, 0, 23, true, NULL, 0},
68 {kAudioTrackNum, 23, 23, true, NULL, 0}, 70 {kAudioTrackNum, 23, 23, true, NULL, 0},
69 // Assumes not using DefaultDuration 71 // Assumes not using DefaultDuration
70 {kVideoTrackNum, 33, 34, true, NULL, 0}, 72 {kVideoTrackNum, 33, 34, true, NULL, 0},
71 {kAudioTrackNum, 46, 23, true, NULL, 0}, 73 {kAudioTrackNum, 46, 23, true, NULL, 0},
72 {kVideoTrackNum, 67, 33, false, NULL, 0}, 74 {kVideoTrackNum, 67, 33, false, NULL, 0},
73 {kAudioTrackNum, 69, 23, false, NULL, 0}, 75 {kAudioTrackNum, 69, 23, false, NULL, 0},
74 {kVideoTrackNum, 100, 33, false, NULL, 0}, 76 {kVideoTrackNum, 100, 33, false, NULL, 0},
75 }; 77 };
76 78
77 static const uint8_t kEncryptedFrame[] = { 79 const uint8_t kEncryptedFrame[] = {
78 0x01, // Block is encrypted 80 // Block is encrypted
79 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 // IV 81 0x01,
80 };
81 82
82 static scoped_ptr<Cluster> CreateCluster(int timecode, 83 // IV
83 const BlockInfo* block_info, 84 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
84 int block_count) { 85
86 // Helper that hard-codes some non-varying constructor parameters.
87 WebMClusterParser* CreateParserHelper(
88 base::TimeDelta audio_default_duration,
89 base::TimeDelta video_default_duration,
90 const WebMTracksParser::TextTracks& text_tracks,
91 const std::set<int64>& ignored_tracks,
92 const std::string& audio_encryption_key_id,
93 const std::string& video_encryption_key_id,
94 const AudioCodec audio_codec) {
95 return new WebMClusterParser(
96 kTimecodeScale, kAudioTrackNum, audio_default_duration, kVideoTrackNum,
97 video_default_duration, text_tracks, ignored_tracks,
98 audio_encryption_key_id, video_encryption_key_id, audio_codec,
99 new MediaLog());
100 }
101
102 // Create a default version of the parser for test.
103 WebMClusterParser* CreateDefaultParser() {
104 return CreateParserHelper(kNoTimestamp(), kNoTimestamp(), TextTracks(),
105 std::set<int64>(), std::string(), std::string(),
106 kUnknownAudioCodec);
107 }
108
109 // Create a parser for test with custom audio and video default durations, and
110 // optionally custom text tracks.
111 WebMClusterParser* CreateParserWithDefaultDurationsAndOptionalTextTracks(
112 base::TimeDelta audio_default_duration,
113 base::TimeDelta video_default_duration,
114 const WebMTracksParser::TextTracks& text_tracks = TextTracks()) {
115 return CreateParserHelper(audio_default_duration, video_default_duration,
116 text_tracks, std::set<int64>(), std::string(),
117 std::string(), kUnknownAudioCodec);
118 }
119
120 // Create a parser for test with custom ignored tracks.
121 WebMClusterParser* CreateParserWithIgnoredTracks(
122 std::set<int64>& ignored_tracks) {
123 return CreateParserHelper(kNoTimestamp(), kNoTimestamp(), TextTracks(),
124 ignored_tracks, std::string(), std::string(),
125 kUnknownAudioCodec);
126 }
127
128 // Create a parser for test with custom encryption key ids and audio codec.
129 WebMClusterParser* CreateParserWithKeyIdsAndAudioCodec(
130 const std::string& audio_encryption_key_id,
131 const std::string& video_encryption_key_id,
132 const AudioCodec audio_codec) {
133 return CreateParserHelper(kNoTimestamp(), kNoTimestamp(), TextTracks(),
134 std::set<int64>(), audio_encryption_key_id,
135 video_encryption_key_id, audio_codec);
136 }
137
138 scoped_ptr<Cluster> CreateCluster(int timecode,
139 const BlockInfo* block_info,
140 int block_count) {
85 ClusterBuilder cb; 141 ClusterBuilder cb;
86 cb.SetClusterTimecode(0); 142 cb.SetClusterTimecode(0);
87 143
88 uint8_t kDefaultBlockData[] = { 0x00 }; 144 uint8_t kDefaultBlockData[] = { 0x00 };
89 145
90 for (int i = 0; i < block_count; i++) { 146 for (int i = 0; i < block_count; i++) {
91 const uint8_t* data; 147 const uint8_t* data;
92 int data_length; 148 int data_length;
93 if (block_info[i].data != NULL) { 149 if (block_info[i].data != NULL) {
94 data = block_info[i].data; 150 data = block_info[i].data;
(...skipping 19 matching lines...) Expand all
114 170
115 cb.AddBlockGroup(block_info[i].track_num, block_info[i].timestamp, 171 cb.AddBlockGroup(block_info[i].track_num, block_info[i].timestamp,
116 block_info[i].duration, 0, data, data_length); 172 block_info[i].duration, 0, data, data_length);
117 } 173 }
118 174
119 return cb.Finish(); 175 return cb.Finish();
120 } 176 }
121 177
122 // Creates a Cluster with one encrypted Block. |bytes_to_write| is number of 178 // Creates a Cluster with one encrypted Block. |bytes_to_write| is number of
123 // bytes of the encrypted frame to write. 179 // bytes of the encrypted frame to write.
124 static scoped_ptr<Cluster> CreateEncryptedCluster(int bytes_to_write) { 180 scoped_ptr<Cluster> CreateEncryptedCluster(int bytes_to_write) {
125 CHECK_GT(bytes_to_write, 0); 181 CHECK_GT(bytes_to_write, 0);
126 CHECK_LE(bytes_to_write, static_cast<int>(sizeof(kEncryptedFrame))); 182 CHECK_LE(bytes_to_write, static_cast<int>(sizeof(kEncryptedFrame)));
127 183
128 ClusterBuilder cb; 184 ClusterBuilder cb;
129 cb.SetClusterTimecode(0); 185 cb.SetClusterTimecode(0);
130 cb.AddSimpleBlock(kVideoTrackNum, 0, 0, kEncryptedFrame, bytes_to_write); 186 cb.AddSimpleBlock(kVideoTrackNum, 0, 0, kEncryptedFrame, bytes_to_write);
131 return cb.Finish(); 187 return cb.Finish();
132 } 188 }
133 189
134 static bool VerifyBuffers(const WebMClusterParser::BufferQueue& audio_buffers, 190 bool VerifyBuffers(const WebMClusterParser::BufferQueue& audio_buffers,
135 const WebMClusterParser::BufferQueue& video_buffers, 191 const WebMClusterParser::BufferQueue& video_buffers,
136 const WebMClusterParser::BufferQueue& text_buffers, 192 const WebMClusterParser::BufferQueue& text_buffers,
137 const BlockInfo* block_info, 193 const BlockInfo* block_info,
138 int block_count) { 194 int block_count) {
139 int buffer_count = audio_buffers.size() + video_buffers.size() + 195 int buffer_count = audio_buffers.size() + video_buffers.size() +
140 text_buffers.size(); 196 text_buffers.size();
141 if (block_count != buffer_count) { 197 if (block_count != buffer_count) {
142 DVLOG(1) << __FUNCTION__ << " : block_count (" << block_count 198 DVLOG(1) << __FUNCTION__ << " : block_count (" << block_count
143 << ") mismatches buffer_count (" << buffer_count << ")"; 199 << ") mismatches buffer_count (" << buffer_count << ")";
144 return false; 200 return false;
145 } 201 }
146 202
147 size_t audio_offset = 0; 203 size_t audio_offset = 0;
148 size_t video_offset = 0; 204 size_t video_offset = 0;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 EXPECT_EQ(block_info[i].timestamp, buffer->timestamp().InMilliseconds()); 237 EXPECT_EQ(block_info[i].timestamp, buffer->timestamp().InMilliseconds());
182 EXPECT_EQ(std::abs(block_info[i].duration), 238 EXPECT_EQ(std::abs(block_info[i].duration),
183 buffer->duration().InMillisecondsF()); 239 buffer->duration().InMillisecondsF());
184 EXPECT_EQ(expected_type, buffer->type()); 240 EXPECT_EQ(expected_type, buffer->type());
185 EXPECT_EQ(block_info[i].track_num, buffer->track_id()); 241 EXPECT_EQ(block_info[i].track_num, buffer->track_id());
186 } 242 }
187 243
188 return true; 244 return true;
189 } 245 }
190 246
191 static bool VerifyBuffers(const scoped_ptr<WebMClusterParser>& parser, 247 bool VerifyBuffers(const scoped_ptr<WebMClusterParser>& parser,
192 const BlockInfo* block_info, 248 const BlockInfo* block_info,
193 int block_count) { 249 int block_count) {
194 const WebMClusterParser::TextBufferQueueMap& text_map = 250 const WebMClusterParser::TextBufferQueueMap& text_map =
195 parser->GetTextBuffers(); 251 parser->GetTextBuffers();
196 const WebMClusterParser::BufferQueue* text_buffers; 252 const WebMClusterParser::BufferQueue* text_buffers;
197 const WebMClusterParser::BufferQueue no_text_buffers; 253 const WebMClusterParser::BufferQueue no_text_buffers;
198 if (!text_map.empty()) 254 if (!text_map.empty())
199 text_buffers = &(text_map.rbegin()->second); 255 text_buffers = &(text_map.rbegin()->second);
200 else 256 else
201 text_buffers = &no_text_buffers; 257 text_buffers = &no_text_buffers;
202 258
203 return VerifyBuffers(parser->GetAudioBuffers(), 259 return VerifyBuffers(parser->GetAudioBuffers(),
204 parser->GetVideoBuffers(), 260 parser->GetVideoBuffers(),
205 *text_buffers, 261 *text_buffers,
206 block_info, 262 block_info,
207 block_count); 263 block_count);
208 } 264 }
209 265
210 static bool VerifyTextBuffers( 266 bool VerifyTextBuffers(const scoped_ptr<WebMClusterParser>& parser,
211 const scoped_ptr<WebMClusterParser>& parser, 267 const BlockInfo* block_info_ptr,
212 const BlockInfo* block_info_ptr, 268 int block_count,
213 int block_count, 269 int text_track_num,
214 int text_track_num, 270 const WebMClusterParser::BufferQueue& text_buffers) {
215 const WebMClusterParser::BufferQueue& text_buffers) {
216 const BlockInfo* const block_info_end = block_info_ptr + block_count; 271 const BlockInfo* const block_info_end = block_info_ptr + block_count;
217 272
218 typedef WebMClusterParser::BufferQueue::const_iterator TextBufferIter; 273 typedef WebMClusterParser::BufferQueue::const_iterator TextBufferIter;
219 TextBufferIter buffer_iter = text_buffers.begin(); 274 TextBufferIter buffer_iter = text_buffers.begin();
220 const TextBufferIter buffer_end = text_buffers.end(); 275 const TextBufferIter buffer_end = text_buffers.end();
221 276
222 while (block_info_ptr != block_info_end) { 277 while (block_info_ptr != block_info_end) {
223 const BlockInfo& block_info = *block_info_ptr++; 278 const BlockInfo& block_info = *block_info_ptr++;
224 279
225 if (block_info.track_num != text_track_num) 280 if (block_info.track_num != text_track_num)
226 continue; 281 continue;
227 282
228 EXPECT_FALSE(block_info.use_simple_block); 283 EXPECT_FALSE(block_info.use_simple_block);
229 EXPECT_FALSE(buffer_iter == buffer_end); 284 EXPECT_FALSE(buffer_iter == buffer_end);
230 285
231 const scoped_refptr<StreamParserBuffer> buffer = *buffer_iter++; 286 const scoped_refptr<StreamParserBuffer> buffer = *buffer_iter++;
232 EXPECT_EQ(block_info.timestamp, buffer->timestamp().InMilliseconds()); 287 EXPECT_EQ(block_info.timestamp, buffer->timestamp().InMilliseconds());
233 EXPECT_EQ(std::abs(block_info.duration), 288 EXPECT_EQ(std::abs(block_info.duration),
234 buffer->duration().InMillisecondsF()); 289 buffer->duration().InMillisecondsF());
235 EXPECT_EQ(DemuxerStream::TEXT, buffer->type()); 290 EXPECT_EQ(DemuxerStream::TEXT, buffer->type());
236 EXPECT_EQ(text_track_num, buffer->track_id()); 291 EXPECT_EQ(text_track_num, buffer->track_id());
237 } 292 }
238 293
239 EXPECT_TRUE(buffer_iter == buffer_end); 294 EXPECT_TRUE(buffer_iter == buffer_end);
240 return true; 295 return true;
241 } 296 }
242 297
243 static void VerifyEncryptedBuffer( 298 void VerifyEncryptedBuffer(scoped_refptr<StreamParserBuffer> buffer) {
244 scoped_refptr<StreamParserBuffer> buffer) {
245 EXPECT_TRUE(buffer->decrypt_config()); 299 EXPECT_TRUE(buffer->decrypt_config());
246 EXPECT_EQ(static_cast<unsigned long>(DecryptConfig::kDecryptionKeySize), 300 EXPECT_EQ(static_cast<unsigned long>(DecryptConfig::kDecryptionKeySize),
247 buffer->decrypt_config()->iv().length()); 301 buffer->decrypt_config()->iv().length());
248 } 302 }
249 303
250 static void AppendToEnd(const WebMClusterParser::BufferQueue& src, 304 void AppendToEnd(const WebMClusterParser::BufferQueue& src,
251 WebMClusterParser::BufferQueue* dest) { 305 WebMClusterParser::BufferQueue* dest) {
252 for (WebMClusterParser::BufferQueue::const_iterator itr = src.begin(); 306 for (WebMClusterParser::BufferQueue::const_iterator itr = src.begin();
253 itr != src.end(); ++itr) { 307 itr != src.end(); ++itr) {
254 dest->push_back(*itr); 308 dest->push_back(*itr);
255 } 309 }
256 } 310 }
257 311
312 } // namespace
313
258 class WebMClusterParserTest : public testing::Test { 314 class WebMClusterParserTest : public testing::Test {
259 public: 315 public:
260 WebMClusterParserTest() 316 WebMClusterParserTest() : parser_(CreateDefaultParser()) {}
261 : parser_(new WebMClusterParser(kTimecodeScale,
262 kAudioTrackNum,
263 kNoTimestamp(),
264 kVideoTrackNum,
265 kNoTimestamp(),
266 TextTracks(),
267 std::set<int64>(),
268 std::string(),
269 std::string(),
270 kUnknownAudioCodec,
271 new MediaLog())) {}
272 317
273 protected: 318 protected:
274 void ResetParserToHaveDefaultDurations() { 319 void ResetParserToHaveDefaultDurations() {
275 base::TimeDelta default_audio_duration = base::TimeDelta::FromMilliseconds( 320 base::TimeDelta default_audio_duration = base::TimeDelta::FromMilliseconds(
276 kTestAudioFrameDefaultDurationInMs); 321 kTestAudioFrameDefaultDurationInMs);
277 base::TimeDelta default_video_duration = base::TimeDelta::FromMilliseconds( 322 base::TimeDelta default_video_duration = base::TimeDelta::FromMilliseconds(
278 kTestVideoFrameDefaultDurationInMs); 323 kTestVideoFrameDefaultDurationInMs);
279 ASSERT_GE(default_audio_duration, base::TimeDelta()); 324 ASSERT_GE(default_audio_duration, base::TimeDelta());
280 ASSERT_GE(default_video_duration, base::TimeDelta()); 325 ASSERT_GE(default_video_duration, base::TimeDelta());
281 ASSERT_NE(kNoTimestamp(), default_audio_duration); 326 ASSERT_NE(kNoTimestamp(), default_audio_duration);
282 ASSERT_NE(kNoTimestamp(), default_video_duration); 327 ASSERT_NE(kNoTimestamp(), default_video_duration);
283 328
284 parser_.reset(new WebMClusterParser( 329 parser_.reset(CreateParserWithDefaultDurationsAndOptionalTextTracks(
285 kTimecodeScale, kAudioTrackNum, default_audio_duration, kVideoTrackNum, 330 default_audio_duration, default_video_duration));
286 default_video_duration, TextTracks(), std::set<int64>(), std::string(),
287 std::string(), kUnknownAudioCodec, new MediaLog()));
288 } 331 }
289 332
290 scoped_ptr<WebMClusterParser> parser_; 333 scoped_ptr<WebMClusterParser> parser_;
291 334
292 private: 335 private:
293 DISALLOW_COPY_AND_ASSIGN(WebMClusterParserTest); 336 DISALLOW_COPY_AND_ASSIGN(WebMClusterParserTest);
294 }; 337 };
295 338
296 TEST_F(WebMClusterParserTest, HeldBackBufferHoldsBackAllTracks) { 339 TEST_F(WebMClusterParserTest, HeldBackBufferHoldsBackAllTracks) {
297 // If a buffer is missing duration and is being held back, then all other 340 // If a buffer is missing duration and is being held back, then all other
298 // tracks' buffers that have same or higher (decode) timestamp should be held 341 // tracks' buffers that have same or higher (decode) timestamp should be held
299 // back too to keep the timestamps emitted for a cluster monotonically 342 // back too to keep the timestamps emitted for a cluster monotonically
300 // non-decreasing and in same order as parsed. 343 // non-decreasing and in same order as parsed.
301 InSequence s; 344 InSequence s;
302 345
303 // Reset the parser to have 3 tracks: text, video (no default frame duration), 346 // Reset the parser to have 3 tracks: text, video (no default frame duration),
304 // and audio (with a default frame duration). 347 // and audio (with a default frame duration).
305 TextTracks text_tracks; 348 TextTracks text_tracks;
306 text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum), 349 text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum),
307 TextTrackConfig(kTextSubtitles, "", "", 350 TextTrackConfig(kTextSubtitles, "", "",
308 ""))); 351 "")));
309 base::TimeDelta default_audio_duration = 352 base::TimeDelta default_audio_duration =
310 base::TimeDelta::FromMilliseconds(kTestAudioFrameDefaultDurationInMs); 353 base::TimeDelta::FromMilliseconds(kTestAudioFrameDefaultDurationInMs);
311 ASSERT_GE(default_audio_duration, base::TimeDelta()); 354 ASSERT_GE(default_audio_duration, base::TimeDelta());
312 ASSERT_NE(kNoTimestamp(), default_audio_duration); 355 ASSERT_NE(kNoTimestamp(), default_audio_duration);
313 parser_.reset(new WebMClusterParser( 356 parser_.reset(CreateParserWithDefaultDurationsAndOptionalTextTracks(
314 kTimecodeScale, kAudioTrackNum, default_audio_duration, kVideoTrackNum, 357 default_audio_duration, kNoTimestamp(), text_tracks));
315 kNoTimestamp(), text_tracks, std::set<int64>(), std::string(),
316 std::string(), kUnknownAudioCodec, new MediaLog()));
317 358
318 const BlockInfo kBlockInfo[] = { 359 const BlockInfo kBlockInfo[] = {
319 {kVideoTrackNum, 0, 33, true, NULL, 0}, 360 {kVideoTrackNum, 0, 33, true, NULL, 0},
320 {kAudioTrackNum, 0, 23, false, NULL, 0}, 361 {kAudioTrackNum, 0, 23, false, NULL, 0},
321 {kTextTrackNum, 10, 42, false, NULL, 0}, 362 {kTextTrackNum, 10, 42, false, NULL, 0},
322 {kAudioTrackNum, 23, kTestAudioFrameDefaultDurationInMs, true, NULL, 0}, 363 {kAudioTrackNum, 23, kTestAudioFrameDefaultDurationInMs, true, NULL, 0},
323 {kVideoTrackNum, 33, 33, true, NULL, 0}, 364 {kVideoTrackNum, 33, 33, true, NULL, 0},
324 {kAudioTrackNum, 36, kTestAudioFrameDefaultDurationInMs, true, NULL, 0}, 365 {kAudioTrackNum, 36, kTestAudioFrameDefaultDurationInMs, true, NULL, 0},
325 {kVideoTrackNum, 66, 33, true, NULL, 0}, 366 {kVideoTrackNum, 66, 33, true, NULL, 0},
326 {kAudioTrackNum, 70, kTestAudioFrameDefaultDurationInMs, true, NULL, 0}, 367 {kAudioTrackNum, 70, kTestAudioFrameDefaultDurationInMs, true, NULL, 0},
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 530
490 int result = parser_->Parse(cluster->data(), cluster->size()); 531 int result = parser_->Parse(cluster->data(), cluster->size());
491 EXPECT_EQ(cluster->size(), result); 532 EXPECT_EQ(cluster->size(), result);
492 ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count)); 533 ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count));
493 } 534 }
494 535
495 TEST_F(WebMClusterParserTest, IgnoredTracks) { 536 TEST_F(WebMClusterParserTest, IgnoredTracks) {
496 std::set<int64> ignored_tracks; 537 std::set<int64> ignored_tracks;
497 ignored_tracks.insert(kTextTrackNum); 538 ignored_tracks.insert(kTextTrackNum);
498 539
499 parser_.reset(new WebMClusterParser( 540 parser_.reset(CreateParserWithIgnoredTracks(ignored_tracks));
500 kTimecodeScale, kAudioTrackNum, kNoTimestamp(), kVideoTrackNum,
501 kNoTimestamp(), TextTracks(), ignored_tracks, std::string(),
502 std::string(), kUnknownAudioCodec, new MediaLog()));
503 541
504 const BlockInfo kInputBlockInfo[] = { 542 const BlockInfo kInputBlockInfo[] = {
505 {kAudioTrackNum, 0, 23, true, NULL, 0}, 543 {kAudioTrackNum, 0, 23, true, NULL, 0},
506 {kAudioTrackNum, 23, 23, true, NULL, 0}, 544 {kAudioTrackNum, 23, 23, true, NULL, 0},
507 {kVideoTrackNum, 33, 34, true, NULL, 0}, 545 {kVideoTrackNum, 33, 34, true, NULL, 0},
508 {kTextTrackNum, 33, 99, true, NULL, 0}, 546 {kTextTrackNum, 33, 99, true, NULL, 0},
509 {kAudioTrackNum, 46, 23, true, NULL, 0}, 547 {kAudioTrackNum, 46, 23, true, NULL, 0},
510 {kVideoTrackNum, 67, 34, true, NULL, 0}, 548 {kVideoTrackNum, 67, 34, true, NULL, 0},
511 }; 549 };
512 int input_block_count = arraysize(kInputBlockInfo); 550 int input_block_count = arraysize(kInputBlockInfo);
(...skipping 15 matching lines...) Expand all
528 ASSERT_TRUE(VerifyBuffers(parser_, kOutputBlockInfo, output_block_count)); 566 ASSERT_TRUE(VerifyBuffers(parser_, kOutputBlockInfo, output_block_count));
529 } 567 }
530 568
531 TEST_F(WebMClusterParserTest, ParseTextTracks) { 569 TEST_F(WebMClusterParserTest, ParseTextTracks) {
532 TextTracks text_tracks; 570 TextTracks text_tracks;
533 571
534 text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum), 572 text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum),
535 TextTrackConfig(kTextSubtitles, "", "", 573 TextTrackConfig(kTextSubtitles, "", "",
536 ""))); 574 "")));
537 575
538 parser_.reset(new WebMClusterParser( 576 parser_.reset(CreateParserWithDefaultDurationsAndOptionalTextTracks(
539 kTimecodeScale, kAudioTrackNum, kNoTimestamp(), kVideoTrackNum, 577 kNoTimestamp(), kNoTimestamp(), text_tracks));
540 kNoTimestamp(), text_tracks, std::set<int64>(), std::string(),
541 std::string(), kUnknownAudioCodec, new MediaLog()));
542 578
543 const BlockInfo kInputBlockInfo[] = { 579 const BlockInfo kInputBlockInfo[] = {
544 {kAudioTrackNum, 0, 23, true, NULL, 0}, 580 {kAudioTrackNum, 0, 23, true, NULL, 0},
545 {kAudioTrackNum, 23, 23, true, NULL, 0}, 581 {kAudioTrackNum, 23, 23, true, NULL, 0},
546 {kVideoTrackNum, 33, 34, true, NULL, 0}, 582 {kVideoTrackNum, 33, 34, true, NULL, 0},
547 {kTextTrackNum, 33, 42, false, NULL, 0}, 583 {kTextTrackNum, 33, 42, false, NULL, 0},
548 {kAudioTrackNum, 46, 23, true, NULL, 0}, 584 {kAudioTrackNum, 46, 23, true, NULL, 0},
549 {kTextTrackNum, 55, 44, false, NULL, 0}, 585 {kTextTrackNum, 55, 44, false, NULL, 0},
550 {kVideoTrackNum, 67, 34, true, NULL, 0}, 586 {kVideoTrackNum, 67, 34, true, NULL, 0},
551 }; 587 };
552 int input_block_count = arraysize(kInputBlockInfo); 588 int input_block_count = arraysize(kInputBlockInfo);
553 589
554 scoped_ptr<Cluster> cluster( 590 scoped_ptr<Cluster> cluster(
555 CreateCluster(0, kInputBlockInfo, input_block_count)); 591 CreateCluster(0, kInputBlockInfo, input_block_count));
556 592
557 int result = parser_->Parse(cluster->data(), cluster->size()); 593 int result = parser_->Parse(cluster->data(), cluster->size());
558 EXPECT_EQ(cluster->size(), result); 594 EXPECT_EQ(cluster->size(), result);
559 ASSERT_TRUE(VerifyBuffers(parser_, kInputBlockInfo, input_block_count)); 595 ASSERT_TRUE(VerifyBuffers(parser_, kInputBlockInfo, input_block_count));
560 } 596 }
561 597
562 TEST_F(WebMClusterParserTest, TextTracksSimpleBlock) { 598 TEST_F(WebMClusterParserTest, TextTracksSimpleBlock) {
563 TextTracks text_tracks; 599 TextTracks text_tracks;
564 600
565 text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum), 601 text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum),
566 TextTrackConfig(kTextSubtitles, "", "", 602 TextTrackConfig(kTextSubtitles, "", "",
567 ""))); 603 "")));
568 604
569 parser_.reset(new WebMClusterParser( 605 parser_.reset(CreateParserWithDefaultDurationsAndOptionalTextTracks(
570 kTimecodeScale, kAudioTrackNum, kNoTimestamp(), kVideoTrackNum, 606 kNoTimestamp(), kNoTimestamp(), text_tracks));
571 kNoTimestamp(), text_tracks, std::set<int64>(), std::string(),
572 std::string(), kUnknownAudioCodec, new MediaLog()));
573 607
574 const BlockInfo kInputBlockInfo[] = { 608 const BlockInfo kInputBlockInfo[] = {
575 { kTextTrackNum, 33, 42, true }, 609 { kTextTrackNum, 33, 42, true },
576 }; 610 };
577 int input_block_count = arraysize(kInputBlockInfo); 611 int input_block_count = arraysize(kInputBlockInfo);
578 612
579 scoped_ptr<Cluster> cluster( 613 scoped_ptr<Cluster> cluster(
580 CreateCluster(0, kInputBlockInfo, input_block_count)); 614 CreateCluster(0, kInputBlockInfo, input_block_count));
581 615
582 int result = parser_->Parse(cluster->data(), cluster->size()); 616 int result = parser_->Parse(cluster->data(), cluster->size());
583 EXPECT_LT(result, 0); 617 EXPECT_LT(result, 0);
584 } 618 }
585 619
586 TEST_F(WebMClusterParserTest, ParseMultipleTextTracks) { 620 TEST_F(WebMClusterParserTest, ParseMultipleTextTracks) {
587 TextTracks text_tracks; 621 TextTracks text_tracks;
588 622
589 const int kSubtitleTextTrackNum = kTextTrackNum; 623 const int kSubtitleTextTrackNum = kTextTrackNum;
590 const int kCaptionTextTrackNum = kTextTrackNum + 1; 624 const int kCaptionTextTrackNum = kTextTrackNum + 1;
591 625
592 text_tracks.insert(std::make_pair(TextTracks::key_type(kSubtitleTextTrackNum), 626 text_tracks.insert(std::make_pair(TextTracks::key_type(kSubtitleTextTrackNum),
593 TextTrackConfig(kTextSubtitles, "", "", 627 TextTrackConfig(kTextSubtitles, "", "",
594 ""))); 628 "")));
595 629
596 text_tracks.insert(std::make_pair(TextTracks::key_type(kCaptionTextTrackNum), 630 text_tracks.insert(std::make_pair(TextTracks::key_type(kCaptionTextTrackNum),
597 TextTrackConfig(kTextCaptions, "", "", 631 TextTrackConfig(kTextCaptions, "", "",
598 ""))); 632 "")));
599 633
600 parser_.reset(new WebMClusterParser( 634 parser_.reset(CreateParserWithDefaultDurationsAndOptionalTextTracks(
601 kTimecodeScale, kAudioTrackNum, kNoTimestamp(), kVideoTrackNum, 635 kNoTimestamp(), kNoTimestamp(), text_tracks));
602 kNoTimestamp(), text_tracks, std::set<int64>(), std::string(),
603 std::string(), kUnknownAudioCodec, new MediaLog()));
604 636
605 const BlockInfo kInputBlockInfo[] = { 637 const BlockInfo kInputBlockInfo[] = {
606 {kAudioTrackNum, 0, 23, true, NULL, 0}, 638 {kAudioTrackNum, 0, 23, true, NULL, 0},
607 {kAudioTrackNum, 23, 23, true, NULL, 0}, 639 {kAudioTrackNum, 23, 23, true, NULL, 0},
608 {kVideoTrackNum, 33, 34, true, NULL, 0}, 640 {kVideoTrackNum, 33, 34, true, NULL, 0},
609 {kSubtitleTextTrackNum, 33, 42, false, NULL, 0}, 641 {kSubtitleTextTrackNum, 33, 42, false, NULL, 0},
610 {kAudioTrackNum, 46, 23, true, NULL, 0}, 642 {kAudioTrackNum, 46, 23, true, NULL, 0},
611 {kCaptionTextTrackNum, 55, 44, false, NULL, 0}, 643 {kCaptionTextTrackNum, 55, 44, false, NULL, 0},
612 {kVideoTrackNum, 67, 34, true, NULL, 0}, 644 {kVideoTrackNum, 67, 34, true, NULL, 0},
613 {kSubtitleTextTrackNum, 67, 33, false, NULL, 0}, 645 {kSubtitleTextTrackNum, 67, 33, false, NULL, 0},
(...skipping 16 matching lines...) Expand all
630 text_tracks.find(itr->first); 662 text_tracks.find(itr->first);
631 ASSERT_TRUE(find_result != text_tracks.end()); 663 ASSERT_TRUE(find_result != text_tracks.end());
632 ASSERT_TRUE(VerifyTextBuffers(parser_, kInputBlockInfo, input_block_count, 664 ASSERT_TRUE(VerifyTextBuffers(parser_, kInputBlockInfo, input_block_count,
633 itr->first, itr->second)); 665 itr->first, itr->second));
634 } 666 }
635 } 667 }
636 668
637 TEST_F(WebMClusterParserTest, ParseEncryptedBlock) { 669 TEST_F(WebMClusterParserTest, ParseEncryptedBlock) {
638 scoped_ptr<Cluster> cluster(CreateEncryptedCluster(sizeof(kEncryptedFrame))); 670 scoped_ptr<Cluster> cluster(CreateEncryptedCluster(sizeof(kEncryptedFrame)));
639 671
640 parser_.reset(new WebMClusterParser( 672 parser_.reset(CreateParserWithKeyIdsAndAudioCodec(
641 kTimecodeScale, kAudioTrackNum, kNoTimestamp(), kVideoTrackNum, 673 std::string(), "video_key_id", kUnknownAudioCodec));
642 kNoTimestamp(), TextTracks(), std::set<int64>(), std::string(),
643 "video_key_id", kUnknownAudioCodec, new MediaLog()));
644 int result = parser_->Parse(cluster->data(), cluster->size()); 674 int result = parser_->Parse(cluster->data(), cluster->size());
645 EXPECT_EQ(cluster->size(), result); 675 EXPECT_EQ(cluster->size(), result);
646 ASSERT_EQ(1UL, parser_->GetVideoBuffers().size()); 676 ASSERT_EQ(1UL, parser_->GetVideoBuffers().size());
647 scoped_refptr<StreamParserBuffer> buffer = parser_->GetVideoBuffers()[0]; 677 scoped_refptr<StreamParserBuffer> buffer = parser_->GetVideoBuffers()[0];
648 VerifyEncryptedBuffer(buffer); 678 VerifyEncryptedBuffer(buffer);
649 } 679 }
650 680
651 TEST_F(WebMClusterParserTest, ParseBadEncryptedBlock) { 681 TEST_F(WebMClusterParserTest, ParseBadEncryptedBlock) {
652 scoped_ptr<Cluster> cluster( 682 scoped_ptr<Cluster> cluster(
653 CreateEncryptedCluster(sizeof(kEncryptedFrame) - 1)); 683 CreateEncryptedCluster(sizeof(kEncryptedFrame) - 1));
654 684
655 parser_.reset(new WebMClusterParser( 685 parser_.reset(CreateParserWithKeyIdsAndAudioCodec(
656 kTimecodeScale, kAudioTrackNum, kNoTimestamp(), kVideoTrackNum, 686 std::string(), "video_key_id", kUnknownAudioCodec));
657 kNoTimestamp(), TextTracks(), std::set<int64>(), std::string(),
658 "video_key_id", kUnknownAudioCodec, new MediaLog()));
659 int result = parser_->Parse(cluster->data(), cluster->size()); 687 int result = parser_->Parse(cluster->data(), cluster->size());
660 EXPECT_EQ(-1, result); 688 EXPECT_EQ(-1, result);
661 } 689 }
662 690
663 TEST_F(WebMClusterParserTest, ParseInvalidZeroSizedCluster) { 691 TEST_F(WebMClusterParserTest, ParseInvalidZeroSizedCluster) {
664 const uint8_t kBuffer[] = { 692 const uint8_t kBuffer[] = {
665 0x1F, 0x43, 0xB6, 0x75, 0x80, // CLUSTER (size = 0) 693 0x1F, 0x43, 0xB6, 0x75, 0x80, // CLUSTER (size = 0)
666 }; 694 };
667 695
668 EXPECT_EQ(-1, parser_->Parse(kBuffer, sizeof(kBuffer))); 696 EXPECT_EQ(-1, parser_->Parse(kBuffer, sizeof(kBuffer)));
669 } 697 }
670 698
671 TEST_F(WebMClusterParserTest, ParseInvalidUnknownButActuallyZeroSizedCluster) { 699 TEST_F(WebMClusterParserTest, ParseInvalidUnknownButActuallyZeroSizedCluster) {
672 const uint8_t kBuffer[] = { 700 const uint8_t kBuffer[] = {
673 0x1F, 0x43, 0xB6, 0x75, 0xFF, // CLUSTER (size = "unknown") 701 0x1F, 0x43, 0xB6, 0x75, 0xFF, // CLUSTER (size = "unknown")
674 0x1F, 0x43, 0xB6, 0x75, 0x85, // CLUSTER (size = 5) 702 0x1F, 0x43, 0xB6, 0x75, 0x85, // CLUSTER (size = 5)
675 }; 703 };
676 704
677 EXPECT_EQ(-1, parser_->Parse(kBuffer, sizeof(kBuffer))); 705 EXPECT_EQ(-1, parser_->Parse(kBuffer, sizeof(kBuffer)));
678 } 706 }
679 707
680 TEST_F(WebMClusterParserTest, ParseInvalidTextBlockGroupWithoutDuration) { 708 TEST_F(WebMClusterParserTest, ParseInvalidTextBlockGroupWithoutDuration) {
681 // Text track frames must have explicitly specified BlockGroup BlockDurations. 709 // Text track frames must have explicitly specified BlockGroup BlockDurations.
682 TextTracks text_tracks; 710 TextTracks text_tracks;
683 711
684 text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum), 712 text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum),
685 TextTrackConfig(kTextSubtitles, "", "", 713 TextTrackConfig(kTextSubtitles, "", "",
686 ""))); 714 "")));
687 715
688 parser_.reset(new WebMClusterParser( 716 parser_.reset(CreateParserWithDefaultDurationsAndOptionalTextTracks(
689 kTimecodeScale, kAudioTrackNum, kNoTimestamp(), kVideoTrackNum, 717 kNoTimestamp(), kNoTimestamp(), text_tracks));
690 kNoTimestamp(), text_tracks, std::set<int64>(), std::string(),
691 std::string(), kUnknownAudioCodec, new MediaLog()));
692 718
693 const BlockInfo kBlockInfo[] = { 719 const BlockInfo kBlockInfo[] = {
694 { kTextTrackNum, 33, -42, false }, 720 { kTextTrackNum, 33, -42, false },
695 }; 721 };
696 int block_count = arraysize(kBlockInfo); 722 int block_count = arraysize(kBlockInfo);
697 scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count)); 723 scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
698 int result = parser_->Parse(cluster->data(), cluster->size()); 724 int result = parser_->Parse(cluster->data(), cluster->size());
699 EXPECT_LT(result, 0); 725 EXPECT_LT(result, 0);
700 } 726 }
701 727
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
929 955
930 int block_count = arraysize(kBlockInfo); 956 int block_count = arraysize(kBlockInfo);
931 scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count)); 957 scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
932 int result = parser_->Parse(cluster->data(), cluster->size()); 958 int result = parser_->Parse(cluster->data(), cluster->size());
933 EXPECT_EQ(cluster->size(), result); 959 EXPECT_EQ(cluster->size(), result);
934 ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count)); 960 ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count));
935 } 961 }
936 962
937 TEST_F(WebMClusterParserTest, ReadOpusDurationsSimpleBlockAtEndOfCluster) { 963 TEST_F(WebMClusterParserTest, ReadOpusDurationsSimpleBlockAtEndOfCluster) {
938 // Reset parser to expect Opus codec audio. 964 // Reset parser to expect Opus codec audio.
939 parser_.reset(new WebMClusterParser( 965 parser_.reset(CreateParserWithKeyIdsAndAudioCodec(std::string(),
940 kTimecodeScale, kAudioTrackNum, kNoTimestamp(), kVideoTrackNum, 966 std::string(), kCodecOpus));
941 kNoTimestamp(), TextTracks(), std::set<int64>(), std::string(),
942 std::string(), kCodecOpus, new MediaLog()));
943 967
944 int loop_count = 0; 968 int loop_count = 0;
945 for (const auto* packet_ptr : BuildAllOpusPackets()) { 969 for (const auto* packet_ptr : BuildAllOpusPackets()) {
946 const BlockInfo kBlockInfo[] = {{kAudioTrackNum, 970 const BlockInfo kBlockInfo[] = {{kAudioTrackNum,
947 0, 971 0,
948 packet_ptr->duration_ms(), 972 packet_ptr->duration_ms(),
949 true, // Make it a SimpleBlock. 973 true, // Make it a SimpleBlock.
950 packet_ptr->data(), 974 packet_ptr->data(),
951 packet_ptr->size()}}; 975 packet_ptr->size()}};
952 976
953 int block_count = arraysize(kBlockInfo); 977 int block_count = arraysize(kBlockInfo);
954 scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count)); 978 scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
955 int result = parser_->Parse(cluster->data(), cluster->size()); 979 int result = parser_->Parse(cluster->data(), cluster->size());
956 EXPECT_EQ(cluster->size(), result); 980 EXPECT_EQ(cluster->size(), result);
957 ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count)); 981 ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count));
958 loop_count++; 982 loop_count++;
959 } 983 }
960 984
961 // Test should minimally cover all the combinations of config and frame count. 985 // Test should minimally cover all the combinations of config and frame count.
962 ASSERT_GE(loop_count, kNumPossibleOpusConfigs * kMaxOpusPacketFrameCount); 986 ASSERT_GE(loop_count, kNumPossibleOpusConfigs * kMaxOpusPacketFrameCount);
963 } 987 }
964 988
965 TEST_F(WebMClusterParserTest, PreferOpusDurationsOverBlockDurations) { 989 TEST_F(WebMClusterParserTest, PreferOpusDurationsOverBlockDurations) {
966 // Reset parser to expect Opus codec audio. 990 // Reset parser to expect Opus codec audio.
967 parser_.reset(new WebMClusterParser( 991 parser_.reset(CreateParserWithKeyIdsAndAudioCodec(std::string(),
968 kTimecodeScale, kAudioTrackNum, kNoTimestamp(), kVideoTrackNum, 992 std::string(), kCodecOpus));
969 kNoTimestamp(), TextTracks(), std::set<int64>(), std::string(),
970 std::string(), kCodecOpus, new MediaLog()));
971 993
972 int loop_count = 0; 994 int loop_count = 0;
973 for (const auto* packet_ptr : BuildAllOpusPackets()) { 995 for (const auto* packet_ptr : BuildAllOpusPackets()) {
974 // Setting BlockDuration != Opus duration to see which one the parser uses. 996 // Setting BlockDuration != Opus duration to see which one the parser uses.
975 int block_duration_ms = packet_ptr->duration_ms() + 10; 997 int block_duration_ms = packet_ptr->duration_ms() + 10;
976 998
977 BlockInfo block_infos[] = {{kAudioTrackNum, 999 BlockInfo block_infos[] = {{kAudioTrackNum,
978 0, 1000 0,
979 block_duration_ms, 1001 block_duration_ms,
980 false, // Not a SimpleBlock. 1002 false, // Not a SimpleBlock.
(...skipping 18 matching lines...) Expand all
999 } 1021 }
1000 1022
1001 // Tests that BlockDuration is used to set duration on buffer rather than 1023 // Tests that BlockDuration is used to set duration on buffer rather than
1002 // encoded duration in Opus packet (or hard coded duration estimates). Encoded 1024 // encoded duration in Opus packet (or hard coded duration estimates). Encoded
1003 // Opus duration is usually preferred but cannot be known when encrypted. 1025 // Opus duration is usually preferred but cannot be known when encrypted.
1004 TEST_F(WebMClusterParserTest, DontReadEncodedDurationWhenEncrypted) { 1026 TEST_F(WebMClusterParserTest, DontReadEncodedDurationWhenEncrypted) {
1005 // Non-empty dummy value signals encryption is active for audio. 1027 // Non-empty dummy value signals encryption is active for audio.
1006 std::string audio_encryption_id("audio_key_id"); 1028 std::string audio_encryption_id("audio_key_id");
1007 1029
1008 // Reset parser to expect Opus codec audio and use audio encryption key id. 1030 // Reset parser to expect Opus codec audio and use audio encryption key id.
1009 parser_.reset(new WebMClusterParser( 1031 parser_.reset(CreateParserWithKeyIdsAndAudioCodec(audio_encryption_id,
1010 kTimecodeScale, kAudioTrackNum, kNoTimestamp(), kVideoTrackNum, 1032 std::string(), kCodecOpus));
1011 kNoTimestamp(), TextTracks(), std::set<int64>(), audio_encryption_id,
1012 std::string(), kCodecOpus, new MediaLog()));
1013 1033
1014 // Single Block with BlockDuration and encrypted data. 1034 // Single Block with BlockDuration and encrypted data.
1015 const BlockInfo kBlockInfo[] = {{kAudioTrackNum, 1035 const BlockInfo kBlockInfo[] = {{kAudioTrackNum,
1016 0, 1036 0,
1017 kTestAudioFrameDefaultDurationInMs, 1037 kTestAudioFrameDefaultDurationInMs,
1018 false, // Not a SimpleBlock 1038 false, // Not a SimpleBlock
1019 kEncryptedFrame, // Encrypted frame data 1039 kEncryptedFrame, // Encrypted frame data
1020 arraysize(kEncryptedFrame)}}; 1040 arraysize(kEncryptedFrame)}};
1021 1041
1022 int block_count = arraysize(kBlockInfo); 1042 int block_count = arraysize(kBlockInfo);
1023 scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count)); 1043 scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
1024 int result = parser_->Parse(cluster->data(), cluster->size()); 1044 int result = parser_->Parse(cluster->data(), cluster->size());
1025 EXPECT_EQ(cluster->size(), result); 1045 EXPECT_EQ(cluster->size(), result);
1026 1046
1027 // Will verify that duration of buffer matches that of BlockDuration. 1047 // Will verify that duration of buffer matches that of BlockDuration.
1028 ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count)); 1048 ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count));
1029 } 1049 }
1030 1050
1031 } // namespace media 1051 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698