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 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "media/base/decrypt_config.h" | 9 #include "media/base/decrypt_config.h" |
10 #include "media/webm/cluster_builder.h" | 10 #include "media/webm/cluster_builder.h" |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 WebMClusterParser::BufferQueue* dest) { | 196 WebMClusterParser::BufferQueue* dest) { |
197 for (WebMClusterParser::BufferQueue::const_iterator itr = src.begin(); | 197 for (WebMClusterParser::BufferQueue::const_iterator itr = src.begin(); |
198 itr != src.end(); ++itr) { | 198 itr != src.end(); ++itr) { |
199 dest->push_back(*itr); | 199 dest->push_back(*itr); |
200 } | 200 } |
201 } | 201 } |
202 | 202 |
203 class WebMClusterParserTest : public testing::Test { | 203 class WebMClusterParserTest : public testing::Test { |
204 public: | 204 public: |
205 WebMClusterParserTest() | 205 WebMClusterParserTest() |
206 : parser_(new WebMClusterParser( | 206 : parser_(new WebMClusterParser(kTimecodeScale, |
207 kTimecodeScale, kAudioTrackNum, kVideoTrackNum, | 207 kAudioTrackNum, |
208 std::set<int>(), | 208 kVideoTrackNum, |
209 std::set<int64>(), | 209 std::set<int>(), |
210 "", "", | 210 std::set<int64>(), |
211 LogCB())) { | 211 std::string(), |
212 } | 212 std::string(), |
| 213 LogCB())) {} |
213 | 214 |
214 protected: | 215 protected: |
215 scoped_ptr<WebMClusterParser> parser_; | 216 scoped_ptr<WebMClusterParser> parser_; |
216 }; | 217 }; |
217 | 218 |
218 TEST_F(WebMClusterParserTest, TestReset) { | 219 TEST_F(WebMClusterParserTest, TestReset) { |
219 InSequence s; | 220 InSequence s; |
220 | 221 |
221 int block_count = arraysize(kDefaultBlockInfo); | 222 int block_count = arraysize(kDefaultBlockInfo); |
222 scoped_ptr<Cluster> cluster(CreateCluster(0, kDefaultBlockInfo, block_count)); | 223 scoped_ptr<Cluster> cluster(CreateCluster(0, kDefaultBlockInfo, block_count)); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 | 328 |
328 int result = parser_->Parse(cluster->data(), cluster->size()); | 329 int result = parser_->Parse(cluster->data(), cluster->size()); |
329 EXPECT_EQ(cluster->size(), result); | 330 EXPECT_EQ(cluster->size(), result); |
330 ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count)); | 331 ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count)); |
331 } | 332 } |
332 | 333 |
333 TEST_F(WebMClusterParserTest, IgnoredTracks) { | 334 TEST_F(WebMClusterParserTest, IgnoredTracks) { |
334 std::set<int64> ignored_tracks; | 335 std::set<int64> ignored_tracks; |
335 ignored_tracks.insert(kTextTrackNum); | 336 ignored_tracks.insert(kTextTrackNum); |
336 | 337 |
337 parser_.reset(new WebMClusterParser( | 338 parser_.reset(new WebMClusterParser(kTimecodeScale, |
338 kTimecodeScale, kAudioTrackNum, kVideoTrackNum, | 339 kAudioTrackNum, |
339 std::set<int>(), | 340 kVideoTrackNum, |
340 ignored_tracks, "", "", | 341 std::set<int>(), |
341 LogCB())); | 342 ignored_tracks, |
| 343 std::string(), |
| 344 std::string(), |
| 345 LogCB())); |
342 | 346 |
343 const BlockInfo kInputBlockInfo[] = { | 347 const BlockInfo kInputBlockInfo[] = { |
344 { kAudioTrackNum, 0, 23, true }, | 348 { kAudioTrackNum, 0, 23, true }, |
345 { kAudioTrackNum, 23, 23, true }, | 349 { kAudioTrackNum, 23, 23, true }, |
346 { kVideoTrackNum, 33, 33, true }, | 350 { kVideoTrackNum, 33, 33, true }, |
347 { kTextTrackNum, 33, 99, true }, | 351 { kTextTrackNum, 33, 99, true }, |
348 { kAudioTrackNum, 46, 23, true }, | 352 { kAudioTrackNum, 46, 23, true }, |
349 { kVideoTrackNum, 67, 33, true }, | 353 { kVideoTrackNum, 67, 33, true }, |
350 }; | 354 }; |
351 int input_block_count = arraysize(kInputBlockInfo); | 355 int input_block_count = arraysize(kInputBlockInfo); |
(...skipping 12 matching lines...) Expand all Loading... |
364 | 368 |
365 int result = parser_->Parse(cluster->data(), cluster->size()); | 369 int result = parser_->Parse(cluster->data(), cluster->size()); |
366 EXPECT_EQ(cluster->size(), result); | 370 EXPECT_EQ(cluster->size(), result); |
367 ASSERT_TRUE(VerifyBuffers(parser_, kOutputBlockInfo, output_block_count)); | 371 ASSERT_TRUE(VerifyBuffers(parser_, kOutputBlockInfo, output_block_count)); |
368 } | 372 } |
369 | 373 |
370 TEST_F(WebMClusterParserTest, ParseTextTracks) { | 374 TEST_F(WebMClusterParserTest, ParseTextTracks) { |
371 std::set<int> text_tracks; | 375 std::set<int> text_tracks; |
372 text_tracks.insert(kTextTrackNum); | 376 text_tracks.insert(kTextTrackNum); |
373 | 377 |
374 parser_.reset(new WebMClusterParser( | 378 parser_.reset(new WebMClusterParser(kTimecodeScale, |
375 kTimecodeScale, kAudioTrackNum, kVideoTrackNum, | 379 kAudioTrackNum, |
376 text_tracks, | 380 kVideoTrackNum, |
377 std::set<int64>(), "", "", | 381 text_tracks, |
378 LogCB())); | 382 std::set<int64>(), |
| 383 std::string(), |
| 384 std::string(), |
| 385 LogCB())); |
379 | 386 |
380 const BlockInfo kInputBlockInfo[] = { | 387 const BlockInfo kInputBlockInfo[] = { |
381 { kAudioTrackNum, 0, 23, true }, | 388 { kAudioTrackNum, 0, 23, true }, |
382 { kAudioTrackNum, 23, 23, true }, | 389 { kAudioTrackNum, 23, 23, true }, |
383 { kVideoTrackNum, 33, 33, true }, | 390 { kVideoTrackNum, 33, 33, true }, |
384 { kTextTrackNum, 33, 42, false }, | 391 { kTextTrackNum, 33, 42, false }, |
385 { kAudioTrackNum, 46, 23, true }, | 392 { kAudioTrackNum, 46, 23, true }, |
386 { kTextTrackNum, 55, 44, false }, | 393 { kTextTrackNum, 55, 44, false }, |
387 { kVideoTrackNum, 67, 33, true }, | 394 { kVideoTrackNum, 67, 33, true }, |
388 }; | 395 }; |
389 int input_block_count = arraysize(kInputBlockInfo); | 396 int input_block_count = arraysize(kInputBlockInfo); |
390 | 397 |
391 scoped_ptr<Cluster> cluster( | 398 scoped_ptr<Cluster> cluster( |
392 CreateCluster(0, kInputBlockInfo, input_block_count)); | 399 CreateCluster(0, kInputBlockInfo, input_block_count)); |
393 | 400 |
394 int result = parser_->Parse(cluster->data(), cluster->size()); | 401 int result = parser_->Parse(cluster->data(), cluster->size()); |
395 EXPECT_EQ(cluster->size(), result); | 402 EXPECT_EQ(cluster->size(), result); |
396 ASSERT_TRUE(VerifyBuffers(parser_, kInputBlockInfo, input_block_count)); | 403 ASSERT_TRUE(VerifyBuffers(parser_, kInputBlockInfo, input_block_count)); |
397 } | 404 } |
398 | 405 |
399 TEST_F(WebMClusterParserTest, TextTracksSimpleBlock) { | 406 TEST_F(WebMClusterParserTest, TextTracksSimpleBlock) { |
400 std::set<int> text_tracks; | 407 std::set<int> text_tracks; |
401 text_tracks.insert(kTextTrackNum); | 408 text_tracks.insert(kTextTrackNum); |
402 | 409 |
403 parser_.reset(new WebMClusterParser( | 410 parser_.reset(new WebMClusterParser(kTimecodeScale, |
404 kTimecodeScale, kAudioTrackNum, kVideoTrackNum, | 411 kAudioTrackNum, |
405 text_tracks, | 412 kVideoTrackNum, |
406 std::set<int64>(), "", "", | 413 text_tracks, |
407 LogCB())); | 414 std::set<int64>(), |
| 415 std::string(), |
| 416 std::string(), |
| 417 LogCB())); |
408 | 418 |
409 const BlockInfo kInputBlockInfo[] = { | 419 const BlockInfo kInputBlockInfo[] = { |
410 { kTextTrackNum, 33, 42, true }, | 420 { kTextTrackNum, 33, 42, true }, |
411 }; | 421 }; |
412 int input_block_count = arraysize(kInputBlockInfo); | 422 int input_block_count = arraysize(kInputBlockInfo); |
413 | 423 |
414 scoped_ptr<Cluster> cluster( | 424 scoped_ptr<Cluster> cluster( |
415 CreateCluster(0, kInputBlockInfo, input_block_count)); | 425 CreateCluster(0, kInputBlockInfo, input_block_count)); |
416 | 426 |
417 int result = parser_->Parse(cluster->data(), cluster->size()); | 427 int result = parser_->Parse(cluster->data(), cluster->size()); |
418 EXPECT_LT(result, 0); | 428 EXPECT_LT(result, 0); |
419 } | 429 } |
420 | 430 |
421 TEST_F(WebMClusterParserTest, ParseMultipleTextTracks) { | 431 TEST_F(WebMClusterParserTest, ParseMultipleTextTracks) { |
422 typedef std::set<int> TextTrackSet; | 432 typedef std::set<int> TextTrackSet; |
423 TextTrackSet text_tracks; | 433 TextTrackSet text_tracks; |
424 | 434 |
425 const int kSubtitleTextTrackNum = kTextTrackNum; | 435 const int kSubtitleTextTrackNum = kTextTrackNum; |
426 const int kCaptionTextTrackNum = kTextTrackNum + 1; | 436 const int kCaptionTextTrackNum = kTextTrackNum + 1; |
427 | 437 |
428 text_tracks.insert(kSubtitleTextTrackNum); | 438 text_tracks.insert(kSubtitleTextTrackNum); |
429 text_tracks.insert(kCaptionTextTrackNum); | 439 text_tracks.insert(kCaptionTextTrackNum); |
430 | 440 |
431 parser_.reset(new WebMClusterParser( | 441 parser_.reset(new WebMClusterParser(kTimecodeScale, |
432 kTimecodeScale, kAudioTrackNum, kVideoTrackNum, | 442 kAudioTrackNum, |
433 text_tracks, | 443 kVideoTrackNum, |
434 std::set<int64>(), "", "", | 444 text_tracks, |
435 LogCB())); | 445 std::set<int64>(), |
| 446 std::string(), |
| 447 std::string(), |
| 448 LogCB())); |
436 | 449 |
437 const BlockInfo kInputBlockInfo[] = { | 450 const BlockInfo kInputBlockInfo[] = { |
438 { kAudioTrackNum, 0, 23, true }, | 451 { kAudioTrackNum, 0, 23, true }, |
439 { kAudioTrackNum, 23, 23, true }, | 452 { kAudioTrackNum, 23, 23, true }, |
440 { kVideoTrackNum, 33, 33, true }, | 453 { kVideoTrackNum, 33, 33, true }, |
441 { kSubtitleTextTrackNum, 33, 42, false }, | 454 { kSubtitleTextTrackNum, 33, 42, false }, |
442 { kAudioTrackNum, 46, 23, true }, | 455 { kAudioTrackNum, 46, 23, true }, |
443 { kCaptionTextTrackNum, 55, 44, false }, | 456 { kCaptionTextTrackNum, 55, 44, false }, |
444 { kVideoTrackNum, 67, 33, true }, | 457 { kVideoTrackNum, 67, 33, true }, |
445 { kSubtitleTextTrackNum, 67, 33, false }, | 458 { kSubtitleTextTrackNum, 67, 33, false }, |
(...skipping 17 matching lines...) Expand all Loading... |
463 text_tracks.find(text_track_num); | 476 text_tracks.find(text_track_num); |
464 ASSERT_TRUE(find_result != text_tracks.end()); | 477 ASSERT_TRUE(find_result != text_tracks.end()); |
465 ASSERT_TRUE(VerifyTextBuffers(parser_, kInputBlockInfo, input_block_count, | 478 ASSERT_TRUE(VerifyTextBuffers(parser_, kInputBlockInfo, input_block_count, |
466 text_track_num, *text_buffers)); | 479 text_track_num, *text_buffers)); |
467 } | 480 } |
468 } | 481 } |
469 | 482 |
470 TEST_F(WebMClusterParserTest, ParseEncryptedBlock) { | 483 TEST_F(WebMClusterParserTest, ParseEncryptedBlock) { |
471 scoped_ptr<Cluster> cluster(CreateEncryptedCluster(sizeof(kEncryptedFrame))); | 484 scoped_ptr<Cluster> cluster(CreateEncryptedCluster(sizeof(kEncryptedFrame))); |
472 | 485 |
473 parser_.reset(new WebMClusterParser( | 486 parser_.reset(new WebMClusterParser(kTimecodeScale, |
474 kTimecodeScale, kAudioTrackNum, kVideoTrackNum, | 487 kAudioTrackNum, |
475 std::set<int>(), | 488 kVideoTrackNum, |
476 std::set<int64>(), "", "video_key_id", | 489 std::set<int>(), |
477 LogCB())); | 490 std::set<int64>(), |
| 491 std::string(), |
| 492 "video_key_id", |
| 493 LogCB())); |
478 int result = parser_->Parse(cluster->data(), cluster->size()); | 494 int result = parser_->Parse(cluster->data(), cluster->size()); |
479 EXPECT_EQ(cluster->size(), result); | 495 EXPECT_EQ(cluster->size(), result); |
480 ASSERT_EQ(1UL, parser_->video_buffers().size()); | 496 ASSERT_EQ(1UL, parser_->video_buffers().size()); |
481 scoped_refptr<StreamParserBuffer> buffer = parser_->video_buffers()[0]; | 497 scoped_refptr<StreamParserBuffer> buffer = parser_->video_buffers()[0]; |
482 EXPECT_TRUE(VerifyEncryptedBuffer(buffer)); | 498 EXPECT_TRUE(VerifyEncryptedBuffer(buffer)); |
483 } | 499 } |
484 | 500 |
485 TEST_F(WebMClusterParserTest, ParseBadEncryptedBlock) { | 501 TEST_F(WebMClusterParserTest, ParseBadEncryptedBlock) { |
486 scoped_ptr<Cluster> cluster( | 502 scoped_ptr<Cluster> cluster( |
487 CreateEncryptedCluster(sizeof(kEncryptedFrame) - 1)); | 503 CreateEncryptedCluster(sizeof(kEncryptedFrame) - 1)); |
488 | 504 |
489 parser_.reset(new WebMClusterParser( | 505 parser_.reset(new WebMClusterParser(kTimecodeScale, |
490 kTimecodeScale, kAudioTrackNum, kVideoTrackNum, | 506 kAudioTrackNum, |
491 std::set<int>(), | 507 kVideoTrackNum, |
492 std::set<int64>(), "", "video_key_id", | 508 std::set<int>(), |
493 LogCB())); | 509 std::set<int64>(), |
| 510 std::string(), |
| 511 "video_key_id", |
| 512 LogCB())); |
494 int result = parser_->Parse(cluster->data(), cluster->size()); | 513 int result = parser_->Parse(cluster->data(), cluster->size()); |
495 EXPECT_EQ(-1, result); | 514 EXPECT_EQ(-1, result); |
496 } | 515 } |
497 | 516 |
498 } // namespace media | 517 } // namespace media |
OLD | NEW |