| Index: media/test/pipeline_integration_test.cc
|
| diff --git a/media/test/pipeline_integration_test.cc b/media/test/pipeline_integration_test.cc
|
| index 18cbb3b38a1349bc5f2a87faa38ddbd57a447d20..cc1295872345efa77cfd4e274b2ddd8aa77a8b13 100644
|
| --- a/media/test/pipeline_integration_test.cc
|
| +++ b/media/test/pipeline_integration_test.cc
|
| @@ -133,6 +133,10 @@ static const char kOpusEndTrimmingHash_2[] =
|
| "-11.91,-11.11,-8.27,-7.13,-7.86,-10.00,";
|
| static const char kOpusEndTrimmingHash_3[] =
|
| "-13.31,-14.38,-13.70,-11.71,-10.21,-10.49,";
|
| +static const char kOpusSmallCodecDelayHash_1[] =
|
| + "-0.48,-0.09,1.27,1.06,1.54,-0.22,";
|
| +static const char kOpusSmallCodecDelayHash_2[] =
|
| + "0.29,0.15,-0.19,0.25,0.68,0.83,";
|
| #else
|
| // Hash for a full playthrough of "opus-trimming-test.(webm|ogg)".
|
| static const char kOpusEndTrimmingHash_1[] =
|
| @@ -143,6 +147,12 @@ static const char kOpusEndTrimmingHash_2[] =
|
| // The above hash, plus an additional playthrough starting from T=6.36s.
|
| static const char kOpusEndTrimmingHash_3[] =
|
| "-13.28,-14.35,-13.67,-11.68,-10.18,-10.46,";
|
| +// Hash for a full playthrough of "bear-opus.webm".
|
| +static const char kOpusSmallCodecDelayHash_1[] =
|
| + "-0.47,-0.09,1.28,1.07,1.55,-0.22,";
|
| +// The above hash, plus an additional playthrough starting from T=1.414s.
|
| +static const char kOpusSmallCodecDelayHash_2[] =
|
| + "0.31,0.15,-0.18,0.25,0.70,0.84,";
|
| #endif // defined(OPUS_FIXED_POINT)
|
| #endif // !defined(MOJO_RENDERER)
|
|
|
| @@ -1131,9 +1141,59 @@ TEST_F(PipelineIntegrationTest,
|
| EXPECT_HASH_EQ(kOpusEndTrimmingHash_3, GetAudioHash());
|
| }
|
|
|
| -// TODO(dalecurtis): Add an opus test file which FFmpeg and ChunkDemuxer will
|
| -// both seek the same in and shows the difference of preroll.
|
| -// http://crbug.com/509894
|
| +TEST_F(PipelineIntegrationTest,
|
| + MAYBE_CLOCKLESS(BasicPlaybackOpusPrerollExceedsCodecDelay)) {
|
| + ASSERT_EQ(PIPELINE_OK, Start("bear-opus.webm", kHashed | kClockless));
|
| +
|
| + AudioDecoderConfig config =
|
| + demuxer_->GetStream(DemuxerStream::AUDIO)->audio_decoder_config();
|
| +
|
| + // Verify that this file's preroll is not eclipsed by the codec delay so we
|
| + // can detect when preroll is not properly performed.
|
| + base::TimeDelta codec_delay = base::TimeDelta::FromSecondsD(
|
| + static_cast<double>(config.codec_delay()) / config.samples_per_second());
|
| + ASSERT_GT(config.seek_preroll(), codec_delay);
|
| +
|
| + Play();
|
| + ASSERT_TRUE(WaitUntilOnEnded());
|
| + EXPECT_HASH_EQ(kOpusSmallCodecDelayHash_1, GetAudioHash());
|
| +
|
| + // Seek halfway through the file to invoke seek preroll.
|
| + ASSERT_TRUE(Seek(base::TimeDelta::FromSecondsD(1.414)));
|
| + Play();
|
| + ASSERT_TRUE(WaitUntilOnEnded());
|
| + EXPECT_HASH_EQ(kOpusSmallCodecDelayHash_2, GetAudioHash());
|
| +}
|
| +
|
| +TEST_F(PipelineIntegrationTest,
|
| + MAYBE_CLOCKLESS(BasicPlaybackOpusPrerollExceedsCodecDelay_MediaSource)) {
|
| + MockMediaSource source("bear-opus.webm", kOpusAudioOnlyWebM,
|
| + kAppendWholeFile);
|
| + EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(
|
| + &source, kClockless | kHashed, nullptr));
|
| + source.EndOfStream();
|
| +
|
| + AudioDecoderConfig config =
|
| + demuxer_->GetStream(DemuxerStream::AUDIO)->audio_decoder_config();
|
| +
|
| + // Verify that this file's preroll is not eclipsed by the codec delay so we
|
| + // can detect when preroll is not properly performed.
|
| + base::TimeDelta codec_delay = base::TimeDelta::FromSecondsD(
|
| + static_cast<double>(config.codec_delay()) / config.samples_per_second());
|
| + ASSERT_GT(config.seek_preroll(), codec_delay);
|
| +
|
| + Play();
|
| + ASSERT_TRUE(WaitUntilOnEnded());
|
| + EXPECT_HASH_EQ(kOpusSmallCodecDelayHash_1, GetAudioHash());
|
| +
|
| + // Seek halfway through the file to invoke seek preroll.
|
| + base::TimeDelta seek_time = base::TimeDelta::FromSecondsD(1.414);
|
| + source.Seek(seek_time);
|
| + ASSERT_TRUE(Seek(seek_time));
|
| + Play();
|
| + ASSERT_TRUE(WaitUntilOnEnded());
|
| + EXPECT_HASH_EQ(kOpusSmallCodecDelayHash_2, GetAudioHash());
|
| +}
|
|
|
| TEST_F(PipelineIntegrationTest, BasicPlaybackLive) {
|
| ASSERT_EQ(PIPELINE_OK, Start("bear-320x240-live.webm", kHashed));
|
|
|