summaryrefslogtreecommitdiffstats
path: root/media/base/audio_splicer_unittest.cc
diff options
context:
space:
mode:
authordalecurtis@google.com <dalecurtis@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-25 21:14:19 +0000
committerdalecurtis@google.com <dalecurtis@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-25 21:14:19 +0000
commit609e7287150a066ea9fe91e1374b512577e51326 (patch)
treeaee078d5b16d73e1b42c3b1cb1a92c2d454f90c6 /media/base/audio_splicer_unittest.cc
parent972d8aa958bf0d68bb9574b1d59dc8146c51b947 (diff)
downloadchromium_src-609e7287150a066ea9fe91e1374b512577e51326.zip
chromium_src-609e7287150a066ea9fe91e1374b512577e51326.tar.gz
chromium_src-609e7287150a066ea9fe91e1374b512577e51326.tar.bz2
Verify supposed splice frames; don't generate for end ts overlap.
We can't rely on the splice frame marking from SourceBufferStream since the demuxed timestamps and durations may not be accurate. The code now early returns if a splice doesn't actually exist and also avoids generating splice frames for end timestamp overlap. BUG=356073 TEST=new unittests. manual verification against crashes. R=acolwell@chromium.org Review URL: https://codereview.chromium.org/211553002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@259329 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base/audio_splicer_unittest.cc')
-rw-r--r--media/base/audio_splicer_unittest.cc37
1 files changed, 37 insertions, 0 deletions
diff --git a/media/base/audio_splicer_unittest.cc b/media/base/audio_splicer_unittest.cc
index be72273..ba2d6e8 100644
--- a/media/base/audio_splicer_unittest.cc
+++ b/media/base/audio_splicer_unittest.cc
@@ -590,4 +590,41 @@ TEST_F(AudioSplicerTest, PartialOverlapCrossfadeShortPreSplice) {
EXPECT_FALSE(splicer_.HasNextBuffer());
}
+// Test behavior when a splice frame is incorrectly marked and does not actually
+// overlap.
+// +----------+
+// |1111111111|
+// +----------+
+// +--------------+
+// |22222222222222|
+// +--------------+
+// Results in:
+// +----------+--------------+
+// |1111111111|22222222222222|
+// +----------+--------------+
+TEST_F(AudioSplicerTest, IncorrectlyMarkedSplice) {
+ const int kBufferSize =
+ input_timestamp_helper_.GetFramesToTarget(max_crossfade_duration()) * 2;
+
+ scoped_refptr<AudioBuffer> first_buffer =
+ GetNextInputBuffer(1.0f, kBufferSize);
+ splicer_.SetSpliceTimestamp(input_timestamp_helper_.GetTimestamp());
+ scoped_refptr<AudioBuffer> second_buffer =
+ GetNextInputBuffer(0.0f, kBufferSize);
+
+ // The splicer should be internally queuing input since |first_buffer| is part
+ // of the supposed splice.
+ EXPECT_TRUE(AddInput(first_buffer));
+ EXPECT_FALSE(splicer_.HasNextBuffer());
+
+ // |second_buffer| should complete the supposed splice, so ensure output is
+ // now available.
+ EXPECT_TRUE(AddInput(second_buffer));
+ ASSERT_TRUE(splicer_.HasNextBuffer());
+
+ VerifyNextBuffer(first_buffer);
+ VerifyNextBuffer(second_buffer);
+ EXPECT_FALSE(splicer_.HasNextBuffer());
+}
+
} // namespace media