# 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:video_frame",
    "../../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",
    ]
  }
}
