# Copyright (c) 2019 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("../../webrtc.gni")

rtc_library("resource_adaptation") {
  sources = [
    "resource.cc",
    "resource.h",
    "resource_adaptation_module_interface.cc",
    "resource_adaptation_module_interface.h",
    "resource_adaptation_processor.cc",
    "resource_adaptation_processor.h",
    "resource_consumer.cc",
    "resource_consumer.h",
    "resource_consumer_configuration.cc",
    "resource_consumer_configuration.h",
    "video_source_restrictions.cc",
    "video_source_restrictions.h",
  ]
  deps = [
    "../../api:rtp_parameters",
    "../../api/video_codecs:video_codecs_api",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

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

    sources = [ "resource_adaptation_processor_unittest.cc" ]
    deps = [
      ":resource_adaptation",
      ":resource_adaptation_test_utilities",
      "../../rtc_base:checks",
      "../../rtc_base:rtc_base_approved",
      "../../test:test_support",
      "//third_party/abseil-cpp/absl/types:optional",
    ]
  }

  rtc_source_set("resource_adaptation_test_utilities") {
    testonly = true

    sources = [
      "test/fake_resource.cc",
      "test/fake_resource.h",
      "test/fake_resource_consumer_configuration.cc",
      "test/fake_resource_consumer_configuration.h",
    ]
    deps = [
      ":resource_adaptation",
      "../../rtc_base:rtc_base_approved",
    ]
  }
}
