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

assert(use_v4l2_codec)

if (use_v4lplugin) {
  generate_stubs("libv4l2_stubs") {
    extra_header = "v4l2_stub_header.fragment"
    sigs = [ "v4l2.sig" ]
    output_name = "v4l2_stubs"
    deps = [ "//base" ]
  }
}

source_set("v4l2") {
  defines = [ "MEDIA_GPU_IMPLEMENTATION" ]
  sources = [
    "buffer_affinity_tracker.cc",
    "buffer_affinity_tracker.h",
    "generic_v4l2_device.cc",
    "generic_v4l2_device.h",
    "v4l2_decode_surface.cc",
    "v4l2_decode_surface.h",
    "v4l2_decode_surface_handler.h",
    "v4l2_device.cc",
    "v4l2_device.h",
    "v4l2_device_poller.cc",
    "v4l2_device_poller.h",
    "v4l2_framerate_control.cc",
    "v4l2_framerate_control.h",
    "v4l2_image_processor_backend.cc",
    "v4l2_image_processor_backend.h",
    "v4l2_slice_video_decode_accelerator.cc",
    "v4l2_slice_video_decode_accelerator.h",
    "v4l2_stateful_workaround.cc",
    "v4l2_stateful_workaround.h",
    "v4l2_utils.cc",
    "v4l2_utils.h",
    "v4l2_vda_helpers.cc",
    "v4l2_vda_helpers.h",
    "v4l2_video_decode_accelerator.cc",
    "v4l2_video_decode_accelerator.h",
    "v4l2_video_decoder.cc",
    "v4l2_video_decoder.h",
    "v4l2_video_decoder_backend.cc",
    "v4l2_video_decoder_backend.h",
    "v4l2_video_decoder_backend_stateful.cc",
    "v4l2_video_decoder_backend_stateful.h",
    "v4l2_video_decoder_backend_stateless.cc",
    "v4l2_video_decoder_backend_stateless.h",
    "v4l2_video_decoder_delegate_h264.cc",
    "v4l2_video_decoder_delegate_h264.h",
    "v4l2_video_decoder_delegate_h264_legacy.cc",
    "v4l2_video_decoder_delegate_h264_legacy.h",
    "v4l2_video_decoder_delegate_vp8.cc",
    "v4l2_video_decoder_delegate_vp8.h",
    "v4l2_video_decoder_delegate_vp8_legacy.cc",
    "v4l2_video_decoder_delegate_vp8_legacy.h",
    "v4l2_video_decoder_delegate_vp9_chromium.cc",
    "v4l2_video_decoder_delegate_vp9_chromium.h",
    "v4l2_video_decoder_delegate_vp9_legacy.cc",
    "v4l2_video_decoder_delegate_vp9_legacy.h",
    "v4l2_video_encode_accelerator.cc",
    "v4l2_video_encode_accelerator.h",
  ]

  libs = [
    "EGL",
    "GLESv2",
  ]

  if (use_v4l2_codec_aml) {
    sources += [
      "aml_v4l2_device.cc",
      "aml_v4l2_device.h",
    ]
    defines += [ "AML_V4L2" ]
  }

  configs += [ "//third_party/libyuv:libyuv_config" ]

  public_deps = [ "//ui/gl" ]

  deps = [
    "//base",
    "//gpu/ipc/common",
    "//gpu/ipc/service",
    "//media",
    "//media/gpu:buildflags",
    "//media/gpu:common",
    "//media/gpu/chromeos:common",
    "//media/parsers",
    "//third_party/libyuv",
    "//ui/gfx/geometry",
    "//ui/ozone",
  ]

  if (use_v4lplugin) {
    deps += [ ":libv4l2_stubs" ]
  }

  if (is_chromeos_ash) {
    sources += [
      "v4l2_jpeg_encode_accelerator.cc",
      "v4l2_jpeg_encode_accelerator.h",
      "v4l2_mjpeg_decode_accelerator.cc",
      "v4l2_mjpeg_decode_accelerator.h",
    ]

    deps += [
      "//components/chromeos_camera:jpeg_encode_accelerator",
      "//components/chromeos_camera:mjpeg_decode_accelerator",
      "//media/gpu:video_frame_mapper_common",
    ]
  }
}

source_set("unit_test") {
  testonly = true
  sources = [
    "v4l2_device_unittest.cc",
    "v4l2_stateful_workaround_unittest.cc",
  ]
  deps = [
    ":v4l2",
    "//base",
    "//media",
    "//media:test_support",
    "//testing/gtest",
    "//ui/gfx:test_support",
    "//ui/gl",
  ]
}

executable("v4l2_stateless_decoder") {
  testonly = true
  sources = [
    "test/v4l2_ioctl_shim.cc",
    "test/v4l2_ioctl_shim.h",
    "test/v4l2_stateless_decoder.cc",
    "test/vp9_decoder.cc",
    "test/vp9_decoder.h",
  ]

  deps = [
    "//base",
    "//media",
    "//media:test_support",
  ]
}
