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

rtc_library("video_adaptation") {
  sources = [
    "balanced_constraint.cc",
    "balanced_constraint.h",
    "bandwidth_quality_scaler_resource.cc",
    "bandwidth_quality_scaler_resource.h",
    "bitrate_constraint.cc",
    "bitrate_constraint.h",
    "encode_usage_resource.cc",
    "encode_usage_resource.h",
    "overuse_frame_detector.cc",
    "overuse_frame_detector.h",
    "pixel_limit_resource.cc",
    "pixel_limit_resource.h",
    "quality_scaler_resource.cc",
    "quality_scaler_resource.h",
    "video_stream_encoder_resource.cc",
    "video_stream_encoder_resource.h",
    "video_stream_encoder_resource_manager.cc",
    "video_stream_encoder_resource_manager.h",
  ]

  deps = [
    "../../api:field_trials_view",
    "../../api:rtp_parameters",
    "../../api:scoped_refptr",
    "../../api:sequence_checker",
    "../../api/adaptation:resource_adaptation_api",
    "../../api/environment",
    "../../api/task_queue:task_queue",
    "../../api/units:data_rate",
    "../../api/units:time_delta",
    "../../api/video:video_adaptation",
    "../../api/video:video_frame",
    "../../api/video:video_stream_encoder",
    "../../api/video_codecs:video_codecs_api",
    "../../call/adaptation:resource_adaptation",
    "../../modules/video_coding:video_coding_utility",
    "../../modules/video_coding/svc:scalability_mode_util",
    "../../rtc_base:checks",
    "../../rtc_base:event_tracer",
    "../../rtc_base:logging",
    "../../rtc_base:macromagic",
    "../../rtc_base:refcount",
    "../../rtc_base:rtc_event",
    "../../rtc_base:rtc_numerics",
    "../../rtc_base:safe_conversions",
    "../../rtc_base:stringutils",
    "../../rtc_base:timeutils",
    "../../rtc_base/experiments:balanced_degradation_settings",
    "../../rtc_base/experiments:field_trial_parser",
    "../../rtc_base/experiments:quality_scaler_settings",
    "../../rtc_base/synchronization:mutex",
    "../../rtc_base/system:no_unique_address",
    "../../rtc_base/task_utils:repeating_task",
    "../../system_wrappers:system_wrappers",
    "../../video:video_stream_encoder_interface",
    "../../video/config:encoder_config",
  ]
  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 (rtc_include_tests) {
  rtc_library("video_adaptation_tests") {
    testonly = true

    defines = []
    sources = [
      "bitrate_constraint_unittest.cc",
      "overuse_frame_detector_unittest.cc",
      "pixel_limit_resource_unittest.cc",
      "quality_scaler_resource_unittest.cc",
    ]
    deps = [
      ":video_adaptation",
      "../../api:field_trials_view",
      "../../api:scoped_refptr",
      "../../api/environment",
      "../../api/environment:environment_factory",
      "../../api/task_queue:task_queue",
      "../../api/units:time_delta",
      "../../api/units:timestamp",
      "../../api/video:encoded_image",
      "../../api/video:video_adaptation",
      "../../api/video:video_frame",
      "../../api/video_codecs:scalability_mode",
      "../../api/video_codecs:video_codecs_api",
      "../../call/adaptation:resource_adaptation",
      "../../call/adaptation:resource_adaptation_test_utilities",
      "../../modules/video_coding:video_coding_utility",
      "../../rtc_base:checks",
      "../../rtc_base:logging",
      "../../rtc_base:random",
      "../../rtc_base:rtc_base_tests_utils",
      "../../rtc_base:rtc_event",
      "../../rtc_base:rtc_numerics",
      "../../rtc_base:task_queue_for_test",
      "../../rtc_base:threading",
      "../../test:rtc_expect_death",
      "../../test:test_support",
      "../../test/time_controller:time_controller",
    ]
    absl_deps = [
      "//third_party/abseil-cpp/absl/functional:any_invocable",
      "//third_party/abseil-cpp/absl/types:optional",
    ]
  }
}
