Index: webrtc/modules/desktop_capture/win/dxgi_duplicator_controller.h |
diff --git a/webrtc/modules/desktop_capture/win/dxgi_duplicator_controller.h b/webrtc/modules/desktop_capture/win/dxgi_duplicator_controller.h |
index e65035d8ebe9fa1dd3877ce576fbb179e8cf0dd9..fb24b3a676f8e7d0730ce1ada9cd386dfdcec55a 100644 |
--- a/webrtc/modules/desktop_capture/win/dxgi_duplicator_controller.h |
+++ b/webrtc/modules/desktop_capture/win/dxgi_duplicator_controller.h |
@@ -11,12 +11,13 @@ |
#ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_WIN_DXGI_DUPLICATOR_CONTROLLER_H_ |
#define WEBRTC_MODULES_DESKTOP_CAPTURE_WIN_DXGI_DUPLICATOR_CONTROLLER_H_ |
+#include <memory> |
#include <vector> |
#include "webrtc/base/criticalsection.h" |
-#include "webrtc/modules/desktop_capture/desktop_frame.h" |
#include "webrtc/modules/desktop_capture/desktop_geometry.h" |
#include "webrtc/modules/desktop_capture/desktop_region.h" |
+#include "webrtc/modules/desktop_capture/shared_desktop_frame.h" |
#include "webrtc/modules/desktop_capture/win/d3d_device.h" |
#include "webrtc/modules/desktop_capture/win/dxgi_adapter_duplicator.h" |
@@ -33,16 +34,6 @@ namespace webrtc { |
// but a later Duplicate() returns false, this usually means the display mode is |
// changing. Consumers should retry after a while. (Typically 50 milliseconds, |
// but according to hardware performance, this time may vary.) |
-// |
-// This class is normally used with double buffering, e.g. as in |
-// ScreenCapturerWinDirectx, but it should work with consumers with one buffer, |
-// i.e. consumers can always send nullptr for |last_frame|. Some minor changes |
-// in DxgiOutputDuplicator class are nice to have to reduce size of data to copy |
-// (Commented in dxgi_output_duplicator.cc). But this class won't work |
-// with three or more buffers, the updated region merging logic will be broken |
-// in such scenarios. If a consumer does have this requirement, one can always |
-// send a new Context instance to Duplicate() function to force duplicator to |
-// treat it as a new consumer. |
class DxgiDuplicatorController { |
public: |
// A context to store the status of a single consumer of |
@@ -82,18 +73,15 @@ class DxgiDuplicatorController { |
// TODO(zijiehe): Windows cannot guarantee the frames returned by each |
// IDXGIOutputDuplication are synchronized. But we are using a totally |
// different threading model than the way Windows suggested, it's hard to |
- // synchronize them manually. But we should find a way to do it. |
- bool Duplicate(Context* context, |
- const DesktopFrame* last_frame, |
- DesktopFrame* target); |
+ // synchronize them manually. We should find a way to do it. |
+ bool Duplicate(Context* context, SharedDesktopFrame* target); |
// Captures one monitor and writes into target. |monitor_id| should >= 0. If |
// |monitor_id| is greater than the total screen count of all the Duplicators, |
// this function returns false. |
bool DuplicateMonitor(Context* context, |
int monitor_id, |
- const DesktopFrame* last_frame, |
- DesktopFrame* target); |
+ SharedDesktopFrame* target); |
// Returns dpi of current system. Returns an empty DesktopVector if system |
// does not support DXGI based capturer. |
@@ -153,8 +141,7 @@ class DxgiDuplicatorController { |
// Do the real duplication work. |monitor_id < 0| to capture entire screen. |
bool DoDuplicate(Context* context, |
int monitor_id, |
- const DesktopFrame* last_frame, |
- DesktopFrame* target); |
+ SharedDesktopFrame* target); |
// This lock must be locked whenever accessing any of the following objects. |
rtc::CriticalSection lock_; |