# Copyright (c) 2017 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")
if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

rtc_library("audio_codecs_api") {
  visibility = [ "*" ]
  sources = [
    "audio_codec_pair_id.cc",
    "audio_codec_pair_id.h",
    "audio_decoder.cc",
    "audio_decoder.h",
    "audio_decoder_factory.h",
    "audio_decoder_factory_template.h",
    "audio_encoder.cc",
    "audio_encoder.h",
    "audio_encoder_factory.h",
    "audio_encoder_factory_template.h",
    "audio_format.cc",
    "audio_format.h",
  ]
  deps = [
    "..:array_view",
    "..:bitrate_allocation",
    "..:make_ref_counted",
    "..:ref_count",
    "..:scoped_refptr",
    "../../api:rtp_parameters",
    "../../api/audio:audio_frame_api",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
    "../../rtc_base:event_tracer",
    "../../rtc_base:refcount",
    "../../rtc_base:sanitizer",
    "../../rtc_base:stringutils",
    "../../rtc_base/system:rtc_export",
    "../environment",
    "../units:data_rate",
    "../units:time_delta",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:nullability",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("builtin_audio_decoder_factory") {
  visibility = [ "*" ]
  allow_poison = [ "audio_codecs" ]
  sources = [
    "builtin_audio_decoder_factory.cc",
    "builtin_audio_decoder_factory.h",
  ]
  deps = [
    ":audio_codecs_api",
    "..:scoped_refptr",
    "L16:audio_decoder_L16",
    "g711:audio_decoder_g711",
    "g722:audio_decoder_g722",
  ]
  defines = []
  if (rtc_include_opus) {
    deps += [
      "opus:audio_decoder_multiopus",
      "opus:audio_decoder_opus",
    ]
    defines += [ "WEBRTC_USE_BUILTIN_OPUS=1" ]
  } else {
    defines += [ "WEBRTC_USE_BUILTIN_OPUS=0" ]
  }
}

rtc_library("builtin_audio_encoder_factory") {
  visibility = [ "*" ]
  allow_poison = [ "audio_codecs" ]
  sources = [
    "builtin_audio_encoder_factory.cc",
    "builtin_audio_encoder_factory.h",
  ]
  deps = [
    ":audio_codecs_api",
    "..:field_trials_view",
    "..:scoped_refptr",
    "L16:audio_encoder_L16",
    "g711:audio_encoder_g711",
    "g722:audio_encoder_g722",
  ]
  defines = []
  if (rtc_include_opus) {
    deps += [
      "..:field_trials_view",
      "opus:audio_encoder_multiopus",
      "opus:audio_encoder_opus",
    ]
    defines += [ "WEBRTC_USE_BUILTIN_OPUS=1" ]
  } else {
    defines += [ "WEBRTC_USE_BUILTIN_OPUS=0" ]
  }
}

rtc_library("opus_audio_decoder_factory") {
  visibility = [ "*" ]
  allow_poison = [ "audio_codecs" ]
  sources = [
    "opus_audio_decoder_factory.cc",
    "opus_audio_decoder_factory.h",
  ]
  deps = [
    ":audio_codecs_api",
    "..:scoped_refptr",
    "opus:audio_decoder_multiopus",
    "opus:audio_decoder_opus",
  ]
}

rtc_library("opus_audio_encoder_factory") {
  visibility = [ "*" ]
  allow_poison = [ "audio_codecs" ]
  sources = [
    "opus_audio_encoder_factory.cc",
    "opus_audio_encoder_factory.h",
  ]
  deps = [
    ":audio_codecs_api",
    "..:field_trials_view",
    "..:scoped_refptr",
    "opus:audio_encoder_multiopus",
    "opus:audio_encoder_opus",
  ]
}
