# List of effect libraries to load. Each library element must contain a "path" element
# giving the full path of the library .so file.
#    libraries {
#        <lib name> {
#          path <lib path>
#        }
#    }
libraries {
# This is a proxy library that will be an abstraction for
# the HW and SW effects
  proxy {
    path /system/lib/soundfx/libeffectproxy.so
  }
# This is the HW implementation library for the effect
  offload {
    path /system/lib/soundfx/libaudioeffectoffload.so
  }
  bundle {
    path /system/lib/soundfx/libbundlewrapper.so
  }
  reverb {
    path /system/lib/soundfx/libreverbwrapper.so
  }
  qcbassboost {
    path /vendor/lib/soundfx/libqcbassboost.so
  }
  qcvirt {
    path /vendor/lib/soundfx/libqcvirt.so
  }
  qcreverb {
    path /vendor/lib/soundfx/libqcreverb.so
  }
  visualizer_sw {
    path /system/lib/soundfx/libvisualizer.so
  }
  visualizer_hw {
    path /system/lib/soundfx/libqcomvisualizer.so
  }
  downmix {
    path /system/lib/soundfx/libdownmix.so
  }
  soundalive {
    path /system/lib/libaudiosa.so
  }
  soundalive_sec {
    path /system/lib/soundfx/libaudiosa_sec.so
  }
  loudness_enhancer {
    path /system/lib/soundfx/libldnhncr.so
  }
  pre_processing {
    path /system/lib/soundfx/libqcomvoiceprocessing.so
  }
  offload_bundle {
    path /system/lib/soundfx/libqcompostprocbundle.so
  }
  audio_pre_processing {
    path /system/lib/soundfx/libqcomvoiceprocessing.so
  }
}

# Default pre-processing library. Add to audio_effect.conf "libraries" section if
# audio HAL implements support for default software audio pre-processing effects
#
#  pre_processing {
#    path /system/lib/soundfx/libaudiopreprocessing.so
#  }

# list of effects to load. Each effect element must contain a "library" and a "uuid" element.
# The value of the "library" element must correspond to the name of one library element in the
# "libraries" element.
# The name of the effect element is indicative, only the value of the "uuid" element
# designates the effect.
# The uuid is the implementation specific UUID as specified by the effect vendor. This is not the
# generic effect type UUID.
#    effects {
#        <fx name> {
#            library <lib name>
#            uuid <effect uuid>
#        }
#        ...
#    }

effects {
  soundalive {
    library proxy
    uuid  05227ea0-50bb-11e3-ac69-0002a5d5c51b
      libsw {
        library soundalive_sec
        uuid  cf65eb39-ce2f-48a8-a903-ceb818c06745
      }
      libhw {
        library offload
        uuid  0b2dbc60-50bb-11e3-988b-0002a5d5c51b
      }
  }
  bassboost {
    library proxy
    uuid  10e50dc0-50bb-11e3-a9b0-0002a5d5c51b
      libsw {
        library soundalive
        uuid a926a540-418a-11e1-b2f1-0002a5d5c51b
      }
      libhw {
        library offload
        uuid  16a70d80-50bb-11e3-8959-0002a5d5c51b
      }
  }
  virtualizer {
    library proxy
    uuid  1db5b180-50bb-11e3-888e-0002a5d5c51b
      libsw {
        library soundalive
        uuid c747f6a0-418a-11e1-a621-0002a5d5c51b
      }
      libhw {
        library offload
        uuid  23318080-50bb-11e3-9101-0002a5d5c51b
      }
  }
  equalizer {
    library proxy
    uuid  295b42c0-50bb-11e3-a6ed-0002a5d5c51b
      libsw {
        library soundalive
        uuid c117b70-f97f-11e0-be50-0002a5d5c51b
      }
      libhw {
        library offload
        uuid  2f2afe20-50bb-11e3-bc97-0002a5d5c51b
      }
  }
  volume {
    library bundle
    uuid 119341a0-8469-11df-81f9-0002a5d5c51b
  }
  reverb_env_aux {
    library reverb
    uuid 4a387fc0-8ab3-11df-8bad-0002a5d5c51b
  }
  reverb_env_ins {
    library reverb
    uuid c7a511a0-a3bb-11df-860e-0002a5d5c51b
  }
  reverb_pre_aux {
    library reverb
    uuid f29a1400-a3bb-11df-8ddc-0002a5d5c51b
  }
  reverb_pre_ins {
    library reverb
    uuid 172cdf00-a3bc-11df-a72f-0002a5d5c51b
  }
  visualizer {
    library proxy
    uuid 1d0a1a53-7d5d-48f2-8e71-27fbd10d842c
      libsw {
        library visualizer_sw
        uuid  d069d9e0-8329-11df-9168-0002a5d5c51b
      }
      libhw {
        library visualizer_hw
        uuid 7a8044a0-1a71-11e3-a184-0002a5d5c51b
      }
  }
  downmix {
    library downmix
    uuid 93f04452-e4fe-41cc-91f9-e475b6d1d69f
  }
  loudness_enhancer {
    library loudness_enhancer
    uuid fa415329-2034-4bea-b5dc-5b381c8d1e2c
  }
  aec {
    library pre_processing
    uuid 0f8d0d2a-59e5-45fe-b6e4-248c8a799109
  }
  ns {
    library pre_processing
    uuid 1d97bb0b-9e2f-4403-9ae3-58c2554306
  }
}

# Default pre-processing effects. Add to audio_effect.conf "effects" section if
# audio HAL implements support for them.
#
#  agc {
#    library pre_processing
#    uuid aa8130e0-66fc-11e0-bad0-0002a5d5c51b
#  }
#  aec {
#    library pre_processing
#    uuid 0f8d0d2a-59e5-45fe-b6e4-248c8a799109
#  }
#  ns {
#    library pre_processing
#    uuid c06c8400-8e06-11e0-9cb6-0002a5d5c51b
#  }

# Audio preprocessor configurations.
# The pre processor configuration consists in a list of elements each describing
# pre processor settings for a given input source. Valid input source names are:
# "mic", "camcorder", "voice_recognition", "voice_communication"
# Each input source element contains a list of effects elements. The name of the effect
# element must be the name of one of the effects in the "effects" list of the file.
# Each effect element may optionally contain a list of parameters and their
# default value to apply when the pre processor effect is created.
# A parameter is defined by a "param" element and a "value" element. Each of these elements
# consists in one or more elements specifying a type followed by a value.
# The types defined are: "int", "short", "float", "bool" and "string"
# When both "param" and "value" are a single int, a simple form is allowed where just
# the param and value pair is present in the parameter description
#    pre_processing {
#        <input source name> {
#            <fx name> {
#                <param 1 name> {
#                    param {
#                        int|short|float|bool|string <value>
#                        [ int|short|float|bool|string <value> ]
#                        ...
#                    }
#                    value {
#                        int|short|float|bool|string <value>
#                        [ int|short|float|bool|string <value> ]
#                        ...
#                    }
#                }
#                <param 2 name > {<param> <value>}
#                ...
#            }
#            ...
#        }
#        ...
#    }

#
# TODO: add default audio pre processor configurations after debug and tuning phase
#
  pre_processing {
    voice_communication {
      aec {}
    }
  }
