# 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
  }
  v4a_fx {
    path /system/lib/soundfx/libv4a_fx_ics.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
  }
  v4a_standard_fx {
    library v4a_fx
    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
  }
}

# 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 {}
    }
  }
