summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJüri Valdmann <juri.valdmann@qt.io>2019-01-18 15:11:03 +0100
committerJüri Valdmann <juri.valdmann@qt.io>2019-01-22 08:34:16 +0000
commit157e8bb596f1f7133682e974bb87841d84c84e38 (patch)
treebcdcf7c38e0b7d8824360de07a738952cec3ac37
parent73c4ec0effa5802b1bdde5dd04758f2e40b6f979 (diff)
downloadqtwebengine-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.cc13
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();
}