# 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",
    "../..: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" ]
  }
}
