Index: webrtc/modules/desktop_capture/shared_desktop_frame.cc |
diff --git a/webrtc/modules/desktop_capture/shared_desktop_frame.cc b/webrtc/modules/desktop_capture/shared_desktop_frame.cc |
index 8d10827e29cc2b78d472e8c28beaeb90064f1b81..e069a54d0284eabc3b005774569dcbdb2018606a 100644 |
--- a/webrtc/modules/desktop_capture/shared_desktop_frame.cc |
+++ b/webrtc/modules/desktop_capture/shared_desktop_frame.cc |
@@ -17,49 +17,25 @@ |
namespace webrtc { |
-class SharedDesktopFrame::Core { |
- public: |
- Core(DesktopFrame* frame) : frame_(frame) {} |
- |
- DesktopFrame* frame() { return frame_.get(); } |
- |
- bool HasOneRef() { return ref_count_.Value() == 1; } |
- |
- virtual int32_t AddRef() { |
- return ++ref_count_; |
- } |
- |
- virtual int32_t Release() { |
- int32_t ref_count; |
- ref_count = --ref_count_; |
- if (ref_count == 0) |
- delete this; |
- return ref_count; |
- } |
- |
- private: |
- virtual ~Core() {} |
- |
- Atomic32 ref_count_; |
- std::unique_ptr<DesktopFrame> frame_; |
- |
- RTC_DISALLOW_COPY_AND_ASSIGN(Core); |
-}; |
- |
SharedDesktopFrame::~SharedDesktopFrame() {} |
// static |
+std::unique_ptr<SharedDesktopFrame> SharedDesktopFrame::Wrap( |
+ std::unique_ptr<DesktopFrame> desktop_frame) { |
+ return std::unique_ptr<SharedDesktopFrame>( |
+ new SharedDesktopFrame(new Core(desktop_frame.release()))); |
+} |
+ |
SharedDesktopFrame* SharedDesktopFrame::Wrap(DesktopFrame* desktop_frame) { |
- rtc::scoped_refptr<Core> core(new Core(desktop_frame)); |
- return new SharedDesktopFrame(core); |
+ return Wrap(std::unique_ptr<DesktopFrame>(desktop_frame)).release(); |
} |
DesktopFrame* SharedDesktopFrame::GetUnderlyingFrame() { |
- return core_->frame(); |
+ return core_->get(); |
} |
-SharedDesktopFrame* SharedDesktopFrame::Share() { |
- SharedDesktopFrame* result = new SharedDesktopFrame(core_); |
+std::unique_ptr<SharedDesktopFrame> SharedDesktopFrame::Share() { |
+ std::unique_ptr<SharedDesktopFrame> result(new SharedDesktopFrame(core_)); |
result->set_dpi(dpi()); |
result->set_capture_time_ms(capture_time_ms()); |
*result->mutable_updated_region() = updated_region(); |
@@ -71,11 +47,10 @@ bool SharedDesktopFrame::IsShared() { |
} |
SharedDesktopFrame::SharedDesktopFrame(rtc::scoped_refptr<Core> core) |
- : DesktopFrame(core->frame()->size(), |
- core->frame()->stride(), |
- core->frame()->data(), |
- core->frame()->shared_memory()), |
- core_(core) { |
-} |
+ : DesktopFrame((*core)->size(), |
+ (*core)->stride(), |
+ (*core)->data(), |
+ (*core)->shared_memory()), |
+ core_(core) {} |
} // namespace webrtc |