# 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("//build/config/linux/gtk/gtk.gni")
import("//build/config/linux/pkg_config.gni")
import("//build/config/ui.gni")
import("//tools/generate_stubs/rules.gni")
import("../../webrtc.gni")

use_desktop_capture_differ_sse2 = current_cpu == "x86" || current_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 (!build_with_mozilla) {
    deps += [ "../../rtc_base" ]  # TODO(kjellander): Cleanup in
                                  # bugs.webrtc.org/3806.
  }
}

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",
        "../../rtc_base/third_party/base64",
        "../../system_wrappers",
        "../../test:test_support",
        "../../test:video_test_support",
      ]
      sources += [
        "screen_capturer_integration_test.cc",
        "screen_drawer_unittest.cc",
        "window_finder_unittest.cc",
      ]
      public_configs = [ ":x11_config" ]

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

  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",
      "mouse_cursor_monitor_unittest.cc",
      "rgba_color_unittest.cc",
      "test_utils.cc",
      "test_utils.h",
      "test_utils_unittest.cc",
    ]
    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:rtc_base",
      "../../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",
    ]

    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",
    ]

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

if (is_linux || is_chromeos) {
  if (rtc_use_pipewire) {
    pkg_config("gio") {
      packages = [
        "gio-2.0",
        "gio-unix-2.0",
      ]
    }

    pkg_config("pipewire") {
      packages = [ "libpipewire-0.3" ]
      if (!rtc_link_pipewire) {
        ignore_libs = true
      }
    }

    pkg_config("gbm") {
      packages = [ "gbm" ]
    }
    pkg_config("egl") {
      packages = [ "egl" ]
    }
    pkg_config("epoxy") {
      packages = [ "epoxy" ]
      ignore_libs = true
    }
    pkg_config("libdrm") {
      packages = [ "libdrm" ]
      if (!rtc_link_pipewire) {
        ignore_libs = true
      }
    }

    if (!rtc_link_pipewire) {
      # When libpipewire is not directly linked, use stubs to allow for dlopening of
      # the binary.
      generate_stubs("pipewire_stubs") {
        configs = [
          "../../:common_config",
          ":pipewire",
          ":libdrm",
        ]
        deps = [ "../../rtc_base" ]
        extra_header = "linux/wayland/pipewire_stub_header.fragment"
        logging_function = "RTC_LOG(LS_VERBOSE)"
        logging_include = "rtc_base/logging.h"
        output_name = "linux/wayland/pipewire_stubs"
        path_from_source = "modules/desktop_capture/linux/wayland"
        sigs = [
          "linux/wayland/pipewire.sigs",
          "linux/wayland/drm.sigs",
        ]
      }
    }

    config("pipewire_config") {
      defines = [ "WEBRTC_USE_PIPEWIRE" ]
      if (!rtc_link_pipewire) {
        defines += [ "WEBRTC_DLOPEN_PIPEWIRE" ]
      }

      # Chromecast build config overrides `WEBRTC_USE_PIPEWIRE` even when
      # `rtc_use_pipewire` is not set, which causes pipewire_config to not be
      # included in targets. More details in: webrtc:13898
      if (is_linux && !is_castos) {
        defines += [ "WEBRTC_USE_GIO" ]
      }
    }
  }
}

rtc_library("desktop_capture") {
  visibility = [ "*" ]
  defines = []
  deps = []
  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",
    "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/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 (build_with_mozilla) {
    sources += [
      "desktop_device_info.cc",
      "desktop_device_info.h",
    ]
    if (is_win) {
      sources += [
        "app_capturer_win.cc",
        "win/desktop_device_info_win.cc",
        "win/win_shared.cc",
      ]
    }
  }
  if (rtc_use_x11_extensions || rtc_use_pipewire) {
    sources += [
      "mouse_cursor_monitor_linux.cc",
      "screen_capturer_linux.cc",
      "window_capturer_linux.cc",
    ]

    if (build_with_mozilla && (is_linux || is_chromeos)) {
      sources += [
        "app_capturer_linux.cc",
        "linux/x11/app_capturer_x11.cc",
        "linux/x11/desktop_device_info_linux.cc",
        "linux/x11/desktop_device_info_linux.h",
        "linux/x11/shared_x_util.cc",
        "linux/x11/shared_x_util.h",
      ]
    }
  }

  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 (!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.scenic",
      "//third_party/fuchsia-sdk/sdk/pkg/scenic_cpp",
      "//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",
    ]
    deps += [
      "../../rtc_base:win32",
      "../../rtc_base/win:create_direct3d_device",
      "../../rtc_base/win:get_activation_factory",
      "../../rtc_base/win:windows_version",
    ]
  }

  absl_deps = [
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]

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

  if (!build_with_mozilla) {
    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.cc",
      "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.cc",
      "linux/wayland/xdg_desktop_portal_utils.h",
      "linux/wayland/xdg_session_details.h",
    ]

    configs += [
      ":gio",
      ":pipewire",
      ":gbm",
      ":egl",
      ":epoxy",
      ":libdrm",
    ]

    if (!rtc_link_pipewire) {
      deps += [ ":pipewire_stubs" ]
    }

    public_configs += [ ":pipewire_config" ]

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

  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/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 = [
      "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/screen_capturer_mac.h",
      "mac/screen_capturer_mac.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",
      "../../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",
      "IOKit.framework",
      "IOSurface.framework",
    ]
  }
}

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" ]
    }
  }
}
