Remove DesktopRegion parameter from DesktopCapturer::Capture.
To ensure this change won't break Chromium, this is the first change, to add a new CaptureFrame() function, and let Capture(DesktopRegion) and CaptureFrame() call each other. So both a legacy consumer or a legacy implementation won't be broken. BUG=https://bugs.chromium.org/p/webrtc/issues/detail?id=6513 Review-Url: https://codereview.webrtc.org/2409833002 Cr-Commit-Position: refs/heads/master@{#14635}
This commit is contained in:
parent
794d535e51
commit
91902cb6c0
@ -36,7 +36,7 @@ void CroppingWindowCapturer::SetSharedMemoryFactory(
|
||||
window_capturer_->SetSharedMemoryFactory(std::move(shared_memory_factory));
|
||||
}
|
||||
|
||||
void CroppingWindowCapturer::Capture(const DesktopRegion& region) {
|
||||
void CroppingWindowCapturer::CaptureFrame() {
|
||||
if (ShouldUseScreenCapturer()) {
|
||||
if (!screen_capturer_.get()) {
|
||||
screen_capturer_.reset(ScreenCapturer::Create(options_));
|
||||
@ -45,9 +45,9 @@ void CroppingWindowCapturer::Capture(const DesktopRegion& region) {
|
||||
}
|
||||
screen_capturer_->Start(this);
|
||||
}
|
||||
screen_capturer_->Capture(region);
|
||||
screen_capturer_->CaptureFrame();
|
||||
} else {
|
||||
window_capturer_->Capture(region);
|
||||
window_capturer_->CaptureFrame();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -32,7 +32,7 @@ class CroppingWindowCapturer : public WindowCapturer,
|
||||
void Start(DesktopCapturer::Callback* callback) override;
|
||||
void SetSharedMemoryFactory(
|
||||
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) override;
|
||||
void Capture(const DesktopRegion& region) override;
|
||||
void CaptureFrame() override;
|
||||
void SetExcludedWindow(WindowId window) override;
|
||||
|
||||
// WindowCapturer implementation.
|
||||
|
||||
@ -145,10 +145,10 @@ void DesktopAndCursorComposer::SetSharedMemoryFactory(
|
||||
desktop_capturer_->SetSharedMemoryFactory(std::move(shared_memory_factory));
|
||||
}
|
||||
|
||||
void DesktopAndCursorComposer::Capture(const DesktopRegion& region) {
|
||||
void DesktopAndCursorComposer::CaptureFrame() {
|
||||
if (mouse_monitor_.get())
|
||||
mouse_monitor_->Capture();
|
||||
desktop_capturer_->Capture(region);
|
||||
desktop_capturer_->CaptureFrame();
|
||||
}
|
||||
|
||||
void DesktopAndCursorComposer::SetExcludedWindow(WindowId window) {
|
||||
|
||||
@ -37,7 +37,7 @@ class DesktopAndCursorComposer : public DesktopCapturer,
|
||||
void Start(DesktopCapturer::Callback* callback) override;
|
||||
void SetSharedMemoryFactory(
|
||||
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) override;
|
||||
void Capture(const DesktopRegion& region) override;
|
||||
void CaptureFrame() override;
|
||||
void SetExcludedWindow(WindowId window) override;
|
||||
|
||||
private:
|
||||
|
||||
@ -77,7 +77,7 @@ class FakeScreenCapturer : public DesktopCapturer {
|
||||
|
||||
void Start(Callback* callback) override { callback_ = callback; }
|
||||
|
||||
void Capture(const DesktopRegion& region) override {
|
||||
void CaptureFrame() override {
|
||||
callback_->OnCaptureResult(
|
||||
next_frame_ ? Result::SUCCESS : Result::ERROR_TEMPORARY,
|
||||
std::move(next_frame_));
|
||||
@ -193,7 +193,7 @@ TEST_F(DesktopAndCursorComposerTest, Error) {
|
||||
fake_cursor_->SetState(MouseCursorMonitor::INSIDE, DesktopVector());
|
||||
fake_screen_->SetNextFrame(nullptr);
|
||||
|
||||
blender_.Capture(DesktopRegion());
|
||||
blender_.CaptureFrame();
|
||||
|
||||
EXPECT_FALSE(frame_);
|
||||
}
|
||||
@ -237,7 +237,7 @@ TEST_F(DesktopAndCursorComposerTest, Blend) {
|
||||
SharedDesktopFrame::Wrap(CreateTestFrame()));
|
||||
fake_screen_->SetNextFrame(frame->Share());
|
||||
|
||||
blender_.Capture(DesktopRegion());
|
||||
blender_.CaptureFrame();
|
||||
|
||||
VerifyFrame(*frame_, state, pos);
|
||||
|
||||
|
||||
@ -66,13 +66,12 @@ class DesktopCapturer {
|
||||
virtual void SetSharedMemoryFactory(
|
||||
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) {}
|
||||
|
||||
// Captures next frame. |region| specifies region of the capture target that
|
||||
// should be fresh in the resulting frame. The frame may also include fresh
|
||||
// data for areas outside |region|. In that case capturer will include these
|
||||
// areas in updated_region() of the frame. |region| is specified relative to
|
||||
// the top left corner of the capture target. Pending capture operations are
|
||||
// canceled when DesktopCapturer is deleted.
|
||||
virtual void Capture(const DesktopRegion& region) = 0;
|
||||
// This is a legacy interface, consumers should call CaptureFrame() function.
|
||||
virtual void Capture(const DesktopRegion& region) { CaptureFrame(); }
|
||||
|
||||
// Captures next frame, and involve callback provided by Start() function.
|
||||
// Pending capture requests are canceled when DesktopCapturer is deleted.
|
||||
virtual void CaptureFrame() { Capture(DesktopRegion()); }
|
||||
|
||||
// Sets the window to be excluded from the captured image in the future
|
||||
// Capture calls. Used to exclude the screenshare notification window for
|
||||
|
||||
@ -62,7 +62,7 @@ class FakeDesktopCapturer : public T {
|
||||
callback_ = callback;
|
||||
}
|
||||
|
||||
void Capture(const DesktopRegion& region) override {
|
||||
void CaptureFrame() override {
|
||||
if (generator_) {
|
||||
std::unique_ptr<DesktopFrame> frame(
|
||||
generator_->GetNextFrame(shared_memory_factory_.get()));
|
||||
|
||||
@ -161,8 +161,8 @@ void ScreenCapturerDifferWrapper::SetSharedMemoryFactory(
|
||||
base_capturer_->SetSharedMemoryFactory(std::move(shared_memory_factory));
|
||||
}
|
||||
|
||||
void ScreenCapturerDifferWrapper::Capture(const DesktopRegion& region) {
|
||||
base_capturer_->Capture(region);
|
||||
void ScreenCapturerDifferWrapper::CaptureFrame() {
|
||||
base_capturer_->CaptureFrame();
|
||||
}
|
||||
|
||||
bool ScreenCapturerDifferWrapper::GetScreenList(ScreenList* screens) {
|
||||
|
||||
@ -39,7 +39,7 @@ class ScreenCapturerDifferWrapper : public ScreenCapturer,
|
||||
void Start(DesktopCapturer::Callback* callback) override;
|
||||
void SetSharedMemoryFactory(
|
||||
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) override;
|
||||
void Capture(const DesktopRegion& region) override;
|
||||
void CaptureFrame() override;
|
||||
bool GetScreenList(ScreenList* screens) override;
|
||||
bool SelectScreen(ScreenId id) override;
|
||||
|
||||
|
||||
@ -136,7 +136,7 @@ void ExecuteDifferWrapperCase(BlackWhiteDesktopFramePainter* frame_painter,
|
||||
for (const auto& rect : updated_region) {
|
||||
frame_painter->updated_region()->AddRect(rect);
|
||||
}
|
||||
capturer->Capture(DesktopRegion());
|
||||
capturer->CaptureFrame();
|
||||
}
|
||||
|
||||
// Executes a ScreenCapturerDifferWrapper::Capture(), if updated_region() is not
|
||||
@ -147,7 +147,7 @@ void ExecuteCapturer(ScreenCapturerDifferWrapper* capturer,
|
||||
EXPECT_CALL(*callback,
|
||||
OnCaptureResultPtr(DesktopCapturer::Result::SUCCESS, testing::_))
|
||||
.Times(1);
|
||||
capturer->Capture(DesktopRegion());
|
||||
capturer->CaptureFrame();
|
||||
}
|
||||
|
||||
void ExecuteDifferWrapperTest(bool with_hints,
|
||||
@ -178,7 +178,7 @@ void ExecuteDifferWrapperTest(bool with_hints,
|
||||
AssertUpdatedRegionIs(**frame,
|
||||
{DesktopRect::MakeSize((*frame)->size())});
|
||||
}));
|
||||
capturer.Capture(DesktopRegion());
|
||||
capturer.CaptureFrame();
|
||||
|
||||
ExecuteDifferWrapperCase(&frame_painter, &capturer, &callback,
|
||||
{DesktopRect::MakeLTRB(100, 100, 200, 200),
|
||||
|
||||
@ -285,7 +285,7 @@ class ScreenCapturerMac : public ScreenCapturer {
|
||||
|
||||
// Overridden from ScreenCapturer:
|
||||
void Start(Callback* callback) override;
|
||||
void Capture(const DesktopRegion& region) override;
|
||||
void CaptureFrame() override;
|
||||
void SetExcludedWindow(WindowId window) override;
|
||||
bool GetScreenList(ScreenList* screens) override;
|
||||
bool SelectScreen(ScreenId id) override;
|
||||
@ -426,7 +426,7 @@ void ScreenCapturerMac::Start(Callback* callback) {
|
||||
callback_ = callback;
|
||||
}
|
||||
|
||||
void ScreenCapturerMac::Capture(const DesktopRegion& region_to_capture) {
|
||||
void ScreenCapturerMac::CaptureFrame() {
|
||||
int64_t capture_start_time_nanos = rtc::TimeNanos();
|
||||
|
||||
queue_.MoveToNextFrame();
|
||||
|
||||
@ -19,11 +19,16 @@ namespace webrtc {
|
||||
|
||||
class MockScreenCapturer : public ScreenCapturer {
|
||||
public:
|
||||
MockScreenCapturer() {}
|
||||
MockScreenCapturer() {
|
||||
ON_CALL(*this, Capture(testing::_))
|
||||
.WillByDefault(testing::WithoutArgs(testing::Invoke(
|
||||
this, &MockScreenCapturer::CaptureFrame)));
|
||||
}
|
||||
virtual ~MockScreenCapturer() {}
|
||||
|
||||
MOCK_METHOD1(Start, void(Callback* callback));
|
||||
MOCK_METHOD1(Capture, void(const DesktopRegion& region));
|
||||
MOCK_METHOD0(CaptureFrame, void(void));
|
||||
MOCK_METHOD1(GetScreenList, bool(ScreenList* screens));
|
||||
MOCK_METHOD1(SelectScreen, bool(ScreenId id));
|
||||
|
||||
|
||||
@ -204,7 +204,7 @@ class ScreenCapturerTest : public testing::Test {
|
||||
EXPECT_CALL(callback_,
|
||||
OnCaptureResultPtr(DesktopCapturer::Result::SUCCESS, _))
|
||||
.WillOnce(SaveUniquePtrArg(&frame));
|
||||
capturer->Capture(DesktopRegion());
|
||||
capturer->CaptureFrame();
|
||||
EXPECT_TRUE(frame);
|
||||
return frame;
|
||||
}
|
||||
@ -259,7 +259,7 @@ TEST_F(ScreenCapturerTest, Capture) {
|
||||
.WillOnce(SaveUniquePtrArg(&frame));
|
||||
|
||||
capturer_->Start(&callback_);
|
||||
capturer_->Capture(DesktopRegion());
|
||||
capturer_->CaptureFrame();
|
||||
|
||||
ASSERT_TRUE(frame);
|
||||
EXPECT_GT(frame->size().width(), 0);
|
||||
@ -302,7 +302,7 @@ TEST_F(ScreenCapturerTest, UseSharedBuffers) {
|
||||
capturer_->Start(&callback_);
|
||||
capturer_->SetSharedMemoryFactory(
|
||||
std::unique_ptr<SharedMemoryFactory>(new FakeSharedMemoryFactory()));
|
||||
capturer_->Capture(DesktopRegion());
|
||||
capturer_->CaptureFrame();
|
||||
|
||||
ASSERT_TRUE(frame);
|
||||
ASSERT_TRUE(frame->shared_memory());
|
||||
@ -318,7 +318,7 @@ TEST_F(ScreenCapturerTest, UseMagnifier) {
|
||||
.WillOnce(SaveUniquePtrArg(&frame));
|
||||
|
||||
capturer_->Start(&callback_);
|
||||
capturer_->Capture(DesktopRegion());
|
||||
capturer_->CaptureFrame();
|
||||
ASSERT_TRUE(frame);
|
||||
}
|
||||
|
||||
@ -333,7 +333,7 @@ TEST_F(ScreenCapturerTest, UseDirectxCapturer) {
|
||||
.WillOnce(SaveUniquePtrArg(&frame));
|
||||
|
||||
capturer_->Start(&callback_);
|
||||
capturer_->Capture(DesktopRegion());
|
||||
capturer_->CaptureFrame();
|
||||
ASSERT_TRUE(frame);
|
||||
}
|
||||
|
||||
@ -350,7 +350,7 @@ TEST_F(ScreenCapturerTest, UseDirectxCapturerWithSharedBuffers) {
|
||||
capturer_->Start(&callback_);
|
||||
capturer_->SetSharedMemoryFactory(
|
||||
std::unique_ptr<SharedMemoryFactory>(new FakeSharedMemoryFactory()));
|
||||
capturer_->Capture(DesktopRegion());
|
||||
capturer_->CaptureFrame();
|
||||
ASSERT_TRUE(frame);
|
||||
ASSERT_TRUE(frame->shared_memory());
|
||||
EXPECT_EQ(frame->shared_memory()->id(), kTestSharedMemoryId);
|
||||
|
||||
@ -54,7 +54,7 @@ class ScreenCapturerLinux : public ScreenCapturer,
|
||||
|
||||
// DesktopCapturer interface.
|
||||
void Start(Callback* delegate) override;
|
||||
void Capture(const DesktopRegion& region) override;
|
||||
void CaptureFrame() override;
|
||||
|
||||
// ScreenCapturer interface.
|
||||
bool GetScreenList(ScreenList* screens) override;
|
||||
@ -228,7 +228,7 @@ void ScreenCapturerLinux::Start(Callback* callback) {
|
||||
callback_ = callback;
|
||||
}
|
||||
|
||||
void ScreenCapturerLinux::Capture(const DesktopRegion& region) {
|
||||
void ScreenCapturerLinux::CaptureFrame() {
|
||||
int64_t capture_start_time_nanos = rtc::TimeNanos();
|
||||
|
||||
queue_.MoveToNextFrame();
|
||||
|
||||
@ -54,7 +54,7 @@ DesktopSize ScreenCapturerWinDirectx::SelectedDesktopSize() const {
|
||||
.size();
|
||||
}
|
||||
|
||||
void ScreenCapturerWinDirectx::Capture(const DesktopRegion& region) {
|
||||
void ScreenCapturerWinDirectx::CaptureFrame() {
|
||||
RTC_DCHECK(callback_);
|
||||
|
||||
int64_t capture_start_time_nanos = rtc::TimeNanos();
|
||||
|
||||
@ -38,7 +38,7 @@ class ScreenCapturerWinDirectx : public ScreenCapturer {
|
||||
void Start(Callback* callback) override;
|
||||
void SetSharedMemoryFactory(
|
||||
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) override;
|
||||
void Capture(const DesktopRegion& region) override;
|
||||
void CaptureFrame() override;
|
||||
bool GetScreenList(ScreenList* screens) override;
|
||||
bool SelectScreen(ScreenId id) override;
|
||||
|
||||
|
||||
@ -71,7 +71,7 @@ void ScreenCapturerWinGdi::SetSharedMemoryFactory(
|
||||
shared_memory_factory_ = std::move(shared_memory_factory);
|
||||
}
|
||||
|
||||
void ScreenCapturerWinGdi::Capture(const DesktopRegion& region) {
|
||||
void ScreenCapturerWinGdi::CaptureFrame() {
|
||||
int64_t capture_start_time_nanos = rtc::TimeNanos();
|
||||
|
||||
queue_.MoveToNextFrame();
|
||||
|
||||
@ -39,7 +39,7 @@ class ScreenCapturerWinGdi : public ScreenCapturer {
|
||||
void Start(Callback* callback) override;
|
||||
void SetSharedMemoryFactory(
|
||||
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) override;
|
||||
void Capture(const DesktopRegion& region) override;
|
||||
void CaptureFrame() override;
|
||||
bool GetScreenList(ScreenList* screens) override;
|
||||
bool SelectScreen(ScreenId id) override;
|
||||
|
||||
|
||||
@ -72,7 +72,7 @@ void ScreenCapturerWinMagnifier::SetSharedMemoryFactory(
|
||||
shared_memory_factory_ = std::move(shared_memory_factory);
|
||||
}
|
||||
|
||||
void ScreenCapturerWinMagnifier::Capture(const DesktopRegion& region) {
|
||||
void ScreenCapturerWinMagnifier::CaptureFrame() {
|
||||
if (!magnifier_initialized_ ||
|
||||
!magnifier_capture_succeeded_ ||
|
||||
GetSystemMetrics(SM_CMONITORS) != 1) {
|
||||
@ -82,7 +82,7 @@ void ScreenCapturerWinMagnifier::Capture(const DesktopRegion& region) {
|
||||
"initialization or last capture attempt failed, or "
|
||||
"execute on multi-screen system.";
|
||||
StartFallbackCapturer();
|
||||
fallback_capturer_->Capture(region);
|
||||
fallback_capturer_->CaptureFrame();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -111,7 +111,7 @@ void ScreenCapturerWinMagnifier::Capture(const DesktopRegion& region) {
|
||||
LOG_F(LS_WARNING) << "Switching to the fallback screen capturer because "
|
||||
"last capture attempt failed.";
|
||||
StartFallbackCapturer();
|
||||
fallback_capturer_->Capture(region);
|
||||
fallback_capturer_->CaptureFrame();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -51,7 +51,7 @@ class ScreenCapturerWinMagnifier : public ScreenCapturer {
|
||||
void Start(Callback* callback) override;
|
||||
void SetSharedMemoryFactory(
|
||||
std::unique_ptr<SharedMemoryFactory> shared_memory_factory) override;
|
||||
void Capture(const DesktopRegion& region) override;
|
||||
void CaptureFrame() override;
|
||||
bool GetScreenList(ScreenList* screens) override;
|
||||
bool SelectScreen(ScreenId id) override;
|
||||
void SetExcludedWindow(WindowId window) override;
|
||||
|
||||
@ -55,7 +55,7 @@ class WindowCapturerMac : public WindowCapturer {
|
||||
|
||||
// DesktopCapturer interface.
|
||||
void Start(Callback* callback) override;
|
||||
void Capture(const DesktopRegion& region) override;
|
||||
void CaptureFrame() override;
|
||||
|
||||
private:
|
||||
Callback* callback_ = nullptr;
|
||||
@ -176,7 +176,7 @@ void WindowCapturerMac::Start(Callback* callback) {
|
||||
callback_ = callback;
|
||||
}
|
||||
|
||||
void WindowCapturerMac::Capture(const DesktopRegion& region) {
|
||||
void WindowCapturerMac::CaptureFrame() {
|
||||
if (!IsWindowValid(window_id_)) {
|
||||
callback_->OnCaptureResult(Result::ERROR_PERMANENT, nullptr);
|
||||
return;
|
||||
|
||||
@ -31,7 +31,7 @@ class WindowCapturerNull : public WindowCapturer {
|
||||
|
||||
// DesktopCapturer interface.
|
||||
void Start(Callback* callback) override;
|
||||
void Capture(const DesktopRegion& region) override;
|
||||
void CaptureFrame() override;
|
||||
|
||||
private:
|
||||
Callback* callback_ = nullptr;
|
||||
@ -64,7 +64,7 @@ void WindowCapturerNull::Start(Callback* callback) {
|
||||
callback_ = callback;
|
||||
}
|
||||
|
||||
void WindowCapturerNull::Capture(const DesktopRegion& region) {
|
||||
void WindowCapturerNull::CaptureFrame() {
|
||||
// Not implemented yet.
|
||||
callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr);
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ class WindowCapturerWin : public WindowCapturer {
|
||||
|
||||
// DesktopCapturer interface.
|
||||
void Start(Callback* callback) override;
|
||||
void Capture(const DesktopRegion& region) override;
|
||||
void CaptureFrame() override;
|
||||
|
||||
private:
|
||||
Callback* callback_ = nullptr;
|
||||
@ -160,7 +160,7 @@ void WindowCapturerWin::Start(Callback* callback) {
|
||||
callback_ = callback;
|
||||
}
|
||||
|
||||
void WindowCapturerWin::Capture(const DesktopRegion& region) {
|
||||
void WindowCapturerWin::CaptureFrame() {
|
||||
if (!window_) {
|
||||
LOG(LS_ERROR) << "Window hasn't been selected: " << GetLastError();
|
||||
callback_->OnCaptureResult(Result::ERROR_PERMANENT, nullptr);
|
||||
|
||||
@ -95,7 +95,7 @@ class WindowCapturerLinux : public WindowCapturer,
|
||||
|
||||
// DesktopCapturer interface.
|
||||
void Start(Callback* callback) override;
|
||||
void Capture(const DesktopRegion& region) override;
|
||||
void CaptureFrame() override;
|
||||
|
||||
// SharedXDisplay::XEventHandler interface.
|
||||
bool HandleXEvent(const XEvent& event) override;
|
||||
@ -271,7 +271,7 @@ void WindowCapturerLinux::Start(Callback* callback) {
|
||||
callback_ = callback;
|
||||
}
|
||||
|
||||
void WindowCapturerLinux::Capture(const DesktopRegion& region) {
|
||||
void WindowCapturerLinux::CaptureFrame() {
|
||||
if (!x_server_pixel_buffer_.IsWindowValid()) {
|
||||
LOG(LS_INFO) << "The window is no longer valid.";
|
||||
callback_->OnCaptureResult(Result::ERROR_PERMANENT, nullptr);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user