Index: media/filters/pipeline_integration_test.cc |
diff --git a/media/filters/pipeline_integration_test.cc b/media/filters/pipeline_integration_test.cc |
index dddc0652473c23e6adb0af94de4d8786a8ea6f47..2ee129751815f7b262c4e6ebf3d45a4838472877 100644 |
--- a/media/filters/pipeline_integration_test.cc |
+++ b/media/filters/pipeline_integration_test.cc |
@@ -32,6 +32,15 @@ static const uint8 kSecretKey[] = { |
static const int kAppendWholeFile = -1; |
+// Constants for the Media Source config change tests. |
+static const int kAppendTimeSec = 1; |
+static const int kAppendTimeMs = kAppendTimeSec * 1000; |
+static const int k320WebMFileDurationMs = 2737; |
+static const int k640WebMFileDurationMs = 2763; |
+static const int k1280IsoFileDurationMs = 2736; |
+ |
+// Note: Tests using this class only exercise the DecryptingDemuxerStream path. |
+// They do not exercise the Decrypting{Audio|Video}Decoder path. |
class FakeEncryptedMedia { |
public: |
FakeEncryptedMedia() |
@@ -309,11 +318,11 @@ TEST_F(PipelineIntegrationTest, BasicPlayback_MediaSource) { |
MockMediaSource source("bear-320x240.webm", kWebM, 219229); |
StartPipelineWithMediaSource(&source); |
source.EndOfStream(); |
- ASSERT_EQ(pipeline_status_, PIPELINE_OK); |
- EXPECT_EQ(pipeline_->GetBufferedTimeRanges().size(), 1u); |
- EXPECT_EQ(pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds(), 0); |
- EXPECT_EQ(pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds(), 2737); |
+ EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
+ EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
+ EXPECT_EQ(k320WebMFileDurationMs, |
+ pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
Play(); |
@@ -330,23 +339,108 @@ TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_WebM) { |
scoped_refptr<DecoderBuffer> second_file = |
ReadTestDataFile("bear-640x360.webm"); |
- source.AppendAtTime(base::TimeDelta::FromSeconds(2), |
+ source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
second_file->GetData(), second_file->GetDataSize()); |
source.EndOfStream(); |
- ASSERT_EQ(pipeline_status_, PIPELINE_OK); |
- EXPECT_EQ(pipeline_->GetBufferedTimeRanges().size(), 1u); |
- EXPECT_EQ(pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds(), 0); |
- EXPECT_EQ(pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds(), 4763); |
+ EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
+ EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
+ EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs, |
+ pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
Play(); |
- ASSERT_TRUE(WaitUntilOnEnded()); |
+ EXPECT_TRUE(WaitUntilOnEnded()); |
source.Abort(); |
Stop(); |
} |
+TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_Encrypted_WebM) { |
+ MockMediaSource source("bear-320x240-16x9-aspect-av-enc_av.webm", kWebM, |
+ kAppendWholeFile); |
+ FakeEncryptedMedia encrypted_media; |
+ StartPipelineWithEncryptedMedia(&source, &encrypted_media); |
+ |
+ scoped_refptr<DecoderBuffer> second_file = |
+ ReadTestDataFile("bear-640x360-av-enc_av.webm"); |
+ |
+ source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
+ second_file->GetData(), second_file->GetDataSize()); |
+ |
+ source.EndOfStream(); |
+ |
+ EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
+ EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
+ EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs, |
+ pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
+ |
+ Play(); |
+ |
+ EXPECT_TRUE(WaitUntilOnEnded()); |
+ source.Abort(); |
+ Stop(); |
+} |
+ |
+// Config changes from encrypted to clear are not currently supported. |
+TEST_F(PipelineIntegrationTest, |
+ MediaSource_ConfigChange_ClearThenEncrypted_WebM) { |
+ MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM, |
+ kAppendWholeFile); |
+ FakeEncryptedMedia encrypted_media; |
+ StartPipelineWithEncryptedMedia(&source, &encrypted_media); |
+ |
+ scoped_refptr<DecoderBuffer> second_file = |
+ ReadTestDataFile("bear-640x360-av-enc_av.webm"); |
+ |
+ source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
+ second_file->GetData(), second_file->GetDataSize()); |
+ |
+ source.EndOfStream(); |
+ |
+ message_loop_.Run(); |
+ EXPECT_EQ(PIPELINE_ERROR_DECODE, pipeline_status_); |
+ |
+ EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
+ EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
+ // The second video was not added, so its time has not been added. |
+ EXPECT_EQ(k320WebMFileDurationMs, |
+ pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
+ |
+ Play(); |
+ |
+ EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError()); |
+ source.Abort(); |
+} |
+ |
+// Config changes from clear to encrypted are not currently supported. |
+TEST_F(PipelineIntegrationTest, |
+ MediaSource_ConfigChange_EncryptedThenClear_WebM) { |
+ MockMediaSource source("bear-320x240-16x9-aspect-av-enc_av.webm", kWebM, |
+ kAppendWholeFile); |
+ FakeEncryptedMedia encrypted_media; |
+ StartPipelineWithEncryptedMedia(&source, &encrypted_media); |
+ |
+ scoped_refptr<DecoderBuffer> second_file = |
+ ReadTestDataFile("bear-640x360.webm"); |
+ |
+ source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
+ second_file->GetData(), second_file->GetDataSize()); |
+ |
+ source.EndOfStream(); |
+ |
+ EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
+ EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
+ // The second video was not added, so its time has not been added. |
+ EXPECT_EQ(k320WebMFileDurationMs, |
+ pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
+ |
+ Play(); |
+ |
+ EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError()); |
+ source.Abort(); |
+} |
+ |
#if defined(GOOGLE_CHROME_BUILD) || defined(USE_PROPRIETARY_CODECS) |
TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_MP4) { |
MockMediaSource source("bear.640x360_dash.mp4", kMP4, kAppendWholeFile); |
@@ -355,19 +449,19 @@ TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_MP4) { |
scoped_refptr<DecoderBuffer> second_file = |
ReadTestDataFile("bear.1280x720_dash.mp4"); |
- source.AppendAtTime(base::TimeDelta::FromSeconds(2), |
+ source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
second_file->GetData(), second_file->GetDataSize()); |
source.EndOfStream(); |
- ASSERT_EQ(pipeline_status_, PIPELINE_OK); |
- EXPECT_EQ(pipeline_->GetBufferedTimeRanges().size(), 1u); |
- EXPECT_EQ(pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds(), 0); |
- EXPECT_EQ(pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds(), 4736); |
+ EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
+ EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
+ EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs, |
+ pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
Play(); |
- ASSERT_TRUE(WaitUntilOnEnded()); |
+ EXPECT_TRUE(WaitUntilOnEnded()); |
source.Abort(); |
Stop(); |
} |