Chromium Code Reviews| 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()); |