Bug 1367128: P3. Plumb in new eviction methods with MSE demuxer. r?alwu
MozReview-Commit-ID: HULNEfD3tRJ
--- 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