summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authordalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-03 10:28:17 +0000
committerdalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-03 10:28:17 +0000
commite4ee01c89c172d597e62e423ae3764212d8b9837 (patch)
treef76d7a6b9bc79fa94bf500d278b3c947a17b2b1d /media
parenta3069e22ce94934a82a146dee730f5fa5450690c (diff)
downloadchromium_src-e4ee01c89c172d597e62e423ae3764212d8b9837.zip
chromium_src-e4ee01c89c172d597e62e423ae3764212d8b9837.tar.gz
chromium_src-e4ee01c89c172d597e62e423ae3764212d8b9837.tar.bz2
Enable splice frames and partial appends for AAC; with test!
Fingers crossed, hopefully all known bugs are fixed. BUG=356073,371633,369204 TEST=new unittest. Review URL: https://codereview.chromium.org/278673003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@274457 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/filters/chunk_demuxer.cc14
-rw-r--r--media/filters/pipeline_integration_test.cc25
2 files changed, 24 insertions, 15 deletions
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index a852031..d9e1165 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -860,15 +860,13 @@ bool ChunkDemuxerStream::UpdateAudioConfig(const AudioDecoderConfig& config,
DCHECK_EQ(state_, UNINITIALIZED);
// On platforms which support splice frames, enable splice frames and
- // partial append window support for a limited set of codecs.
- // TODO(dalecurtis): Verify this works for codecs other than MP3 and Vorbis.
- // Right now we want to be extremely conservative to ensure we don't break
- // the world.
- const bool mp3_or_vorbis =
- config.codec() == kCodecMP3 || config.codec() == kCodecVorbis;
- splice_frames_enabled_ = splice_frames_enabled_ && mp3_or_vorbis;
+ // partial append window support for most codecs (notably: not opus).
+ const bool codec_supported = config.codec() == kCodecMP3 ||
+ config.codec() == kCodecAAC ||
+ config.codec() == kCodecVorbis;
+ splice_frames_enabled_ = splice_frames_enabled_ && codec_supported;
partial_append_window_trimming_enabled_ =
- splice_frames_enabled_ && mp3_or_vorbis;
+ splice_frames_enabled_ && codec_supported;
stream_.reset(
new SourceBufferStream(config, log_cb, splice_frames_enabled_));
diff --git a/media/filters/pipeline_integration_test.cc b/media/filters/pipeline_integration_test.cc
index a0f505d..3eec062 100644
--- a/media/filters/pipeline_integration_test.cc
+++ b/media/filters/pipeline_integration_test.cc
@@ -919,24 +919,35 @@ TEST_P(PipelineIntegrationTest, MediaSource_ADTS) {
TEST_P(PipelineIntegrationTest, MediaSource_ADTS_TimestampOffset) {
MockMediaSource source("sfx.adts", kADTS, kAppendWholeFile, GetParam());
- StartPipelineWithMediaSource(&source);
+ StartHashedPipelineWithMediaSource(&source);
EXPECT_EQ(325, source.last_timestamp_offset().InMilliseconds());
+ // Trim off multiple frames off the beginning of the segment which will cause
+ // the first decoded frame to be incorrect if preroll isn't implemented.
+ const base::TimeDelta adts_preroll_duration =
+ base::TimeDelta::FromSecondsD(2.5 * 1024 / 44100);
+ const base::TimeDelta append_time =
+ source.last_timestamp_offset() - adts_preroll_duration;
+
scoped_refptr<DecoderBuffer> second_file = ReadTestDataFile("sfx.adts");
- source.AppendAtTime(
- source.last_timestamp_offset() - base::TimeDelta::FromMilliseconds(10),
- second_file->data(),
- second_file->data_size());
+ source.AppendAtTimeWithWindow(append_time,
+ append_time + adts_preroll_duration,
+ kInfiniteDuration(),
+ second_file->data(),
+ second_file->data_size());
source.EndOfStream();
- EXPECT_EQ(640, source.last_timestamp_offset().InMilliseconds());
+ EXPECT_EQ(592, source.last_timestamp_offset().InMilliseconds());
EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
- EXPECT_EQ(640, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
+ EXPECT_EQ(592, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
Play();
EXPECT_TRUE(WaitUntilOnEnded());
+
+ // Verify preroll is stripped.
+ EXPECT_EQ("-0.06,0.97,-0.90,-0.70,-0.53,-0.34,", GetAudioHash());
}
TEST_F(PipelineIntegrationTest, BasicPlaybackHashed_MP3) {