# 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
  }
  visualizer_sw {
    path /system/lib/soundfx/libvisualizer.so
  }
  visualizer_hw {
    path /system/lib/soundfx/libqcomvisualizer.so
  }
  downmix {
    path /system/lib/soundfx/libdownmix.so
  }
  mysound {
    path /system/lib/libmysound.so
  }
  myspace {
    path /system/lib/soundfx/libmyspace.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
  }
}

# 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
  }
  dha {
    library proxy
    uuid  37155c20-50bb-11e3-9fac-0002a5d5c51b
      libsw {
        library mysound
        uuid 263a88e0-50b1-11e2-bcfd-0800200c9a66
      }
      libhw {
        library offload
        uuid  3ef69260-50bb-11e3-931e-0002a5d5c51b
      }
  }
  sa3d {
    library proxy
    uuid  1c91fca0-664a-11e4-b8c2-0002a5d5c51b
      libsw {
        library myspace
        uuid 3462a6e0-655a-11e4-8b67-0002a5d5c51b
      }
      libhw {
        library offload
        uuid  c7a84e61-eebe-4fcc-bc53-efcb841b4625
      }
  }
  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-58c2554306f8
  }
}

# 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 {}
    }
  }
  output_session_processing {
    music {
        soundalive {}
        dha {}
        sa3d {}
    }
    ring {
        sa3d {}
    }
  }
