diff options
author | dalecurtis@google.com <dalecurtis@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-25 21:14:19 +0000 |
---|---|---|
committer | dalecurtis@google.com <dalecurtis@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-25 21:14:19 +0000 |
commit | 609e7287150a066ea9fe91e1374b512577e51326 (patch) | |
tree | aee078d5b16d73e1b42c3b1cb1a92c2d454f90c6 /media/base/audio_splicer_unittest.cc | |
parent | 972d8aa958bf0d68bb9574b1d59dc8146c51b947 (diff) | |
download | chromium_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.cc | 37 |
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 |