# 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_source_set("scalable_video_controller") {
  sources = [
    "scalable_video_controller.h",
    "scalable_video_controller_no_layering.cc",
    "scalable_video_controller_no_layering.h",
  ]
  deps = [
    "../../../api/transport/rtp:dependency_descriptor",
    "../../../api/video:video_bitrate_allocation",
    "../../../common_video/generic_frame_descriptor",
    "../../../rtc_base:checks",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/container:inlined_vector",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_source_set("scalability_structures") {
  sources = [
    "create_scalability_structure.cc",
    "create_scalability_structure.h",
    "scalability_structure_full_svc.cc",
    "scalability_structure_full_svc.h",
    "scalability_structure_key_svc.cc",
    "scalability_structure_key_svc.h",
    "scalability_structure_l1t2.cc",
    "scalability_structure_l1t2.h",
    "scalability_structure_l1t3.cc",
    "scalability_structure_l1t3.h",
    "scalability_structure_l2t1.cc",
    "scalability_structure_l2t1.h",
    "scalability_structure_l2t1h.cc",
    "scalability_structure_l2t1h.h",
    "scalability_structure_l2t2.cc",
    "scalability_structure_l2t2.h",
    "scalability_structure_l2t2_key_shift.cc",
    "scalability_structure_l2t2_key_shift.h",
    "scalability_structure_l3t1.cc",
    "scalability_structure_l3t1.h",
    "scalability_structure_l3t3.cc",
    "scalability_structure_l3t3.h",
    "scalability_structure_s2t1.cc",
    "scalability_structure_s2t1.h",
  ]
  deps = [
    ":scalable_video_controller",
    "../../../api/transport/rtp:dependency_descriptor",
    "../../../api/video:video_bitrate_allocation",
    "../../../common_video/generic_frame_descriptor",
    "../../../rtc_base:checks",
    "../../../rtc_base:logging",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_source_set("svc_rate_allocator") {
  sources = [
    "svc_rate_allocator.cc",
    "svc_rate_allocator.h",
  ]
  deps = [
    ":scalability_structures",
    "../../../api/video:video_bitrate_allocation",
    "../../../api/video:video_bitrate_allocator",
    "../../../api/video:video_codec_constants",
    "../../../api/video_codecs:video_codecs_api",
    "../../../rtc_base:checks",
    "../../../rtc_base/experiments:stable_target_rate_experiment",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/container:inlined_vector" ]
}

if (rtc_include_tests) {
  rtc_source_set("scalability_structure_tests") {
    testonly = true
    sources = [
      "scalability_structure_key_svc_unittest.cc",
      "scalability_structure_l2t2_key_shift_unittest.cc",
      "scalability_structure_l3t3_unittest.cc",
      "scalability_structure_test_helpers.cc",
      "scalability_structure_test_helpers.h",
      "scalability_structure_unittest.cc",
    ]
    deps = [
      ":scalability_structures",
      ":scalable_video_controller",
      "..:chain_diff_calculator",
      "..:frame_dependencies_calculator",
      "../../../api:array_view",
      "../../../api/transport/rtp:dependency_descriptor",
      "../../../api/video:video_bitrate_allocation",
      "../../../api/video:video_frame_type",
      "../../../common_video/generic_frame_descriptor",
      "../../../test:test_support",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
  }

  rtc_source_set("svc_rate_allocator_tests") {
    testonly = true
    sources = [ "svc_rate_allocator_unittest.cc" ]
    deps = [
      ":svc_rate_allocator",
      "..:webrtc_vp9_helpers",
      "../../../rtc_base:checks",
      "../../../test:field_trial",
      "../../../test:test_support",
    ]
  }
}
