Index: webrtc/modules/desktop_capture/win/screen_capturer_win_gdi.cc |
diff --git a/webrtc/modules/desktop_capture/win/screen_capturer_win_gdi.cc b/webrtc/modules/desktop_capture/win/screen_capturer_win_gdi.cc |
index 3cf64879f9fa6b6c1b033e4d974301b3c046a768..419d81833dc79537cd9caea3769302b58f135812 100644 |
--- a/webrtc/modules/desktop_capture/win/screen_capturer_win_gdi.cc |
+++ b/webrtc/modules/desktop_capture/win/screen_capturer_win_gdi.cc |
@@ -12,6 +12,8 @@ |
#include <assert.h> |
+#include <utility> |
+ |
#include "webrtc/modules/desktop_capture/desktop_capture_options.h" |
#include "webrtc/modules/desktop_capture/desktop_frame.h" |
#include "webrtc/modules/desktop_capture/desktop_frame_win.h" |
@@ -34,6 +36,22 @@ const UINT DWM_EC_ENABLECOMPOSITION = 1; |
const wchar_t kDwmapiLibraryName[] = L"dwmapi.dll"; |
+// SharedMemoryFactory that creates SharedMemory using the deprectead |
joedow
2016/02/09 17:21:15
s/deprectead/deprecated
Sergey Ulanov
2016/02/09 20:07:23
Done.
|
+// DesktopCapturer::Callback::CreateSharedMemory(). |
+class CallbackSharedMemoryFactory : public SharedMemoryFactory { |
+ public: |
+ CallbackSharedMemoryFactory(DesktopCapturer::Callback* callback) |
+ : callback_(callback) {} |
+ ~CallbackSharedMemoryFactory() override {} |
+ |
+ rtc::scoped_ptr<SharedMemory> CreateSharedMemory(size_t size) override { |
+ return rtc_make_scoped_ptr(callback_->CreateSharedMemory(size)); |
+ } |
+ |
+ private: |
+ DesktopCapturer::Callback* callback_; |
+}; |
+ |
} // namespace |
ScreenCapturerWinGdi::ScreenCapturerWinGdi(const DesktopCaptureOptions& options) |
@@ -70,6 +88,11 @@ ScreenCapturerWinGdi::~ScreenCapturerWinGdi() { |
FreeLibrary(dwmapi_library_); |
} |
+void ScreenCapturerWinGdi::SetSharedMemoryFactory( |
+ rtc::scoped_ptr<SharedMemoryFactory> shared_memory_factory) { |
+ shared_memory_factory_ = std::move(shared_memory_factory); |
+} |
+ |
void ScreenCapturerWinGdi::Capture(const DesktopRegion& region) { |
TickTime capture_start_time = TickTime::Now(); |
@@ -148,6 +171,8 @@ void ScreenCapturerWinGdi::Start(Callback* callback) { |
assert(callback); |
callback_ = callback; |
+ if (!shared_memory_factory_) |
+ shared_memory_factory_.reset(new CallbackSharedMemoryFactory(callback)); |
// Vote to disable Aero composited desktop effects while capturing. Windows |
// will restore Aero automatically if the process exits. This has no effect |
@@ -237,12 +262,8 @@ bool ScreenCapturerWinGdi::CaptureImage() { |
assert(desktop_dc_ != NULL); |
assert(memory_dc_ != NULL); |
- size_t buffer_size = size.width() * size.height() * |
- DesktopFrame::kBytesPerPixel; |
- SharedMemory* shared_memory = callback_->CreateSharedMemory(buffer_size); |
- |
- rtc::scoped_ptr<DesktopFrame> buffer( |
- DesktopFrameWin::Create(size, shared_memory, desktop_dc_)); |
+ rtc::scoped_ptr<DesktopFrame> buffer(DesktopFrameWin::Create( |
+ size, shared_memory_factory_.get(), desktop_dc_)); |
if (!buffer.get()) |
return false; |
queue_.ReplaceCurrentFrame(buffer.release()); |