# 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 {
  bundle {
    path /vendor/lib/soundfx/libbundlewrapper.so
  }
  reverb {
    path /vendor/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 /vendor/lib/soundfx/libvisualizer.so
  }
  visualizer_hw {
    path /vendor/lib/soundfx/libqcomvisualizer.so
  }
  downmix {
    path /vendor/lib/soundfx/libdownmix.so
  }
  loudness_enhancer {
    path /vendor/lib/soundfx/libldnhncr.so
  }
  dynamics_processing {
    path /vendor/lib/soundfx/libdynproc.so
  }
  proxy {
    path /vendor/lib/soundfx/libeffectproxy.so
  }
  offload_bundle {
    path /vendor/lib/soundfx/libqcompostprocbundle.so
  }
  audio_pre_processing {
    path /vendor/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 /vendor/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 {

# additions for the proxy implementation
# Proxy implementation
  #effectname {
    #library proxy
    #uuid  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

    # SW implemetation of the effect. Added as a node under the proxy to
    # indicate this as a sub effect.
      #libsw {
         #library libSW
         #uuid  yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
      #} End of SW effect

    # HW implementation of the effect. Added as a node under the proxy to
    # indicate this as a sub effect.
      #libhw {
         #library libHW
         #uuid  zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz
      #}End of HW effect
  #} End of effect proxy

  bassboost {
    library proxy
    uuid 14804144-a5ee-4d24-aa88-0002a5d5c51b

    libsw {
      library qcbassboost
      uuid 23aca180-44bd-11e2-bcfd-0800200c9a66
    }

    libhw {
      library offload_bundle
      uuid 2c4a8c24-1581-487f-94f6-0002a5d5c51b
    }
  }
  virtualizer {
    library proxy
    uuid d3467faa-acc7-4d34-acaf-0002a5d5c51b

    libsw {
      library qcvirt
      uuid e6c98a16-22a3-11e2-b87b-f23c91aec05e
    }

    libhw {
      library offload_bundle
      uuid 509a4498-561a-4bea-b3b1-0002a5d5c51b
    }
  }
  equalizer {
    library proxy
    uuid c8e70ecd-48ca-456e-8a4f-0002a5d5c51b

    libsw {
      library bundle
      uuid ce772f20-847d-11df-bb17-0002a5d5c51b
    }

    libhw {
      library offload_bundle
      uuid a0dac280-401c-11e3-9379-0002a5d5c51b
    }
  }
  volume {
    library bundle
    uuid 119341a0-8469-11df-81f9-0002a5d5c51b
  }
  reverb_env_aux {
    library proxy
    uuid 48404ac9-d202-4ccc-bf84-0002a5d5c51b

    libsw {
      library qcreverb
      uuid a8c1e5f3-293d-43cd-95ec-d5e26c02e217
    }

    libhw {
      library offload_bundle
      uuid 79a18026-18fd-4185-8233-0002a5d5c51b
    }
  }
  reverb_env_ins {
    library proxy
    uuid b707403a-a1c1-4291-9573-0002a5d5c51b

    libsw {
      library qcreverb
      uuid 791fff8b-8129-4655-83a4-59bc61034c3a
    }

    libhw {
      library offload_bundle
      uuid eb64ea04-973b-43d2-8f5e-0002a5d5c51b
    }
  }
  reverb_pre_aux {
    library proxy
    uuid 1b78f587-6d1c-422e-8b84-0002a5d5c51b

    libsw {
      library qcreverb
      uuid 53ef1db5-c0c0-445b-b060-e34d20ebb70a
    }

    libhw {
      library offload_bundle
      uuid 6987be09-b142-4b41-9056-0002a5d5c51b
    }
  }
  reverb_pre_ins {
    library proxy
    uuid f3e178d2-ebcb-408e-8357-0002a5d5c51b

    libsw {
      library qcreverb
      uuid b08a0e38-22a5-11e2-b87b-f23c91aec05e
    }

    libhw {
      library offload_bundle
      uuid aa2bebf6-47cf-4613-9bca-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
  }
  hw_acc {
    library offload_bundle
    uuid 7d1580bd-297f-4683-9239-e475b6d1d69f
  }
  loudness_enhancer {
    library loudness_enhancer
    uuid fa415329-2034-4bea-b5dc-5b381c8d1e2c
  }
  dynamics_processing {
    library dynamics_processing
    uuid e0e6539b-1781-7261-676f-6d7573696340
  }
  aec {
    library audio_pre_processing
    uuid 0f8d0d2a-59e5-45fe-b6e4-248c8a799109
  }
  ns {
    library audio_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 bb392ec0-8d4d-11e0-a896-0002a5d5c51b
#  }
#  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>}
#                ...
#            }
#            ...
#        }
#        ...
#    }

# Added aec, ns effects for voice_commuincation, which are supported by the board

pre_processing {
  voice_communication {
    aec {
    }
    ns  {
    }
  }
}

#
# TODO: add default audio pre processor configurations after debug and tuning phase
#
