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

  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 += [
        ":gio",
        ":pipewire",
        ":gbm",
        ":egl",
        ":epoxy",
        ":libdrm",
      ]

      deps = [
        ":desktop_capture",
        ":desktop_capture_mock",
        ":primitives",
        "../../rtc_base:checks",
        "../../rtc_base:logging",
        "../../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_main",
        "../../test:test_support",
        "//api/units:time_delta",
        "//rtc_base:rtc_event",
      ]

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

      data = [ "../../third_party/pipewire" ]
      public_configs = [ ":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",
      "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) {
      # When libpipewire is not directly linked, use stubs to allow for dlopening of
      # the binary.
      generate_stubs("pipewire_stubs") {
        configs = [
          "../../:common_config",
          ":pipewire",
        ]
        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" ]
        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/pipewire_utils.cc",
      "linux/wayland/pipewire_utils.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" ]
    }
  }
}
