diff options
Diffstat (limited to 'dom/media/systemservices')
-rw-r--r-- | dom/media/systemservices/CamerasChild.cpp | 15 | ||||
-rw-r--r-- | dom/media/systemservices/CamerasChild.h | 11 | ||||
-rw-r--r-- | dom/media/systemservices/MediaSystemResourceService.cpp | 17 | ||||
-rw-r--r-- | dom/media/systemservices/moz.build | 10 |
4 files changed, 23 insertions, 30 deletions
diff --git a/dom/media/systemservices/CamerasChild.cpp b/dom/media/systemservices/CamerasChild.cpp index 0f7d1c1df..a3fbec850 100644 --- a/dom/media/systemservices/CamerasChild.cpp +++ b/dom/media/systemservices/CamerasChild.cpp @@ -35,7 +35,9 @@ CamerasSingleton::CamerasSingleton() : mCamerasMutex("CamerasSingleton::mCamerasMutex"), mCameras(nullptr), mCamerasChildThread(nullptr), - mFakeDeviceChangeEventThread(nullptr) { + mFakeDeviceChangeEventThread(nullptr), + mInShutdown(false) +{ LOG(("CamerasSingleton: %p", this)); } @@ -285,6 +287,7 @@ CamerasChild::NumberOfCapabilities(CaptureEngine aCapEngine, LOG((__PRETTY_FUNCTION__)); LOG(("NumberOfCapabilities for %s", deviceUniqueIdUTF8)); nsCString unique_id(deviceUniqueIdUTF8); + RefPtr<CamerasChild> deathGrip = this; nsCOMPtr<nsIRunnable> runnable = mozilla::NewNonOwningRunnableMethod<CaptureEngine, nsCString> (this, &CamerasChild::SendNumberOfCapabilities, aCapEngine, unique_id); @@ -321,6 +324,7 @@ int CamerasChild::EnsureInitialized(CaptureEngine aCapEngine) { LOG((__PRETTY_FUNCTION__)); + RefPtr<CamerasChild> deathGrip = this; nsCOMPtr<nsIRunnable> runnable = mozilla::NewNonOwningRunnableMethod<CaptureEngine> (this, &CamerasChild::SendEnsureInitialized, aCapEngine); @@ -336,6 +340,7 @@ CamerasChild::GetCaptureCapability(CaptureEngine aCapEngine, webrtc::CaptureCapability& capability) { LOG(("GetCaptureCapability: %s %d", unique_idUTF8, capability_number)); + RefPtr<CamerasChild> deathGrip = this; nsCString unique_id(unique_idUTF8); nsCOMPtr<nsIRunnable> runnable = mozilla::NewNonOwningRunnableMethod<CaptureEngine, nsCString, unsigned int> @@ -374,6 +379,7 @@ CamerasChild::GetCaptureDevice(CaptureEngine aCapEngine, bool* scary) { LOG((__PRETTY_FUNCTION__)); + RefPtr<CamerasChild> deathGrip = this; nsCOMPtr<nsIRunnable> runnable = mozilla::NewNonOwningRunnableMethod<CaptureEngine, unsigned int> (this, &CamerasChild::SendGetCaptureDevice, aCapEngine, list_number); @@ -413,6 +419,7 @@ CamerasChild::AllocateCaptureDevice(CaptureEngine aCapEngine, const nsACString& aOrigin) { LOG((__PRETTY_FUNCTION__)); + RefPtr<CamerasChild> deathGrip = this; nsCString unique_id(unique_idUTF8); nsCString origin(aOrigin); nsCOMPtr<nsIRunnable> runnable = @@ -444,6 +451,7 @@ CamerasChild::ReleaseCaptureDevice(CaptureEngine aCapEngine, const int capture_id) { LOG((__PRETTY_FUNCTION__)); + RefPtr<CamerasChild> deathGrip = this; nsCOMPtr<nsIRunnable> runnable = mozilla::NewNonOwningRunnableMethod<CaptureEngine, int> (this, &CamerasChild::SendReleaseCaptureDevice, aCapEngine, capture_id); @@ -491,6 +499,7 @@ CamerasChild::StartCapture(CaptureEngine aCapEngine, webrtcCaps.rawType, webrtcCaps.codecType, webrtcCaps.interlaced); + RefPtr<CamerasChild> deathGrip = this; nsCOMPtr<nsIRunnable> runnable = mozilla::NewNonOwningRunnableMethod<CaptureEngine, int, CaptureCapability> (this, &CamerasChild::SendStartCapture, aCapEngine, capture_id, capCap); @@ -502,6 +511,7 @@ int CamerasChild::StopCapture(CaptureEngine aCapEngine, const int capture_id) { LOG((__PRETTY_FUNCTION__)); + RefPtr<CamerasChild> deathGrip = this; nsCOMPtr<nsIRunnable> runnable = mozilla::NewNonOwningRunnableMethod<CaptureEngine, int> (this, &CamerasChild::SendStopCapture, aCapEngine, capture_id); @@ -567,6 +577,7 @@ CamerasChild::ShutdownParent() // Delete the parent actor. // CamerasChild (this) will remain alive and is only deleted by the // IPC layer when SendAllDone returns. + RefPtr<CamerasChild> deathGrip = this; nsCOMPtr<nsIRunnable> deleteRunnable = mozilla::NewNonOwningRunnableMethod(this, &CamerasChild::SendAllDone); CamerasSingleton::Thread()->Dispatch(deleteRunnable, NS_DISPATCH_NORMAL); @@ -695,7 +706,7 @@ CamerasChild::~CamerasChild() { LOG(("~CamerasChild: %p", this)); - { + if (!CamerasSingleton::InShutdown()) { OffTheBooksMutexAutoLock lock(CamerasSingleton::Mutex()); // In normal circumstances we've already shut down and the // following does nothing. But on fatal IPC errors we will diff --git a/dom/media/systemservices/CamerasChild.h b/dom/media/systemservices/CamerasChild.h index 1530714e9..9ca125cfd 100644 --- a/dom/media/systemservices/CamerasChild.h +++ b/dom/media/systemservices/CamerasChild.h @@ -89,6 +89,14 @@ public: return gTheInstance.get()->mFakeDeviceChangeEventThread; } + static bool InShutdown() { + return gTheInstance.get()->mInShutdown; + } + + static void StartShutdown() { + gTheInstance.get()->mInShutdown = true; + } + private: static Singleton<CamerasSingleton> gTheInstance; @@ -106,6 +114,7 @@ private: CamerasChild* mCameras; nsCOMPtr<nsIThread> mCamerasChildThread; nsCOMPtr<nsIThread> mFakeDeviceChangeEventThread; + Atomic<bool> mInShutdown; }; // Get a pointer to a CamerasChild object we can use to do IPC with. @@ -145,7 +154,7 @@ class CamerasChild final : public PCamerasChild public: // We are owned by the PBackground thread only. CamerasSingleton // takes a non-owning reference. - NS_INLINE_DECL_REFCOUNTING(CamerasChild) + NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CamerasChild) // IPC messages recevied, received on the PBackground thread // these are the actual callbacks with data diff --git a/dom/media/systemservices/MediaSystemResourceService.cpp b/dom/media/systemservices/MediaSystemResourceService.cpp index 0e5d6a50c..4434c54c2 100644 --- a/dom/media/systemservices/MediaSystemResourceService.cpp +++ b/dom/media/systemservices/MediaSystemResourceService.cpp @@ -47,23 +47,6 @@ MediaSystemResourceService::MediaSystemResourceService() : mDestroyed(false) { MOZ_ASSERT(CompositorThreadHolder::IsInCompositorThread()); -#ifdef MOZ_WIDGET_GONK - // The maximum number of hardware resoureces available. - // XXX need to hange to a dynamic way. - enum - { - VIDEO_DECODER_COUNT = 1, - VIDEO_ENCODER_COUNT = 1 - }; - - MediaSystemResource* resource; - - resource = new MediaSystemResource(VIDEO_DECODER_COUNT); - mResources.Put(static_cast<uint32_t>(MediaSystemResourceType::VIDEO_DECODER), resource); - - resource = new MediaSystemResource(VIDEO_ENCODER_COUNT); - mResources.Put(static_cast<uint32_t>(MediaSystemResourceType::VIDEO_ENCODER), resource); -#endif } MediaSystemResourceService::~MediaSystemResourceService() diff --git a/dom/media/systemservices/moz.build b/dom/media/systemservices/moz.build index 33e5ed1f1..82a5c5e72 100644 --- a/dom/media/systemservices/moz.build +++ b/dom/media/systemservices/moz.build @@ -42,16 +42,6 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa': UNIFIED_SOURCES += ['OSXRunLoopSingleton.cpp'] EXPORTS += ['OSXRunLoopSingleton.h'] -if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': - if CONFIG['ANDROID_VERSION'] >= '17': - LOCAL_INCLUDES += [ - '%' + '%s/frameworks/wilhelm/include' % CONFIG['ANDROID_SOURCE'], - ] - else: - LOCAL_INCLUDES += [ - '%' + '%s/system/media/wilhelm/include' % CONFIG['ANDROID_SOURCE'], - ] - if CONFIG['_MSC_VER']: DEFINES['__PRETTY_FUNCTION__'] = '__FUNCSIG__' |