| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 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 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 context->contexts_.clear(); | 169 context->contexts_.clear(); |
| 170 context->contexts_.resize(duplicators_.size()); | 170 context->contexts_.resize(duplicators_.size()); |
| 171 for (size_t i = 0; i < duplicators_.size(); i++) { | 171 for (size_t i = 0; i < duplicators_.size(); i++) { |
| 172 duplicators_[i].Setup(&context->contexts_[i]); | 172 duplicators_[i].Setup(&context->contexts_[i]); |
| 173 } | 173 } |
| 174 context->identity_ = identity_; | 174 context->identity_ = identity_; |
| 175 } | 175 } |
| 176 } | 176 } |
| 177 | 177 |
| 178 bool DxgiDuplicatorController::Duplicate(Context* context, | 178 bool DxgiDuplicatorController::Duplicate(Context* context, |
| 179 const DesktopFrame* last_frame, | 179 SharedDesktopFrame* target) { |
| 180 DesktopFrame* target) { | 180 return DoDuplicate(context, -1, target); |
| 181 return DoDuplicate(context, -1, last_frame, target); | |
| 182 } | 181 } |
| 183 | 182 |
| 184 bool DxgiDuplicatorController::DuplicateMonitor(Context* context, | 183 bool DxgiDuplicatorController::DuplicateMonitor(Context* context, |
| 185 int monitor_id, | 184 int monitor_id, |
| 186 const DesktopFrame* last_frame, | 185 SharedDesktopFrame* target) { |
| 187 DesktopFrame* target) { | |
| 188 RTC_DCHECK_GE(monitor_id, 0); | 186 RTC_DCHECK_GE(monitor_id, 0); |
| 189 return DoDuplicate(context, monitor_id, last_frame, target); | 187 return DoDuplicate(context, monitor_id, target); |
| 190 } | 188 } |
| 191 | 189 |
| 192 bool DxgiDuplicatorController::DoDuplicate(Context* context, | 190 bool DxgiDuplicatorController::DoDuplicate(Context* context, |
| 193 int monitor_id, | 191 int monitor_id, |
| 194 const DesktopFrame* last_frame, | 192 SharedDesktopFrame* target) { |
| 195 DesktopFrame* target) { | |
| 196 RTC_DCHECK(target); | 193 RTC_DCHECK(target); |
| 197 if (last_frame && !target->size().equals(last_frame->size())) { | |
| 198 return false; | |
| 199 } | |
| 200 target->mutable_updated_region()->Clear(); | 194 target->mutable_updated_region()->Clear(); |
| 201 rtc::CritScope lock(&lock_); | 195 rtc::CritScope lock(&lock_); |
| 202 if (!Initialize()) { | 196 if (!Initialize()) { |
| 203 // Cannot initialize COM components now, display mode may be changing. | 197 // Cannot initialize COM components now, display mode may be changing. |
| 204 return false; | 198 return false; |
| 205 } | 199 } |
| 200 |
| 206 Setup(context); | 201 Setup(context); |
| 207 if (monitor_id < 0) { | 202 if (monitor_id < 0) { |
| 208 // Capture entire screen. | 203 // Capture entire screen. |
| 209 for (size_t i = 0; i < duplicators_.size(); i++) { | 204 for (size_t i = 0; i < duplicators_.size(); i++) { |
| 210 if (!duplicators_[i].Duplicate(&context->contexts_[i], last_frame, | 205 if (!duplicators_[i].Duplicate(&context->contexts_[i], target)) { |
| 211 target)) { | |
| 212 Deinitialize(); | 206 Deinitialize(); |
| 213 return false; | 207 return false; |
| 214 } | 208 } |
| 215 } | 209 } |
| 216 target->set_dpi(dpi()); | 210 target->set_dpi(dpi()); |
| 217 return true; | 211 return true; |
| 218 } | 212 } |
| 219 | 213 |
| 220 // Capture one monitor. | 214 // Capture one monitor. |
| 221 for (size_t i = 0; i < duplicators_.size() && i < context->contexts_.size(); | 215 for (size_t i = 0; i < duplicators_.size() && i < context->contexts_.size(); |
| 222 i++) { | 216 i++) { |
| 223 if (monitor_id >= duplicators_[i].screen_count()) { | 217 if (monitor_id >= duplicators_[i].screen_count()) { |
| 224 monitor_id -= duplicators_[i].screen_count(); | 218 monitor_id -= duplicators_[i].screen_count(); |
| 225 } else { | 219 } else { |
| 226 if (duplicators_[i].DuplicateMonitor(&context->contexts_[i], monitor_id, | 220 if (duplicators_[i].DuplicateMonitor(&context->contexts_[i], monitor_id, |
| 227 last_frame, target)) { | 221 target)) { |
| 228 target->set_dpi(dpi()); | 222 target->set_dpi(dpi()); |
| 229 return true; | 223 return true; |
| 230 } | 224 } |
| 231 Deinitialize(); | 225 Deinitialize(); |
| 232 return false; | 226 return false; |
| 233 } | 227 } |
| 234 } | 228 } |
| 235 // id >= ScreenCount(). This is a user error, so we do not need to | 229 // id >= ScreenCount(). This is a user error, so we do not need to |
| 236 // deinitialize. | 230 // deinitialize. |
| 237 return false; | 231 return false; |
| 238 } | 232 } |
| 239 | 233 |
| 240 } // namespace webrtc | 234 } // namespace webrtc |
| OLD | NEW |