| 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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 // D3D_FEATURE_LEVEL has been retrieved from underlying OS APIs. | 53 // D3D_FEATURE_LEVEL has been retrieved from underlying OS APIs. |
| 54 D3D_FEATURE_LEVEL min_feature_level; | 54 D3D_FEATURE_LEVEL min_feature_level; |
| 55 D3D_FEATURE_LEVEL max_feature_level; | 55 D3D_FEATURE_LEVEL max_feature_level; |
| 56 | 56 |
| 57 // TODO(zijiehe): Add more fields, such as manufacturer name, mode, driver | 57 // TODO(zijiehe): Add more fields, such as manufacturer name, mode, driver |
| 58 // version. | 58 // version. |
| 59 }; | 59 }; |
| 60 | 60 |
| 61 enum class Result { | 61 enum class Result { |
| 62 SUCCEEDED, | 62 SUCCEEDED, |
| 63 UNSUPPORTED_SESSION, |
| 63 FRAME_PREPARE_FAILED, | 64 FRAME_PREPARE_FAILED, |
| 64 INITIALIZATION_FAILED, | 65 INITIALIZATION_FAILED, |
| 65 DUPLICATION_FAILED, | 66 DUPLICATION_FAILED, |
| 66 INVALID_MONITOR_ID, | 67 INVALID_MONITOR_ID, |
| 67 }; | 68 }; |
| 68 | 69 |
| 69 // Returns the singleton instance of DxgiDuplicatorController. | 70 // Returns the singleton instance of DxgiDuplicatorController. |
| 70 static rtc::scoped_refptr<DxgiDuplicatorController> Instance(); | 71 static rtc::scoped_refptr<DxgiDuplicatorController> Instance(); |
| 71 | 72 |
| 72 // All the following public functions implicitly call Initialize() function. | 73 // All the following public functions implicitly call Initialize() function. |
| 73 | 74 |
| 74 // Detects whether the system supports DXGI based capturer. | 75 // Detects whether the system supports DXGI based capturer. |
| 75 bool IsSupported(); | 76 bool IsSupported(); |
| 76 | 77 |
| 77 // Returns a copy of D3dInfo composed by last Initialize() function call. | 78 // Returns a copy of D3dInfo composed by last Initialize() function call. This |
| 79 // function always copies the latest information into |info|. But once the |
| 80 // function returns false, the information in |info| may not accurate. |
| 78 bool RetrieveD3dInfo(D3dInfo* info); | 81 bool RetrieveD3dInfo(D3dInfo* info); |
| 79 | 82 |
| 80 // Captures current screen and writes into |frame|. | 83 // Captures current screen and writes into |frame|. |
| 81 // TODO(zijiehe): Windows cannot guarantee the frames returned by each | 84 // TODO(zijiehe): Windows cannot guarantee the frames returned by each |
| 82 // IDXGIOutputDuplication are synchronized. But we are using a totally | 85 // IDXGIOutputDuplication are synchronized. But we are using a totally |
| 83 // different threading model than the way Windows suggested, it's hard to | 86 // different threading model than the way Windows suggested, it's hard to |
| 84 // synchronize them manually. We should find a way to do it. | 87 // synchronize them manually. We should find a way to do it. |
| 85 Result Duplicate(DxgiFrame* frame); | 88 Result Duplicate(DxgiFrame* frame); |
| 86 | 89 |
| 87 // Captures one monitor and writes into target. |monitor_id| should >= 0. If | 90 // Captures one monitor and writes into target. |monitor_id| should >= 0. If |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 rtc::CriticalSection lock_; | 207 rtc::CriticalSection lock_; |
| 205 | 208 |
| 206 // A self-incremented integer to compare with the one in Context. It ensures | 209 // A self-incremented integer to compare with the one in Context. It ensures |
| 207 // a Context instance is always initialized after DxgiDuplicatorController. | 210 // a Context instance is always initialized after DxgiDuplicatorController. |
| 208 int identity_ = 0; | 211 int identity_ = 0; |
| 209 DesktopRect desktop_rect_; | 212 DesktopRect desktop_rect_; |
| 210 DesktopVector dpi_; | 213 DesktopVector dpi_; |
| 211 std::vector<DxgiAdapterDuplicator> duplicators_; | 214 std::vector<DxgiAdapterDuplicator> duplicators_; |
| 212 D3dInfo d3d_info_; | 215 D3dInfo d3d_info_; |
| 213 ResolutionChangeDetector resolution_change_detector_; | 216 ResolutionChangeDetector resolution_change_detector_; |
| 217 // A number to indicate how many succeeded duplications have been performed. |
| 218 uint32_t succeeded_duplications_ = 0; |
| 214 }; | 219 }; |
| 215 | 220 |
| 216 } // namespace webrtc | 221 } // namespace webrtc |
| 217 | 222 |
| 218 #endif // WEBRTC_MODULES_DESKTOP_CAPTURE_WIN_DXGI_DUPLICATOR_CONTROLLER_H_ | 223 #endif // WEBRTC_MODULES_DESKTOP_CAPTURE_WIN_DXGI_DUPLICATOR_CONTROLLER_H_ |
| OLD | NEW |