diff options
author | Jüri Valdmann <juri.valdmann@qt.io> | 2019-01-18 15:11:03 +0100 |
---|---|---|
committer | Jüri Valdmann <juri.valdmann@qt.io> | 2019-01-22 08:34:16 +0000 |
commit | 157e8bb596f1f7133682e974bb87841d84c84e38 (patch) | |
tree | bcdcf7c38e0b7d8824360de07a738952cec3ac37 | |
parent | 73c4ec0effa5802b1bdde5dd04758f2e40b6f979 (diff) | |
download | qtwebengine-chromium-157e8bb596f1f7133682e974bb87841d84c84e38.tar.gz |
Run video capture on separate thread on macOS
VideoCaptureDeviceFactoryMac needs a CFRunLoop-enabled thread, which the Qt main
thread by default is not.
Change-Id: I4a1b0f5f10bdd202d8b956a081551681cb874910
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
-rw-r--r-- | chromium/content/browser/renderer_host/media/media_stream_manager.cc | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/chromium/content/browser/renderer_host/media/media_stream_manager.cc b/chromium/content/browser/renderer_host/media/media_stream_manager.cc index 209a02e11c1..92ca8466a9c 100644 --- a/chromium/content/browser/renderer_host/media/media_stream_manager.cc +++ b/chromium/content/browser/renderer_host/media/media_stream_manager.cc @@ -80,6 +80,10 @@ #include "media/capture/video/chromeos/video_capture_device_factory_chromeos.h" #endif +#if defined(TOOLKIT_QT) && defined(OS_MACOSX) +#include "base/message_loop/message_pump_mac.h" +#endif + namespace content { base::LazyInstance<base::ThreadLocalPointer<MediaStreamManager>>::Leaky @@ -475,7 +479,7 @@ MediaStreamManager::MediaStreamManager( if (!video_capture_provider) { scoped_refptr<base::SingleThreadTaskRunner> device_task_runner = -#if defined(OS_WIN) +#if defined(OS_WIN) || (defined(TOOLKIT_QT) && defined(OS_MACOSX)) // Windows unconditionally requires its own thread (see below). nullptr; #else @@ -490,7 +494,14 @@ MediaStreamManager::MediaStreamManager( // of buggy third party Direct Show modules, http://crbug.com/428958. video_capture_thread_->init_com_with_mta(false); #endif +#if defined(TOOLKIT_QT) && defined(OS_MACOSX) + // VideoCaptureDeviceFactoryMac needs a CFRunLoop-based message pump. + base::Thread::Options options; + options.message_pump_factory = base::BindRepeating(&base::MessagePumpMac::Create); + CHECK(video_capture_thread_->StartWithOptions(options)); +#else CHECK(video_capture_thread_->Start()); +#endif device_task_runner = video_capture_thread_->task_runner(); } |