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

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

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

    if ((is_linux || is_chromeos) && rtc_use_pipewire) {
      configs += [ ":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:rtc_base",
      "../../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",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]

    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 += [ ":gio" ]
    }

    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",
        ]
        if (!build_with_chromium) {
          macro_include = "rtc_base/system/no_cfi_icall.h"
          macro_deps = [ "../../rtc_base/system:no_cfi_icall" ]
        }
      }
    }

    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",
    "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/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: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/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" ]
    }
  }
}
