diff options
Diffstat (limited to 'third_party/libwebrtc/moz-patch-stack/0008.patch')
-rw-r--r-- | third_party/libwebrtc/moz-patch-stack/0008.patch | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/third_party/libwebrtc/moz-patch-stack/0008.patch b/third_party/libwebrtc/moz-patch-stack/0008.patch new file mode 100644 index 0000000000..7d97e4804e --- /dev/null +++ b/third_party/libwebrtc/moz-patch-stack/0008.patch @@ -0,0 +1,65 @@ +From: Dan Minor <dminor@mozilla.com> +Date: Tue, 31 Jul 2018 13:32:00 -0400 +Subject: Bug 1376873 - OS X desktop capture fixes; r=pehrsons + +Differential Revision: https://phabricator.services.mozilla.com/D7464 +Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/02c038eca65c1218b56fdf8937fdeab3d8767fe6 +--- + modules/desktop_capture/mac/screen_capturer_mac.h | 7 +++++++ + modules/desktop_capture/mac/screen_capturer_mac.mm | 4 +++- + modules/desktop_capture/mouse_cursor_monitor_mac.mm | 2 +- + 3 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/modules/desktop_capture/mac/screen_capturer_mac.h b/modules/desktop_capture/mac/screen_capturer_mac.h +index 7e38b5bd08..e4a2cc2fc9 100644 +--- a/modules/desktop_capture/mac/screen_capturer_mac.h ++++ b/modules/desktop_capture/mac/screen_capturer_mac.h +@@ -113,6 +113,13 @@ class ScreenCapturerMac final : public DesktopCapturer { + + // Start, CaptureFrame and destructor have to called in the same thread. + SequenceChecker thread_checker_; ++ ++ // Used to force CaptureFrame to update it's screen configuration ++ // and reregister event handlers. This ensure that this ++ // occurs on the ScreenCapture thread. Read and written from ++ // both the VideoCapture thread and ScreenCapture thread. ++ // Protected by desktop_config_monitor_. ++ bool update_screen_configuration_ = false; + }; + + } // namespace webrtc +diff --git a/modules/desktop_capture/mac/screen_capturer_mac.mm b/modules/desktop_capture/mac/screen_capturer_mac.mm +index 28cc410573..b082136e76 100644 +--- a/modules/desktop_capture/mac/screen_capturer_mac.mm ++++ b/modules/desktop_capture/mac/screen_capturer_mac.mm +@@ -182,6 +182,7 @@ void ScreenCapturerMac::Start(Callback* callback) { + "webrtc", "ScreenCapturermac::Start", "target display id ", current_display_); + + callback_ = callback; ++ update_screen_configuration_ = false; + // Start and operate CGDisplayStream handler all from capture thread. + if (!RegisterRefreshAndMoveHandlers()) { + RTC_LOG(LS_ERROR) << "Failed to register refresh and move handlers."; +@@ -202,7 +203,8 @@ void ScreenCapturerMac::CaptureFrame() { + } + + MacDesktopConfiguration new_config = desktop_config_monitor_->desktop_configuration(); +- if (!desktop_config_.Equals(new_config)) { ++ if (update_screen_configuration_ || !desktop_config_.Equals(new_config)) { ++ update_screen_configuration_ = false; + desktop_config_ = new_config; + // If the display configuraiton has changed then refresh capturer data + // structures. Occasionally, the refresh and move handlers are lost when +diff --git a/modules/desktop_capture/mouse_cursor_monitor_mac.mm b/modules/desktop_capture/mouse_cursor_monitor_mac.mm +index 3db4332cd1..512103ab5e 100644 +--- a/modules/desktop_capture/mouse_cursor_monitor_mac.mm ++++ b/modules/desktop_capture/mouse_cursor_monitor_mac.mm +@@ -133,7 +133,7 @@ void MouseCursorMonitorMac::CaptureImage(float scale) { + NSSize nssize = [nsimage size]; // DIP size + + // No need to caputre cursor image if it's unchanged since last capture. +- if ([[nsimage TIFFRepresentation] isEqual:[last_cursor_ TIFFRepresentation]]) return; ++ if (last_cursor_ && [[nsimage TIFFRepresentation] isEqual:[last_cursor_ TIFFRepresentation]]) return; + last_cursor_ = nsimage; + + DesktopSize size(round(nssize.width * scale), |