Files
platform-external-webrtc/webrtc/modules/desktop_capture/shared_desktop_frame.cc
Zijie He 85e6a4ba13 Use desktop relative mouse cursor position in DesktopAndCursorComposer
This change adds one temporary use_desktop_relative_cursor_position_ flag in
DesktopAndCursorComposer. It's automatically set according to the consturctor
used.
When the flag is true, DesktopAndCursorComposer uses the newly added
MouseCursorMonitor::Callback::OnCursorPosition(), which is the absolute position
of the cursor in the full desktop coordinate, and DesktopCapturer::IsOccluded()
to decide whether the mouse cursor should be drawn on the DesktopFrame.
When the flag is false, the behavior of DesktopAndCursorComposer is unchanged.

This flag will be removed together with the deprecated constructor of
DesktopAndCursorComposer.

Currently the new DesktopAndCursorComposer constructor is not used, so no
behavior change is expected.

Bug: webrtc:7950
Change-Id: I7235e32fa325a21c4a2594613764a9f81d76dfbc
Reviewed-on: https://chromium-review.googlesource.com/641075
Commit-Queue: Zijie He <zijiehe@chromium.org>
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#19592}
2017-08-30 01:38:17 +00:00

62 lines
1.8 KiB
C++

/*
* Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "webrtc/modules/desktop_capture/shared_desktop_frame.h"
#include <memory>
#include <utility>
#include "webrtc/rtc_base/constructormagic.h"
#include "webrtc/rtc_base/ptr_util.h"
namespace webrtc {
SharedDesktopFrame::~SharedDesktopFrame() {}
// static
std::unique_ptr<SharedDesktopFrame> SharedDesktopFrame::Wrap(
std::unique_ptr<DesktopFrame> desktop_frame) {
return std::unique_ptr<SharedDesktopFrame>(
new SharedDesktopFrame(new Core(std::move(desktop_frame))));
}
SharedDesktopFrame* SharedDesktopFrame::Wrap(DesktopFrame* desktop_frame) {
return Wrap(std::unique_ptr<DesktopFrame>(desktop_frame)).release();
}
DesktopFrame* SharedDesktopFrame::GetUnderlyingFrame() {
return core_->get();
}
bool SharedDesktopFrame::ShareFrameWith(const SharedDesktopFrame& other) const {
return core_->get() == other.core_->get();
}
std::unique_ptr<SharedDesktopFrame> SharedDesktopFrame::Share() {
std::unique_ptr<SharedDesktopFrame> result(new SharedDesktopFrame(core_));
result->CopyFrameInfoFrom(*this);
return result;
}
bool SharedDesktopFrame::IsShared() {
return !core_->HasOneRef();
}
SharedDesktopFrame::SharedDesktopFrame(rtc::scoped_refptr<Core> core)
: DesktopFrame((*core)->size(),
(*core)->stride(),
(*core)->data(),
(*core)->shared_memory()),
core_(core) {
CopyFrameInfoFrom(*(core_->get()));
}
} // namespace webrtc