summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorstrobe@google.com <strobe@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-11 17:30:31 +0000
committerstrobe@google.com <strobe@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-11 17:30:31 +0000
commitebdf8129d51627e23818864db6e1a7eeec4bf266 (patch)
tree4d3a1ba7d9e2c64c8bcc46003a3fc3658a0cfc37 /media
parentc14cd5d38ef564ea5ca518aa2ac06e92cbb43265 (diff)
downloadchromium_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.cc14
-rw-r--r--media/filters/chunk_demuxer_unittest.cc11
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));