# 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_source_set("audio_codecs_api") {
  sources = [
    "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",
    "..:optional",
    "../..:webrtc_common",
    "../../rtc_base:rtc_base_approved",
  ]
}

rtc_static_library("builtin_audio_decoder_factory") {
  sources = [
    "builtin_audio_decoder_factory.cc",
    "builtin_audio_decoder_factory.h",
  ]
  deps = [
    ":audio_codecs_api",
    "../../rtc_base:rtc_base_approved",
    "L16:audio_decoder_L16",
    "g711:audio_decoder_g711",
  ]
  defines = []
  if (rtc_include_ilbc) {
    deps += [ "ilbc:audio_decoder_ilbc" ]
    defines += [ "WEBRTC_USE_BUILTIN_ILBC=1" ]
  } else {
    defines += [ "WEBRTC_USE_BUILTIN_ILBC=0" ]
  }
  if (rtc_include_opus) {
    deps += [ "opus:audio_decoder_opus" ]
    defines += [ "WEBRTC_USE_BUILTIN_OPUS=1" ]
  } else {
    defines += [ "WEBRTC_USE_BUILTIN_OPUS=0" ]
  }
  if (build_with_mozilla) {
    defines += [
      "WEBRTC_USE_BUILTIN_G722=0",
      "WEBRTC_USE_BUILTIN_ISAC_FIX=0",
      "WEBRTC_USE_BUILTIN_ISAC_FLOAT=0",
    ]
  } else {
    if (current_cpu == "arm") {
      deps += [ "isac:audio_decoder_isac_fix" ]
      defines += [
        "WEBRTC_USE_BUILTIN_ISAC_FIX=1",
        "WEBRTC_USE_BUILTIN_ISAC_FLOAT=0",
      ]
    } else {
      deps += [ "isac:audio_decoder_isac_float" ]
      defines += [
        "WEBRTC_USE_BUILTIN_ISAC_FIX=0",
        "WEBRTC_USE_BUILTIN_ISAC_FLOAT=1",
      ]
    }
    deps += [ "g722:audio_decoder_g722" ]
    defines += [ "WEBRTC_USE_BUILTIN_G722=1" ]
  }
}

rtc_static_library("builtin_audio_encoder_factory") {
  sources = [
    "builtin_audio_encoder_factory.cc",
    "builtin_audio_encoder_factory.h",
  ]
  deps = [
    ":audio_codecs_api",
    "../../rtc_base:rtc_base_approved",
    "L16:audio_encoder_L16",
    "g711:audio_encoder_g711",
  ]
  defines = []
  if (rtc_include_ilbc) {
    deps += [ "ilbc:audio_encoder_ilbc" ]
    defines += [ "WEBRTC_USE_BUILTIN_ILBC=1" ]
  } else {
    defines += [ "WEBRTC_USE_BUILTIN_ILBC=0" ]
  }
  if (rtc_include_opus) {
    deps += [ "opus:audio_encoder_opus" ]
    defines += [ "WEBRTC_USE_BUILTIN_OPUS=1" ]
  } else {
    defines += [ "WEBRTC_USE_BUILTIN_OPUS=0" ]
  }
  if (build_with_mozilla) {
    defines += [
      "WEBRTC_USE_BUILTIN_G722=0",
      "WEBRTC_USE_BUILTIN_ISAC_FIX=0",
      "WEBRTC_USE_BUILTIN_ISAC_FLOAT=0",
    ]
  } else {
    if (current_cpu == "arm") {
      deps += [ "isac:audio_encoder_isac_fix" ]
      defines += [
        "WEBRTC_USE_BUILTIN_ISAC_FIX=1",
        "WEBRTC_USE_BUILTIN_ISAC_FLOAT=0",
      ]
    } else {
      deps += [ "isac:audio_encoder_isac_float" ]
      defines += [
        "WEBRTC_USE_BUILTIN_ISAC_FIX=0",
        "WEBRTC_USE_BUILTIN_ISAC_FLOAT=1",
      ]
    }
    deps += [ "g722:audio_encoder_g722" ]
    defines += [ "WEBRTC_USE_BUILTIN_G722=1" ]
  }
}
