diff options
author | strobe@google.com <strobe@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-11 17:30:31 +0000 |
---|---|---|
committer | strobe@google.com <strobe@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-11 17:30:31 +0000 |
commit | ebdf8129d51627e23818864db6e1a7eeec4bf266 (patch) | |
tree | 4d3a1ba7d9e2c64c8bcc46003a3fc3658a0cfc37 /media | |
parent | c14cd5d38ef564ea5ca518aa2ac06e92cbb43265 (diff) | |
download | chromium_src-ebdf8129d51627e23818864db6e1a7eeec4bf266.zip chromium_src-ebdf8129d51627e23818864db6e1a7eeec4bf266.tar.gz chromium_src-ebdf8129d51627e23818864db6e1a7eeec4bf266.tar.bz2 |
Clear source_id_{audio,video}_ after RemoveId.
After adding a source buffer and then immediately removing it, new source
buffers containing the same content component couldn't be added to the same
MediaSource object. Such a pattern could be used as an ad-hoc canPlayType()
for Media Source. This fixes.
BUG=155226
TEST=ChunkDemuxer.TestRemoveAndAddId
Review URL: https://chromiumcodereview.appspot.com/11088067
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@161369 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/filters/chunk_demuxer.cc | 14 | ||||
-rw-r--r-- | media/filters/chunk_demuxer_unittest.cc | 11 |
2 files changed, 21 insertions, 4 deletions
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc index 77953b9..5aa7995 100644 --- a/media/filters/chunk_demuxer.cc +++ b/media/filters/chunk_demuxer.cc @@ -713,11 +713,17 @@ void ChunkDemuxer::RemoveId(const std::string& id) { stream_parser_map_.erase(id); source_info_map_.erase(id); - if (source_id_audio_ == id && audio_) - audio_->Shutdown(); + if (source_id_audio_ == id) { + if (audio_) + audio_->Shutdown(); + source_id_audio_.clear(); + } - if (source_id_video_ == id && video_) - video_->Shutdown(); + if (source_id_video_ == id) { + if (video_) + video_->Shutdown(); + source_id_video_.clear(); + } } Ranges<TimeDelta> ChunkDemuxer::GetBufferedRanges(const std::string& id) const { diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc index 8aa0d76..915bcf7 100644 --- a/media/filters/chunk_demuxer_unittest.cc +++ b/media/filters/chunk_demuxer_unittest.cc @@ -1551,6 +1551,17 @@ TEST_F(ChunkDemuxerTest, TestRemoveId) { GenerateSingleStreamExpectedReads(0, 4, video, kVideoBlockDuration); } +// Test that removing an ID immediately after adding it does not interfere with +// quota for new IDs in the future. +TEST_F(ChunkDemuxerTest, TestRemoveAndAddId) { + std::string audio_id_1 = "audio1"; + ASSERT_TRUE(AddId(audio_id_1, true, false) == ChunkDemuxer::kOk); + demuxer_->RemoveId(audio_id_1); + + std::string audio_id_2 = "audio2"; + ASSERT_TRUE(AddId(audio_id_2, true, false) == ChunkDemuxer::kOk); +} + TEST_F(ChunkDemuxerTest, TestSeekCanceled) { ASSERT_TRUE(InitDemuxer(true, true, false)); |