diff options
author | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-03 10:28:17 +0000 |
---|---|---|
committer | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-03 10:28:17 +0000 |
commit | e4ee01c89c172d597e62e423ae3764212d8b9837 (patch) | |
tree | f76d7a6b9bc79fa94bf500d278b3c947a17b2b1d /media | |
parent | a3069e22ce94934a82a146dee730f5fa5450690c (diff) | |
download | chromium_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.cc | 14 | ||||
-rw-r--r-- | media/filters/pipeline_integration_test.cc | 25 |
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) { |