# 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/buildflag_header.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//media/gpu/args.gni")
import("//media/media_options.gni")
import("//testing/test.gni")
import("//tools/generate_stubs/rules.gni")

buildflag_header("buildflags") {
  header = "buildflags.h"

  flags = [
    "USE_VAAPI=$use_vaapi",
    "USE_V4L2_CODEC=$use_v4l2_codec",
    "USE_LIBV4L2=$use_v4lplugin",
  ]
}

component("gpu") {
  output_name = "media_gpu"

  # Only local test code, GPU-related IPC code in the media layer, and
  # media-related content code should access //media/gpu.
  visibility = [
    "//chrome/gpu",
    "//components/arc/common:media",
    "//components/arc/video_accelerator",
    "//components/mirroring/service:mirroring_service",
    "//components/viz/service/main",
    "//content/gpu:*",
    "//content/renderer:*",
    "//media/gpu/ipc/*",
    "//media/gpu/vaapi/*",
    "//media/gpu/test/*",
    "//media/mojo/*",
    "//remoting/codec:encoder",
    ":*",
  ]

  if (is_mac) {
    # On Mac, content/common reaches into here to do some pre-sandbox
    # initialization.
    visibility += [ "//content/common" ]
  }

  defines = [ "MEDIA_GPU_IMPLEMENTATION" ]

  sources = [
    "command_buffer_helper.cc",
    "command_buffer_helper.h",
    "gles2_decoder_helper.cc",
    "gles2_decoder_helper.h",
    "gpu_video_accelerator_util.cc",
    "gpu_video_accelerator_util.h",
    "gpu_video_decode_accelerator_factory.cc",
    "gpu_video_decode_accelerator_factory.h",
    "gpu_video_encode_accelerator_factory.cc",
    "gpu_video_encode_accelerator_factory.h",
  ]

  public_deps = [
    ":buildflags",
    ":common",
    ":image_processor",
    ":video_frame_mapper",
    "//base",
    "//gpu",
    "//media",
    "//third_party/mesa_headers",
    "//ui/gfx/geometry",
  ]
  deps = [
    "//gpu/command_buffer/common:gles2_utils",
    "//gpu/command_buffer/service:gles2",
    "//gpu/ipc/service",
    "//third_party/libyuv",
    "//ui/base",
    "//ui/display/types",
    "//ui/gl",
    "//ui/platform_window",
  ]
  libs = []
  ldflags = []

  if (is_linux) {
    public_deps += [ "//media/gpu/linux" ]
  }

  if (is_mac) {
    public_deps += [ "//media/gpu/mac" ]
  }

  if (is_android) {
    sources += [
      "android/android_video_decode_accelerator.cc",
      "android/android_video_decode_accelerator.h",
      "android/android_video_encode_accelerator.cc",
      "android/android_video_encode_accelerator.h",
      "android/android_video_surface_chooser.cc",
      "android/android_video_surface_chooser.h",
      "android/android_video_surface_chooser_impl.cc",
      "android/android_video_surface_chooser_impl.h",
      "android/avda_codec_image.cc",
      "android/avda_codec_image.h",
      "android/avda_picture_buffer_manager.cc",
      "android/avda_picture_buffer_manager.h",
      "android/avda_shared_state.cc",
      "android/avda_shared_state.h",
      "android/avda_state_provider.h",
      "android/avda_surface_bundle.cc",
      "android/avda_surface_bundle.h",
      "android/codec_allocator.cc",
      "android/codec_allocator.h",
      "android/codec_image.cc",
      "android/codec_image.h",
      "android/codec_image_group.cc",
      "android/codec_image_group.h",
      "android/codec_wrapper.cc",
      "android/codec_wrapper.h",
      "android/device_info.cc",
      "android/device_info.h",
      "android/image_reader_gl_owner.cc",
      "android/image_reader_gl_owner.h",
      "android/media_codec_video_decoder.cc",
      "android/media_codec_video_decoder.h",
      "android/promotion_hint_aggregator.h",
      "android/promotion_hint_aggregator_impl.cc",
      "android/promotion_hint_aggregator_impl.h",
      "android/shared_image_video.cc",
      "android/shared_image_video.h",
      "android/surface_chooser_helper.cc",
      "android/surface_chooser_helper.h",
      "android/surface_texture_gl_owner.cc",
      "android/surface_texture_gl_owner.h",
      "android/texture_owner.cc",
      "android/texture_owner.h",
      "android/video_frame_factory.h",
      "android/video_frame_factory_impl.cc",
      "android/video_frame_factory_impl.h",
    ]
    libs += [ "android" ]
    deps += [
      "//gpu/ipc/common:android_image_reader_utils",

      # TODO(crbug.com/789435): This can be removed once CdmManager is removed.
      "//gpu/ipc/common:ipc_common_sources",
      "//media/mojo:buildflags",
      "//services/service_manager/public/cpp:cpp",
      "//ui/gl:gl_jni_headers",
    ]

    # TODO(crbug.com/789435): This is needed for AVDA to access the CDM
    # directly.  Remove this dependency after VDAs are also running as part of
    # the mojo media service. See http://crbug.com/522298
    if (mojo_media_host == "gpu") {
      deps += [ "//media/cdm:cdm_manager" ]
    }
  }

  if (use_v4l2_codec) {
    public_deps += [ "//media/gpu/v4l2" ]
  }

  if (use_vaapi) {
    public_deps += [ "//media/gpu/vaapi" ]
  }

  if (is_win) {
    sources += [
      "windows/d3d11_h264_accelerator.cc",
      "windows/d3d11_h264_accelerator.h",
      "windows/d3d11_picture_buffer.cc",
      "windows/d3d11_picture_buffer.h",
      "windows/d3d11_video_context_wrapper.cc",
      "windows/d3d11_video_context_wrapper.h",
      "windows/d3d11_video_decoder.cc",
      "windows/d3d11_video_decoder.h",
      "windows/d3d11_video_decoder_client.h",
      "windows/d3d11_video_decoder_impl.cc",
      "windows/d3d11_video_decoder_impl.h",
      "windows/d3d11_vp9_accelerator.cc",
      "windows/d3d11_vp9_accelerator.h",
      "windows/d3d11_vp9_picture.cc",
      "windows/d3d11_vp9_picture.h",
      "windows/dxva_picture_buffer_win.cc",
      "windows/dxva_picture_buffer_win.h",
      "windows/dxva_video_decode_accelerator_win.cc",
      "windows/dxva_video_decode_accelerator_win.h",
      "windows/init_guid.cc",
      "windows/media_foundation_video_encode_accelerator_win.cc",
      "windows/media_foundation_video_encode_accelerator_win.h",
    ]
    configs += [
      # TODO(https://crbug.com/167187): Fix size_t to int truncations.
      "//build/config/compiler:no_size_t_to_int_warning",
      "//third_party/khronos:khronos_headers",
    ]
    public_deps += [ "//media/base/win:media_foundation_util" ]
    deps += [
      "//third_party/angle:includes",
      "//ui/display",
    ]
    libs += [
      "d3d9.lib",
      "d3d11.lib",
      "dxva2.lib",
      "strmiids.lib",
      "mf.lib",
      "mfplat.lib",
      "mfuuid.lib",
    ]
    ldflags += [
      "/DELAYLOAD:d3d9.dll",
      "/DELAYLOAD:d3d11.dll",
      "/DELAYLOAD:dxva2.dll",
      "/DELAYLOAD:mf.dll",
      "/DELAYLOAD:mfplat.dll",
    ]
    if (enable_library_cdms) {
      sources += [
        "windows/d3d11_cdm_proxy.cc",
        "windows/d3d11_cdm_proxy.h",
        "windows/d3d11_decryptor.cc",
        "windows/d3d11_decryptor.h",
      ]
    }
  }

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  }
}

source_set("common") {
  defines = [ "MEDIA_GPU_IMPLEMENTATION" ]
  sources = [
    "accelerated_video_decoder.h",
    "codec_picture.cc",
    "codec_picture.h",
    "format_utils.cc",
    "format_utils.h",
    "gpu_video_decode_accelerator_helpers.h",
    "gpu_video_encode_accelerator_helpers.cc",
    "gpu_video_encode_accelerator_helpers.h",
    "h264_decoder.cc",
    "h264_decoder.h",
    "h264_dpb.cc",
    "h264_dpb.h",
    "macros.h",
    "vp9_decoder.cc",
    "vp9_decoder.h",
    "vp9_picture.cc",
    "vp9_picture.h",
    "vp9_reference_frame_vector.cc",
    "vp9_reference_frame_vector.h",
  ]
  if (use_v4l2_codec || use_vaapi) {
    sources += [
      "decode_surface_handler.h",
      "vp8_decoder.cc",
      "vp8_decoder.h",
      "vp8_picture.cc",
      "vp8_picture.h",
      "vp8_reference_frame_vector.cc",
      "vp8_reference_frame_vector.h",
    ]
  }

  deps = [
    ":buildflags",
    "//base",
    "//media",
    "//ui/gfx:buffer_types",
    "//ui/gfx:memory_buffer",
    "//ui/gfx/geometry",
  ]
}

source_set("image_processor") {
  defines = [ "MEDIA_GPU_IMPLEMENTATION" ]
  sources = [
    "image_processor_factory.cc",
    "libyuv_image_processor.cc",
    "libyuv_image_processor.h",
  ]

  public_deps = [
    ":image_processor_common",
  ]

  deps = [
    "//third_party/libyuv",
    "//ui/gl",
  ]

  if (use_v4l2_codec) {
    deps += [ "//media/gpu/v4l2" ]
  }
  if (is_linux) {
    deps += [ ":video_frame_mapper" ]
  }
}

source_set("image_processor_common") {
  defines = [ "MEDIA_GPU_IMPLEMENTATION" ]
  sources = [
    "image_processor.cc",
    "image_processor.h",
    "image_processor_factory.h",
  ]

  public_deps = [
    ":buildflags",
    ":common",
    "//base",
    "//media",
    "//ui/gfx/geometry",
  ]
}

source_set("video_frame_mapper") {
  defines = [ "MEDIA_GPU_IMPLEMENTATION" ]
  sources = [
    "video_frame_mapper_factory.cc",
  ]
  public_deps = [
    ":video_frame_mapper_common",
  ]
  deps = []

  # generic_dmabuf_video_frame_mapper
  if (is_linux) {
    deps += [ "//media/gpu/linux:video_frame_mapper" ]
  }

  # vaapi_dmabuf_video_frame_mapper
  if (use_vaapi) {
    deps += [ "//media/gpu/vaapi" ]
  }
}

source_set("video_frame_mapper_common") {
  defines = [ "MEDIA_GPU_IMPLEMENTATION" ]
  sources = [
    "video_frame_mapper.h",
    "video_frame_mapper_factory.h",
  ]

  public_deps = [
    ":buildflags",
    "//base",
    "//media",
  ]
}

# TODO(watk): Run this on bots. http://crbug.com/461437
if (is_win || is_android || use_v4l2_codec || use_vaapi) {
  test("video_decode_accelerator_unittest") {
    data = [
      "//media/test/data/",
    ]

    deps = [
      ":common",
      ":gpu",
      "//base",
      "//base/test:test_support",
      "//media:test_support",
      "//mojo/core/embedder",
      "//testing/gtest",
      "//ui/base",
      "//ui/display/manager",
      "//ui/gfx",
      "//ui/gfx:test_support",
      "//ui/gfx/geometry",
      "//ui/gl",
      "//ui/gl:test_support",
      "//ui/gl/init",
    ]

    configs += [ "//third_party/khronos:khronos_headers" ]

    if (is_win || is_chromeos || use_v4l2_codec) {
      sources = [
        "test/fake_video_decode_accelerator.cc",
        "test/fake_video_decode_accelerator.h",
        "video_decode_accelerator_unittest.cc",
      ]
      deps += [
        "test:decode_helpers",
        "test:frame_file_writer",
        "test:frame_validator",
        "//mojo/core/embedder",
        "//ui/display",
        "//ui/display/types",
        "//ui/platform_window",
      ]
    }

    if (is_android) {
      deps += [
        ":android_video_decode_accelerator_unittests",
        "//media/base/android:media_java",
        "//media/test:run_all_unittests",
        "//ui/android:ui_java",
      ]
    }

    if (is_win) {
      # TODO(https://crbug.com/167187): Fix size_t to int truncations.
      configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
      deps += [
        "//third_party/angle:libEGL",
        "//third_party/angle:libGLESv2",
      ]
    }

    if (use_x11) {
      configs += [ "//build/config/linux:x11" ]
      deps += [ "//ui/gfx/x" ]
    }

    if (use_ozone) {
      deps += [ "//ui/ozone" ]
    }
  }
}

source_set("android_video_decode_accelerator_unittests") {
  if (is_android) {
    testonly = true
    sources = [
      "android/android_video_decode_accelerator_unittest.cc",
      "android/android_video_surface_chooser_impl_unittest.cc",
      "android/codec_allocator_unittest.cc",
      "android/codec_image_group_unittest.cc",
      "android/codec_image_unittest.cc",
      "android/codec_wrapper_unittest.cc",
      "android/fake_codec_allocator.cc",
      "android/fake_codec_allocator.h",
      "android/image_reader_gl_owner_unittest.cc",
      "android/media_codec_video_decoder_unittest.cc",
      "android/mock_abstract_texture.cc",
      "android/mock_abstract_texture.h",
      "android/mock_android_video_surface_chooser.cc",
      "android/mock_android_video_surface_chooser.h",
      "android/mock_device_info.cc",
      "android/mock_device_info.h",
      "android/mock_promotion_hint_aggregator.cc",
      "android/mock_promotion_hint_aggregator.h",
      "android/mock_texture_owner.cc",
      "android/mock_texture_owner.h",
      "android/promotion_hint_aggregator_impl_unittest.cc",
      "android/surface_chooser_helper_unittest.cc",
      "android/surface_texture_gl_owner_unittest.cc",
      "android/video_frame_factory_impl_unittest.cc",
    ]
    deps = [
      ":common",
      ":gpu",
      "//base/test:test_support",
      "//gpu:test_support",
      "//media",
      "//media:test_support",
      "//testing/gmock",
      "//testing/gtest",
      "//ui/gl",
      "//ui/gl/init",
    ]
  }
}

if (use_v4l2_codec || use_vaapi || is_mac || is_win) {
  test("video_encode_accelerator_unittest") {
    deps = [
      "test:helpers",
      "//base",
      "//base/test:test_support",
      "//media:test_support",
      "//media/gpu",
      "//mojo/core/embedder",
      "//testing/gtest",
      "//ui/base",
      "//ui/gfx",
      "//ui/gfx:test_support",
      "//ui/gfx/geometry",
      "//ui/gl",
      "//ui/gl:test_support",
    ]
    configs += [ "//third_party/libyuv:libyuv_config" ]
    sources = [
      "video_encode_accelerator_unittest.cc",
    ]
    if (use_x11) {
      deps += [ "//ui/gfx/x" ]
    }
    if (use_ozone) {
      deps += [ "//ui/ozone" ]
    }
  }
}

static_library("test_support") {
  visibility = [ "//media:test_support" ]
  testonly = true
  sources = [
    "test/fake_command_buffer_helper.cc",
    "test/fake_command_buffer_helper.h",
  ]
  configs += [ "//media:media_config" ]
  deps = [
    ":gpu",
  ]
  public_deps = [
    "//base",
    "//media",
  ]
}

source_set("unit_tests") {
  testonly = true
  deps = [
    "//base",
    "//base/test:test_support",
    "//media:test_support",
    "//media/gpu",
    "//media/gpu/ipc/service:unit_tests",
    "//testing/gmock",
    "//testing/gtest",
  ]
  sources = [
    "h264_decoder_unittest.cc",
  ]

  if (use_vaapi) {
    deps += [ "//media/gpu/vaapi:unit_test" ]
  }
  if (use_v4l2_codec) {
    deps += [ "//media/gpu/v4l2:unit_test" ]
  }
  if (use_v4l2_codec || use_vaapi) {
    sources += [ "vp8_decoder_unittest.cc" ]
  }
  if (is_win && enable_library_cdms) {
    sources += [
      "windows/d3d11_cdm_proxy_unittest.cc",
      "windows/d3d11_decryptor_unittest.cc",
      "windows/d3d11_video_decoder_unittest.cc",
    ]
    libs = [ "dxguid.lib" ]
  }
}

test("video_decode_accelerator_tests") {
  sources = [
    "video_decode_accelerator_tests.cc",
  ]
  data = [
    "//media/test/data/",
  ]
  deps = [
    ":buildflags",
    "test:frame_file_writer",
    "test:frame_validator",
    "test:helpers",
    "test:video_player",
    "test:video_player_test_environment",
    "test:video_player_thumbnail_renderer",
    "//media:test_support",
    "//testing/gtest",
  ]
}

test("video_decode_accelerator_perf_tests") {
  sources = [
    "video_decode_accelerator_perf_tests.cc",
  ]
  data = [
    "//media/test/data/",
  ]
  deps = [
    ":buildflags",
    "test:video_player",
    "test:video_player_test_environment",
    "//media:test_support",
    "//testing/gtest",
  ]
}

test("image_processor_test") {
  sources = [
    "image_processor_test.cc",
  ]
  deps = [
    ":buildflags",
    ":gpu",
    "test:frame_validator",
    "test:helpers",
    "test:image_processor",
    "test:render_helpers",
    "//base/test:test_support",
    "//media:test_support",
    "//mojo/core/embedder",
    "//testing/gtest",
  ]
}
