Index: webrtc/modules/desktop_capture/win/screen_capturer_win_magnifier.cc |
diff --git a/webrtc/modules/desktop_capture/win/screen_capturer_win_magnifier.cc b/webrtc/modules/desktop_capture/win/screen_capturer_win_magnifier.cc |
index 96348ca49455bc5f1b0d1ab4b7bf75488f0bffce..2a686c4384c65581be035130b21938efb3eb8b1e 100644 |
--- a/webrtc/modules/desktop_capture/win/screen_capturer_win_magnifier.cc |
+++ b/webrtc/modules/desktop_capture/win/screen_capturer_win_magnifier.cc |
@@ -35,10 +35,7 @@ static LPCTSTR kMagnifierWindowName = L"MagnifierWindow"; |
Atomic32 ScreenCapturerWinMagnifier::tls_index_(TLS_OUT_OF_INDEXES); |
-ScreenCapturerWinMagnifier::ScreenCapturerWinMagnifier( |
- std::unique_ptr<DesktopCapturer> fallback_capturer) |
- : fallback_capturer_(std::move(fallback_capturer)) {} |
- |
+ScreenCapturerWinMagnifier::ScreenCapturerWinMagnifier() = default; |
ScreenCapturerWinMagnifier::~ScreenCapturerWinMagnifier() { |
// DestroyWindow must be called before MagUninitialize. magnifier_window_ is |
// destroyed automatically when host_window_ is destroyed. |
@@ -61,9 +58,7 @@ void ScreenCapturerWinMagnifier::Start(Callback* callback) { |
callback_ = callback; |
if (!InitializeMagnifier()) { |
- LOG_F(LS_WARNING) << "Switching to fallback screen capturer becuase " |
- "magnifier initialization failed."; |
- StartFallbackCapturer(); |
+ LOG_F(LS_WARNING) << "Magnifier initialization failed."; |
} |
} |
@@ -73,16 +68,10 @@ void ScreenCapturerWinMagnifier::SetSharedMemoryFactory( |
} |
void ScreenCapturerWinMagnifier::CaptureFrame() { |
- if (!magnifier_initialized_ || |
- !magnifier_capture_succeeded_ || |
- GetSystemMetrics(SM_CMONITORS) != 1) { |
- // Do not try to use the magnifier if it failed before and in multi-screen |
- // setup (where the API crashes sometimes). |
- LOG_F(LS_WARNING) << "Switching to the fallback screen capturer because " |
- "initialization or last capture attempt failed, or " |
- "execute on multi-screen system."; |
- StartFallbackCapturer(); |
- fallback_capturer_->CaptureFrame(); |
+ RTC_DCHECK(callback_); |
+ if (!magnifier_initialized_) { |
+ LOG_F(LS_WARNING) << "Magnifier initialization failed."; |
+ callback_->OnCaptureResult(Result::ERROR_PERMANENT, nullptr); |
return; |
} |
@@ -108,10 +97,8 @@ void ScreenCapturerWinMagnifier::CaptureFrame() { |
// CaptureImage may fail in some situations, e.g. windows8 metro mode. So |
// defer to the fallback capturer if magnifier capturer did not work. |
if (!CaptureImage(rect)) { |
- LOG_F(LS_WARNING) << "Switching to the fallback screen capturer because " |
- "last capture attempt failed."; |
- StartFallbackCapturer(); |
- fallback_capturer_->CaptureFrame(); |
+ LOG_F(LS_WARNING) << "Magnifier capturer failed to capture a frame."; |
+ callback_->OnCaptureResult(Result::ERROR_PERMANENT, nullptr); |
return; |
} |
@@ -131,17 +118,12 @@ bool ScreenCapturerWinMagnifier::GetSourceList(SourceList* sources) { |
} |
bool ScreenCapturerWinMagnifier::SelectSource(SourceId id) { |
- bool valid = IsScreenValid(id, ¤t_device_key_); |
- |
- // Set current_screen_id_ even if the fallback capturer is being used, so we |
- // can switch back to the magnifier when possible. |
- if (valid) |
+ if (IsScreenValid(id, ¤t_device_key_)) { |
current_screen_id_ = id; |
+ return true; |
+ } |
- if (fallback_capturer_started_) |
- fallback_capturer_->SelectSource(id); |
- |
- return valid; |
+ return false; |
} |
void ScreenCapturerWinMagnifier::SetExcludedWindow(WindowId excluded_window) { |
@@ -210,6 +192,15 @@ BOOL ScreenCapturerWinMagnifier::OnMagImageScalingCallback( |
// include and function calls instead of a dynamical loaded library. |
bool ScreenCapturerWinMagnifier::InitializeMagnifier() { |
RTC_DCHECK(!magnifier_initialized_); |
+ |
+ if (GetSystemMetrics(SM_CMONITORS) != 1) { |
+ // Do not try to use the magnifier in multi-screen setup (where the API |
+ // crashes sometimes). |
+ LOG_F(LS_WARNING) << "Magnifier capturer cannot work on multi-screen " |
+ "system."; |
+ return false; |
+ } |
+ |
desktop_dc_ = GetDC(nullptr); |
mag_lib_handle_ = LoadLibrary(L"Magnification.dll"); |
@@ -376,14 +367,4 @@ void ScreenCapturerWinMagnifier::CreateCurrentFrameIfNecessary( |
} |
} |
-void ScreenCapturerWinMagnifier::StartFallbackCapturer() { |
- RTC_DCHECK(fallback_capturer_); |
- if (!fallback_capturer_started_) { |
- fallback_capturer_started_ = true; |
- |
- fallback_capturer_->Start(callback_); |
- fallback_capturer_->SelectSource(current_screen_id_); |
- } |
-} |
- |
} // namespace webrtc |