namespace media {
-// Demuxer properties.
-const int kTotalBytes = 1024;
-
ACTION_P(SetDemuxerProperties, duration) {
- arg0->SetTotalBytes(kTotalBytes);
arg0->SetDuration(duration);
}
EXPECT_CALL(*demuxer_, GetStartTime())
.WillRepeatedly(Return(base::TimeDelta()));
+
+ EXPECT_CALL(*demuxer_, GetTimelineOffset())
+ .WillRepeatedly(Return(base::Time()));
+
+ EXPECT_CALL(*demuxer_, GetLiveness())
+ .WillRepeatedly(Return(Demuxer::LIVENESS_UNKNOWN));
}
virtual ~PipelineTest() {
// Sets up expectations to allow the video renderer to initialize.
void InitializeVideoRenderer(DemuxerStream* stream) {
- EXPECT_CALL(*video_renderer_, Initialize(stream, _, _, _, _, _, _, _))
- .WillOnce(RunCallback<1>(PIPELINE_OK));
+ EXPECT_CALL(*video_renderer_, Initialize(stream, _, _, _, _, _, _, _, _))
+ .WillOnce(RunCallback<2>(PIPELINE_OK));
EXPECT_CALL(*video_renderer_, SetPlaybackRate(0.0f));
// Startup sequence.
}
// Sets up expectations to allow the audio renderer to initialize.
- void InitializeAudioRenderer(DemuxerStream* stream,
- bool disable_after_init_cb) {
- if (disable_after_init_cb) {
- EXPECT_CALL(*audio_renderer_, Initialize(stream, _, _, _, _, _, _, _))
- .WillOnce(DoAll(RunCallback<1>(PIPELINE_OK),
- WithArg<6>(RunClosure<0>()))); // |disabled_cb|.
- } else {
- EXPECT_CALL(*audio_renderer_, Initialize(stream, _, _, _, _, _, _, _))
- .WillOnce(DoAll(SaveArg<4>(&audio_time_cb_),
- RunCallback<1>(PIPELINE_OK)));
- }
+ void InitializeAudioRenderer(DemuxerStream* stream) {
+ EXPECT_CALL(*audio_renderer_, Initialize(stream, _, _, _, _, _, _))
+ .WillOnce(DoAll(SaveArg<4>(&audio_time_cb_),
+ RunCallback<1>(PIPELINE_OK)));
}
void AddTextStream() {
EXPECT_TRUE(kZero == pipeline_->GetMediaTime());
EXPECT_EQ(0u, pipeline_->GetBufferedTimeRanges().size());
EXPECT_TRUE(kZero == pipeline_->GetMediaDuration());
-
- EXPECT_EQ(0, pipeline_->GetTotalBytes());
}
TEST_F(PipelineTest, NeverInitializes) {
streams.push_back(audio_stream());
InitializeDemuxer(&streams);
- InitializeAudioRenderer(audio_stream(), false);
+ InitializeAudioRenderer(audio_stream());
InitializePipeline(PIPELINE_OK);
EXPECT_TRUE(metadata_.has_audio);
streams.push_back(video_stream());
InitializeDemuxer(&streams);
- InitializeAudioRenderer(audio_stream(), false);
+ InitializeAudioRenderer(audio_stream());
InitializeVideoRenderer(video_stream());
InitializePipeline(PIPELINE_OK);
InitializeDemuxer(&streams);
InitializeVideoRenderer(video_stream());
- InitializeAudioRenderer(audio_stream(), false);
+ InitializeAudioRenderer(audio_stream());
InitializePipeline(PIPELINE_OK);
EXPECT_TRUE(metadata_.has_audio);
streams.push_back(video_stream());
InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000));
- InitializeAudioRenderer(audio_stream(), false);
+ InitializeAudioRenderer(audio_stream());
InitializeVideoRenderer(video_stream());
// Initialize then seek!
streams.push_back(audio_stream());
InitializeDemuxer(&streams);
- InitializeAudioRenderer(audio_stream(), false);
+ InitializeAudioRenderer(audio_stream());
// The audio renderer should receive a call to SetVolume().
float expected = 0.5f;
InitializePipeline(PIPELINE_OK);
EXPECT_EQ(kDuration.ToInternalValue(),
pipeline_->GetMediaDuration().ToInternalValue());
- EXPECT_EQ(kTotalBytes, pipeline_->GetTotalBytes());
EXPECT_FALSE(pipeline_->DidLoadingProgress());
}
EXPECT_EQ(0u, pipeline_->GetBufferedTimeRanges().size());
EXPECT_FALSE(pipeline_->DidLoadingProgress());
- pipeline_->AddBufferedByteRange(0, kTotalBytes / 8);
+ pipeline_->AddBufferedTimeRange(base::TimeDelta(), kDuration / 8);
EXPECT_TRUE(pipeline_->DidLoadingProgress());
EXPECT_FALSE(pipeline_->DidLoadingProgress());
EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
EXPECT_EQ(base::TimeDelta(), pipeline_->GetBufferedTimeRanges().start(0));
EXPECT_EQ(kDuration / 8, pipeline_->GetBufferedTimeRanges().end(0));
- pipeline_->AddBufferedTimeRange(base::TimeDelta(), kDuration / 8);
- EXPECT_EQ(base::TimeDelta(), pipeline_->GetBufferedTimeRanges().start(0));
- EXPECT_EQ(kDuration / 8, pipeline_->GetBufferedTimeRanges().end(0));
base::TimeDelta kSeekTime = kDuration / 2;
ExpectSeek(kSeekTime);
DoSeek(kSeekTime);
- EXPECT_TRUE(pipeline_->DidLoadingProgress());
EXPECT_FALSE(pipeline_->DidLoadingProgress());
- pipeline_->AddBufferedByteRange(kTotalBytes / 2,
- kTotalBytes / 2 + kTotalBytes / 8);
- EXPECT_TRUE(pipeline_->DidLoadingProgress());
- EXPECT_FALSE(pipeline_->DidLoadingProgress());
- EXPECT_EQ(2u, pipeline_->GetBufferedTimeRanges().size());
- EXPECT_EQ(base::TimeDelta(), pipeline_->GetBufferedTimeRanges().start(0));
- EXPECT_EQ(kDuration / 8, pipeline_->GetBufferedTimeRanges().end(0));
- EXPECT_EQ(kDuration / 2, pipeline_->GetBufferedTimeRanges().start(1));
- EXPECT_EQ(kDuration / 2 + kDuration / 8,
- pipeline_->GetBufferedTimeRanges().end(1));
-
- pipeline_->AddBufferedTimeRange(kDuration / 4, 3 * kDuration / 8);
- EXPECT_EQ(base::TimeDelta(), pipeline_->GetBufferedTimeRanges().start(0));
- EXPECT_EQ(kDuration / 8, pipeline_->GetBufferedTimeRanges().end(0));
- EXPECT_EQ(kDuration / 4, pipeline_->GetBufferedTimeRanges().start(1));
- EXPECT_EQ(3* kDuration / 8, pipeline_->GetBufferedTimeRanges().end(1));
- EXPECT_EQ(kDuration / 2, pipeline_->GetBufferedTimeRanges().start(2));
- EXPECT_EQ(kDuration / 2 + kDuration / 8,
- pipeline_->GetBufferedTimeRanges().end(2));
-}
-
-TEST_F(PipelineTest, DisableAudioRenderer) {
- CreateAudioStream();
- CreateVideoStream();
- MockDemuxerStreamVector streams;
- streams.push_back(audio_stream());
- streams.push_back(video_stream());
-
- InitializeDemuxer(&streams);
- InitializeAudioRenderer(audio_stream(), false);
- InitializeVideoRenderer(video_stream());
-
- InitializePipeline(PIPELINE_OK);
- EXPECT_TRUE(metadata_.has_audio);
- EXPECT_TRUE(metadata_.has_video);
-
- EXPECT_CALL(*demuxer_, OnAudioRendererDisabled());
- pipeline_->OnAudioDisabled();
-
- // Verify that ended event is fired when video ends.
- EXPECT_CALL(callbacks_, OnEnded());
- pipeline_->OnVideoRendererEnded();
-}
-
-TEST_F(PipelineTest, DisableAudioRendererDuringInit) {
- CreateAudioStream();
- CreateVideoStream();
- MockDemuxerStreamVector streams;
- streams.push_back(audio_stream());
- streams.push_back(video_stream());
-
- InitializeDemuxer(&streams);
- InitializeAudioRenderer(audio_stream(), true);
- InitializeVideoRenderer(video_stream());
-
- EXPECT_CALL(*demuxer_, OnAudioRendererDisabled());
-
- InitializePipeline(PIPELINE_OK);
- EXPECT_TRUE(metadata_.has_audio);
- EXPECT_TRUE(metadata_.has_video);
-
- // Verify that ended event is fired when video ends.
- EXPECT_CALL(callbacks_, OnEnded());
- pipeline_->OnVideoRendererEnded();
}
TEST_F(PipelineTest, EndedCallback) {
streams.push_back(video_stream());
InitializeDemuxer(&streams);
- InitializeAudioRenderer(audio_stream(), false);
+ InitializeAudioRenderer(audio_stream());
InitializeVideoRenderer(video_stream());
InitializePipeline(PIPELINE_OK);
streams.push_back(audio_stream());
streams.push_back(video_stream());
- // Replace the clock so we can simulate wallclock time advancing w/o using
+ // Replace the clock so we can simulate wall clock time advancing w/o using
// Sleep().
pipeline_->SetClockForTesting(new Clock(&test_tick_clock_));
InitializeDemuxer(&streams, duration);
- InitializeAudioRenderer(audio_stream(), false);
+ InitializeAudioRenderer(audio_stream());
InitializeVideoRenderer(video_stream());
InitializePipeline(PIPELINE_OK);
streams.push_back(audio_stream());
InitializeDemuxer(&streams);
- InitializeAudioRenderer(audio_stream(), false);
+ InitializeAudioRenderer(audio_stream());
InitializePipeline(PIPELINE_OK);
float playback_rate = 1.0f;
streams.push_back(audio_stream());
InitializeDemuxer(&streams);
- InitializeAudioRenderer(audio_stream(), false);
+ InitializeAudioRenderer(audio_stream());
InitializePipeline(PIPELINE_OK);
// Trigger additional requests on the pipeline during tear down from error.
streams.push_back(audio_stream());
InitializeDemuxer(&streams);
- InitializeAudioRenderer(audio_stream(), false);
+ InitializeAudioRenderer(audio_stream());
InitializePipeline(PIPELINE_OK);
float playback_rate = 1.0f;
MockDemuxerStreamVector streams;
streams.push_back(audio_stream());
InitializeDemuxer(&streams);
- InitializeAudioRenderer(audio_stream(), false);
+ InitializeAudioRenderer(audio_stream());
InitializePipeline(PIPELINE_OK);
ExpectStop();
if (state == kInitAudioRenderer) {
if (stop_or_error == kStop) {
- EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _, _))
+ EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _))
.WillOnce(DoAll(Stop(pipeline_.get(), stop_cb),
RunCallback<1>(PIPELINE_OK)));
EXPECT_CALL(callbacks_, OnStop());
} else {
status = PIPELINE_ERROR_INITIALIZATION_FAILED;
- EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _, _))
+ EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _))
.WillOnce(RunCallback<1>(status));
}
return status;
}
- EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _, _))
+ EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _))
.WillOnce(RunCallback<1>(PIPELINE_OK));
if (state == kInitVideoRenderer) {
if (stop_or_error == kStop) {
- EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _))
+ EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _))
.WillOnce(DoAll(Stop(pipeline_.get(), stop_cb),
- RunCallback<1>(PIPELINE_OK)));
+ RunCallback<2>(PIPELINE_OK)));
EXPECT_CALL(callbacks_, OnStop());
} else {
status = PIPELINE_ERROR_INITIALIZATION_FAILED;
- EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _))
- .WillOnce(RunCallback<1>(status));
+ EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _))
+ .WillOnce(RunCallback<2>(status));
}
EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>());
return status;
}
- EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _))
- .WillOnce(RunCallback<1>(PIPELINE_OK));
+ EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _))
+ .WillOnce(RunCallback<2>(PIPELINE_OK));
EXPECT_CALL(callbacks_, OnMetadata(_));