Bug 1216850. Part 3 - backout bug 1214073. r=me.

This commit is contained in:
JW Wang 2015-10-21 14:04:20 +08:00
parent 8e64159f84
commit 1deed476dc
8 changed files with 14 additions and 32 deletions

View File

@ -96,16 +96,7 @@ public:
// Release media resources they should be released in dormant state
// The reader can be made usable again by calling ReadMetadata().
void ReleaseMediaResources()
{
if (OnTaskQueue()) {
ReleaseMediaResourcesInternal();
return;
}
nsCOMPtr<nsIRunnable> r = NS_NewRunnableMethod(
this, &MediaDecoderReader::ReleaseMediaResourcesInternal);
OwnerThread()->Dispatch(r.forget());
}
virtual void ReleaseMediaResources() {};
// Breaks reference-counted cycles. Called during shutdown.
// WARNING: If you override this, you must call the base implementation
// in your override.
@ -252,9 +243,6 @@ public:
virtual size_t SizeOfVideoQueueInFrames();
virtual size_t SizeOfAudioQueueInFrames();
private:
virtual void ReleaseMediaResourcesInternal() {}
protected:
friend class TrackBuffer;
virtual void NotifyDataArrivedInternal(uint32_t aLength, int64_t aOffset) { }

View File

@ -1287,7 +1287,8 @@ MediaDecoderStateMachine::SetDormant(bool aDormant)
// that run after ResetDecode are supposed to run with a clean slate. We rely
// on that in other places (i.e. seeking), so it seems reasonable to rely on
// it here as well.
mReader->ReleaseMediaResources();
nsCOMPtr<nsIRunnable> r = NS_NewRunnableMethod(mReader, &MediaDecoderReader::ReleaseMediaResources);
DecodeTaskQueue()->Dispatch(r.forget());
} else if ((aDormant != true) && (mState == DECODER_STATE_DORMANT)) {
ScheduleStateMachine();
mDecodingFirstFrame = true;

View File

@ -1582,9 +1582,8 @@ MediaFormatReader::GetBuffered()
return intervals.Shift(media::TimeUnit::FromMicroseconds(-startTime));
}
void MediaFormatReader::ReleaseMediaResourcesInternal()
void MediaFormatReader::ReleaseMediaResources()
{
MOZ_ASSERT(OnTaskQueue());
// Before freeing a video codec, all video buffers needed to be released
// even from graphics pipeline.
if (mVideoFrameContainer) {

View File

@ -73,6 +73,9 @@ public:
virtual bool ForceZeroStartTime() const override;
// For Media Resource Management
void ReleaseMediaResources() override;
nsresult ResetDecode() override;
RefPtr<ShutdownPromise> Shutdown() override;
@ -439,10 +442,6 @@ private:
#if defined(READER_DORMANT_HEURISTIC)
const bool mDormantEnabled;
#endif
private:
// For Media Resource Management
void ReleaseMediaResourcesInternal() override;
};
} // namespace mozilla

View File

@ -284,10 +284,8 @@ MediaCodecReader::~MediaCodecReader()
}
void
MediaCodecReader::ReleaseMediaResourcesInternal()
MediaCodecReader::ReleaseMediaResources()
{
MOZ_ASSERT(OnTaskQueue());
// Stop the mSource because we are in the dormant state and the stop function
// will rewind the mSource to the beginning of the stream.
if (mVideoTrack.mSource != nullptr && !mVideoTrack.mSourceIsStopped) {

View File

@ -60,6 +60,9 @@ public:
MediaCodecReader(AbstractMediaDecoder* aDecoder);
virtual ~MediaCodecReader();
// Release media resources they should be released in dormant state
virtual void ReleaseMediaResources();
// Destroys the decoding state. The reader cannot be made usable again.
// This is different from ReleaseMediaResources() as Shutdown() is
// irreversible, whereas ReleaseMediaResources() is reversible.
@ -433,10 +436,6 @@ private:
nsTArray<ReleaseItem> mPendingReleaseItems;
NotifyDataArrivedFilter mFilter;
private:
// Release media resources they should be released in dormant state
virtual void ReleaseMediaResourcesInternal() override;
};
} // namespace mozilla

View File

@ -170,10 +170,8 @@ MediaOmxReader::Shutdown()
return p;
}
void MediaOmxReader::ReleaseMediaResourcesInternal()
void MediaOmxReader::ReleaseMediaResources()
{
MOZ_ASSERT(OnTaskQueue());
mMediaResourceRequest.DisconnectIfExists();
mMetadataPromise.RejectIfExists(ReadMetadataFailureReason::METADATA_ERROR, __func__);

View File

@ -95,6 +95,8 @@ public:
return mHasVideo;
}
virtual void ReleaseMediaResources() override;
virtual RefPtr<MediaDecoderReader::MetadataPromise> AsyncReadMetadata() override;
virtual RefPtr<SeekPromise>
@ -116,8 +118,6 @@ private:
class ProcessCachedDataTask;
class NotifyDataArrivedRunnable;
virtual void ReleaseMediaResourcesInternal() override;
bool IsShutdown() {
MutexAutoLock lock(mShutdownMutex);
return mIsShutdown;