Bug 1287350. Part 1 - extract some code to {Connect,Disconnect}Mirrors. r=jya.
MozReview-Commit-ID: Ayf109fFhRU
--- a/dom/media/MediaDecoder.cpp
+++ b/dom/media/MediaDecoder.cpp
@@ -1576,38 +1576,52 @@ MediaDecoder::SetPlaybackRate(double aPl
void
MediaDecoder::SetPreservesPitch(bool aPreservesPitch)
{
MOZ_ASSERT(NS_IsMainThread());
mPreservesPitch = aPreservesPitch;
}
void
+MediaDecoder::ConnectMirrors(MediaDecoderStateMachine* aObject)
+{
+ MOZ_ASSERT(NS_IsMainThread());
+ MOZ_ASSERT(aObject);
+ mStateMachineDuration.Connect(aObject->CanonicalDuration());
+ mBuffered.Connect(aObject->CanonicalBuffered());
+ mStateMachineIsShutdown.Connect(aObject->CanonicalIsShutdown());
+ mNextFrameStatus.Connect(aObject->CanonicalNextFrameStatus());
+ mCurrentPosition.Connect(aObject->CanonicalCurrentPosition());
+ mPlaybackPosition.Connect(aObject->CanonicalPlaybackOffset());
+ mIsAudioDataAudible.Connect(aObject->CanonicalIsAudioDataAudible());
+}
+
+void
+MediaDecoder::DisconnectMirrors()
+{
+ MOZ_ASSERT(NS_IsMainThread());
+ mStateMachineDuration.DisconnectIfConnected();
+ mBuffered.DisconnectIfConnected();
+ mStateMachineIsShutdown.DisconnectIfConnected();
+ mNextFrameStatus.DisconnectIfConnected();
+ mCurrentPosition.DisconnectIfConnected();
+ mPlaybackPosition.DisconnectIfConnected();
+ mIsAudioDataAudible.DisconnectIfConnected();
+}
+
+void
MediaDecoder::SetStateMachine(MediaDecoderStateMachine* aStateMachine)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT_IF(aStateMachine, !mDecoderStateMachine);
mDecoderStateMachine = aStateMachine;
-
- if (mDecoderStateMachine) {
- mStateMachineDuration.Connect(mDecoderStateMachine->CanonicalDuration());
- mBuffered.Connect(mDecoderStateMachine->CanonicalBuffered());
- mStateMachineIsShutdown.Connect(mDecoderStateMachine->CanonicalIsShutdown());
- mNextFrameStatus.Connect(mDecoderStateMachine->CanonicalNextFrameStatus());
- mCurrentPosition.Connect(mDecoderStateMachine->CanonicalCurrentPosition());
- mPlaybackPosition.Connect(mDecoderStateMachine->CanonicalPlaybackOffset());
- mIsAudioDataAudible.Connect(mDecoderStateMachine->CanonicalIsAudioDataAudible());
+ if (aStateMachine) {
+ ConnectMirrors(aStateMachine);
} else {
- mStateMachineDuration.DisconnectIfConnected();
- mBuffered.DisconnectIfConnected();
- mStateMachineIsShutdown.DisconnectIfConnected();
- mNextFrameStatus.DisconnectIfConnected();
- mCurrentPosition.DisconnectIfConnected();
- mPlaybackPosition.DisconnectIfConnected();
- mIsAudioDataAudible.DisconnectIfConnected();
+ DisconnectMirrors();
}
}
ImageContainer*
MediaDecoder::GetImageContainer()
{
return mVideoFrameContainer ? mVideoFrameContainer->GetImageContainer() : nullptr;
}
--- a/dom/media/MediaDecoder.h
+++ b/dom/media/MediaDecoder.h
@@ -598,16 +598,19 @@ private:
void OnMediaNotSeekable()
{
SetMediaSeekable(false);
}
void FinishShutdown();
+ void ConnectMirrors(MediaDecoderStateMachine* aObject);
+ void DisconnectMirrors();
+
MediaEventProducer<void> mDataArrivedEvent;
// The state machine object for handling the decoding. It is safe to
// call methods of this object from other threads. Its internal data
// is synchronised on a monitor. The lifetime of this object is
// after mPlayState is LOADING and before mPlayState is SHUTDOWN. It
// is safe to access it during this period.
//