Bug 1295352 - Use mState in MediaEngineTabVideoSource. r=jesup
MozReview-Commit-ID: 1zZlMXAqpo7
--- a/dom/media/webrtc/MediaEngineTabVideoSource.cpp
+++ b/dom/media/webrtc/MediaEngineTabVideoSource.cpp
@@ -144,16 +144,22 @@ MediaEngineTabVideoSource::Allocate(cons
const char** aOutBadConstraint)
{
// windowId is not a proper constraint, so just read it.
// It has no well-defined behavior in advanced, so ignore it there.
mWindowId = aConstraints.mBrowserWindow.WasPassed() ?
aConstraints.mBrowserWindow.Value() : -1;
*aOutHandle = nullptr;
+
+ {
+ MonitorAutoLock mon(mMonitor);
+ mState = kAllocated;
+ }
+
return Restart(nullptr, aConstraints, aPrefs, aDeviceId, aOutBadConstraint);
}
nsresult
MediaEngineTabVideoSource::Restart(AllocationHandle* aHandle,
const dom::MediaTrackConstraints& aConstraints,
const mozilla::MediaEnginePrefs& aPrefs,
const nsString& aDeviceId,
@@ -182,31 +188,40 @@ MediaEngineTabVideoSource::Restart(Alloc
}
return NS_OK;
}
nsresult
MediaEngineTabVideoSource::Deallocate(AllocationHandle* aHandle)
{
MOZ_ASSERT(!aHandle);
+ {
+ MonitorAutoLock mon(mMonitor);
+ mState = kReleased;
+ }
return NS_OK;
}
nsresult
MediaEngineTabVideoSource::Start(SourceMediaStream* aStream, TrackID aID,
const PrincipalHandle& aPrincipalHandle)
{
nsCOMPtr<nsIRunnable> runnable;
if (!mWindow)
runnable = new InitRunnable(this);
else
runnable = new StartRunnable(this);
NS_DispatchToMainThread(runnable);
aStream->AddTrack(aID, 0, new VideoSegment());
+ {
+ MonitorAutoLock mon(mMonitor);
+ mState = kStarted;
+ }
+
return NS_OK;
}
void
MediaEngineTabVideoSource::NotifyPull(MediaStreamGraph*,
SourceMediaStream* aSource,
TrackID aID, StreamTime aDesiredTime,
const PrincipalHandle& aPrincipalHandle)
@@ -333,25 +348,32 @@ MediaEngineTabVideoSource::Draw() {
RefPtr<layers::SourceSurfaceImage> image = new layers::SourceSurfaceImage(size, surface);
MonitorAutoLock mon(mMonitor);
mImage = image;
}
nsresult
-MediaEngineTabVideoSource::Stop(mozilla::SourceMediaStream*, mozilla::TrackID)
+MediaEngineTabVideoSource::Stop(mozilla::SourceMediaStream* aSource,
+ mozilla::TrackID aID)
{
// If mBlackedoutWindow is true, we may be running
// despite mWindow == nullptr.
if (!mWindow && !mBlackedoutWindow) {
return NS_OK;
}
NS_DispatchToMainThread(new StopRunnable(this));
+
+ {
+ MonitorAutoLock mon(mMonitor);
+ mState = kStopped;
+ aSource->EndTrack(aID);
+ }
return NS_OK;
}
bool
MediaEngineTabVideoSource::IsFake()
{
return false;
}