From 41e3d9ff3bf7a7364b643f851f14062fd43fcc11 Mon Sep 17 00:00:00 2001 From: zijiehe Date: Tue, 21 Mar 2017 12:41:18 -0700 Subject: [PATCH] Add DesktopCapturerId and attach it to DesktopFrame This change adds a DesktopCapturerId namespace, and attaches an int to each DesktopFrame. ScreenCapturerWinGdi and ScreenCapturerWinDirectx now actively set this field to differentiate themselves. BUG=679523, 650926 Review-Url: https://codereview.webrtc.org/2759493002 Cr-Commit-Position: refs/heads/master@{#17329} --- webrtc/modules/desktop_capture/BUILD.gn | 1 + webrtc/modules/desktop_capture/DEPS | 1 + webrtc/modules/desktop_capture/desktop_capture_types.h | 9 +++++++++ webrtc/modules/desktop_capture/desktop_frame.cc | 4 ++-- webrtc/modules/desktop_capture/desktop_frame.h | 10 ++++++++++ .../desktop_capture/win/screen_capturer_win_directx.cc | 1 + .../desktop_capture/win/screen_capturer_win_gdi.cc | 1 + 7 files changed, 25 insertions(+), 2 deletions(-) diff --git a/webrtc/modules/desktop_capture/BUILD.gn b/webrtc/modules/desktop_capture/BUILD.gn index f8d5293405..1a94223bdf 100644 --- a/webrtc/modules/desktop_capture/BUILD.gn +++ b/webrtc/modules/desktop_capture/BUILD.gn @@ -29,6 +29,7 @@ rtc_static_library("primitives") { deps = [ "../..:webrtc_common", "../../base:rtc_base", # TODO(kjellander): Cleanup in bugs.webrtc.org/3806. + "../../media:rtc_media_base", ] } diff --git a/webrtc/modules/desktop_capture/DEPS b/webrtc/modules/desktop_capture/DEPS index 9229e7f19b..fe372fdeaf 100644 --- a/webrtc/modules/desktop_capture/DEPS +++ b/webrtc/modules/desktop_capture/DEPS @@ -1,5 +1,6 @@ include_rules = [ "+webrtc/base", + "+webrtc/media", "+webrtc/system_wrappers", "+third_party/libyuv", ] diff --git a/webrtc/modules/desktop_capture/desktop_capture_types.h b/webrtc/modules/desktop_capture/desktop_capture_types.h index 9a6162a766..64a3fe4c4e 100644 --- a/webrtc/modules/desktop_capture/desktop_capture_types.h +++ b/webrtc/modules/desktop_capture/desktop_capture_types.h @@ -13,6 +13,7 @@ #include +#include "webrtc/media/base/videocommon.h" #include "webrtc/typedefs.h" namespace webrtc { @@ -36,6 +37,14 @@ const ScreenId kFullDesktopScreenId = -1; const ScreenId kInvalidScreenId = -2; +// An integer to attach to each DesktopFrame to differentiate the generator of +// the frame. +namespace DesktopCapturerId { + constexpr uint32_t kUnknown = 0; + constexpr uint32_t kScreenCapturerWinGdi = FOURCC('G', 'D', 'I', ' '); + constexpr uint32_t kScreenCapturerWinDirectx = FOURCC('D', 'X', 'G', 'I'); +} // namespace DesktopCapturerId + } // namespace webrtc #endif // WEBRTC_MODULES_DESKTOP_CAPTURE_DESKTOP_CAPTURE_TYPES_H_ diff --git a/webrtc/modules/desktop_capture/desktop_frame.cc b/webrtc/modules/desktop_capture/desktop_frame.cc index dfc0928b66..12e4ed8a09 100644 --- a/webrtc/modules/desktop_capture/desktop_frame.cc +++ b/webrtc/modules/desktop_capture/desktop_frame.cc @@ -26,8 +26,8 @@ DesktopFrame::DesktopFrame(DesktopSize size, shared_memory_(shared_memory), size_(size), stride_(stride), - capture_time_ms_(0) { -} + capture_time_ms_(0), + capturer_id_(DesktopCapturerId::kUnknown) {} DesktopFrame::~DesktopFrame() {} diff --git a/webrtc/modules/desktop_capture/desktop_frame.h b/webrtc/modules/desktop_capture/desktop_frame.h index d491135029..c0eaf03aa6 100644 --- a/webrtc/modules/desktop_capture/desktop_frame.h +++ b/webrtc/modules/desktop_capture/desktop_frame.h @@ -14,6 +14,7 @@ #include #include "webrtc/base/constructormagic.h" +#include "webrtc/modules/desktop_capture/desktop_capture_types.h" #include "webrtc/modules/desktop_capture/desktop_geometry.h" #include "webrtc/modules/desktop_capture/desktop_region.h" #include "webrtc/modules/desktop_capture/shared_memory.h" @@ -68,6 +69,14 @@ class DesktopFrame { // A helper to return the data pointer of a frame at the specified position. uint8_t* GetFrameDataAtPos(const DesktopVector& pos) const; + // The DesktopCapturer implementation which generates current DesktopFrame. + // Not all DesktopCapturer implementations set this field; it's set to + // kUnknown by default. + uint32_t capturer_id() const { return capturer_id_; } + void set_capturer_id(uint32_t capturer_id) { + capturer_id_ = capturer_id; + } + protected: DesktopFrame(DesktopSize size, int stride, @@ -87,6 +96,7 @@ class DesktopFrame { DesktopRegion updated_region_; DesktopVector dpi_; int64_t capture_time_ms_; + uint32_t capturer_id_; RTC_DISALLOW_COPY_AND_ASSIGN(DesktopFrame); }; diff --git a/webrtc/modules/desktop_capture/win/screen_capturer_win_directx.cc b/webrtc/modules/desktop_capture/win/screen_capturer_win_directx.cc index f6222d0d1a..90bdeb6124 100644 --- a/webrtc/modules/desktop_capture/win/screen_capturer_win_directx.cc +++ b/webrtc/modules/desktop_capture/win/screen_capturer_win_directx.cc @@ -137,6 +137,7 @@ void ScreenCapturerWinDirectx::CaptureFrame() { result->set_capture_time_ms( (rtc::TimeNanos() - capture_start_time_nanos) / rtc::kNumNanosecsPerMillisec); + result->set_capturer_id(DesktopCapturerId::kScreenCapturerWinDirectx); callback_->OnCaptureResult(Result::SUCCESS, std::move(result)); } 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 87bc195ce4..591adca26f 100644 --- a/webrtc/modules/desktop_capture/win/screen_capturer_win_gdi.cc +++ b/webrtc/modules/desktop_capture/win/screen_capturer_win_gdi.cc @@ -94,6 +94,7 @@ void ScreenCapturerWinGdi::CaptureFrame() { frame->set_capture_time_ms( (rtc::TimeNanos() - capture_start_time_nanos) / rtc::kNumNanosecsPerMillisec); + frame->set_capturer_id(DesktopCapturerId::kScreenCapturerWinGdi); callback_->OnCaptureResult(Result::SUCCESS, std::move(frame)); }