Bug 1234424. Part 1 - share the underlying value of MDSM::mSameOriginMedia with DecodedStream. r=roc.
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -236,18 +236,16 @@ MediaDecoderStateMachine::MediaDecoderSt
mDecodeToSeekTarget(false),
mCurrentTimeBeforeSeek(0),
mCorruptFrames(60),
mDecodingFirstFrame(true),
mSentLoadedMetadataEvent(false),
mSentFirstFrameLoadedEvent(false, "MediaDecoderStateMachine::mSentFirstFrameLoadedEvent"),
mSentPlaybackEndedEvent(false),
mOutputStreamManager(new OutputStreamManager()),
- mStreamSink(new DecodedStream(
- mTaskQueue, mAudioQueue, mVideoQueue, mOutputStreamManager)),
mResource(aDecoder->GetResource()),
mAudioOffloading(false),
mBuffered(mTaskQueue, TimeIntervals(),
"MediaDecoderStateMachine::mBuffered (Mirror)"),
mEstimatedDuration(mTaskQueue, NullableTimeUnit(),
"MediaDecoderStateMachine::mEstimatedDuration (Mirror)"),
mExplicitDuration(mTaskQueue, Maybe<double>(),
"MediaDecoderStateMachine::mExplicitDuration (Mirror)"),
@@ -334,16 +332,19 @@ MediaDecoderStateMachine::~MediaDecoderS
#endif
}
void
MediaDecoderStateMachine::InitializationTask(MediaDecoder* aDecoder)
{
MOZ_ASSERT(OnTaskQueue());
+ mStreamSink = new DecodedStream(mTaskQueue, mAudioQueue, mVideoQueue,
+ mOutputStreamManager, mSameOriginMedia.Ref());
+
// Connect mirrors.
mBuffered.Connect(mReader->CanonicalBuffered());
mEstimatedDuration.Connect(aDecoder->CanonicalEstimatedDuration());
mExplicitDuration.Connect(aDecoder->CanonicalExplicitDuration());
mPlayState.Connect(aDecoder->CanonicalPlayState());
mNextPlayState.Connect(aDecoder->CanonicalNextPlayState());
mLogicallySeeking.Connect(aDecoder->CanonicalLogicallySeeking());
mVolume.Connect(aDecoder->CanonicalVolume());
--- a/dom/media/mediasink/DecodedStream.cpp
+++ b/dom/media/mediasink/DecodedStream.cpp
@@ -183,21 +183,22 @@ DecodedStreamData::SetPlaying(bool aPlay
mPlaying = aPlaying;
UpdateStreamSuspended(mStream, !mPlaying);
}
}
DecodedStream::DecodedStream(AbstractThread* aOwnerThread,
MediaQueue<MediaData>& aAudioQueue,
MediaQueue<MediaData>& aVideoQueue,
- OutputStreamManager* aOutputStreamManager)
+ OutputStreamManager* aOutputStreamManager,
+ const bool& aSameOrigin)
: mOwnerThread(aOwnerThread)
, mOutputStreamManager(aOutputStreamManager)
, mPlaying(false)
- , mSameOrigin(false)
+ , mSameOrigin(aSameOrigin)
, mAudioQueue(aAudioQueue)
, mVideoQueue(aVideoQueue)
{
}
DecodedStream::~DecodedStream()
{
MOZ_ASSERT(mStartTime.isNothing(), "playback should've ended.");
--- a/dom/media/mediasink/DecodedStream.h
+++ b/dom/media/mediasink/DecodedStream.h
@@ -30,17 +30,18 @@ template <class T> class MediaQueue;
class DecodedStream : public media::MediaSink {
using media::MediaSink::PlaybackParams;
public:
DecodedStream(AbstractThread* aOwnerThread,
MediaQueue<MediaData>& aAudioQueue,
MediaQueue<MediaData>& aVideoQueue,
- OutputStreamManager* aOutputStreamManager);
+ OutputStreamManager* aOutputStreamManager,
+ const bool& aSameOrigin);
// MediaSink functions.
const PlaybackParams& GetPlaybackParams() const override;
void SetPlaybackParams(const PlaybackParams& aParams) override;
RefPtr<GenericPromise> OnEnded(TrackType aType) override;
int64_t GetEndTime(TrackType aType) const override;
int64_t GetPosition(TimeStamp* aTimeStamp = nullptr) const override;
@@ -93,17 +94,17 @@ private:
/*
* Worker thread only members.
*/
UniquePtr<DecodedStreamData> mData;
RefPtr<GenericPromise> mFinishPromise;
bool mPlaying;
- bool mSameOrigin;
+ const bool& mSameOrigin; // valid until Shutdown() is called.
PlaybackParams mParams;
Maybe<int64_t> mStartTime;
MediaInfo mInfo;
MediaQueue<MediaData>& mAudioQueue;
MediaQueue<MediaData>& mVideoQueue;