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

Side by Side Diff: media/filters/chunk_demuxer_unittest.cc

Issue 7806002: Fix ChunkDemuxer end of stream handling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « media/filters/chunk_demuxer.cc ('k') | 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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/mock_callback.h" 6 #include "media/base/mock_callback.h"
7 #include "media/base/mock_filter_host.h" 7 #include "media/base/mock_filter_host.h"
8 #include "media/base/test_data_util.h" 8 #include "media/base/test_data_util.h"
9 #include "media/filters/chunk_demuxer.h" 9 #include "media/filters/chunk_demuxer.h"
10 #include "media/filters/chunk_demuxer_client.h" 10 #include "media/filters/chunk_demuxer_client.h"
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 AddSimpleBlock(&cb, kVideoTrackNum, 0); 457 AddSimpleBlock(&cb, kVideoTrackNum, 0);
458 AddSimpleBlock(&cb, kAudioTrackNum, 23); 458 AddSimpleBlock(&cb, kAudioTrackNum, 23);
459 AddSimpleBlock(&cb, kVideoTrackNum, 33); 459 AddSimpleBlock(&cb, kVideoTrackNum, 33);
460 scoped_ptr<Cluster> cluster(cb.Finish()); 460 scoped_ptr<Cluster> cluster(cb.Finish());
461 AppendData(cluster->data(), cluster->size()); 461 AppendData(cluster->data(), cluster->size());
462 462
463 EXPECT_CALL(mock_filter_host_, SetError(PIPELINE_ERROR_NETWORK)); 463 EXPECT_CALL(mock_filter_host_, SetError(PIPELINE_ERROR_NETWORK));
464 demuxer_->EndOfStream(PIPELINE_ERROR_NETWORK); 464 demuxer_->EndOfStream(PIPELINE_ERROR_NETWORK);
465 } 465 }
466 466
467 static void OnEndOfStreamReadDone(bool* called,
468 Buffer* buffer) {
469 EXPECT_TRUE(buffer->IsEndOfStream());
470 *called = true;
471 }
472
473 // Make sure that all pending reads that we don't have media data for get an
474 // "end of stream" buffer when EndOfStream() is called.
475 TEST_F(ChunkDemuxerTest, TestEndOfStreamWithPendingReads) {
476 InitDemuxer(true, true);
477
478 scoped_refptr<DemuxerStream> audio =
479 demuxer_->GetStream(DemuxerStream::AUDIO);
480 scoped_refptr<DemuxerStream> video =
481 demuxer_->GetStream(DemuxerStream::VIDEO);
482
483 bool audio_read_done_1 = false;
484 bool video_read_done_1 = false;
485 bool audio_read_done_2 = false;
486 bool video_read_done_2 = false;
487 bool audio_read_done_3 = false;
488 bool video_read_done_3 = false;
489
490 audio->Read(base::Bind(&OnReadDone,
491 base::TimeDelta::FromMilliseconds(32),
492 &audio_read_done_1));
493
494 video->Read(base::Bind(&OnReadDone,
495 base::TimeDelta::FromMilliseconds(123),
496 &video_read_done_1));
497
498 audio->Read(base::Bind(&OnEndOfStreamReadDone,
499 &audio_read_done_2));
500
501 video->Read(base::Bind(&OnEndOfStreamReadDone,
502 &video_read_done_2));
503
504 audio->Read(base::Bind(&OnEndOfStreamReadDone,
505 &audio_read_done_3));
506
507 video->Read(base::Bind(&OnEndOfStreamReadDone,
508 &video_read_done_3));
509
510 ClusterBuilder cb;
511 cb.SetClusterTimecode(0);
512 AddSimpleBlock(&cb, kAudioTrackNum, 32);
513 AddSimpleBlock(&cb, kVideoTrackNum, 123);
514 scoped_ptr<Cluster> cluster(cb.Finish());
515
516 AppendData(cluster->data(), cluster->size());
517
518 EXPECT_TRUE(audio_read_done_1);
519 EXPECT_TRUE(video_read_done_1);
520 EXPECT_FALSE(audio_read_done_2);
521 EXPECT_FALSE(video_read_done_2);
522 EXPECT_FALSE(audio_read_done_3);
523 EXPECT_FALSE(video_read_done_3);
524
525 demuxer_->EndOfStream(PIPELINE_OK);
526
527 EXPECT_TRUE(audio_read_done_2);
528 EXPECT_TRUE(video_read_done_2);
529 EXPECT_TRUE(audio_read_done_3);
530 EXPECT_TRUE(video_read_done_3);
531 }
532
533 // Make sure that all Read() calls after we get an EndOfStream()
534 // call return an "end of stream" buffer.
535 TEST_F(ChunkDemuxerTest, TestReadsAfterEndOfStream) {
536 InitDemuxer(true, true);
537
538 scoped_refptr<DemuxerStream> audio =
539 demuxer_->GetStream(DemuxerStream::AUDIO);
540 scoped_refptr<DemuxerStream> video =
541 demuxer_->GetStream(DemuxerStream::VIDEO);
542
543 bool audio_read_done_1 = false;
scherkus (not reviewing) 2011/08/30 00:59:52 I wonder if there's a more terse way to write thes
acolwell GONE FROM CHROMIUM 2011/08/30 17:01:45 Done.
544 bool video_read_done_1 = false;
545 bool audio_read_done_2 = false;
546 bool video_read_done_2 = false;
547 bool audio_read_done_3 = false;
548 bool video_read_done_3 = false;
549 bool audio_read_done_4 = false;
550 bool video_read_done_4 = false;
551
552 audio->Read(base::Bind(&OnReadDone,
553 base::TimeDelta::FromMilliseconds(32),
554 &audio_read_done_1));
555
556 video->Read(base::Bind(&OnReadDone,
557 base::TimeDelta::FromMilliseconds(123),
558 &video_read_done_1));
559
560 audio->Read(base::Bind(&OnEndOfStreamReadDone,
561 &audio_read_done_2));
562
563 video->Read(base::Bind(&OnEndOfStreamReadDone,
564 &video_read_done_2));
565
566 audio->Read(base::Bind(&OnEndOfStreamReadDone,
567 &audio_read_done_3));
568
569 video->Read(base::Bind(&OnEndOfStreamReadDone,
570 &video_read_done_3));
571
572 ClusterBuilder cb;
573 cb.SetClusterTimecode(0);
574 AddSimpleBlock(&cb, kAudioTrackNum, 32);
575 AddSimpleBlock(&cb, kVideoTrackNum, 123);
576 scoped_ptr<Cluster> cluster(cb.Finish());
577
578 AppendData(cluster->data(), cluster->size());
579
580 EXPECT_TRUE(audio_read_done_1);
581 EXPECT_TRUE(video_read_done_1);
582 EXPECT_FALSE(audio_read_done_2);
583 EXPECT_FALSE(video_read_done_2);
584
585 demuxer_->EndOfStream(PIPELINE_OK);
586
587 EXPECT_TRUE(audio_read_done_2);
588 EXPECT_TRUE(video_read_done_2);
589
590 audio->Read(base::Bind(&OnEndOfStreamReadDone,
591 &audio_read_done_3));
592
593 video->Read(base::Bind(&OnEndOfStreamReadDone,
594 &video_read_done_3));
595
596 EXPECT_TRUE(audio_read_done_3);
597 EXPECT_TRUE(video_read_done_3);
598
599 audio->Read(base::Bind(&OnEndOfStreamReadDone,
600 &audio_read_done_4));
601
602 video->Read(base::Bind(&OnEndOfStreamReadDone,
603 &video_read_done_4));
604
605 EXPECT_TRUE(audio_read_done_4);
606 EXPECT_TRUE(video_read_done_4);
607
scherkus (not reviewing) 2011/08/30 00:59:52 nit: blank line
acolwell GONE FROM CHROMIUM 2011/08/30 17:01:45 Done.
608 }
609
467 } // namespace media 610 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/chunk_demuxer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698