mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1003006: Move b2g camera rotation checks to MainThread r=mikeh
This commit is contained in:
parent
a8ec7121f2
commit
5b6c282707
@ -170,6 +170,7 @@ public:
|
|||||||
NS_DECL_ISUPPORTS_INHERITED
|
NS_DECL_ISUPPORTS_INHERITED
|
||||||
|
|
||||||
void OnHardwareStateChange(HardwareState aState);
|
void OnHardwareStateChange(HardwareState aState);
|
||||||
|
void GetRotation();
|
||||||
bool OnNewPreviewFrame(layers::Image* aImage, uint32_t aWidth, uint32_t aHeight);
|
bool OnNewPreviewFrame(layers::Image* aImage, uint32_t aWidth, uint32_t aHeight);
|
||||||
void OnUserError(UserContext aContext, nsresult aError);
|
void OnUserError(UserContext aContext, nsresult aError);
|
||||||
void OnTakePictureComplete(uint8_t* aData, uint32_t aLength, const nsAString& aMimeType);
|
void OnTakePictureComplete(uint8_t* aData, uint32_t aLength, const nsAString& aMimeType);
|
||||||
@ -212,9 +213,12 @@ private:
|
|||||||
|
|
||||||
// Engine variables.
|
// Engine variables.
|
||||||
#ifdef MOZ_B2G_CAMERA
|
#ifdef MOZ_B2G_CAMERA
|
||||||
nsRefPtr<ICameraControl> mCameraControl;
|
|
||||||
mozilla::ReentrantMonitor mCallbackMonitor; // Monitor for camera callback handling
|
mozilla::ReentrantMonitor mCallbackMonitor; // Monitor for camera callback handling
|
||||||
|
// This is only modified on MainThread (AllocImpl and DeallocImpl)
|
||||||
|
nsRefPtr<ICameraControl> mCameraControl;
|
||||||
nsRefPtr<nsIDOMFile> mLastCapture;
|
nsRefPtr<nsIDOMFile> mLastCapture;
|
||||||
|
|
||||||
|
// These are protected by mMonitor below
|
||||||
int mRotation;
|
int mRotation;
|
||||||
int mCameraAngle; // See dom/base/ScreenOrientation.h
|
int mCameraAngle; // See dom/base/ScreenOrientation.h
|
||||||
bool mBackCamera;
|
bool mBackCamera;
|
||||||
|
@ -415,7 +415,7 @@ MediaEngineWebRTCVideoSource::Allocate(const VideoTrackConstraintsN &aConstraint
|
|||||||
ReentrantMonitorAutoEnter sync(mCallbackMonitor);
|
ReentrantMonitorAutoEnter sync(mCallbackMonitor);
|
||||||
if (mState == kReleased && mInitDone) {
|
if (mState == kReleased && mInitDone) {
|
||||||
ChooseCapability(aConstraints, aPrefs);
|
ChooseCapability(aConstraints, aPrefs);
|
||||||
NS_DispatchToMainThread(WrapRunnable(this,
|
NS_DispatchToMainThread(WrapRunnable(nsRefPtr<MediaEngineWebRTCVideoSource>(this),
|
||||||
&MediaEngineWebRTCVideoSource::AllocImpl));
|
&MediaEngineWebRTCVideoSource::AllocImpl));
|
||||||
mCallbackMonitor.Wait();
|
mCallbackMonitor.Wait();
|
||||||
if (mState != kAllocated) {
|
if (mState != kAllocated) {
|
||||||
@ -459,7 +459,7 @@ MediaEngineWebRTCVideoSource::Deallocate()
|
|||||||
#ifdef MOZ_B2G_CAMERA
|
#ifdef MOZ_B2G_CAMERA
|
||||||
// We do not register success callback here
|
// We do not register success callback here
|
||||||
|
|
||||||
NS_DispatchToMainThread(WrapRunnable(this,
|
NS_DispatchToMainThread(WrapRunnable(nsRefPtr<MediaEngineWebRTCVideoSource>(this),
|
||||||
&MediaEngineWebRTCVideoSource::DeallocImpl));
|
&MediaEngineWebRTCVideoSource::DeallocImpl));
|
||||||
mCallbackMonitor.Wait();
|
mCallbackMonitor.Wait();
|
||||||
if (mState != kReleased) {
|
if (mState != kReleased) {
|
||||||
@ -519,7 +519,7 @@ MediaEngineWebRTCVideoSource::Start(SourceMediaStream* aStream, TrackID aID)
|
|||||||
mImageContainer = layers::LayerManager::CreateImageContainer();
|
mImageContainer = layers::LayerManager::CreateImageContainer();
|
||||||
|
|
||||||
#ifdef MOZ_B2G_CAMERA
|
#ifdef MOZ_B2G_CAMERA
|
||||||
NS_DispatchToMainThread(WrapRunnable(this,
|
NS_DispatchToMainThread(WrapRunnable(nsRefPtr<MediaEngineWebRTCVideoSource>(this),
|
||||||
&MediaEngineWebRTCVideoSource::StartImpl,
|
&MediaEngineWebRTCVideoSource::StartImpl,
|
||||||
mCapability));
|
mCapability));
|
||||||
mCallbackMonitor.Wait();
|
mCallbackMonitor.Wait();
|
||||||
@ -573,7 +573,7 @@ MediaEngineWebRTCVideoSource::Stop(SourceMediaStream *aSource, TrackID aID)
|
|||||||
mImage = nullptr;
|
mImage = nullptr;
|
||||||
}
|
}
|
||||||
#ifdef MOZ_B2G_CAMERA
|
#ifdef MOZ_B2G_CAMERA
|
||||||
NS_DispatchToMainThread(WrapRunnable(this,
|
NS_DispatchToMainThread(WrapRunnable(nsRefPtr<MediaEngineWebRTCVideoSource>(this),
|
||||||
&MediaEngineWebRTCVideoSource::StopImpl));
|
&MediaEngineWebRTCVideoSource::StopImpl));
|
||||||
#else
|
#else
|
||||||
mViERender->StopRender(mCaptureIndex);
|
mViERender->StopRender(mCaptureIndex);
|
||||||
@ -789,11 +789,25 @@ MediaEngineWebRTCVideoSource::OnHardwareStateChange(HardwareState aState)
|
|||||||
mCallbackMonitor.Notify();
|
mCallbackMonitor.Notify();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// Can't read this except on MainThread (ugh)
|
||||||
|
NS_DispatchToMainThread(WrapRunnable(nsRefPtr<MediaEngineWebRTCVideoSource>(this),
|
||||||
|
&MediaEngineWebRTCVideoSource::GetRotation));
|
||||||
|
mState = kStarted;
|
||||||
|
mCallbackMonitor.Notify();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MediaEngineWebRTCVideoSource::GetRotation()
|
||||||
|
{
|
||||||
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
|
MonitorAutoLock enter(mMonitor);
|
||||||
|
|
||||||
mCameraControl->Get(CAMERA_PARAM_SENSORANGLE, mCameraAngle);
|
mCameraControl->Get(CAMERA_PARAM_SENSORANGLE, mCameraAngle);
|
||||||
MOZ_ASSERT(mCameraAngle == 0 || mCameraAngle == 90 || mCameraAngle == 180 ||
|
MOZ_ASSERT(mCameraAngle == 0 || mCameraAngle == 90 || mCameraAngle == 180 ||
|
||||||
mCameraAngle == 270);
|
mCameraAngle == 270);
|
||||||
hal::ScreenConfiguration aConfig;
|
hal::ScreenConfiguration config;
|
||||||
hal::GetCurrentScreenConfiguration(&aConfig);
|
hal::GetCurrentScreenConfiguration(&config);
|
||||||
|
|
||||||
nsCString deviceName;
|
nsCString deviceName;
|
||||||
ICameraControl::GetCameraName(mCaptureIndex, deviceName);
|
ICameraControl::GetCameraName(mCaptureIndex, deviceName);
|
||||||
@ -801,12 +815,9 @@ MediaEngineWebRTCVideoSource::OnHardwareStateChange(HardwareState aState)
|
|||||||
mBackCamera = true;
|
mBackCamera = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
mRotation = GetRotateAmount(aConfig.orientation(), mCameraAngle, mBackCamera);
|
mRotation = GetRotateAmount(config.orientation(), mCameraAngle, mBackCamera);
|
||||||
LOG(("*** Initial orientation: %d (Camera %d Back %d MountAngle: %d)",
|
LOG(("*** Initial orientation: %d (Camera %d Back %d MountAngle: %d)",
|
||||||
mRotation, mCaptureIndex, mBackCamera, mCameraAngle));
|
mRotation, mCaptureIndex, mBackCamera, mCameraAngle));
|
||||||
mState = kStarted;
|
|
||||||
mCallbackMonitor.Notify();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user