Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/libwebrtc/modules/desktop_capture/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 18 kB image not shown  

Quelle  BUILD.gn   Sprache: unbekannt

 
# Copyright (c) 2014 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.

import("//chromium/build/config/linux/gtk/gtk.gni")
import("//chromium/build/config/ui.gni")
import("../../webrtc.gni")

use_desktop_capture_differ_sse2 = target_cpu == "x86" || target_cpu == "x64"

config("x11_config") {
  if (rtc_use_x11_extensions) {
    defines = [ "WEBRTC_USE_X11" ]
  }
}

rtc_library("primitives") {
  visibility = [ "*" ]
  sources = [
    "desktop_capture_types.h",
    "desktop_frame.cc",
    "desktop_frame.h",
    "desktop_geometry.cc",
    "desktop_geometry.h",
    "desktop_region.cc",
    "desktop_region.h",
    "shared_desktop_frame.cc",
    "shared_desktop_frame.h",
    "shared_memory.cc",
    "shared_memory.h",
  ]

  deps = [
    "../../api:scoped_refptr",
    "../../rtc_base:checks",
    "../../rtc_base:refcount",
    "../../rtc_base/system:rtc_export",
    "//third_party/libyuv",
  ]
}

if (rtc_include_tests) {
  rtc_library("desktop_capture_modules_tests") {
    testonly = true

    defines = []
    sources = []
    deps = [
      ":desktop_capture",
      "../../api:function_view",
      "../../api:scoped_refptr",
      "../../rtc_base:checks",
      "../../rtc_base:logging",
      "../../rtc_base:platform_thread",
      "../../rtc_base:random",
      "../../rtc_base:timeutils",
    ]
    if (rtc_desktop_capture_supported) {
      deps += [
        ":desktop_capture_mock",
        ":primitives",
        ":screen_drawer",
        "../../rtc_base/third_party/base64",
        "../../system_wrappers",
        "../../test:test_support",
      ]
      sources += [
        "screen_capturer_integration_test.cc",
        "screen_drawer_unittest.cc",
        "window_finder_unittest.cc",
      ]

      if ((is_linux || is_chromeos) && rtc_use_pipewire) {
        configs += [ "../portal:gio" ]
      }

      public_configs = [ ":x11_config" ]

      if (is_win) {
        deps += [ "../../rtc_base/win:windows_version" ]
      }
    }
  }

  if ((is_linux || is_chromeos) && rtc_use_pipewire) {
    rtc_test("shared_screencast_stream_test") {
      testonly = true

      sources = [
        "linux/wayland/shared_screencast_stream_unittest.cc",
        "linux/wayland/test/test_screencast_stream_provider.cc",
        "linux/wayland/test/test_screencast_stream_provider.h",
      ]

      configs += [ "../portal:pipewire_all" ]

      deps = [
        ":desktop_capture",
        ":desktop_capture_mock",
        ":primitives",
        "../../rtc_base:checks",
        "../../rtc_base:logging",
        "../../rtc_base:random",
        "../../rtc_base:timeutils",
        "../portal",

        # TODO(bugs.webrtc.org/9987): Remove this dep on rtc_base:rtc_base once
        # rtc_base:threading is fully defined.
        "../../rtc_base:task_queue_for_test",
        "../../rtc_base:threading",
        "../../system_wrappers",
        "../../test:test_main",
        "../../test:test_support",
        "//api/units:time_delta",
        "//rtc_base:rtc_event",
      ]

      data = [ "../../third_party/pipewire" ]
      public_configs = [ "../portal:pipewire_config" ]
    }
  }

  rtc_library("desktop_capture_unittests") {
    testonly = true

    defines = []
    sources = [
      "blank_detector_desktop_capturer_wrapper_unittest.cc",
      "cropped_desktop_frame_unittest.cc",
      "desktop_and_cursor_composer_unittest.cc",
      "desktop_capturer_differ_wrapper_unittest.cc",
      "desktop_frame_rotation_unittest.cc",
      "desktop_frame_unittest.cc",
      "desktop_geometry_unittest.cc",
      "desktop_region_unittest.cc",
      "differ_block_unittest.cc",
      "fallback_desktop_capturer_wrapper_unittest.cc",
      "rgba_color_unittest.cc",
      "test_utils.cc",
      "test_utils.h",
      "test_utils_unittest.cc",
    ]

    if ((is_linux || is_chromeos) && rtc_use_pipewire) {
      configs += [ "../portal:gio" ]
    }

    deps = [
      ":desktop_capture",
      ":desktop_capture_mock",
      ":primitives",
      "../../rtc_base:checks",
      "../../rtc_base:logging",
      "../../rtc_base:macromagic",
      "../../rtc_base:random",
      "../../rtc_base:timeutils",

      # TODO(bugs.webrtc.org/9987): Remove this dep on rtc_base:rtc_base once
      # rtc_base:threading is fully defined.
      "../../rtc_base:task_queue_for_test",
      "../../rtc_base:threading",
      "../../system_wrappers",
      "../../test:test_support",
    ]

    if (is_win) {
      sources += [
        "win/cursor_unittest.cc",
        "win/cursor_unittest_resources.h",
        "win/cursor_unittest_resources.rc",
        "win/screen_capture_utils_unittest.cc",
        "win/screen_capturer_win_directx_unittest.cc",
        "win/test_support/test_window.cc",
        "win/test_support/test_window.h",
        "win/window_capture_utils_unittest.cc",
      ]
      deps += [
        "../../rtc_base/win:scoped_com_initializer",
        "../../rtc_base/win:windows_version",
      ]
    }

    if (rtc_desktop_capture_supported) {
      sources += [
        "screen_capturer_helper_unittest.cc",
        "screen_capturer_unittest.cc",
        "window_capturer_unittest.cc",
      ]
      if (is_mac) {
        sources += [ "screen_capturer_mac_unittest.cc" ]
      }
      if (rtc_enable_win_wgc) {
        sources += [
          "win/wgc_capture_source_unittest.cc",
          "win/wgc_capturer_win_unittest.cc",
        ]
      }
      deps += [
        ":desktop_capture_mock",
        "../../system_wrappers:metrics",
      ]
      public_configs = [ ":x11_config" ]
    }
  }

  rtc_library("screen_drawer") {
    testonly = true

    sources = [
      "screen_drawer.cc",
      "screen_drawer.h",
    ]

    if (is_linux || is_chromeos) {
      sources += [ "screen_drawer_linux.cc" ]
      libs = [ "X11" ]
    }

    if (is_mac) {
      sources += [ "screen_drawer_mac.cc" ]
    }

    if (is_win) {
      sources += [ "screen_drawer_win.cc" ]
    }

    deps = [
      ":desktop_capture",
      ":primitives",
      "../../api:scoped_refptr",
      "../../rtc_base:checks",
      "../../rtc_base:logging",
      "../../system_wrappers",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]

    if (is_posix || is_fuchsia) {
      sources += [
        "screen_drawer_lock_posix.cc",
        "screen_drawer_lock_posix.h",
      ]
    }
  }

  rtc_library("desktop_capture_mock") {
    testonly = true

    sources = [
      "mock_desktop_capturer_callback.cc",
      "mock_desktop_capturer_callback.h",
    ]

    if ((is_linux || is_chromeos) && rtc_use_pipewire) {
      configs += [ "../portal:gio" ]
    }

    deps = [
      ":desktop_capture",
      ":primitives",
      "../../test:test_support",
    ]
  }
}

# TODO(bugs.webrtc.org/14187): remove when all users are gone
if ((is_linux || is_chromeos) && rtc_use_pipewire) {
  config("pipewire_config") {
    configs = [ "../portal:pipewire_config" ]
  }
}

rtc_library("desktop_capture") {
  visibility = [ "*" ]
  defines = []
  deps = [
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
  public_configs = [ ":x11_config" ]
  sources = [
    "blank_detector_desktop_capturer_wrapper.cc",
    "blank_detector_desktop_capturer_wrapper.h",
    "cropped_desktop_frame.cc",
    "cropped_desktop_frame.h",
    "cropping_window_capturer.cc",
    "cropping_window_capturer.h",
    "delegated_source_list_controller.h",
    "desktop_and_cursor_composer.cc",
    "desktop_and_cursor_composer.h",
    "desktop_capture_metrics_helper.cc",
    "desktop_capture_metrics_helper.h",
    "desktop_capture_options.cc",
    "desktop_capture_options.h",
    "desktop_capturer.cc",
    "desktop_capturer.h",
    "desktop_capturer_differ_wrapper.cc",
    "desktop_capturer_differ_wrapper.h",
    "desktop_capturer_wrapper.cc",
    "desktop_capturer_wrapper.h",
    "desktop_frame_generator.cc",
    "desktop_frame_generator.h",
    "desktop_frame_rotation.cc",
    "desktop_frame_rotation.h",
    "differ_block.cc",
    "differ_block.h",
    "fake_desktop_capturer.cc",
    "fake_desktop_capturer.h",
    "fallback_desktop_capturer_wrapper.cc",
    "fallback_desktop_capturer_wrapper.h",
    "full_screen_application_handler.cc",
    "full_screen_application_handler.h",
    "full_screen_window_detector.cc",
    "full_screen_window_detector.h",
    "mouse_cursor.cc",
    "mouse_cursor.h",
    "mouse_cursor_monitor.h",
    "resolution_tracker.cc",
    "resolution_tracker.h",
    "rgba_color.cc",
    "rgba_color.h",
    "screen_capture_frame_queue.h",
    "screen_capturer_helper.cc",
    "screen_capturer_helper.h",
    "window_finder.cc",
    "window_finder.h",
  ]
  if (is_linux && !is_castos && rtc_use_pipewire) {
    sources += [ "desktop_capture_metadata.h" ]
  }
  if (is_mac) {
    sources += [
      "mac/desktop_configuration.h",
      "mac/desktop_configuration_monitor.cc",
      "mac/desktop_configuration_monitor.h",
      "mac/desktop_frame_utils.cc",
      "mac/desktop_frame_utils.h",
      "mac/full_screen_mac_application_handler.cc",
      "mac/full_screen_mac_application_handler.h",
      "mac/window_list_utils.cc",
      "mac/window_list_utils.h",
    ]
    deps += [ ":desktop_capture_objc" ]
  }
  if (rtc_use_x11_extensions || rtc_use_pipewire) {
    sources += [
      "mouse_cursor_monitor_linux.cc",
      "screen_capturer_linux.cc",
      "window_capturer_linux.cc",
    ]
  }

  if (rtc_use_x11_extensions) {
    sources += [
      "linux/x11/mouse_cursor_monitor_x11.cc",
      "linux/x11/mouse_cursor_monitor_x11.h",
      "linux/x11/screen_capturer_x11.cc",
      "linux/x11/screen_capturer_x11.h",
      "linux/x11/shared_x_display.cc",
      "linux/x11/shared_x_display.h",
      "linux/x11/window_capturer_x11.cc",
      "linux/x11/window_capturer_x11.h",
      "linux/x11/window_finder_x11.cc",
      "linux/x11/window_finder_x11.h",
      "linux/x11/window_list_utils.cc",
      "linux/x11/window_list_utils.h",
      "linux/x11/x_atom_cache.cc",
      "linux/x11/x_atom_cache.h",
      "linux/x11/x_error_trap.cc",
      "linux/x11/x_error_trap.h",
      "linux/x11/x_server_pixel_buffer.cc",
      "linux/x11/x_server_pixel_buffer.h",
      "linux/x11/x_window_property.cc",
      "linux/x11/x_window_property.h",
    ]
    libs = [
      "X11",
      "Xcomposite",
      "Xdamage",
      "Xext",
      "Xfixes",
      "Xrender",
      "Xrandr",
      "Xtst",
    ]
    if (build_with_mozilla) {
      libs -= [ "Xtst" ]
    }
  }

  if (!is_win && !is_mac && !rtc_use_x11_extensions && !rtc_use_pipewire &&
      !is_fuchsia) {
    sources += [
      "mouse_cursor_monitor_null.cc",
      "screen_capturer_null.cc",
      "window_capturer_null.cc",
    ]
  }

  deps += [
    ":primitives",
    "../../api:function_view",
    "../../api:make_ref_counted",
    "../../api:refcountedbase",
    "../../api:scoped_refptr",
    "../../api:sequence_checker",
    "../../rtc_base:checks",
    "../../rtc_base:event_tracer",
    "../../rtc_base:logging",
    "../../rtc_base:macromagic",
    "../../rtc_base:random",
    "../../rtc_base:stringutils",
    "../../rtc_base:timeutils",
    "../../rtc_base/synchronization:mutex",
    "../../rtc_base/system:arch",
    "../../rtc_base/system:no_unique_address",
    "../../rtc_base/system:rtc_export",
    "../../system_wrappers",
    "../../system_wrappers:metrics",
  ]

  if (is_fuchsia) {
    sources += [
      "mouse_cursor_monitor_null.cc",
      "screen_capturer_fuchsia.cc",
      "screen_capturer_fuchsia.h",
      "window_capturer_null.cc",
    ]
    deps += [
      "../../rtc_base:divide_round",
      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.sysmem",
      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.ui.composition",
      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.ui.display.singleton",
      "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp",
    ]
  }

  if (is_win) {
    sources += [
      "cropping_window_capturer_win.cc",
      "desktop_frame_win.cc",
      "desktop_frame_win.h",
      "mouse_cursor_monitor_win.cc",
      "screen_capturer_win.cc",
      "win/cursor.cc",
      "win/cursor.h",
      "win/d3d_device.cc",
      "win/d3d_device.h",
      "win/desktop.cc",
      "win/desktop.h",
      "win/desktop_capture_utils.cc",
      "win/desktop_capture_utils.h",
      "win/display_configuration_monitor.cc",
      "win/display_configuration_monitor.h",
      "win/dxgi_adapter_duplicator.cc",
      "win/dxgi_adapter_duplicator.h",
      "win/dxgi_context.cc",
      "win/dxgi_context.h",
      "win/dxgi_duplicator_controller.cc",
      "win/dxgi_duplicator_controller.h",
      "win/dxgi_frame.cc",
      "win/dxgi_frame.h",
      "win/dxgi_output_duplicator.cc",
      "win/dxgi_output_duplicator.h",
      "win/dxgi_texture.cc",
      "win/dxgi_texture.h",
      "win/dxgi_texture_mapping.cc",
      "win/dxgi_texture_mapping.h",
      "win/dxgi_texture_staging.cc",
      "win/dxgi_texture_staging.h",
      "win/full_screen_win_application_handler.cc",
      "win/full_screen_win_application_handler.h",
      "win/scoped_gdi_object.h",
      "win/scoped_thread_desktop.cc",
      "win/scoped_thread_desktop.h",
      "win/screen_capture_utils.cc",
      "win/screen_capture_utils.h",
      "win/screen_capturer_win_directx.cc",
      "win/screen_capturer_win_directx.h",
      "win/screen_capturer_win_gdi.cc",
      "win/screen_capturer_win_gdi.h",
      "win/screen_capturer_win_magnifier.cc",
      "win/screen_capturer_win_magnifier.h",
      "win/selected_window_context.cc",
      "win/selected_window_context.h",
      "win/window_capture_utils.cc",
      "win/window_capture_utils.h",
      "win/window_capturer_win_gdi.cc",
      "win/window_capturer_win_gdi.h",
      "window_capturer_win.cc",
      "window_finder_win.cc",
      "window_finder_win.h",
    ]
    libs = [
      "d3d11.lib",
      "dxgi.lib",
      "shcore.lib",
    ]
    deps += [
      "../../rtc_base:win32",
      "../../rtc_base/containers:flat_map",
      "../../rtc_base/win:create_direct3d_device",
      "../../rtc_base/win:get_activation_factory",
      "../../rtc_base/win:windows_version",
    ]
  }

  if (rtc_use_x11_extensions) {
    deps += [ "../../rtc_base:sanitizer" ]
  }

  deps += [ "//third_party/libyuv" ]

  if (use_desktop_capture_differ_sse2) {
    deps += [ ":desktop_capture_differ_sse2" ]
  }

  if (rtc_use_pipewire) {
    sources += [
      "linux/wayland/base_capturer_pipewire.cc",
      "linux/wayland/base_capturer_pipewire.h",
      "linux/wayland/egl_dmabuf.cc",
      "linux/wayland/egl_dmabuf.h",
      "linux/wayland/mouse_cursor_monitor_pipewire.cc",
      "linux/wayland/mouse_cursor_monitor_pipewire.h",
      "linux/wayland/portal_request_response.h",
      "linux/wayland/restore_token_manager.cc",
      "linux/wayland/restore_token_manager.h",
      "linux/wayland/scoped_glib.h",
      "linux/wayland/screen_capture_portal_interface.cc",
      "linux/wayland/screen_capture_portal_interface.h",
      "linux/wayland/screencast_portal.cc",
      "linux/wayland/screencast_portal.h",
      "linux/wayland/screencast_stream_utils.cc",
      "linux/wayland/screencast_stream_utils.h",
      "linux/wayland/shared_screencast_stream.cc",
      "linux/wayland/shared_screencast_stream.h",
      "linux/wayland/xdg_desktop_portal_utils.h",
      "linux/wayland/xdg_session_details.h",
    ]

    configs += [ "../portal:pipewire_all" ]

    public_configs += [ "../portal:pipewire_config" ]

    deps += [
      "../../rtc_base:sanitizer",
      "../portal",
    ]
  }

  if (rtc_enable_win_wgc) {
    sources += [
      "win/wgc_capture_session.cc",
      "win/wgc_capture_session.h",
      "win/wgc_capture_source.cc",
      "win/wgc_capture_source.h",
      "win/wgc_capturer_win.cc",
      "win/wgc_capturer_win.h",
      "win/wgc_desktop_frame.cc",
      "win/wgc_desktop_frame.h",
    ]
    libs += [ "dwmapi.lib" ]
    deps += [
      "../../rtc_base:rtc_event",
      "../../rtc_base/win:hstring",
    ]
  }
}

if (is_mac) {
  rtc_library("desktop_capture_objc") {
    # This target, needs to be separated from ":desktop_capture" because
    # that is the C++ part of the target while this one is the Obj-C++ part.
    # Aside from this, both represent a "desktop_capture" target.
    # This target separation based on programming languages introduces a
    # dependency cycle between ":desktop_capture" and
    # ":desktop_capture_objc".
    # To break this, ":desktop_capture_objc" shares some .h files with
    # ":desktop_capture" but when external targets need one of these
    # headers, they should depend on ":desktop_capture" and consider
    # this target as private.
    visibility = [ ":desktop_capture" ]
    sources = [
      "delegated_source_list_controller.h",
      "desktop_capture_options.h",
      "desktop_capturer.h",
      "full_screen_application_handler.h",
      "full_screen_window_detector.h",
      "mac/desktop_configuration.h",
      "mac/desktop_configuration.mm",
      "mac/desktop_configuration_monitor.h",
      "mac/desktop_frame_cgimage.h",
      "mac/desktop_frame_cgimage.mm",
      "mac/desktop_frame_iosurface.h",
      "mac/desktop_frame_iosurface.mm",
      "mac/desktop_frame_provider.h",
      "mac/desktop_frame_provider.mm",
      "mac/sck_picker_handle.h",
      "mac/sck_picker_handle.mm",
      "mac/screen_capturer_mac.h",
      "mac/screen_capturer_mac.mm",
      "mac/screen_capturer_sck.h",
      "mac/screen_capturer_sck.mm",
      "mac/window_list_utils.h",
      "mouse_cursor.h",
      "mouse_cursor_monitor.h",
      "mouse_cursor_monitor_mac.mm",
      "screen_capture_frame_queue.h",
      "screen_capturer_darwin.mm",
      "screen_capturer_helper.h",
      "window_capturer_mac.mm",
      "window_finder.h",
      "window_finder_mac.h",
      "window_finder_mac.mm",
    ]
    deps = [
      ":primitives",
      "../../api:function_view",
      "../../api:refcountedbase",
      "../../api:scoped_refptr",
      "../../api:sequence_checker",
      "../../rtc_base:checks",
      "../../rtc_base:event_tracer",
      "../../rtc_base:logging",
      "../../rtc_base:macromagic",
      "../../rtc_base:timeutils",
      "../../rtc_base/synchronization:mutex",
      "../../rtc_base/system:rtc_export",
      "../../sdk:helpers_objc",
    ]
    frameworks = [
      "AppKit.framework",
      "CoreVideo.framework",
      "IOKit.framework",
      "IOSurface.framework",
    ]
    weak_frameworks = [ "ScreenCaptureKit.framework" ]  # macOS 12.3
  }
}

if (use_desktop_capture_differ_sse2) {
  # Have to be compiled as a separate target because it needs to be compiled
  # with SSE2 enabled.
  rtc_library("desktop_capture_differ_sse2") {
    visibility = [ ":*" ]
    sources = [
      "differ_vector_sse2.cc",
      "differ_vector_sse2.h",
    ]

    if (is_posix || is_fuchsia) {
      cflags = [ "-msse2" ]
    }
  }
}

[ Dauer der Verarbeitung: 0.18 Sekunden  (vorverarbeitet)  ]