# Copyright (c) 2020 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("//third_party/libaom/options.gni")
import("../../../../webrtc.gni")

rtc_library("libaom_av1_decoder") {
  visibility = [ "*" ]
  poisonous = [ "software_video_codecs" ]
  public = [ "libaom_av1_decoder.h" ]
  deps = [ "../../../../api/video_codecs:video_codecs_api" ]
  absl_deps = [ "//third_party/abseil-cpp/absl/base:core_headers" ]

  if (enable_libaom) {
    sources = [ "libaom_av1_decoder.cc" ]
    deps += [
      "../..:video_codec_interface",
      "../../../../api:scoped_refptr",
      "../../../../api/video:encoded_image",
      "../../../../api/video:video_frame",
      "../../../../common_video",
      "../../../../rtc_base:logging",
      "//third_party/libaom",
      "//third_party/libyuv",
    ]
    absl_deps += [ "//third_party/abseil-cpp/absl/types:optional" ]
  } else {
    sources = [ "libaom_av1_decoder_absent.cc" ]
  }
}

rtc_library("libaom_av1_encoder") {
  visibility = [ "*" ]
  poisonous = [ "software_video_codecs" ]
  public = [ "libaom_av1_encoder.h" ]
  deps = [
    "../../../../api/video_codecs:video_codecs_api",
    "../../svc:scalability_structures",
    "../../svc:scalable_video_controller",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/types:optional",
  ]

  if (enable_libaom) {
    sources = [ "libaom_av1_encoder.cc" ]
    deps += [
      "../..:video_codec_interface",
      "../../../../api:scoped_refptr",
      "../../../../api/video:encoded_image",
      "../../../../api/video:video_frame",
      "../../../../common_video",
      "../../../../rtc_base:checks",
      "../../../../rtc_base:logging",
      "//third_party/libaom",
    ]
  } else {
    sources = [ "libaom_av1_encoder_absent.cc" ]
  }
}

if (rtc_include_tests) {
  rtc_library("video_coding_codecs_av1_tests") {
    testonly = true

    if (enable_libaom) {
      sources = [
        "libaom_av1_encoder_unittest.cc",
        "libaom_av1_unittest.cc",
      ]
      deps = [
        ":libaom_av1_decoder",
        ":libaom_av1_encoder",
        "../..:encoded_video_frame_producer",
        "../..:video_codec_interface",
        "../../../../api:mock_video_encoder",
        "../../../../api/units:data_size",
        "../../../../api/units:time_delta",
        "../../../../api/video:video_frame",
        "../../../../api/video_codecs:video_codecs_api",
        "../../../../test:test_support",
        "../../svc:scalability_structures",
        "../../svc:scalable_video_controller",
      ]
      absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
    }
  }
}
