Bug 1213517 - Wire up getSettings(). r=padenot

MozReview-Commit-ID: EX5FIo3rCoi

--HG--
extra : rebase_source : c9a814eb3fbc0a7455ec7c290c3c074cf1b45e7e
This commit is contained in:
Jan-Ivar Bruaroey 2016-06-20 00:38:25 -04:00
Родитель 89411754e1
Коммит 018c5b2f42
6 изменённых файлов: 57 добавлений и 6 удалений

Просмотреть файл

@ -356,6 +356,13 @@ public:
mVideoDevice->GetMediaSource() == dom::MediaSourceEnum::Browser;
}
void GetSettings(dom::MediaTrackSettings& aOutSettings)
{
if (mVideoDevice) {
mVideoDevice->GetSource()->GetSettings(aOutSettings);
}
}
// implement in .cpp to avoid circular dependency with MediaOperationTask
// Can be invoked from EITHER MainThread or MSG thread
void Stop();
@ -1135,6 +1142,11 @@ public:
return mListener->ApplyConstraintsToTrack(aWindow, mTrackID, aConstraints);
}
void
GetSettings(dom::MediaTrackSettings& aOutSettings) override
{
mListener->GetSettings(aOutSettings);
}
void Stop() override
{

Просмотреть файл

@ -250,14 +250,16 @@ MediaStreamTrack::Stop()
mReadyState = MediaStreamTrackState::Ended;
}
void MediaStreamTrack::GetConstraints(dom::MediaTrackConstraints& aResult)
void
MediaStreamTrack::GetConstraints(dom::MediaTrackConstraints& aResult)
{
aResult = mConstraints;
}
void MediaStreamTrack::GetSettings(dom::MediaTrackSettings& aResult)
void
MediaStreamTrack::GetSettings(dom::MediaTrackSettings& aResult)
{
aResult = mSettings;
GetSource().GetSettings(aResult);
}
already_AddRefed<Promise>

Просмотреть файл

@ -134,6 +134,12 @@ public:
ApplyConstraints(nsPIDOMWindowInner* aWindow,
const dom::MediaTrackConstraints& aConstraints);
/**
* Same for GetSettings (no-op).
*/
virtual void
GetSettings(dom::MediaTrackSettings& aResult) {};
/**
* Called by the source interface when all registered sinks have unregistered.
*/
@ -213,6 +219,9 @@ public:
MediaSourceEnum GetMediaSource() const override { return mMediaSource; }
void
GetSettings(dom::MediaTrackSettings& aResult) override {}
void Stop() override {}
protected:
@ -436,7 +445,6 @@ protected:
bool mEnabled;
const bool mRemote;
dom::MediaTrackConstraints mConstraints;
dom::MediaTrackSettings mSettings;
};
} // namespace dom

Просмотреть файл

@ -197,6 +197,12 @@ public:
const nsTArray<const NormalizedConstraintSet*>& aConstraintSets,
const nsString& aDeviceId) const = 0;
void GetSettings(dom::MediaTrackSettings& aOutSettings)
{
MOZ_ASSERT(NS_IsMainThread());
aOutSettings = mSettings;
}
protected:
// Only class' own members can be initialized in constructor initializer list.
explicit MediaEngineSource(MediaEngineState aState)
@ -217,6 +223,8 @@ protected:
PRThread* mOwningThread;
#endif
bool mHasFakeTracks;
// Main-thread only:
dom::MediaTrackSettings mSettings;
};
/**

Просмотреть файл

@ -36,6 +36,9 @@ MediaEngineRemoteVideoSource::MediaEngineRemoteVideoSource(
mInShutdown(false)
{
MOZ_ASSERT(aMediaSource != dom::MediaSourceEnum::Other);
mSettings.mWidth.Construct(0);
mSettings.mHeight.Construct(0);
mSettings.mFrameRate.Construct(0);
Init();
}
@ -327,7 +330,7 @@ MediaEngineRemoteVideoSource::UpdateExisting(AllocationHandle* aHandle,
return NS_ERROR_FAILURE;
}
mState = kAllocated;
mLastCapability = mCapability;
SetLastCapability(mCapability);
LOG(("Video device %d allocated for %s", mCaptureIndex,
aHandle->mOrigin.get()));
break;
@ -342,7 +345,7 @@ MediaEngineRemoteVideoSource::UpdateExisting(AllocationHandle* aHandle,
LOG(("StartCapture failed"));
return NS_ERROR_FAILURE;
}
mLastCapability = mCapability;
SetLastCapability(mCapability);
}
break;
@ -357,6 +360,23 @@ MediaEngineRemoteVideoSource::UpdateExisting(AllocationHandle* aHandle,
return NS_OK;
}
void
MediaEngineRemoteVideoSource::SetLastCapability(
const webrtc::CaptureCapability& aCapability)
{
mLastCapability = mCapability;
webrtc::CaptureCapability cap = aCapability;
RefPtr<MediaEngineRemoteVideoSource> that = this;
NS_DispatchToMainThread(media::NewRunnableFrom([this, that, cap]() mutable {
mSettings.mWidth.Value() = cap.width;
mSettings.mHeight.Value() = cap.height;
mSettings.mFrameRate.Value() = cap.maxFPS;
return NS_OK;
}));
}
void
MediaEngineRemoteVideoSource::NotifyPull(MediaStreamGraph* aGraph,
SourceMediaStream* aSource,

Просмотреть файл

@ -130,6 +130,7 @@ private:
void Init();
size_t NumCapabilities() const override;
void GetCapability(size_t aIndex, webrtc::CaptureCapability& aOut) const override;
void SetLastCapability(const webrtc::CaptureCapability& aCapability);
/* UpdateExisting - Centralized function to apply constraints and restart
* device as needed, considering all allocations and changes to one.