Index: webrtc/modules/desktop_capture/desktop_frame.cc |
diff --git a/webrtc/modules/desktop_capture/desktop_frame.cc b/webrtc/modules/desktop_capture/desktop_frame.cc |
index cb32ef782607e08a56f4d9b10390eb9715713a1f..054427cb772425e9e58643ac5173b6f67887fbce 100644 |
--- a/webrtc/modules/desktop_capture/desktop_frame.cc |
+++ b/webrtc/modules/desktop_capture/desktop_frame.cc |
@@ -77,15 +77,38 @@ DesktopFrame* BasicDesktopFrame::CopyOf(const DesktopFrame& frame) { |
return result; |
} |
+// static |
+rtc::scoped_ptr<DesktopFrame> SharedMemoryDesktopFrame::Create( |
+ DesktopSize size, |
+ SharedMemoryFactory* shared_memory_factory) { |
+ size_t buffer_size = |
+ size.width() * size.height() * DesktopFrame::kBytesPerPixel; |
+ rtc::scoped_ptr<SharedMemory> shared_memory; |
+ shared_memory = shared_memory_factory->CreateSharedMemory(buffer_size); |
+ if (!shared_memory) |
+ return nullptr; |
+ |
+ return rtc_make_scoped_ptr(new SharedMemoryDesktopFrame( |
+ size, size.width() * DesktopFrame::kBytesPerPixel, |
+ std::move(shared_memory))); |
+} |
+ |
+SharedMemoryDesktopFrame::SharedMemoryDesktopFrame(DesktopSize size, |
+ int stride, |
+ SharedMemory* shared_memory) |
+ : DesktopFrame(size, |
+ stride, |
+ reinterpret_cast<uint8_t*>(shared_memory->data()), |
+ shared_memory) {} |
SharedMemoryDesktopFrame::SharedMemoryDesktopFrame( |
DesktopSize size, |
int stride, |
- SharedMemory* shared_memory) |
- : DesktopFrame(size, stride, |
+ rtc::scoped_ptr<SharedMemory> shared_memory) |
+ : DesktopFrame(size, |
+ stride, |
reinterpret_cast<uint8_t*>(shared_memory->data()), |
- shared_memory) { |
-} |
+ shared_memory.release()) {} |
SharedMemoryDesktopFrame::~SharedMemoryDesktopFrame() { |
delete shared_memory_; |