| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 | 46 |
| 47 if (dwmapi_library_) { | 47 if (dwmapi_library_) { |
| 48 composition_func_ = reinterpret_cast<DwmEnableCompositionFunc>( | 48 composition_func_ = reinterpret_cast<DwmEnableCompositionFunc>( |
| 49 GetProcAddress(dwmapi_library_, "DwmEnableComposition")); | 49 GetProcAddress(dwmapi_library_, "DwmEnableComposition")); |
| 50 } | 50 } |
| 51 } | 51 } |
| 52 } | 52 } |
| 53 | 53 |
| 54 ScreenCapturerWinGdi::~ScreenCapturerWinGdi() { | 54 ScreenCapturerWinGdi::~ScreenCapturerWinGdi() { |
| 55 if (desktop_dc_) | 55 if (desktop_dc_) |
| 56 ReleaseDC(NULL, desktop_dc_); | 56 ReleaseDC(nullptr, desktop_dc_); |
| 57 if (memory_dc_) | 57 if (memory_dc_) |
| 58 DeleteDC(memory_dc_); | 58 DeleteDC(memory_dc_); |
| 59 | 59 |
| 60 // Restore Aero. | 60 // Restore Aero. |
| 61 if (composition_func_) | 61 if (composition_func_) |
| 62 (*composition_func_)(DWM_EC_ENABLECOMPOSITION); | 62 (*composition_func_)(DWM_EC_ENABLECOMPOSITION); |
| 63 | 63 |
| 64 if (dwmapi_library_) | 64 if (dwmapi_library_) |
| 65 FreeLibrary(dwmapi_library_); | 65 FreeLibrary(dwmapi_library_); |
| 66 } | 66 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 (*composition_func_)(DWM_EC_DISABLECOMPOSITION); | 121 (*composition_func_)(DWM_EC_DISABLECOMPOSITION); |
| 122 } | 122 } |
| 123 | 123 |
| 124 void ScreenCapturerWinGdi::PrepareCaptureResources() { | 124 void ScreenCapturerWinGdi::PrepareCaptureResources() { |
| 125 // Switch to the desktop receiving user input if different from the current | 125 // Switch to the desktop receiving user input if different from the current |
| 126 // one. | 126 // one. |
| 127 std::unique_ptr<Desktop> input_desktop(Desktop::GetInputDesktop()); | 127 std::unique_ptr<Desktop> input_desktop(Desktop::GetInputDesktop()); |
| 128 if (input_desktop && !desktop_.IsSame(*input_desktop)) { | 128 if (input_desktop && !desktop_.IsSame(*input_desktop)) { |
| 129 // Release GDI resources otherwise SetThreadDesktop will fail. | 129 // Release GDI resources otherwise SetThreadDesktop will fail. |
| 130 if (desktop_dc_) { | 130 if (desktop_dc_) { |
| 131 ReleaseDC(NULL, desktop_dc_); | 131 ReleaseDC(nullptr, desktop_dc_); |
| 132 desktop_dc_ = nullptr; | 132 desktop_dc_ = nullptr; |
| 133 } | 133 } |
| 134 | 134 |
| 135 if (memory_dc_) { | 135 if (memory_dc_) { |
| 136 DeleteDC(memory_dc_); | 136 DeleteDC(memory_dc_); |
| 137 memory_dc_ = nullptr; | 137 memory_dc_ = nullptr; |
| 138 } | 138 } |
| 139 | 139 |
| 140 // If SetThreadDesktop() fails, the thread is still assigned a desktop. | 140 // If SetThreadDesktop() fails, the thread is still assigned a desktop. |
| 141 // So we can continue capture screen bits, just from the wrong desktop. | 141 // So we can continue capture screen bits, just from the wrong desktop. |
| 142 desktop_.SetThreadDesktop(input_desktop.release()); | 142 desktop_.SetThreadDesktop(input_desktop.release()); |
| 143 | 143 |
| 144 // Re-assert our vote to disable Aero. | 144 // Re-assert our vote to disable Aero. |
| 145 // See crbug.com/124018 and crbug.com/129906. | 145 // See crbug.com/124018 and crbug.com/129906. |
| 146 if (composition_func_) { | 146 if (composition_func_) { |
| 147 (*composition_func_)(DWM_EC_DISABLECOMPOSITION); | 147 (*composition_func_)(DWM_EC_DISABLECOMPOSITION); |
| 148 } | 148 } |
| 149 } | 149 } |
| 150 | 150 |
| 151 // If the display bounds have changed then recreate GDI resources. | 151 // If the display bounds have changed then recreate GDI resources. |
| 152 // TODO(wez): Also check for pixel format changes. | 152 // TODO(wez): Also check for pixel format changes. |
| 153 DesktopRect screen_rect(DesktopRect::MakeXYWH( | 153 DesktopRect screen_rect(DesktopRect::MakeXYWH( |
| 154 GetSystemMetrics(SM_XVIRTUALSCREEN), | 154 GetSystemMetrics(SM_XVIRTUALSCREEN), |
| 155 GetSystemMetrics(SM_YVIRTUALSCREEN), | 155 GetSystemMetrics(SM_YVIRTUALSCREEN), |
| 156 GetSystemMetrics(SM_CXVIRTUALSCREEN), | 156 GetSystemMetrics(SM_CXVIRTUALSCREEN), |
| 157 GetSystemMetrics(SM_CYVIRTUALSCREEN))); | 157 GetSystemMetrics(SM_CYVIRTUALSCREEN))); |
| 158 if (!screen_rect.equals(desktop_dc_rect_)) { | 158 if (!screen_rect.equals(desktop_dc_rect_)) { |
| 159 if (desktop_dc_) { | 159 if (desktop_dc_) { |
| 160 ReleaseDC(NULL, desktop_dc_); | 160 ReleaseDC(nullptr, desktop_dc_); |
| 161 desktop_dc_ = nullptr; | 161 desktop_dc_ = nullptr; |
| 162 } | 162 } |
| 163 if (memory_dc_) { | 163 if (memory_dc_) { |
| 164 DeleteDC(memory_dc_); | 164 DeleteDC(memory_dc_); |
| 165 memory_dc_ = nullptr; | 165 memory_dc_ = nullptr; |
| 166 } | 166 } |
| 167 desktop_dc_rect_ = DesktopRect(); | 167 desktop_dc_rect_ = DesktopRect(); |
| 168 } | 168 } |
| 169 | 169 |
| 170 if (!desktop_dc_) { | 170 if (!desktop_dc_) { |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 } | 222 } |
| 223 | 223 |
| 224 // Select back the previously selected object to that the device contect | 224 // Select back the previously selected object to that the device contect |
| 225 // could be destroyed independently of the bitmap if needed. | 225 // could be destroyed independently of the bitmap if needed. |
| 226 SelectObject(memory_dc_, previous_object); | 226 SelectObject(memory_dc_, previous_object); |
| 227 | 227 |
| 228 return result; | 228 return result; |
| 229 } | 229 } |
| 230 | 230 |
| 231 } // namespace webrtc | 231 } // namespace webrtc |
| OLD | NEW |