| 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 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 static_cast<UINT>(metadata_.capacity()) - buff_size, dirty_rects, | 281 static_cast<UINT>(metadata_.capacity()) - buff_size, dirty_rects, |
| 282 &buff_size); | 282 &buff_size); |
| 283 if (error.Error() != S_OK) { | 283 if (error.Error() != S_OK) { |
| 284 LOG(LS_ERROR) << "Failed to get dirty rectangles, error " | 284 LOG(LS_ERROR) << "Failed to get dirty rectangles, error " |
| 285 << error.ErrorMessage() << ", code " << error.Error(); | 285 << error.ErrorMessage() << ", code " << error.Error(); |
| 286 return false; | 286 return false; |
| 287 } | 287 } |
| 288 dirty_rects_count = buff_size / sizeof(RECT); | 288 dirty_rects_count = buff_size / sizeof(RECT); |
| 289 | 289 |
| 290 while (move_rects_count > 0) { | 290 while (move_rects_count > 0) { |
| 291 updated_region->AddRect( | 291 // DirectX capturer API may randomly return unmoved move_rects, which should |
| 292 RotateRect(DesktopRect::MakeXYWH(move_rects->SourcePoint.x, | 292 // be skipped to avoid unnecessary wasting of differing and encoding |
| 293 move_rects->SourcePoint.y, | 293 // resources. |
| 294 move_rects->DestinationRect.right - | 294 // By using testing application it2me_standalone_host_main, this check |
| 295 move_rects->DestinationRect.left, | 295 // reduces average capture time by 0.375% (4.07 -> 4.055), and average |
| 296 move_rects->DestinationRect.bottom - | 296 // encode time by 0.313% (8.042 -> 8.016) without other impacts. |
| 297 move_rects->DestinationRect.top), | 297 if (move_rects->SourcePoint.x != move_rects->DestinationRect.left || |
| 298 unrotated_size_, rotation_)); | 298 move_rects->SourcePoint.y != move_rects->DestinationRect.top) { |
| 299 updated_region->AddRect( | 299 updated_region->AddRect( |
| 300 RotateRect(DesktopRect::MakeLTRB(move_rects->DestinationRect.left, | 300 RotateRect(DesktopRect::MakeXYWH(move_rects->SourcePoint.x, |
| 301 move_rects->DestinationRect.top, | 301 move_rects->SourcePoint.y, |
| 302 move_rects->DestinationRect.right, | 302 move_rects->DestinationRect.right - |
| 303 move_rects->DestinationRect.bottom), | 303 move_rects->DestinationRect.left, |
| 304 unrotated_size_, rotation_)); | 304 move_rects->DestinationRect.bottom - |
| 305 move_rects->DestinationRect.top), |
| 306 unrotated_size_, rotation_)); |
| 307 updated_region->AddRect( |
| 308 RotateRect(DesktopRect::MakeLTRB(move_rects->DestinationRect.left, |
| 309 move_rects->DestinationRect.top, |
| 310 move_rects->DestinationRect.right, |
| 311 move_rects->DestinationRect.bottom), |
| 312 unrotated_size_, rotation_)); |
| 313 } else { |
| 314 LOG(LS_INFO) << "Unmoved move_rect detected, [" |
| 315 << move_rects->DestinationRect.left << ", " |
| 316 << move_rects->DestinationRect.top << "] - [" |
| 317 << move_rects->DestinationRect.right << ", " |
| 318 << move_rects->DestinationRect.bottom << "]."; |
| 319 } |
| 305 move_rects++; | 320 move_rects++; |
| 306 move_rects_count--; | 321 move_rects_count--; |
| 307 } | 322 } |
| 308 | 323 |
| 309 while (dirty_rects_count > 0) { | 324 while (dirty_rects_count > 0) { |
| 310 updated_region->AddRect(RotateRect( | 325 updated_region->AddRect(RotateRect( |
| 311 DesktopRect::MakeLTRB(dirty_rects->left, dirty_rects->top, | 326 DesktopRect::MakeLTRB(dirty_rects->left, dirty_rects->top, |
| 312 dirty_rects->right, dirty_rects->bottom), | 327 dirty_rects->right, dirty_rects->bottom), |
| 313 unrotated_size_, rotation_)); | 328 unrotated_size_, rotation_)); |
| 314 dirty_rects++; | 329 dirty_rects++; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 343 } | 358 } |
| 344 | 359 |
| 345 int64_t DxgiOutputDuplicator::num_frames_captured() const { | 360 int64_t DxgiOutputDuplicator::num_frames_captured() const { |
| 346 #if !defined(NDEBUG) | 361 #if !defined(NDEBUG) |
| 347 RTC_DCHECK_EQ(!!last_frame_, num_frames_captured_ > 0); | 362 RTC_DCHECK_EQ(!!last_frame_, num_frames_captured_ > 0); |
| 348 #endif | 363 #endif |
| 349 return num_frames_captured_; | 364 return num_frames_captured_; |
| 350 } | 365 } |
| 351 | 366 |
| 352 } // namespace webrtc | 367 } // namespace webrtc |
| OLD | NEW |