mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-28 05:10:49 +00:00
Bug 1171311: P10. Add MediaDataDemuxer::GetSamplesMayBlock() method. r=cpearce
This is used by the MediaFormatReader to dermine if buffering heuristics should be used. --HG-- extra : rebase_source : 49d67f021ce8660cd67a12510e5c631d6b96698a
This commit is contained in:
parent
4b7429a4cd
commit
50d6f9e616
@ -156,6 +156,15 @@ public:
|
||||
// sample will contains multiple audio frames.
|
||||
virtual nsRefPtr<SamplesPromise> GetSamples(int32_t aNumSamples = 1) = 0;
|
||||
|
||||
// Returns true if a call to GetSamples() may block while waiting on the
|
||||
// underlying resource to return the data.
|
||||
// This is used by the MediaFormatReader to determine if buffering heuristics
|
||||
// should be used.
|
||||
virtual bool GetSamplesMayBlock() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// Cancel all pending actions (Seek, GetSamples) and reset current state
|
||||
// All pending promises are to be rejected with CANCEL.
|
||||
// The next call to GetSamples would return the first sample available in the
|
||||
|
@ -72,6 +72,7 @@ MediaFormatReader::MediaFormatReader(AbstractMediaDecoder* aDecoder,
|
||||
, mInitDone(false)
|
||||
, mSeekable(false)
|
||||
, mIsEncrypted(false)
|
||||
, mTrackDemuxersMayBlock(false)
|
||||
, mCachedTimeRangesStale(true)
|
||||
#if defined(READER_DORMANT_HEURISTIC)
|
||||
, mDormantEnabled(Preferences::GetBool("media.decoder.heuristic.dormant.enabled", false))
|
||||
@ -304,6 +305,7 @@ MediaFormatReader::OnDemuxerInitDone(nsresult)
|
||||
mInfo.mVideo = *mVideo.mTrackDemuxer->GetInfo()->GetAsVideoInfo();
|
||||
mVideo.mCallback = new DecoderCallback(this, TrackInfo::kVideoTrack);
|
||||
mVideo.mTimeRanges = mVideo.mTrackDemuxer->GetBuffered();
|
||||
mTrackDemuxersMayBlock |= mVideo.mTrackDemuxer->GetSamplesMayBlock();
|
||||
}
|
||||
|
||||
bool audioActive = !!mDemuxer->GetNumberTracks(TrackInfo::kAudioTrack);
|
||||
@ -313,6 +315,7 @@ MediaFormatReader::OnDemuxerInitDone(nsresult)
|
||||
mInfo.mAudio = *mAudio.mTrackDemuxer->GetInfo()->GetAsAudioInfo();
|
||||
mAudio.mCallback = new DecoderCallback(this, TrackInfo::kAudioTrack);
|
||||
mAudio.mTimeRanges = mAudio.mTrackDemuxer->GetBuffered();
|
||||
mTrackDemuxersMayBlock |= mAudio.mTrackDemuxer->GetSamplesMayBlock();
|
||||
}
|
||||
|
||||
UniquePtr<EncryptionInfo> crypto = mDemuxer->GetCrypto();
|
||||
|
@ -99,6 +99,11 @@ public:
|
||||
|
||||
int64_t ComputeStartTime(const VideoData* aVideo, const AudioData* aAudio) override;
|
||||
|
||||
bool UseBufferingHeuristics() override
|
||||
{
|
||||
return mTrackDemuxersMayBlock;
|
||||
}
|
||||
|
||||
private:
|
||||
bool InitDemuxer();
|
||||
// Notify the demuxer that new data has been received.
|
||||
@ -366,6 +371,9 @@ private:
|
||||
// become incorrect.
|
||||
bool mIsEncrypted;
|
||||
|
||||
// Set to true if any of our track buffers may be blocking.
|
||||
bool mTrackDemuxersMayBlock;
|
||||
|
||||
// Seeking objects.
|
||||
bool IsSeeking() const { return mPendingSeekTime.isSome(); }
|
||||
void AttemptSeek();
|
||||
|
@ -107,6 +107,11 @@ public:
|
||||
|
||||
void BreakCycles() override;
|
||||
|
||||
bool GetSamplesMayBlock() const override
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Called by TrackBuffersManager to indicate that new frames were added or
|
||||
// removed.
|
||||
void NotifyTimeRangesChanged();
|
||||
|
Loading…
x
Reference in New Issue
Block a user