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

Unified Diff: media/base/pipeline_unittest.cc

Issue 23702007: Render inband text tracks in the media pipeline (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: media/base/pipeline_unittest.cc
diff --git a/media/base/pipeline_unittest.cc b/media/base/pipeline_unittest.cc
index 4c8640c7807b65b6d2c0a7b25f0fd714b6ebbc97..a213875d54f07f4fa1f41c5679b1606b87d09b6e 100644
--- a/media/base/pipeline_unittest.cc
+++ b/media/base/pipeline_unittest.cc
@@ -94,6 +94,10 @@ class PipelineTest : public ::testing::Test {
scoped_ptr<AudioRenderer> audio_renderer(audio_renderer_);
filter_collection_->SetAudioRenderer(audio_renderer.Pass());
+ text_renderer_ = new MockTextRenderer();
+ scoped_ptr<TextRenderer> text_renderer(text_renderer_);
+ filter_collection_->SetTextRenderer(text_renderer.Pass());
+
// InitializeDemuxer() adds overriding expectations for expected non-NULL
// streams.
DemuxerStream* null_pointer = NULL;
@@ -174,6 +178,16 @@ class PipelineTest : public ::testing::Test {
}
}
+ // Sets up expectations to allow the text renderer to initialize.
+ void InitializeTextRenderer() {
+ EXPECT_CALL(*text_renderer_, Initialize(demuxer_.get(), _, _))
+ .WillOnce(RunCallback<1>(PIPELINE_OK));
+
+ // Startup sequence.
+ EXPECT_CALL(*text_renderer_, Play(_))
+ .WillOnce(RunClosure<0>());
+ }
+
// Sets up expectations on the callback and initializes the pipeline. Called
// after tests have set expectations any filters they wish to use.
void InitializePipeline(PipelineStatus start_status) {
@@ -217,6 +231,10 @@ class PipelineTest : public ::testing::Test {
video_stream_->set_video_decoder_config(video_decoder_config_);
}
+ void CreateTextStream() {
+ text_stream_ = CreateStream(DemuxerStream::TEXT);
+ }
+
MockDemuxerStream* audio_stream() {
return audio_stream_.get();
}
@@ -225,6 +243,10 @@ class PipelineTest : public ::testing::Test {
return video_stream_.get();
}
+ MockDemuxerStream* text_stream() {
+ return text_stream_.get();
+ }
+
void ExpectSeek(const base::TimeDelta& seek_time) {
// Every filter should receive a call to Seek().
EXPECT_CALL(*demuxer_, Seek(seek_time, _))
@@ -256,6 +278,13 @@ class PipelineTest : public ::testing::Test {
.WillOnce(RunClosure<0>());
}
+ if (text_stream_) {
+ EXPECT_CALL(*text_renderer_, Pause(_))
+ .WillOnce(RunClosure<0>());
+ EXPECT_CALL(*text_renderer_, Play(_))
+ .WillOnce(RunClosure<0>());
+ }
+
EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kPrerollCompleted));
// We expect a successful seek callback.
@@ -282,6 +311,9 @@ class PipelineTest : public ::testing::Test {
if (video_stream_)
EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>());
+
+ if (text_stream_)
+ EXPECT_CALL(*text_renderer_, Stop(_)).WillOnce(RunClosure<0>());
}
// Fixture members.
@@ -294,8 +326,10 @@ class PipelineTest : public ::testing::Test {
scoped_ptr<MockDemuxer> demuxer_;
MockVideoRenderer* video_renderer_;
MockAudioRenderer* audio_renderer_;
+ MockTextRenderer* text_renderer_;
scoped_ptr<StrictMock<MockDemuxerStream> > audio_stream_;
scoped_ptr<StrictMock<MockDemuxerStream> > video_stream_;
+ scoped_ptr<StrictMock<MockDemuxerStream> > text_stream_;
AudioRenderer::TimeCB audio_time_cb_;
VideoDecoderConfig video_decoder_config_;
@@ -311,6 +345,7 @@ TEST_F(PipelineTest, NotStarted) {
EXPECT_FALSE(pipeline_->IsRunning());
EXPECT_FALSE(pipeline_->HasAudio());
EXPECT_FALSE(pipeline_->HasVideo());
+ EXPECT_FALSE(pipeline_->HasText());
// Setting should still work.
EXPECT_EQ(0.0f, pipeline_->GetPlaybackRate());
@@ -394,6 +429,7 @@ TEST_F(PipelineTest, AudioStream) {
InitializePipeline(PIPELINE_OK);
EXPECT_TRUE(pipeline_->HasAudio());
EXPECT_FALSE(pipeline_->HasVideo());
+ EXPECT_FALSE(pipeline_->HasText());
}
TEST_F(PipelineTest, VideoStream) {
@@ -407,6 +443,7 @@ TEST_F(PipelineTest, VideoStream) {
InitializePipeline(PIPELINE_OK);
EXPECT_FALSE(pipeline_->HasAudio());
EXPECT_TRUE(pipeline_->HasVideo());
+ EXPECT_FALSE(pipeline_->HasText());
}
TEST_F(PipelineTest, AudioVideoStream) {
@@ -423,18 +460,39 @@ TEST_F(PipelineTest, AudioVideoStream) {
InitializePipeline(PIPELINE_OK);
EXPECT_TRUE(pipeline_->HasAudio());
EXPECT_TRUE(pipeline_->HasVideo());
+ EXPECT_FALSE(pipeline_->HasText());
+}
+
+TEST_F(PipelineTest, VideoTextStream) {
fgalligan1 2013/09/04 22:23:09 Maybe add a Text only stream test that will fail.
+ CreateVideoStream();
+ CreateTextStream();
+ MockDemuxerStreamVector streams;
+ streams.push_back(video_stream());
+ streams.push_back(text_stream());
+
+ InitializeDemuxer(&streams);
+ InitializeVideoRenderer(video_stream());
+ InitializeTextRenderer();
+
+ InitializePipeline(PIPELINE_OK);
+ EXPECT_FALSE(pipeline_->HasAudio());
+ EXPECT_TRUE(pipeline_->HasVideo());
+ EXPECT_TRUE(pipeline_->HasText());
}
TEST_F(PipelineTest, Seek) {
CreateAudioStream();
CreateVideoStream();
+ CreateTextStream();
MockDemuxerStreamVector streams;
streams.push_back(audio_stream());
streams.push_back(video_stream());
+ streams.push_back(text_stream());
InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000));
InitializeAudioRenderer(audio_stream(), false);
InitializeVideoRenderer(video_stream());
+ InitializeTextRenderer();
// Initialize then seek!
InitializePipeline(PIPELINE_OK);
@@ -543,6 +601,7 @@ TEST_F(PipelineTest, DisableAudioRenderer) {
InitializePipeline(PIPELINE_OK);
EXPECT_TRUE(pipeline_->HasAudio());
EXPECT_TRUE(pipeline_->HasVideo());
+ EXPECT_FALSE(pipeline_->HasText());
EXPECT_CALL(*demuxer_, OnAudioRendererDisabled());
pipeline_->OnAudioDisabled();
@@ -568,6 +627,7 @@ TEST_F(PipelineTest, DisableAudioRendererDuringInit) {
InitializePipeline(PIPELINE_OK);
EXPECT_FALSE(pipeline_->HasAudio());
EXPECT_TRUE(pipeline_->HasVideo());
+ EXPECT_FALSE(pipeline_->HasText());
// Verify that ended event is fired when video ends.
EXPECT_CALL(callbacks_, OnEnded());
@@ -577,19 +637,25 @@ TEST_F(PipelineTest, DisableAudioRendererDuringInit) {
TEST_F(PipelineTest, EndedCallback) {
CreateAudioStream();
CreateVideoStream();
+ CreateTextStream();
MockDemuxerStreamVector streams;
streams.push_back(audio_stream());
streams.push_back(video_stream());
+ streams.push_back(text_stream());
InitializeDemuxer(&streams);
InitializeAudioRenderer(audio_stream(), false);
InitializeVideoRenderer(video_stream());
+ InitializeTextRenderer();
InitializePipeline(PIPELINE_OK);
- // The ended callback shouldn't run until both renderers have ended.
+ // The ended callback shouldn't run until all renderers have ended.
pipeline_->OnAudioRendererEnded();
message_loop_.RunUntilIdle();
+ pipeline_->OnTextRendererEnded();
+ message_loop_.RunUntilIdle();
+
EXPECT_CALL(callbacks_, OnEnded());
pipeline_->OnVideoRendererEnded();
message_loop_.RunUntilIdle();
@@ -747,6 +813,7 @@ TEST_F(PipelineTest, StartTimeIsZero) {
InitializePipeline(PIPELINE_OK);
EXPECT_FALSE(pipeline_->HasAudio());
EXPECT_TRUE(pipeline_->HasVideo());
+ EXPECT_FALSE(pipeline_->HasText());
EXPECT_EQ(base::TimeDelta(), pipeline_->GetMediaTime());
}
@@ -768,6 +835,7 @@ TEST_F(PipelineTest, StartTimeIsNonZero) {
InitializePipeline(PIPELINE_OK);
EXPECT_FALSE(pipeline_->HasAudio());
EXPECT_TRUE(pipeline_->HasVideo());
+ EXPECT_FALSE(pipeline_->HasText());
EXPECT_EQ(kStartTime, pipeline_->GetMediaTime());
}

Powered by Google App Engine
This is Rietveld 408576698