# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/features.gni")
import("//build/config/jumbo.gni")
import("//media/media_options.gni")
import("//testing/test.gni")

group("capture") {
  public_deps = [
    ":capture_lib",
    "//media/capture/mojom:image_capture",
    "//media/capture/mojom:image_capture_types",
    "//media/capture/mojom:video_capture",
    "//services/service_manager/public/cpp",
  ]
}

# Things needed by //media/capture/mojom/video_capture_types.mojom.
jumbo_component("capture_base") {
  defines = [ "CAPTURE_IMPLEMENTATION" ]
  sources = [
    "capture_export.h",
    "video/video_capture_device_descriptor.cc",
    "video/video_capture_device_descriptor.h",
    "video/video_capture_device_info.cc",
    "video/video_capture_device_info.h",
    "video_capture_types.cc",
    "video_capture_types.h",
  ]
  deps = [
    "//base",
    "//base:i18n",
    "//media",
    "//ui/gfx",
  ]
}

# Target which allows breakout of Android BUILD.gn files.
jumbo_source_set("capture_device_specific") {
  visibility = [
    ":capture_lib",
    "//media/capture/content/android",
    "//media/capture/video/android",
  ]
  if (is_win) {
    # TODO(jschuh): https://crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
  }
  defines = [ "CAPTURE_IMPLEMENTATION" ]
  sources = [
    "content/animated_content_sampler.cc",
    "content/animated_content_sampler.h",
    "content/capture_resolution_chooser.cc",
    "content/capture_resolution_chooser.h",
    "content/smooth_event_sampler.cc",
    "content/smooth_event_sampler.h",
    "content/video_capture_oracle.cc",
    "content/video_capture_oracle.h",
    "video/blob_utils.cc",
    "video/blob_utils.h",
    "video/fake_video_capture_device.cc",
    "video/fake_video_capture_device.h",
    "video/fake_video_capture_device_factory.cc",
    "video/fake_video_capture_device_factory.h",
    "video/file_video_capture_device.cc",
    "video/file_video_capture_device.h",
    "video/file_video_capture_device_factory.cc",
    "video/file_video_capture_device_factory.h",
    "video/gpu_memory_buffer_utils.cc",
    "video/gpu_memory_buffer_utils.h",
    "video/video_capture_buffer_handle.cc",
    "video/video_capture_buffer_handle.h",
    "video/video_capture_device.cc",
    "video/video_capture_device.h",
    "video/video_capture_device_factory.cc",
    "video/video_capture_device_factory.h",
  ]

  public_deps = [
    ":capture_base",
  ]
  deps = [
    "//base",
    "//base:i18n",
    "//gpu/command_buffer/client",
    "//gpu/ipc/common:common",
    "//media",
    "//media/capture/mojom:image_capture",
    "//media/capture/mojom:image_capture_types",
    "//media/mojo/mojom",
    "//media/parsers",
    "//third_party/libyuv",
    "//ui/gfx",
  ]
}

jumbo_component("capture_lib") {
  defines = [ "CAPTURE_IMPLEMENTATION" ]
  sources = [
    "video/create_video_capture_device_factory.cc",
    "video/create_video_capture_device_factory.h",
    "video/scoped_buffer_pool_reservation.h",
    "video/shared_memory_buffer_tracker.cc",
    "video/shared_memory_buffer_tracker.h",
    "video/video_capture_buffer_pool.h",
    "video/video_capture_buffer_pool_impl.cc",
    "video/video_capture_buffer_pool_impl.h",
    "video/video_capture_buffer_tracker.h",
    "video/video_capture_buffer_tracker_factory.h",
    "video/video_capture_buffer_tracker_factory_impl.cc",
    "video/video_capture_buffer_tracker_factory_impl.h",
    "video/video_capture_device_client.cc",
    "video/video_capture_device_client.h",
    "video/video_capture_system.h",
    "video/video_capture_system_impl.cc",
    "video/video_capture_system_impl.h",
    "video/video_frame_receiver.h",
    "video/video_frame_receiver_on_task_runner.cc",
    "video/video_frame_receiver_on_task_runner.h",
    "video_capturer_source.cc",
    "video_capturer_source.h",
  ]

  public_deps = [
    ":capture_base",
    ":capture_device_specific",
  ]

  deps = [
    "//base",
    "//base:i18n",
    "//media",
    "//media/capture/mojom:image_capture",
    "//media/capture/mojom:image_capture_types",
    "//media/capture/mojom:video_capture",
    "//media/mojo/mojom",
    "//services/service_manager/public/cpp",
    "//third_party/libyuv",
    "//ui/display",
    "//ui/gfx",
  ]

  if (is_android) {
    public_deps += [
      "content/android",
      "video/android",
    ]
    deps += [
      "content/android:screen_capture_jni_headers",
      "video/android:capture_jni_headers",
    ]
  }

  if (is_mac) {
    sources += [
      "video/mac/video_capture_device_avfoundation_mac.h",
      "video/mac/video_capture_device_avfoundation_mac.mm",
      "video/mac/video_capture_device_decklink_mac.h",
      "video/mac/video_capture_device_decklink_mac.mm",
      "video/mac/video_capture_device_factory_mac.h",
      "video/mac/video_capture_device_factory_mac.mm",
      "video/mac/video_capture_device_mac.h",
      "video/mac/video_capture_device_mac.mm",
    ]
    deps += [
      "//services/video_capture/public/uma",
      "//third_party/decklink",
    ]
    libs = [
      "AVFoundation.framework",
      "CoreFoundation.framework",
      "CoreGraphics.framework",
      "CoreMedia.framework",
      "CoreVideo.framework",
      "Foundation.framework",
    ]
  }

  if (is_win) {
    sources += [
      "video/win/capability_list_win.cc",
      "video/win/capability_list_win.h",
      "video/win/filter_base_win.cc",
      "video/win/filter_base_win.h",
      "video/win/metrics.cc",
      "video/win/metrics.h",
      "video/win/pin_base_win.cc",
      "video/win/pin_base_win.h",
      "video/win/sink_filter_observer_win.h",
      "video/win/sink_filter_win.cc",
      "video/win/sink_filter_win.h",
      "video/win/sink_input_pin_win.cc",
      "video/win/sink_input_pin_win.h",
      "video/win/video_capture_device_factory_win.cc",
      "video/win/video_capture_device_factory_win.h",
      "video/win/video_capture_device_mf_win.cc",
      "video/win/video_capture_device_mf_win.h",
      "video/win/video_capture_device_utils_win.cc",
      "video/win/video_capture_device_utils_win.h",
      "video/win/video_capture_device_win.cc",
      "video/win/video_capture_device_win.h",
    ]
    deps += [ "//media/base/win:media_foundation_util" ]
    libs = [
      "mf.lib",
      "mfplat.lib",
      "mfreadwrite.lib",
      "mfuuid.lib",
    ]
    ldflags = [
      "/DELAYLOAD:mf.dll",
      "/DELAYLOAD:mfplat.dll",
      "/DELAYLOAD:mfreadwrite.dll",
    ]

    # TODO(jschuh): https://crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
  }

  # This includes the case of ChromeOS
  if (is_linux) {
    sources += [
      "video/linux/camera_config_chromeos.cc",
      "video/linux/camera_config_chromeos.h",
      "video/linux/scoped_v4l2_device_fd.cc",
      "video/linux/scoped_v4l2_device_fd.h",
      "video/linux/v4l2_capture_delegate.cc",
      "video/linux/v4l2_capture_delegate.h",
      "video/linux/v4l2_capture_device.h",
      "video/linux/v4l2_capture_device_impl.cc",
      "video/linux/v4l2_capture_device_impl.h",
      "video/linux/video_capture_device_chromeos.cc",
      "video/linux/video_capture_device_chromeos.h",
      "video/linux/video_capture_device_factory_linux.cc",
      "video/linux/video_capture_device_factory_linux.h",
      "video/linux/video_capture_device_linux.cc",
      "video/linux/video_capture_device_linux.h",
    ]
  }

  if (is_chromeos) {
    sources += [
      "video/chromeos/camera_3a_controller.cc",
      "video/chromeos/camera_3a_controller.h",
      "video/chromeos/camera_app_device_bridge_impl.cc",
      "video/chromeos/camera_app_device_bridge_impl.h",
      "video/chromeos/camera_app_device_impl.cc",
      "video/chromeos/camera_app_device_impl.h",
      "video/chromeos/camera_app_device_provider_impl.cc",
      "video/chromeos/camera_app_device_provider_impl.h",
      "video/chromeos/camera_buffer_factory.cc",
      "video/chromeos/camera_buffer_factory.h",
      "video/chromeos/camera_device_context.cc",
      "video/chromeos/camera_device_context.h",
      "video/chromeos/camera_device_delegate.cc",
      "video/chromeos/camera_device_delegate.h",
      "video/chromeos/camera_hal_delegate.cc",
      "video/chromeos/camera_hal_delegate.h",
      "video/chromeos/camera_hal_dispatcher_impl.cc",
      "video/chromeos/camera_hal_dispatcher_impl.h",
      "video/chromeos/camera_metadata_utils.cc",
      "video/chromeos/camera_metadata_utils.h",
      "video/chromeos/display_rotation_observer.cc",
      "video/chromeos/display_rotation_observer.h",
      "video/chromeos/gpu_memory_buffer_tracker.cc",
      "video/chromeos/gpu_memory_buffer_tracker.h",
      "video/chromeos/pixel_format_utils.cc",
      "video/chromeos/pixel_format_utils.h",
      "video/chromeos/request_builder.cc",
      "video/chromeos/request_builder.h",
      "video/chromeos/request_manager.cc",
      "video/chromeos/request_manager.h",
      "video/chromeos/scoped_video_capture_jpeg_decoder.cc",
      "video/chromeos/scoped_video_capture_jpeg_decoder.h",
      "video/chromeos/stream_buffer_manager.cc",
      "video/chromeos/stream_buffer_manager.h",
      "video/chromeos/vendor_tag_ops_delegate.cc",
      "video/chromeos/vendor_tag_ops_delegate.h",
      "video/chromeos/video_capture_device_chromeos_halv3.cc",
      "video/chromeos/video_capture_device_chromeos_halv3.h",
      "video/chromeos/video_capture_device_factory_chromeos.cc",
      "video/chromeos/video_capture_device_factory_chromeos.h",
      "video/chromeos/video_capture_jpeg_decoder.h",
      "video/chromeos/video_capture_jpeg_decoder_impl.cc",
      "video/chromeos/video_capture_jpeg_decoder_impl.h",
    ]
    public_deps += [ "//media/capture/video/chromeos/public" ]
    deps += [
      "//build/config/linux/libdrm",
      "//chromeos/dbus/power",
      "//components/chromeos_camera:mojo_mjpeg_decode_accelerator",
      "//components/chromeos_camera/common",
      "//gpu/ipc/common:common",
      "//media/capture/video/chromeos/mojom:cros_camera",
      "//third_party/libsync",
    ]
  }

  if (is_fuchsia) {
    sources += [
      "video/fuchsia/video_capture_device_factory_fuchsia.cc",
      "video/fuchsia/video_capture_device_factory_fuchsia.h",
    ]
  }
}

source_set("test_support") {
  testonly = true

  sources = [
    "video/mock_device.cc",
    "video/mock_device.h",
    "video/mock_device_factory.cc",
    "video/mock_device_factory.h",
    "video/mock_video_capture_device_client.cc",
    "video/mock_video_capture_device_client.h",
    "video/mock_video_frame_receiver.cc",
    "video/mock_video_frame_receiver.h",
  ]

  deps = [
    ":capture_lib",
    "//base/test:test_support",
    "//media:test_support",
    "//media/capture/mojom:image_capture",
    "//media/capture/mojom:image_capture_types",
    "//testing/gmock",
    "//ui/gfx:test_support",
  ]

  testonly = true
}

test("capture_unittests") {
  sources = [
    "content/animated_content_sampler_unittest.cc",
    "content/capture_resolution_chooser_unittest.cc",
    "content/smooth_event_sampler_unittest.cc",
    "content/video_capture_oracle_unittest.cc",
    "run_all_unittests.cc",
    "video/fake_video_capture_device_unittest.cc",
    "video/file_video_capture_device_unittest.cc",
    "video/linux/camera_config_chromeos_unittest.cc",
    "video/linux/fake_v4l2_impl.cc",
    "video/linux/fake_v4l2_impl.h",
    "video/linux/v4l2_capture_delegate_unittest.cc",
    "video/linux/video_capture_device_factory_linux_unittest.cc",
    "video/mac/video_capture_device_factory_mac_unittest.mm",
    "video/mock_gpu_memory_buffer_manager.cc",
    "video/mock_gpu_memory_buffer_manager.h",
    "video/video_capture_device_client_unittest.cc",
    "video/video_capture_device_unittest.cc",
    "video_capture_types_unittest.cc",
  ]

  data = [
    "//media/test/data/bear.mjpeg",
  ]

  deps = [
    ":capture",
    ":test_support",
    "//base/test:test_support",
    "//gpu/command_buffer/client",
    "//media:test_support",
    "//media/capture/mojom:image_capture",
    "//media/capture/mojom:image_capture_types",
    "//mojo/core/embedder",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/gfx:test_support",
  ]

  if (is_android) {
    deps += [
      "//media/capture/video/android",
      "//media/capture/video/android:capture_java",
    ]
  }

  if (is_win) {
    sources += [
      "video/win/video_capture_device_factory_win_unittest.cc",
      "video/win/video_capture_device_mf_win_unittest.cc",
    ]
    libs = [
      "mf.lib",
      "mfplat.lib",
      "mfreadwrite.lib",
      "mfuuid.lib",
    ]
    ldflags = [
      "/DELAYLOAD:mf.dll",
      "/DELAYLOAD:mfplat.dll",
      "/DELAYLOAD:mfreadwrite.dll",
    ]

    # TODO(jschuh): https://crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
  }

  if (is_linux) {
    deps += [ "//media/gpu/test:local_gpu_memory_buffer_manager" ]
  }

  if (is_chromeos) {
    sources += [
      "video/chromeos/camera_3a_controller_unittest.cc",
      "video/chromeos/camera_device_delegate_unittest.cc",
      "video/chromeos/camera_hal_delegate_unittest.cc",
      "video/chromeos/camera_hal_dispatcher_impl_unittest.cc",
      "video/chromeos/mock_camera_module.cc",
      "video/chromeos/mock_camera_module.h",
      "video/chromeos/mock_vendor_tag_ops.cc",
      "video/chromeos/mock_vendor_tag_ops.h",
      "video/chromeos/mock_video_capture_client.cc",
      "video/chromeos/mock_video_capture_client.h",
      "video/chromeos/request_manager_unittest.cc",
    ]
    deps += [
      "//build/config/linux/libdrm",
      "//chromeos/dbus/power",
      "//media/capture/video/chromeos/mojom:cros_camera",
      "//media/capture/video/chromeos/public",
      "//mojo/core/embedder",
      "//third_party/libsync",
      "//third_party/minigbm",
    ]
  }
}
