# 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_source_set("rtp_source") {
  visibility = [ "*" ]
  sources = [ "rtp_source.h" ]
  deps = [
    "../..:rtp_headers",
    "../../units:time_delta",
    "../../units:timestamp",
    "//third_party/abseil-cpp/absl/strings:str_format",
  ]
}

rtc_library("dependency_descriptor") {
  visibility = [ "*" ]
  sources = [
    "dependency_descriptor.cc",
    "dependency_descriptor.h",
  ]
  deps = [
    "../../../rtc_base:checks",
    "../../video:render_resolution",
    "//third_party/abseil-cpp/absl/container:inlined_vector",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("corruption_detection_message") {
  visibility = [ "*" ]
  sources = [
    "corruption_detection_message.cc",
    "corruption_detection_message.h",
  ]
  deps = [
    "../../../rtc_base:checks",
    "../../video/corruption_detection:frame_instrumentation_data",
    "//third_party/abseil-cpp/absl/container:inlined_vector",
  ]
}

if (rtc_include_tests) {
  rtc_cc_test("corruption_detection_message_unittest") {
    sources = [ "corruption_detection_message_unittest.cc" ]
    deps = [
      ":corruption_detection_message",
      "../../../test:test_support",
      "../../video/corruption_detection:frame_instrumentation_data",
    ]
  }
}
