# Copyright 2021 The Chromium OS 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("//common-mk/pkg_config.gni")

group("all") {
  deps = [ ":media_capabilities" ]

  if (use.test) {
    deps += [ ":media_capabilities_test" ]
  }
}

pkg_config("default_config") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
  ]
}

source_set("common") {
  sources = [
    "common.cc",
    "common.h",
  ]

  configs += [ ":default_config" ]
}

executable("media_capabilities") {
  sources = [
    "camera.cc",
    "camera.h",
    "main.cc",
  ]

  configs += [ ":default_config" ]
  defines = []
  pkg_deps = []

  if (use.v4l2_codec) {
    sources += [
      "v4l2.cc",
      "v4l2.h",
    ]
    defines += [ "USE_V4L2_CODEC" ]
  }

  if (use.vaapi) {
    sources += [
      "vaapi.cc",
      "vaapi.h",
    ]
    defines += [ "USE_VAAPI" ]
    pkg_deps += [
      "libva",
      "libva-drm",
    ]
  }

  deps = [ ":common" ]
}

if (use.test) {
  executable("media_capabilities_test") {
    sources = [ "common_test.cc" ]
    configs += [
      "//common-mk:test",
      ":default_config",
    ]
    pkg_deps = [ "libchrome-test" ]
    deps = [ ":common" ]
  }
}
