Bug 1367128: P3. Plumb in new eviction methods with MSE demuxer. r?alwu draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Fri, 02 Jun 2017 21:16:33 +0200
changeset 588678 8c5e9d525369d82198425270af5c299d588c6462
parent 588677 5729f90d9bd29584adce9f622d7f206305d2e661
child 588864 9f997d563a5139f1f42c958d5446b95094befae9
child 588871 7be69dd94b6d3e15cf76791f66a342ab2a8da78b
push id62109
push userbmo:jyavenard@mozilla.com
push dateSat, 03 Jun 2017 18:35:21 +0000
reviewersalwu
bugs1367128
milestone55.0a1
Bug 1367128: P3. Plumb in new eviction methods with MSE demuxer. r?alwu MozReview-Commit-ID: HULNEfD3tRJ
dom/media/fmp4/MP4Demuxer.cpp
--- a/dom/media/fmp4/MP4Demuxer.cpp
+++ b/dom/media/fmp4/MP4Demuxer.cpp
@@ -52,16 +52,18 @@ public:
 
   RefPtr<SkipAccessPointPromise>
   SkipToNextRandomAccessPoint(const media::TimeUnit& aTimeThreshold) override;
 
   media::TimeIntervals GetBuffered() override;
 
   void BreakCycles() override;
 
+  void NotifyDataRemoved();
+
 private:
   friend class MP4Demuxer;
   void NotifyDataArrived();
   already_AddRefed<MediaRawData> GetNextSample();
   void EnsureUpToDateIndex();
   void SetNextKeyFrameTime();
   RefPtr<MP4Demuxer> mParent;
   RefPtr<mp4_demuxer::ResourceStream> mStream;
@@ -323,20 +325,20 @@ MP4Demuxer::NotifyDataArrived()
     dmx->NotifyDataArrived();
   }
 }
 
 void
 MP4Demuxer::NotifyDataRemoved()
 {
   for (auto& dmx : mAudioDemuxers) {
-    dmx->NotifyDataArrived();
+    dmx->NotifyDataRemoved();
   }
   for (auto& dmx : mVideoDemuxers) {
-    dmx->NotifyDataArrived();
+    dmx->NotifyDataRemoved();
   }
 }
 
 UniquePtr<EncryptionInfo>
 MP4Demuxer::GetCrypto()
 {
   UniquePtr<EncryptionInfo> crypto;
   if (!mCryptoInitData.IsEmpty()) {
@@ -606,16 +608,29 @@ MP4TrackDemuxer::GetBuffered()
 
 void
 MP4TrackDemuxer::NotifyDataArrived()
 {
   mNeedReIndex = true;
 }
 
 void
+MP4TrackDemuxer::NotifyDataRemoved()
+{
+  AutoPinned<MediaResource> resource(mParent->mResource);
+  MediaByteRangeSet byteRanges;
+  nsresult rv = resource->GetCachedRanges(byteRanges);
+  if (NS_FAILED(rv)) {
+    return;
+  }
+  mIndex->UpdateMoofIndex(byteRanges, true /* can evict */);
+  mNeedReIndex = false;
+}
+
+void
 MP4TrackDemuxer::BreakCycles()
 {
   mParent = nullptr;
 }
 
 } // namespace mozilla
 
 #undef LOG