# 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")

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

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

if (is_mac) {
  import("//build/config/mac/mac_sdk.gni")
}

if (is_chromeos && use_v4lplugin) {
  action("libv4l2_generate_stubs") {
    extra_header = "v4l2/v4l2_stub_header.fragment"

    script = "../../tools/generate_stubs/generate_stubs.py"
    sources = [
      "v4l2/v4l2.sig",
    ]
    inputs = [
      extra_header,
    ]
    stubs_filename_root = "v4l2_stubs"

    outputs = [
      "$target_gen_dir/v4l2/$stubs_filename_root.cc",
      "$target_gen_dir/v4l2/$stubs_filename_root.h",
    ]
    args = [
      "-i",
      rebase_path("$target_gen_dir/v4l2", root_build_dir),
      "-o",
      rebase_path("$target_gen_dir/v4l2", root_build_dir),
      "-t",
      "posix_stubs",
      "-e",
      rebase_path(extra_header, root_build_dir),
      "-s",
      stubs_filename_root,
      "-p",
      "media/gpu/v4l2",
    ]

    args += rebase_path(sources, root_build_dir)
  }
}

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",
    "fake_jpeg_decode_accelerator.cc",
    "fake_jpeg_decode_accelerator.h",
    "fake_video_decode_accelerator.cc",
    "fake_video_decode_accelerator.h",
    "gles2_decoder_helper.cc",
    "gles2_decoder_helper.h",
    "gpu_jpeg_decode_accelerator_factory.cc",
    "gpu_jpeg_decode_accelerator_factory.h",
    "gpu_jpeg_encode_accelerator_factory.cc",
    "gpu_jpeg_encode_accelerator_factory.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",
    "image_processor.h",
  ]

  public_deps = [
    ":buildflags",
    ":common",
    "//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_mac) {
    sources += [
      "vt_video_decode_accelerator_mac.cc",
      "vt_video_decode_accelerator_mac.h",
      "vt_video_encode_accelerator_mac.cc",
      "vt_video_encode_accelerator_mac.h",
    ]
    public_deps += [ "//third_party/webrtc/common_video" ]
    libs += [
      "CoreFoundation.framework",
      "CoreMedia.framework",
      "Foundation.framework",
      "IOSurface.framework",
      "QuartzCore.framework",
      "VideoToolbox.framework",
    ]
  }

  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/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/texture_pool.cc",
      "android/texture_pool.h",
      "android/video_frame_factory.h",
      "android/video_frame_factory_impl.cc",
      "android/video_frame_factory_impl.h",
    ]
    libs += [ "android" ]
    deps += [
      # 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_v4lplugin) {
    sources += get_target_outputs(":libv4l2_generate_stubs")
    deps += [ ":libv4l2_generate_stubs" ]
  }

  if (use_v4l2_codec) {
    deps += [ "//ui/ozone" ]
    sources += [
      "v4l2/generic_v4l2_device.cc",
      "v4l2/generic_v4l2_device.h",
      "v4l2/v4l2_device.cc",
      "v4l2/v4l2_device.h",
      "v4l2/v4l2_image_processor.cc",
      "v4l2/v4l2_image_processor.h",
      "v4l2/v4l2_jpeg_decode_accelerator.cc",
      "v4l2/v4l2_jpeg_decode_accelerator.h",
      "v4l2/v4l2_jpeg_encode_accelerator.cc",
      "v4l2/v4l2_jpeg_encode_accelerator.h",
      "v4l2/v4l2_slice_video_decode_accelerator.cc",
      "v4l2/v4l2_slice_video_decode_accelerator.h",
      "v4l2/v4l2_video_decode_accelerator.cc",
      "v4l2/v4l2_video_decode_accelerator.h",
      "v4l2/v4l2_video_encode_accelerator.cc",
      "v4l2/v4l2_video_encode_accelerator.h",
    ]
    libs = [
      "EGL",
      "GLESv2",
    ]
    if (current_cpu == "arm") {
      sources += [
        "v4l2/tegra_v4l2_device.cc",
        "v4l2/tegra_v4l2_device.h",
      ]
    }
  }

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

  if (is_win) {
    sources += [
      "windows/d3d11_create_device_cb.h",
      "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" ]
    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",
      ]
    }
  }
}

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",
    "vp9_decoder.cc",
    "vp9_decoder.h",
    "vp9_picture.cc",
    "vp9_picture.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/geometry",
  ]
}

# 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") {
    sources = [
      "test/video_accelerator_unittest_helpers.h",
    ]

    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 += [ "video_decode_accelerator_unittest.cc" ]
      deps += [
        "test:helpers",
        "//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_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/texture_pool_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" ]
    }
  }
}

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

if (is_chromeos || is_linux) {
  test("jpeg_decode_accelerator_unittest") {
    deps = [
      "//base",
      "//media:test_support",
      "//media/gpu",
      "//media/mojo/services",
      "//mojo/core/embedder",
      "//testing/gtest",
      "//third_party/libyuv",
      "//ui/base",
      "//ui/gfx",
      "//ui/gfx:test_support",
      "//ui/gfx/geometry",
      "//ui/gl",
      "//ui/gl:test_support",
    ]
    configs += [ "//third_party/libyuv:libyuv_config" ]
    sources = [
      "jpeg_decode_accelerator_unittest.cc",
      "test/video_accelerator_unittest_helpers.h",
    ]
    data = [
      "//media/test/data/peach_pi-1280x720.jpg",
      "//media/test/data/peach_pi-40x23.jpg",
      "//media/test/data/peach_pi-41x22.jpg",
      "//media/test/data/peach_pi-41x23.jpg",
    ]
    if (use_vaapi) {
      deps += [ "//media/gpu/vaapi:jpeg_decode_accelerator_unit_test" ]
      data += [ "//media/test/data/pixel-1280x720.jpg" ]
    }
    if (use_x11) {
      deps += [ "//ui/gfx/x" ]
    }
    if (use_ozone) {
      deps += [ "//ui/ozone" ]
    }
  }
}

static_library("test_support") {
  visibility = [ "//media:test_support" ]
  testonly = true
  sources = [
    "fake_command_buffer_helper.cc",
    "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) {
    sources += [ "v4l2/v4l2_device_unittest.cc" ]
  }
  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_mocks.cc",
      "windows/d3d11_mocks.h",
      "windows/d3d11_video_decoder_unittest.cc",
    ]
    libs = [ "dxguid.lib" ]
  }
}

# TODO(dstaessens@) Make this work on other platforms too.
if (is_chromeos) {
  test("video_decode_accelerator_tests") {
    sources = [
      "video_decode_accelerator_tests.cc",
    ]
    data = [
      "//media/test/data/",
    ]
    deps = [
      ":buildflags",
      "test:video_player",
      "//base/test:test_support",
      "//media:test_support",
      "//testing/gtest",
    ]
    if (use_vaapi) {
      deps += [ "//media/gpu/vaapi" ]
    }
  }
}
