start new branch (intel-cdk-moblin-libmix-20100129)

from: Ho-Eun, Ryu
diff --git a/mix_audio/AUTHORS b/mix_audio/AUTHORS
new file mode 100644
index 0000000..d74d027
--- /dev/null
+++ b/mix_audio/AUTHORS
@@ -0,0 +1 @@
+echo.choi@intel.com
diff --git a/mix_audio/COPYING b/mix_audio/COPYING
new file mode 100644
index 0000000..a4f852c
--- /dev/null
+++ b/mix_audio/COPYING
@@ -0,0 +1,26 @@
+´╗┐INTEL SOFTWARE LICENSE AGREEMENT (Alpha, Beta, Prototype Site License) 
+
+IMPORTANT - READ BEFORE COPYING, INSTALLING OR USING. 
+Do not use or load this software and any associated materials (collectively, the “Software”) until you have carefully read the following terms and conditions. By loading or using the Software, you agree to the terms of this Agreement. If you do not wish to so agree, do not install or use the Software.
+
+
+LICENSE. Intel hereby grants you a limited, nontransferable, non-sublicenseable, nonexclusive, royalty-free, fully-paid license under Intel’s copyrights to use the Software on your organization’s computers solely for your organization’s internal evaluation and testing in connection with Intel products designed for the Software, and you may make a reasonable number of  copies of the Software for internal use only, subject to these conditions: 
+1. You may not copy, modify, rent, sell, distribute, externally display, externally perform or transfer any part of the Software except as provided in this Agreement, and you agree to prevent unauthorized copying of the Software. 
+2. You may not reverse engineer, decompile, or disassemble the Software.
+3. You may not sublicense the Software.
+4. The Software may include portions offered on terms in addition to those set out here, as set out in a license accompanying those portions.
+5. You may not subject the Software, in whole or in part, to any license obligations of Open Source Software including without limitation combining or distributing the Software with Open Source Software in a manner that subjects the Software or any portion of the Software provided by Intel hereunder to any license obligations of such Open Source Software. "Open Source Software" means any software that requires as a condition of use, modification and/or distribution of such software that such software or other software incorporated into, derived from or distributed with such software (a) be disclosed or distributed in source code form; or (b) be licensed by the user to third parties for the purpose of making and/or distributing derivative works; or (c) be redistributable at no charge. Open Source Software includes, without limitation, software licensed or distributed under any of the following licenses or distribution models, or licenses or distribution models substantially similar to any of the following: (a) GNU’s General Public License (GPL) or Lesser/Library GPL (LGPL), (b) the Artistic License (e.g., PERL), (c) the Mozilla Public License, (d) the Netscape Public License, (e) the Sun Community Source License (SCSL), (f) the Sun Industry Source License (SISL), (g) the Apache Software license and (h) the Common Public License (CPL). 
+OWNERSHIP OF SOFTWARE AND COPYRIGHTS. Title to all copies of the Software remains with Intel or its suppliers. The Software is copyrighted and protected by the laws of the United States and other countries, and international treaty provisions. You may not remove any copyright notices from the Software. Intel may make changes to the Software, or to items referenced therein, at any time without notice, but is not obligated to support, update, upgrade or provide training for the Software. Except as otherwise expressly provided, Intel grants no express or implied right under Intel patents, copyrights, trademarks, or other intellectual property rights. 
+EXCLUSION OF WARRANTIES . THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTY OF ANY KIND INCLUDING WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, OR FITNESS FOR A PARTICULAR PURPOSE. Intel does not warrant or assume responsibility for the accuracy or completeness of any information, text, graphics, links or other items contained within the Software. 
+LIMITATION OF LIABILITY. IN NO EVENT SHALL INTEL OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, LOST PROFITS, BUSINESS INTERRUPTION OR LOST INFORMATION) ARISING OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, EVEN IF INTEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS PROHIBIT EXCLUSION OR LIMITATION OF LIABILITY FOR IMPLIED WARRANTIES OR CONSEQUENTIAL OR INCIDENTAL DAMAGES, SO THE ABOVE LIMITATION MAY NOT APPLY TO YOU. YOU MAY ALSO HAVE OTHER LEGAL RIGHTS THAT VARY FROM JURISDICTION TO JURISDICTION. THE SOFTWARE LICENSED HEREUNDER IS NOT DESIGNED OR INTENDED FOR USE IN ANY APPLICATION IN WHICH THE FAILURE OF THE SOFTWARE COULD LEAD TO PERSONAL INJURY OR DEATH. YOU SHALL INDEMNIFY AND HOLD INTEL AND THE INTEL PARTIES HARMLESS AGAINST ALL CLAIMS, COSTS, DAMAGES, AND EXPENSES, AND REASONABLE ATTORNEY FEES ARISING OUT OF, DIRECTLY OR INDIRECTLY, THE UNINTENDED USE OF THE SOFTWARE AND ANY CLAIM OF PRODUCT LIABILITY, PERSONAL INJURY OR DEATH ASSOCIATED WITH ANY UNINTENDED USE, EVEN IF SUCH CLAIM ALLEGES THAT AN INTEL PARTY WAS NEGLIGENT REGARDING THE DESIGN OR MANUFACTURE OF THE SOFTWARE. THE LIMITED REMEDIES, WARRANTY DISCLAIMER AND LIMITED LIABILITY ARE FUNDAMENTAL ELEMENTS OF THE BASIS OF THE BARGAIN BETWEEN INTEL AND YOU. INTEL WOULD NOT BE ABLE TO PROVIDE THE SOFTWARE WITHOUT SUCH LIMITATIONS. 
+TERMINATION OF THIS AGREEMENT. Intel may terminate this Agreement at any time if you violate its terms. Upon termination, you will immediately destroy the Software or return all copies of the Software to Intel (including providing certification of such destruction back to Intel). In the event of termination of this Agreement, all licenses granted to you hereunder shall immediately terminate. 
+APPLICABLE LAWS. Claims arising under this Agreement shall be governed by the laws of Delaware, excluding its principles of conflict of laws and the United Nations Convention on Contracts for the Sale of Goods. You may not export the Software in violation of applicable export laws and regulations. 
+GOVERNMENT RESTRICTED RIGHTS. The Software is provided with "RESTRICTED RIGHTS." Use, duplication or disclosure by the government is subject to restrictions as set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or their successors. Use of the Software by the government constitutes acknowledgment of Intel's proprietary rights therein. Contractor or Manufacturer is Intel Corporation, 2200 Mission College Blvd., Santa Clara, CA 95052. 
+CONFIDENTIALITY. You shall not disclose the terms or existence of this Agreement or use Intel's name in any publications, advertisements, or other announcements without Intel's prior written consent. You do not have any rights to use any Intel trademarks or logos. 
+ASSIGNMENT. You may not delegate, assign or transfer this Agreement, the license(s) granted or any of your rights or duties hereunder, expressly, by implication, by operation of law, by way of merger (regardless of whether you are the surviving entity) or acquisition, or otherwise and any attempt to do so, without Intel’s express prior written consent, shall be null and void. Intel may assign this Agreement, and its rights and obligations hereunder, in its sole discretion. 
+ENTIRE AGREEMENT. The terms and conditions of this Agreement constitutes the entire agreement between the parties with respect to the subject matter hereof, and merges and supersedes all prior, contemporaneous agreements, understandings, negotiations and discussions. Neither of the parties hereto shall be bound by any conditions, definitions, warranties, understandings or representations with respect to the subject matter hereof other than as expressly provided for herein. Intel is not obligated under any other agreements unless they are in writing and signed by an authorized representative of Intel. 
+NO AGENCY Nothing contained herein shall be construed as creating any agency, employment relationship, partnership, principal-agent or other form of joint enterprise between the parties. 
+SEVERABILITY In the event that any provision of this Agreement shall be unenforceable or invalid under any applicable law or be so held by an applicable court decision, such unenforceability or invalidity shall not render this Agreement unenforceable or invalid as a whole, and, in such event, such provision shall be changed and interpreted so as to best accomplish the objectives of such unenforceable or invalid provision within the limits of applicable law or applicable court decisions. 
+WAIVER The failure of either party to require performance by the other party of any provision hereof shall not affect the full right to require such performance at any time thereafter; nor shall the waiver by either party of a breach of any provision hereof be taken or held to be a waiver of the provision itself. 
+CONTROLLING LANGUAGE. Translated versions of this Agreement may be provided in local languages for informational purposes only, provided however, that the English language version of this Agreement shall be controlling in all jurisdictions.
+
diff --git a/mix_audio/ChangeLog b/mix_audio/ChangeLog
new file mode 100644
index 0000000..3eb86f3
--- /dev/null
+++ b/mix_audio/ChangeLog
@@ -0,0 +1,112 @@
+2010-01-18  Echo Choi  <echo@firefly>
+ 
+	* Updated version to 0.3.5 and submit for build.
+	* Updated call to Audio Manager to use stream name.
+	* Removed the check to allow decode to be called during PAUSE.
+
+2010-01-11  Echo Choi  <echo@firefly>
+
+	* Updated version to 0.3.4
+	* Updated MixCommon dependency to v 0.1.6.
+	* Updated the parameter conversion code for AAC to detect codec value from parameters.
+	* Fixed and added more enum types for AAC parameters definitions.
+	* Added methods to replace AAC parameters direct accessing.
+	* Added psPresentFlag for AAC param object.
+	* Updated gtk-doc documentation.
+	* Added get_stream_byte_decoded API.
+
+2010-01-04  Echo Choi  <echo@firefly>
+
+        * Fixed code review issues: declare const for char*
+        * Fixed code review issues: array size calculation.
+
+2009-12-23  Echo Choi  <echo@firefly>
+
+        * Added aac core operating frequency param for AAC Param object. Needed to configure HE-AAC decoder.
+        * Fixed the log message category for DRAIN debug log.
+
+2009-11-19  Echo Choi  <echo@firefly>
+
+        * Added more utility function to populate param object.
+	* Added MixAudio API to read output configuration (get params)
+
+2009-11-18  Echo Choi  <echo@firefly>
+
+	* Added return code that inform caller to interpret errno for error.
+	* Fixed more error checkings.
+
+2009-11-17  Echo Choi  <echo@firefly>
+
+	* Added default invalid value for various enumerations.
+	* Fixed some bugs in type declarations.
+	* Cleaned up code. Added pointer checks, state checks.
+
+2009-11-15  Echo Choi  <echo@firefly>
+
+	* Updated version to 0.3.3 and package for build.
+	* Fixed DRAIN state test condition.
+
+2009-11-13  Echo Choi  <echo@firefly>
+
+	* Updated MixCommon version dependency as MixAudio is using new definitions from MixCommon.
+	* Fixed issues reported by klocwork.
+
+2009-11-11  Echo Choi  <echo@firefly>
+
+	* Fixed a mem leak in the stub code.
+
+2009-11-01  Echo Choi  <echo@firefly>
+
+	* Increased version number to 0.3.2 and package for build.
+
+2009-10-28  Echo Choi  <echo@firefly>
+
+	* Renamed MPEG_FORMAT member of AAC params to MPEG_ID.
+
+2009-10-23  Echo Choi  <echo@firefly>
+
+	* Updated version to 0.3.1 for build.
+	* Added code to assign op_align to sst structure in deterministic case.
+	* Added stub code to write input  bytes to file during dnr request.
+	* Fixed MixAudio::decode() method to use correct 64-bit type for decode consumed/produced.
+
+2009-10-18  Echo Choi  <echo@firefly>
+
+	* Added dbus-glib dependency.
+	* Updated AAC param object to include additonal fields for HE-AAC support.
+
+2009-10-16  Echo Choi  <echo@firefly>
+
+	* Moved mixdrmparams.* to MixCommon package.
+	* Changed mix_audio_decode API to include output parameters for bytes consumed and produceds
+	* Updated version to 0.3.0 to reflect API change in mix_audio_decode.
+
+2009-10-08  Echo Choi  <echo@firefly>
+
+	* Package for 0.2.6 build.
+
+2009-10-02  Echo Choi  <echo@firefly>
+
+	* Updated version number to 0.2.6
+	* Defined new range for error code that encapsulate errno when system calls to SST API shall fail.
+	* Added internal states to track PAUSED_DRAINING, and added code to deal with this state.
+
+2009-08-17  Echo Choi  <echo@firefly>
+
+	* Updated SST API struct to align with build 0.04.008.
+	* Added bit-mask based runtime log mechanism.
+
+2009-08-14  Echo Choi  <echo@firefly>
+
+	* Fixed return value check after DROP call.
+	* Added method to dump status upon SST call failure.
+
+2009-08-13  Echo Choi  <echo@firefly>
+
+	* Updated API definitions to sync with v0.5 documentation.
+
+2009-08-10  Echo Choi  <echo@firefly>
+
+	* Fixed stop_drop so it is called even if the state is STOPPED
+	
+
diff --git a/mix_audio/INSTALL b/mix_audio/INSTALL
new file mode 100644
index 0000000..50e1648
--- /dev/null
+++ b/mix_audio/INSTALL
@@ -0,0 +1,4 @@
+run the following to build and install:
+./autogen.sh
+./configure
+make
diff --git a/mix_audio/Makefile.am b/mix_audio/Makefile.am
new file mode 100644
index 0000000..2ed4bcd
--- /dev/null
+++ b/mix_audio/Makefile.am
@@ -0,0 +1,7 @@
+SUBDIRS = src tests pkgconfig
+
+#Uncomment the following line if building documentation using gtkdoc
+#SUBDIRS += docs
+
+EXTRA_DIST = autogen.sh m4
+DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
diff --git a/mix_audio/NEWS b/mix_audio/NEWS
new file mode 100644
index 0000000..82302b4
--- /dev/null
+++ b/mix_audio/NEWS
@@ -0,0 +1 @@
+no.
diff --git a/mix_audio/README b/mix_audio/README
new file mode 100644
index 0000000..b4292a0
--- /dev/null
+++ b/mix_audio/README
@@ -0,0 +1,2 @@
+MIX Audio is an user library interface for various hardware audio codecs available on the platform.
+
diff --git a/mix_audio/autogen.sh b/mix_audio/autogen.sh
new file mode 100644
index 0000000..13a1d76
--- /dev/null
+++ b/mix_audio/autogen.sh
@@ -0,0 +1,19 @@
+#INTEL CONFIDENTIAL
+#Copyright 2009 Intel Corporation All Rights Reserved. 
+#The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+#No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+#
+
+package=MixAudio
+
+#Uncomment the follow line if building documentation using gtkdoc
+#gtkdocize --flavour no-tmpl || exit 1
+aclocal -I m4/ $ACLOCAL_FLAGS || exit 1
+libtoolize --copy --force || exit 1
+autoheader -v || exit 1
+autoconf -v || exit 1
+automake -a -c -v || exit 1
+
+echo "Now type ./configure to configure $package."
+exit 0
diff --git a/mix_audio/configure.ac b/mix_audio/configure.ac
new file mode 100644
index 0000000..bcbb4ab
--- /dev/null
+++ b/mix_audio/configure.ac
@@ -0,0 +1,137 @@
+AC_INIT("","",[echo.choi@intel.com])
+
+AC_CONFIG_MACRO_DIR(m4)
+
+AS_MIX_VERSION(mixaudio, MIXAUDIO, 0, 3, 5)
+
+dnl AM_MAINTAINER_MODE provides the option to enable maintainer mode
+AM_MAINTAINER_MODE
+
+AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
+
+MIXAUDIO_PKG_DEPS="glib-2.0, gobject-2.0, gthread-2.0 mixcommon"
+AC_SUBST(MIXAUDIO_PKG_DEPS)
+
+dnl make aclocal work in maintainer mode
+AC_SUBST(ACLOCAL_AMFLAGS, "-I m4")
+
+AM_CONFIG_HEADER(config.h)
+
+dnl check for tools
+AC_PROG_CC_C_O
+AC_PROG_CC
+AC_PROG_LIBTOOL
+
+MIX_CFLAGS="-Wall -Werror -O"
+
+AC_ARG_ENABLE([lpestub],
+    [  --enable-lpestub    Stub LPE methods],
+    [case "${enableval}" in
+      yes) lpestub=true ;;
+      no)  lpestub=false ;;
+      *) AC_MSG_ERROR([bad value ${enableval} for --enable-lpestub]) ;;
+    esac],[lpestub=false])
+
+AM_CONDITIONAL([LPESTUB], [test x$lpestub = xtrue])
+
+AC_ARG_ENABLE([workaround],
+    [  --enable-workaround    Enable workaround for LPE DROP],
+    [case "${enableval}" in
+      yes) workaround=true ;;
+      no)  workaround=false ;;
+      *) AC_MSG_ERROR([bad value ${enableval} for --enable-workaround]) ;;
+    esac],[workaround=false])
+
+AM_CONDITIONAL([WORKAROUND], [test x$workaround = xtrue])
+
+AC_ARG_ENABLE([audiomanager],
+    [  --enable-audiomanager    Audio Manager methods(default=enable)],
+    [case "${enableval}" in
+      yes) audiomanager=true ;;
+      no)  audiomanager=false ;;
+      *) AC_MSG_ERROR([bad value ${enableval} for --enable-audiomanager]) ;;
+    esac],[audiomanager=true])
+
+AM_CONDITIONAL([AUDIO_MANAGER], [test x$audiomanager = xtrue])
+
+dnl decide on error flags
+dnl AS_COMPILER_FLAG(-Wall, MIX_ERROR="$MIX_ERROR -Wall", MIX_ERROR="$MIX_ERROR")
+dnl AS_COMPILER_FLAG(-Werror,MIX_ERROR="$MIX_ERROR -Werror",MIX_ERROR="$MIX_ERROR")
+
+dnl Check for pkgconfig first
+AC_CHECK_PROG(HAVE_PKGCONFIG, pkg-config, yes, no)
+
+dnl Give error and exit if we don't have pkgconfig
+if test "x$HAVE_PKGCONFIG" = "xno"; then
+  AC_MSG_ERROR(you need to have pkgconfig installed !)
+fi
+
+dnl GLib
+dnl FIXME: need to align with moblin glib version
+dnl FIXME: currently using an earlier version so it can be built on dev box.
+GLIB_REQ=2.18
+
+dnl Check for glib2 without extra fat, useful for the unversioned tool frontends
+dnl PKG_CHECK_MODULES(GLIB_ONLY, glib-2.0 >= $GLIB_REQ,HAVE_GLIB=yes,HAVE_GLIB=no)
+PKG_CHECK_MODULES(GLIB, glib-2.0 >= $GLIB_REQ,HAVE_GLIB=yes,HAVE_GLIB=no)
+if test "x$HAVE_GLIB" = "xno"; then
+  AC_MSG_ERROR(You need glib development packages installed !)
+fi
+
+PKG_CHECK_MODULES(GOBJECT, gobject-2.0 >= $GLIB_REQ,HAVE_GOBJECT=yes,HAVE_GOBJECT=no)
+if test "x$HAVE_GOBJECT" = "xno"; then
+  AC_MSG_ERROR(You need glib development packages installed !)
+fi
+
+PKG_CHECK_MODULES(GTHREAD, gthread-2.0 >= $GLIB_REQ,HAVE_GTHREAD=yes,HAVE_GTHREAD=no)
+if test "x$HAVE_GTRHEAD" = "xno"; then
+  AC_MSG_ERROR(You need glib development packages installed !)
+fi
+
+MIXCOMMON_REQUIRED=0.1.6
+PKG_CHECK_MODULES(MIXCOMMON, mixcommon >= $MIXCOMMON_REQUIRED , HAVE_MIXCOMMON=yes, HAVE_MIXCOMMON=no)
+if test "x$HAVE_MIXCOMMON" = "xno"; then
+  AC_MSG_ERROR(You need mixcommon development package $MIXCOMMON_REQUIRED installed !)
+fi
+
+if test "x$audiomanager" = "xtrue"; then
+  PKG_CHECK_MODULES(DBUS_GLIB, dbus-glib-1)
+fi
+
+dnl Check for documentation xrefs
+dnl GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
+dnl AC_SUBST(GLIB_PREFIX)
+
+AC_SUBST(GLIB_CFLAGS)
+AC_SUBST(GLIB_LIBS)
+AC_SUBST(GOBJECT_CFLAGS)
+AC_SUBST(GOBJECT_LIBS)
+AC_SUBST(MIX_CFLAGS)
+AC_SUBST(GTHREAD_CFLAGS)
+AC_SUBST(GTHREAD_LIBS)
+AC_SUBST(MIXCOMMON_CFLAGS)
+AC_SUBST(MIXCOMMON_LIBS)
+
+dnl check for gtk-doc
+dnl GTK_DOC_CHECK(1.9)
+
+AC_CONFIG_FILES(
+Makefile
+src/Makefile
+tests/Makefile
+tests/smoke/Makefile
+pkgconfig/Makefile
+pkgconfig/mixaudio.pc
+)
+
+dnl Additional Makefiles if we are building document with gtkdoc.
+dnl Un-comment this section to enable building of documentation.
+dnl AC_CONFIG_FILES(
+dnl docs/Makefile
+dnl docs/reference/Makefile
+dnl docs/reference/MixAudio/Makefile
+dnl )
+
+AC_OUTPUT
+
+
diff --git a/mix_audio/docs/Makefile.am b/mix_audio/docs/Makefile.am
new file mode 100644
index 0000000..621e3f7
--- /dev/null
+++ b/mix_audio/docs/Makefile.am
@@ -0,0 +1,4 @@
+SUBDIRS = reference
+
+DIST_SUBDIRS = reference
+
diff --git a/mix_audio/docs/reference/Makefile.am b/mix_audio/docs/reference/Makefile.am
new file mode 100644
index 0000000..85bde95
--- /dev/null
+++ b/mix_audio/docs/reference/Makefile.am
@@ -0,0 +1,4 @@
+SUBDIRS = MixAudio
+
+DIST_SUBDIRS = MixAudio
+
diff --git a/mix_audio/docs/reference/MixAudio/Makefile.am b/mix_audio/docs/reference/MixAudio/Makefile.am
new file mode 100644
index 0000000..adf494c
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/Makefile.am
@@ -0,0 +1,96 @@
+#INTEL CONFIDENTIAL
+#Copyright 2009 Intel Corporation All Rights Reserved. 
+#The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+#No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+#
+
+
+## Process this file with automake to produce Makefile.in
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE=MixAudio
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR=$(top_srcdir)/src
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+#SCANGOBJ_OPTIONS=--type-init-func="g_init(NULL,NULL)"
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS=--rebuild-sections --rebuild-types
+#SCAN_OPTIONS=--rebuild-sections
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS=--sgml-mode --output-format=xml
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS=
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS=
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB=$(top_srcdir)/src/*.h
+CFILE_GLOB=$(top_srcdir)/src/*.c
+
+# Header files to ignore when scanning.
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES=*~ intel_sst_ioctl.h pvt.h sst_proxy.h amhelper.h
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES=
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files=
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files=
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+AM_CFLAGS=$(GLIB_CFLAGS) $(GOBJECT_CFLAGS) $(MIXCOMMON_CFLAGS)
+GTKDOC_LIBS=$(GLIB_LIBS) $(GOBJECT_LIBS) $(MIXCOMMON_LIBS) $(top_srcdir)/src/libmixaudio.la
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+EXTRA_DIST +=
+
+# Files not to distribute
+# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
+# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
+#DISTCLEANFILES =
+
+# Comment this out if you want your docs-status tested during 'make check'
+#TESTS = $(GTKDOC_CHECK)
+
diff --git a/mix_audio/docs/reference/MixAudio/MixAudio-docs.sgml b/mix_audio/docs/reference/MixAudio/MixAudio-docs.sgml
new file mode 100644
index 0000000..7627fe9
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/MixAudio-docs.sgml
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
+  <bookinfo>
+    <title>MixAudio Reference Manual</title>
+    <releaseinfo>
+      MixAudio version 0.3
+<!--      The latest version of this documentation can be found on-line at
+      <ulink role="online-location" url="http://[SERVER]/MixAudio/index.html">http://[SERVER]/MixAudio/</ulink>.
+      -->
+    </releaseinfo>
+  </bookinfo>
+
+  <chapter>
+    <title>Mix Audio API</title>
+    <xi:include href="xml/mixacpaac.xml"/>
+    <xi:include href="xml/mixacpmp3.xml"/>
+    <xi:include href="xml/mixacpwma.xml"/>
+    <xi:include href="xml/mixacp.xml"/>
+    <xi:include href="xml/mixaip.xml"/>
+    <xi:include href="xml/mixaudio.xml"/>
+    <xi:include href="xml/mixaudiotypes.xml"/>
+<!--    <xi:include href="xml/mixdrmparams.xml"/> -->
+<!--    <xi:include href="xml/mixparams.xml"/> -->
+<!--    <xi:include href="xml/mixresult.xml"/> -->
+  </chapter>
+
+  <chapter id="tree-hierarchy">
+    <title>Object Hierarchy</title>
+    <xi:include href="xml/tree_index.sgml"/>
+  </chapter>
+
+  <index id="api-index-full">
+    <title>API Index</title>
+    <xi:include href="xml/object_index.sgml"><xi:fallback /></xi:include>
+  </index>
+
+</book>
diff --git a/mix_audio/docs/reference/MixAudio/MixAudio-sections.txt b/mix_audio/docs/reference/MixAudio/MixAudio-sections.txt
new file mode 100644
index 0000000..d96a685
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/MixAudio-sections.txt
@@ -0,0 +1,187 @@
+<SECTION>
+<FILE>mixacpwma</FILE>
+MixAudioWMAVersion
+<TITLE>MixAudioConfigParamsWMA</TITLE>
+MixAudioConfigParamsWMA
+mix_acp_wma_new
+mix_acp_wma_ref
+mix_acp_wma_unref
+MIX_ACP_WMA_CHANNEL_MASK
+MIX_ACP_WMA_FORMAT_TAG
+MIX_ACP_WMA_BLOCK_ALIGN
+MIX_ACP_WMA_ENCODE_OPT
+MIX_ACP_WMA_PCM_BIT_WIDTH
+mix_acp_wma_get_version
+mix_acp_wma_set_version
+<SUBSECTION Standard>
+MIX_AUDIOCONFIGPARAMSWMA
+MIX_IS_AUDIOCONFIGPARAMSWMA
+MIX_TYPE_AUDIOCONFIGPARAMSWMA
+mix_acp_wma_get_type
+MIX_AUDIOCONFIGPARAMSWMA_CLASS
+MIX_IS_AUDIOCONFIGPARAMSWMA_CLASS
+MIX_AUDIOCONFIGPARAMSWMA_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>mixacp</FILE>
+MixACPOpAlign
+MixACPBPSType
+MixDecodeMode
+<TITLE>MixAudioConfigParams</TITLE>
+MixAudioConfigParams
+mix_acp_new
+mix_acp_ref
+mix_acp_unref
+MIX_ACP_DECODEMODE
+MIX_ACP_NUM_CHANNELS
+MIX_ACP_BITRATE
+MIX_ACP_SAMPLE_FREQ
+mix_acp_get_decodemode
+mix_acp_set_decodemode
+mix_acp_get_streamname
+mix_acp_set_streamname
+mix_acp_set_audio_manager
+mix_acp_get_audio_manager
+mix_acp_is_streamname_valid
+mix_acp_get_bps
+mix_acp_set_bps
+mix_acp_get_op_align
+mix_acp_set_op_align
+<SUBSECTION Standard>
+MIX_AUDIOCONFIGPARAMS
+MIX_IS_AUDIOCONFIGPARAMS
+MIX_TYPE_AUDIOCONFIGPARAMS
+mix_acp_get_type
+MIX_AUDIOCONFIGPARAMS_CLASS
+MIX_IS_AUDIOCONFIGPARAMS_CLASS
+MIX_AUDIOCONFIGPARAMS_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>mixacpaac</FILE>
+MixAACBitrateType
+MixAACBitstreamFormt
+MixAACProfile
+MixAACMpegID
+<TITLE>MixAudioConfigParamsAAC</TITLE>
+MixAudioConfigParamsAAC
+mix_acp_aac_new
+mix_acp_aac_ref
+mix_acp_aac_unref
+mix_acp_aac_set_mpeg_id
+mix_acp_aac_get_mpeg_id
+MIX_ACP_AAC_CRC
+mix_acp_aac_set_aot
+mix_acp_aac_get_aot
+MIX_ACP_AAC_SBR_FLAG
+MIX_ACP_AAC_PS_FLAG
+MIX_ACP_AAC_PCE_FLAG
+MIX_ACP_AAC_SAMPLE_RATE
+MIX_ACP_AAC_CHANNELS
+mix_acp_aac_get_bit_stream_format
+mix_acp_aac_set_bit_stream_format
+mix_acp_aac_get_aac_profile
+mix_acp_aac_set_aac_profile
+mix_acp_aac_get_bit_rate_type
+mix_acp_aac_set_bit_rate_type
+<SUBSECTION Standard>
+MIX_AUDIOCONFIGPARAMSAAC
+MIX_IS_AUDIOCONFIGPARAMSAAC
+MIX_TYPE_AUDIOCONFIGPARAMSAAC
+mix_acp_aac_get_type
+MIX_AUDIOCONFIGPARAMSAAC_CLASS
+MIX_IS_AUDIOCONFIGPARAMSAAC_CLASS
+MIX_AUDIOCONFIGPARAMSAAC_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>mixaudio</FILE>
+MixStreamState
+MixState
+MixCodecMode
+MixVolType
+MixVolRamp
+MixIOVec
+MixDeviceState
+<TITLE>MixAudio</TITLE>
+MixAudio
+mix_audio_new
+mix_audio_ref
+mix_audio_unref
+mix_audio_get_version
+mix_audio_initialize
+mix_audio_configure
+mix_audio_decode
+mix_audio_capture_encode
+mix_audio_start
+mix_audio_stop_drop
+mix_audio_stop_drain
+mix_audio_pause
+mix_audio_resume
+mix_audio_get_timestamp
+mix_audio_set_mute
+mix_audio_get_mute
+mix_audio_get_max_vol
+mix_audio_get_min_vol
+mix_audio_get_volume
+mix_audio_set_volume
+mix_audio_deinitialize
+mix_audio_get_stream_state
+mix_audio_get_state
+mix_audio_am_is_enabled
+mix_audio_is_am_available
+mix_audio_get_output_configuration
+mix_audio_get_stream_byte_decoded
+<SUBSECTION Standard>
+MIX_AUDIO
+MIX_IS_AUDIO
+MIX_TYPE_AUDIO
+mix_audio_get_type
+MIX_AUDIO_CLASS
+MIX_IS_AUDIO_CLASS
+MIX_AUDIO_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>mixaip</FILE>
+<TITLE>MixAudioInitParams</TITLE>
+MixAudioInitParams
+mix_aip_new
+mix_aip_ref
+mix_aip_unref
+<SUBSECTION Standard>
+MIX_AUDIOINITPARAMS
+MIX_IS_AUDIOINITPARAMS
+MIX_TYPE_AUDIOINITPARAMS
+mix_aip_get_type
+MIX_AUDIOINITPARAMS_CLASS
+MIX_IS_AUDIOINITPARAMS_CLASS
+MIX_AUDIOINITPARAMS_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>mixacpmp3</FILE>
+<TITLE>MixAudioConfigParamsMP3</TITLE>
+MixAudioConfigParamsMP3
+mix_acp_mp3_new
+mix_acp_mp3_ref
+mix_acp_mp3_unref
+MIX_ACP_MP3_CRC
+MIX_ACP_MP3_MPEG_FORMAT
+MIX_ACP_MP3_MPEG_LAYER
+<SUBSECTION Standard>
+MIX_AUDIOCONFIGPARAMSMP3
+MIX_IS_AUDIOCONFIGPARAMSMP3
+MIX_TYPE_AUDIOCONFIGPARAMSMP3
+mix_acp_mp3_get_type
+MIX_AUDIOCONFIGPARAMSMP3_CLASS
+MIX_IS_AUDIOCONFIGPARAMSMP3_CLASS
+MIX_AUDIOCONFIGPARAMSMP3_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>mixaudiotypes</FILE>
+MixAudioManager
+</SECTION>
+
diff --git a/mix_audio/docs/reference/MixAudio/MixAudio.types b/mix_audio/docs/reference/MixAudio/MixAudio.types
new file mode 100644
index 0000000..0a80168
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/MixAudio.types
@@ -0,0 +1,6 @@
+mix_acp_wma_get_type
+mix_acp_get_type
+mix_acp_aac_get_type
+mix_audio_get_type
+mix_aip_get_type
+mix_acp_mp3_get_type
diff --git a/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioConfigParams.html b/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioConfigParams.html
new file mode 100644
index 0000000..1dd3b14
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioConfigParams.html
@@ -0,0 +1,689 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>MixAudioConfigParams</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="MixAudio Reference Manual">
+<link rel="up" href="ch01.html" title="Mix Audio API">
+<link rel="prev" href="MixAudio-MixAudioConfigParamsWMA.html" title="MixAudioConfigParamsWMA">
+<link rel="next" href="MixAudio-MixAudioInitParams.html" title="MixAudioInitParams">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Mix Audio API">
+<link rel="chapter" href="tree-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="api-index-full.html" title="API Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="MixAudio-MixAudioConfigParamsWMA.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">MixAudio Reference Manual</th>
+<td><a accesskey="n" href="MixAudio-MixAudioInitParams.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#MixAudio-MixAudioConfigParams.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#MixAudio-MixAudioConfigParams.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="MixAudio-MixAudioConfigParams"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="MixAudio-MixAudioConfigParams.top_of_page"></a>MixAudioConfigParams</span></h2>
+<p>MixAudioConfigParams — MixAudio configuration parameters object.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="MixAudio-MixAudioConfigParams.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;mixacp.h&gt;
+
+enum                <a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPOpAlign" title="enum MixACPOpAlign">MixACPOpAlign</a>;
+enum                <a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPBPSType" title="enum MixACPBPSType">MixACPBPSType</a>;
+enum                <a class="link" href="MixAudio-MixAudioConfigParams.html#MixDecodeMode" title="enum MixDecodeMode">MixDecodeMode</a>;
+                    <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a>;
+<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> * <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-new" title="mix_acp_new ()">mix_acp_new</a>                      (void);
+<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> * <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-ref" title="mix_acp_ref ()">mix_acp_ref</a>                      (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *mix);
+#define             <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-unref" title="mix_acp_unref()">mix_acp_unref</a>                       (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-ACP-DECODEMODE--CAPS" title="MIX_ACP_DECODEMODE()">MIX_ACP_DECODEMODE</a>                  (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-ACP-NUM-CHANNELS--CAPS" title="MIX_ACP_NUM_CHANNELS()">MIX_ACP_NUM_CHANNELS</a>                (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-ACP-BITRATE--CAPS" title="MIX_ACP_BITRATE()">MIX_ACP_BITRATE</a>                     (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-ACP-SAMPLE-FREQ--CAPS" title="MIX_ACP_SAMPLE_FREQ()">MIX_ACP_SAMPLE_FREQ</a>                 (obj)
+<a class="link" href="MixAudio-MixAudioConfigParams.html#MixDecodeMode" title="enum MixDecodeMode">MixDecodeMode</a>       <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-get-decodemode" title="mix_acp_get_decodemode ()">mix_acp_get_decodemode</a>              (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj);
+MIX_RESULT          <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-decodemode" title="mix_acp_set_decodemode ()">mix_acp_set_decodemode</a>              (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParams.html#MixDecodeMode" title="enum MixDecodeMode">MixDecodeMode</a> mode);
+gchar *             <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-get-streamname" title="mix_acp_get_streamname ()">mix_acp_get_streamname</a>              (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj);
+MIX_RESULT          <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-streamname" title="mix_acp_set_streamname ()">mix_acp_set_streamname</a>              (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj,
+                                                         const gchar *streamname);
+MIX_RESULT          <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-audio-manager" title="mix_acp_set_audio_manager ()">mix_acp_set_audio_manager</a>           (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj,
+                                                         <a class="link" href="MixAudio-mixaudiotypes.html#MixAudioManager" title="enum MixAudioManager">MixAudioManager</a> am);
+<a class="link" href="MixAudio-mixaudiotypes.html#MixAudioManager" title="enum MixAudioManager">MixAudioManager</a>     <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-get-audio-manager" title="mix_acp_get_audio_manager ()">mix_acp_get_audio_manager</a>           (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj);
+gboolean            <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-is-streamname-valid" title="mix_acp_is_streamname_valid ()">mix_acp_is_streamname_valid</a>         (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj);
+<a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPBPSType" title="enum MixACPBPSType">MixACPBPSType</a>       <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-get-bps" title="mix_acp_get_bps ()">mix_acp_get_bps</a>                     (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj);
+MIX_RESULT          <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-bps" title="mix_acp_set_bps ()">mix_acp_set_bps</a>                     (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPBPSType" title="enum MixACPBPSType">MixACPBPSType</a> type);
+<a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPOpAlign" title="enum MixACPOpAlign">MixACPOpAlign</a>       <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-get-op-align" title="mix_acp_get_op_align ()">mix_acp_get_op_align</a>                (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj);
+MIX_RESULT          <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-op-align" title="mix_acp_set_op_align ()">mix_acp_set_op_align</a>                (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPOpAlign" title="enum MixACPOpAlign">MixACPOpAlign</a> op_align);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio-MixAudioConfigParams.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> configuration parameters object which is used to communicate audio specific parameters.
+</p>
+<p>
+This object is should not be instantiated as codec specific parameters are definied in individual derive classes.</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio-MixAudioConfigParams.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="MixACPOpAlign"></a><h3>enum MixACPOpAlign</h3>
+<pre class="programlisting">typedef enum {
+  MIX_ACP_OUTPUT_ALIGN_UNKNOWN=-1,
+  MIX_ACP_OUTPUT_ALIGN_16=0,
+  MIX_ACP_OUTPUT_ALIGN_MSB,
+  MIX_ACP_OUTPUT_ALIGN_LSB,
+  MIX_ACP_OUTPUT_ALIGN_LAST
+} MixACPOpAlign;
+</pre>
+<p>
+Audio Output alignment.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-ACP-OUTPUT-ALIGN-UNKNOWN--CAPS"></a><span class="term"><code class="literal">MIX_ACP_OUTPUT_ALIGN_UNKNOWN</code></span></p></td>
+<td> Output alignment undefined.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-ACP-OUTPUT-ALIGN-16--CAPS"></a><span class="term"><code class="literal">MIX_ACP_OUTPUT_ALIGN_16</code></span></p></td>
+<td></td>
+</tr>
+<tr>
+<td><p><a name="MIX-ACP-OUTPUT-ALIGN-MSB--CAPS"></a><span class="term"><code class="literal">MIX_ACP_OUTPUT_ALIGN_MSB</code></span></p></td>
+<td> Output word is MSB aligned
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-ACP-OUTPUT-ALIGN-LSB--CAPS"></a><span class="term"><code class="literal">MIX_ACP_OUTPUT_ALIGN_LSB</code></span></p></td>
+<td> Output word is LSB aligned
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-ACP-OUTPUT-ALIGN-LAST--CAPS"></a><span class="term"><code class="literal">MIX_ACP_OUTPUT_ALIGN_LAST</code></span></p></td>
+<td> Last entry in list.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixACPBPSType"></a><h3>enum MixACPBPSType</h3>
+<pre class="programlisting">typedef enum {
+  MIX_ACP_BPS_UNKNOWN=0,
+  MIX_ACP_BPS_16=16,
+  MIX_ACP_BPS_24=24,
+} MixACPBPSType;
+</pre>
+<p>
+Audio Output Size in bits per sample.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-ACP-BPS-UNKNOWN--CAPS"></a><span class="term"><code class="literal">MIX_ACP_BPS_UNKNOWN</code></span></p></td>
+<td> Bit Per Sample undefined.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-ACP-BPS-16--CAPS"></a><span class="term"><code class="literal">MIX_ACP_BPS_16</code></span></p></td>
+<td> Output bits per sample is 16 bits 
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-ACP-BPS-24--CAPS"></a><span class="term"><code class="literal">MIX_ACP_BPS_24</code></span></p></td>
+<td> Output bits per sample is 24 bits 
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixDecodeMode"></a><h3>enum MixDecodeMode</h3>
+<pre class="programlisting">typedef enum {
+  MIX_DECODE_NULL=0,
+  MIX_DECODE_DIRECTRENDER,
+  MIX_DECODE_DECODERETURN,
+  MIX_DECODE_LAST
+} MixDecodeMode;
+</pre>
+<p>
+Operation Mode for a MI-X session. See <a class="link" href="MixAudio.html#mix-audio-configure" title="mix_audio_configure ()"><code class="function">mix_audio_configure()</code></a>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-DECODE-NULL--CAPS"></a><span class="term"><code class="literal">MIX_DECODE_NULL</code></span></p></td>
+<td> Undefined decode mode.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-DECODE-DIRECTRENDER--CAPS"></a><span class="term"><code class="literal">MIX_DECODE_DIRECTRENDER</code></span></p></td>
+<td> Stream is configured in Direct Render mode
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-DECODE-DECODERETURN--CAPS"></a><span class="term"><code class="literal">MIX_DECODE_DECODERETURN</code></span></p></td>
+<td> Stream is configured in Decode Return mode
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-DECODE-LAST--CAPS"></a><span class="term"><code class="literal">MIX_DECODE_LAST</code></span></p></td>
+<td> Last index in the enumeration.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixAudioConfigParams"></a><h3>MixAudioConfigParams</h3>
+<pre class="programlisting">typedef struct {
+  MixParams parent;
+
+  /* Audio Session Parameters */
+  MixDecodeMode decode_mode;
+  gchar *stream_name;
+  MixAudioManager audio_manager;
+
+  /* Audio Format Parameters */
+  gint num_channels;
+  gint bit_rate;
+  gint sample_freq;
+  MixACPBPSType bits_per_sample;
+  MixACPOpAlign op_align;
+} MixAudioConfigParams;
+</pre>
+<p>
+<em class="parameter"><code>MixAudio</code></em> configuration parameters object.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">MixParams <em class="structfield"><code>parent</code></em>;</span></p></td>
+<td> parent.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="MixAudio-MixAudioConfigParams.html#MixDecodeMode" title="enum MixDecodeMode">MixDecodeMode</a> <em class="structfield"><code>decode_mode</code></em>;</span></p></td>
+<td> Decode Mode to use for current session. See <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-decodemode" title="mix_acp_set_decodemode ()"><span class="type">mix_acp_set_decodemode</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term">gchar *<em class="structfield"><code>stream_name</code></em>;</span></p></td>
+<td> Stream name. See <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-streamname" title="mix_acp_set_streamname ()"><span class="type">mix_acp_set_streamname</span></a>. This object will release the string upon destruction.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="MixAudio-mixaudiotypes.html#MixAudioManager" title="enum MixAudioManager">MixAudioManager</a> <em class="structfield"><code>audio_manager</code></em>;</span></p></td>
+<td> Type of Audio Manager. See <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-audio-manager" title="mix_acp_set_audio_manager ()"><span class="type">mix_acp_set_audio_manager</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">gint <em class="structfield"><code>num_channels</code></em>;</span></p></td>
+<td> Number of output channels. See <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-ACP-NUM-CHANNELS--CAPS" title="MIX_ACP_NUM_CHANNELS()"><span class="type">MIX_ACP_NUM_CHANNELS</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term">gint <em class="structfield"><code>bit_rate</code></em>;</span></p></td>
+<td> <span class="emphasis"><em>Optional.</em></span> See <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-ACP-BITRATE--CAPS" title="MIX_ACP_BITRATE()"><span class="type">MIX_ACP_BITRATE</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term">gint <em class="structfield"><code>sample_freq</code></em>;</span></p></td>
+<td> Output frequency. See <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-ACP-SAMPLE-FREQ--CAPS" title="MIX_ACP_SAMPLE_FREQ()"><span class="type">MIX_ACP_SAMPLE_FREQ</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPBPSType" title="enum MixACPBPSType">MixACPBPSType</a> <em class="structfield"><code>bits_per_sample</code></em>;</span></p></td>
+<td> Number of output bit per sample. See <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-bps" title="mix_acp_set_bps ()"><span class="type">mix_acp_set_bps</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPOpAlign" title="enum MixACPOpAlign">MixACPOpAlign</a> <em class="structfield"><code>op_align</code></em>;</span></p></td>
+<td> Output Byte Alignment. See <a class="link" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-op-align" title="mix_acp_set_op_align ()"><span class="type">mix_acp_set_op_align</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-new"></a><h3>mix_acp_new ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> * mix_acp_new                      (void);</pre>
+<p>
+Use this method to create new instance of <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> A newly allocated instance of <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-ref"></a><h3>mix_acp_ref ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> * mix_acp_ref                      (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *mix);</pre>
+<p>
+Add reference count.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> object to add reference
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> the MixAudioConfigParams instance where reference count has been increased.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-unref"></a><h3>mix_acp_unref()</h3>
+<pre class="programlisting">#define mix_acp_unref(obj) mix_params_unref(MIX_PARAMS(obj))
+</pre>
+<p>
+Decrement reference count of the object.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> object to unref.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-DECODEMODE--CAPS"></a><h3>MIX_ACP_DECODEMODE()</h3>
+<pre class="programlisting">#define MIX_ACP_DECODEMODE(obj) (MIX_AUDIOCONFIGPARAMS(obj)-&gt;decode_mode)
+</pre>
+<p>
+MixAudioConfigParam.decode_mode accessor.
+</p>
+<p>
+Configure the decode mode to one of <a class="link" href="MixAudio-MixAudioConfigParams.html#MixDecodeMode" title="enum MixDecodeMode"><span class="type">MixDecodeMode</span></a> value.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a> object
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-NUM-CHANNELS--CAPS"></a><h3>MIX_ACP_NUM_CHANNELS()</h3>
+<pre class="programlisting">#define MIX_ACP_NUM_CHANNELS(obj) (MIX_AUDIOCONFIGPARAMS(obj)-&gt;num_channels)
+</pre>
+<p>
+MixAudioConfigParam.num_channels accessor.
+</p>
+<p>
+Configure the number of output channels. This value need to be exact the same as the supported output channel in the audio since down-mixing is not supported.
+</p>
+<p>
+This value can be used during <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DECODERETURN--CAPS"><span class="type">MIX_DECODE_DECODERETURN</span></a> mode for buffer size/duration calculation.
+</p>
+<p>
+In Moorestown, number of channel must be 1 or 2.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a> object
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-BITRATE--CAPS"></a><h3>MIX_ACP_BITRATE()</h3>
+<pre class="programlisting">#define MIX_ACP_BITRATE(obj) (MIX_AUDIOCONFIGPARAMS(obj)-&gt;bit_rate)
+</pre>
+<p>
+MixAudioConfigParam.bit_rate accessor.
+</p>
+<p>
+Bit rate of the current audio.
+</p>
+<p>
+<em><span class="remark">Optional</span></em></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a> object
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-SAMPLE-FREQ--CAPS"></a><h3>MIX_ACP_SAMPLE_FREQ()</h3>
+<pre class="programlisting">#define MIX_ACP_SAMPLE_FREQ(obj) (MIX_AUDIOCONFIGPARAMS(obj)-&gt;sample_freq)
+</pre>
+<p>
+MixAudioConfigParam.sample_freq accessor.
+</p>
+<p>
+Output sampling frequency.
+</p>
+<p>
+This value can be used during <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DECODERETURN--CAPS"><span class="type">MIX_DECODE_DECODERETURN</span></a> mode for buffer size/duration calculation.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a> object
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-get-decodemode"></a><h3>mix_acp_get_decodemode ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParams.html#MixDecodeMode" title="enum MixDecodeMode">MixDecodeMode</a>       mix_acp_get_decodemode              (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj);</pre>
+<p>
+Retrieve currently configured <a class="link" href="MixAudio-MixAudioConfigParams.html#MixDecodeMode" title="enum MixDecodeMode"><span class="type">MixDecodeMode</span></a>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixDecodeMode" title="enum MixDecodeMode"><span class="type">MixDecodeMode</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-set-decodemode"></a><h3>mix_acp_set_decodemode ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_acp_set_decodemode              (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParams.html#MixDecodeMode" title="enum MixDecodeMode">MixDecodeMode</a> mode);</pre>
+<p>
+Configure session for one of the <a class="link" href="MixAudio-MixAudioConfigParams.html#MixDecodeMode" title="enum MixDecodeMode"><span class="type">MixDecodeMode</span></a>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mode</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixDecodeMode" title="enum MixDecodeMode"><span class="type">MixDecodeMode</span></a> to set
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-get-streamname"></a><h3>mix_acp_get_streamname ()</h3>
+<pre class="programlisting">gchar *             mix_acp_get_streamname              (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj);</pre>
+<p>
+Return copy of streamname. caller must free with <code class="function">g_free()</code></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> pointer to a copy of the stream name. NULL if name is not available.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-set-streamname"></a><h3>mix_acp_set_streamname ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_acp_set_streamname              (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj,
+                                                         const gchar *streamname);</pre>
+<p>
+Set the stream name. The object will make a copy of the input stream name string.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>streamname</code></em> :</span></p></td>
+<td> Stream name to set
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-set-audio-manager"></a><h3>mix_acp_set_audio_manager ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_acp_set_audio_manager           (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj,
+                                                         <a class="link" href="MixAudio-mixaudiotypes.html#MixAudioManager" title="enum MixAudioManager">MixAudioManager</a> am);</pre>
+<p>
+Set the Audio Manager to one of the <a class="link" href="MixAudio-mixaudiotypes.html#MixAudioManager" title="enum MixAudioManager"><span class="type">MixAudioManager</span></a>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>am</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-mixaudiotypes.html#MixAudioManager" title="enum MixAudioManager"><span class="type">MixAudioManager</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-get-audio-manager"></a><h3>mix_acp_get_audio_manager ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-mixaudiotypes.html#MixAudioManager" title="enum MixAudioManager">MixAudioManager</a>     mix_acp_get_audio_manager           (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj);</pre>
+<p>
+Retrieve name of currently configured audio manager.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-mixaudiotypes.html#MixAudioManager" title="enum MixAudioManager"><span class="type">MixAudioManager</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-is-streamname-valid"></a><h3>mix_acp_is_streamname_valid ()</h3>
+<pre class="programlisting">gboolean            mix_acp_is_streamname_valid         (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj);</pre>
+<p>
+Check if stream name is valid considering the current Decode Mode.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> boolean indicates if stream name is valid.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-get-bps"></a><h3>mix_acp_get_bps ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPBPSType" title="enum MixACPBPSType">MixACPBPSType</a>       mix_acp_get_bps                     (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj);</pre>
+<p>
+Retrive currently configured bit-per-stream value.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPBPSType" title="enum MixACPBPSType"><span class="type">MixACPBPSType</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-set-bps"></a><h3>mix_acp_set_bps ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_acp_set_bps                     (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPBPSType" title="enum MixACPBPSType">MixACPBPSType</a> type);</pre>
+<p>
+Configure bit-per-stream of one of the supported <a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPBPSType" title="enum MixACPBPSType"><span class="type">MixACPBPSType</span></a>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mode</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPBPSType" title="enum MixACPBPSType"><span class="type">MixACPBPSType</span></a> to set
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-get-op-align"></a><h3>mix_acp_get_op_align ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPOpAlign" title="enum MixACPOpAlign">MixACPOpAlign</a>       mix_acp_get_op_align                (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj);</pre>
+<p>
+Get Output Alignment.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a> object
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPOpAlign" title="enum MixACPOpAlign"><span class="type">MixACPOpAlign</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-set-op-align"></a><h3>mix_acp_set_op_align ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_acp_set_op_align                (<a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPOpAlign" title="enum MixACPOpAlign">MixACPOpAlign</a> op_align);</pre>
+<p>
+Set Output Alignment to one of the <a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPOpAlign" title="enum MixACPOpAlign"><span class="type">MixACPOpAlign</span></a> value.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a> object
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>op_align</code></em> :</span></p></td>
+<td> One of the supported <a class="link" href="MixAudio-MixAudioConfigParams.html#MixACPOpAlign" title="enum MixACPOpAlign"><span class="type">MixACPOpAlign</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> MIX_RESULT
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioConfigParamsAAC.html b/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioConfigParamsAAC.html
new file mode 100644
index 0000000..46e4e8e
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioConfigParamsAAC.html
@@ -0,0 +1,823 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>MixAudioConfigParamsAAC</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="MixAudio Reference Manual">
+<link rel="up" href="ch01.html" title="Mix Audio API">
+<link rel="prev" href="ch01.html" title="Mix Audio API">
+<link rel="next" href="MixAudio-MixAudioConfigParamsMP3.html" title="MixAudioConfigParamsMP3">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Mix Audio API">
+<link rel="chapter" href="tree-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="api-index-full.html" title="API Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">MixAudio Reference Manual</th>
+<td><a accesskey="n" href="MixAudio-MixAudioConfigParamsMP3.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#MixAudio-MixAudioConfigParamsAAC.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#MixAudio-MixAudioConfigParamsAAC.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="MixAudio-MixAudioConfigParamsAAC"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="MixAudio-MixAudioConfigParamsAAC.top_of_page"></a>MixAudioConfigParamsAAC</span></h2>
+<p>MixAudioConfigParamsAAC — Audio configuration parameters for AAC-LC, HEAAC v1, and HEAAC v2 audio format.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="MixAudio-MixAudioConfigParamsAAC.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;mixacpaac.h&gt;
+
+enum                <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitrateType" title="enum MixAACBitrateType">MixAACBitrateType</a>;
+enum                <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitstreamFormt" title="enum MixAACBitstreamFormt">MixAACBitstreamFormt</a>;
+enum                <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACProfile" title="enum MixAACProfile">MixAACProfile</a>;
+enum                <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACMpegID" title="enum MixAACMpegID">MixAACMpegID</a>;
+                    <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a>;
+<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> * <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-new" title="mix_acp_aac_new ()">mix_acp_aac_new</a>               (void);
+<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> * <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-ref" title="mix_acp_aac_ref ()">mix_acp_aac_ref</a>               (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *mix);
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-unref" title="mix_acp_aac_unref()">mix_acp_aac_unref</a>                   (obj)
+MIX_RESULT          <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-mpeg-id" title="mix_acp_aac_set_mpeg_id ()">mix_acp_aac_set_mpeg_id</a>             (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACMpegID" title="enum MixAACMpegID">MixAACMpegID</a> mpegid);
+<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACMpegID" title="enum MixAACMpegID">MixAACMpegID</a>        <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-mpeg-id" title="mix_acp_aac_get_mpeg_id ()">mix_acp_aac_get_mpeg_id</a>             (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj);
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-CRC--CAPS" title="MIX_ACP_AAC_CRC()">MIX_ACP_AAC_CRC</a>                     (obj)
+MIX_RESULT          <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-aot" title="mix_acp_aac_set_aot ()">mix_acp_aac_set_aot</a>                 (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj,
+                                                         guint aot);
+guint               <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-aot" title="mix_acp_aac_get_aot ()">mix_acp_aac_get_aot</a>                 (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj);
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-SBR-FLAG--CAPS" title="MIX_ACP_AAC_SBR_FLAG()">MIX_ACP_AAC_SBR_FLAG</a>                (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-PS-FLAG--CAPS" title="MIX_ACP_AAC_PS_FLAG()">MIX_ACP_AAC_PS_FLAG</a>                 (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-PCE-FLAG--CAPS" title="MIX_ACP_AAC_PCE_FLAG()">MIX_ACP_AAC_PCE_FLAG</a>                (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-SAMPLE-RATE--CAPS" title="MIX_ACP_AAC_SAMPLE_RATE()">MIX_ACP_AAC_SAMPLE_RATE</a>             (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-CHANNELS--CAPS" title="MIX_ACP_AAC_CHANNELS()">MIX_ACP_AAC_CHANNELS</a>                (obj)
+<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitstreamFormt" title="enum MixAACBitstreamFormt">MixAACBitstreamFormt</a>  <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-bit-stream-format" title="mix_acp_aac_get_bit_stream_format ()">mix_acp_aac_get_bit_stream_format</a> (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj);
+MIX_RESULT          <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-bit-stream-format" title="mix_acp_aac_set_bit_stream_format ()">mix_acp_aac_set_bit_stream_format</a>   (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitstreamFormt" title="enum MixAACBitstreamFormt">MixAACBitstreamFormt</a> bit_stream_format);
+<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACProfile" title="enum MixAACProfile">MixAACProfile</a>       <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-aac-profile" title="mix_acp_aac_get_aac_profile ()">mix_acp_aac_get_aac_profile</a>         (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj);
+MIX_RESULT          <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-aac-profile" title="mix_acp_aac_set_aac_profile ()">mix_acp_aac_set_aac_profile</a>         (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACProfile" title="enum MixAACProfile">MixAACProfile</a> aac_profile);
+<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitrateType" title="enum MixAACBitrateType">MixAACBitrateType</a>   <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-bit-rate-type" title="mix_acp_aac_get_bit_rate_type ()">mix_acp_aac_get_bit_rate_type</a>       (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj);
+MIX_RESULT          <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-bit-rate-type" title="mix_acp_aac_set_bit_rate_type ()">mix_acp_aac_set_bit_rate_type</a>       (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitrateType" title="enum MixAACBitrateType">MixAACBitrateType</a> bit_rate_type);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio-MixAudioConfigParamsAAC.description"></a><h2>Description</h2>
+<p>
+A data object which stores audio specific parameters for the following formats:
+</p>
+<div class="itemizedlist"><ul type="disc">
+<li>AAC-LC</li>
+<li>HE-AAC v1</li>
+<li>HE-AAC v2</li>
+</ul></div>
+<p>
+</p>
+<p>
+Additional parameters must be set in the parent object <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a></p>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio-MixAudioConfigParamsAAC.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="MixAACBitrateType"></a><h3>enum MixAACBitrateType</h3>
+<pre class="programlisting">typedef enum {
+  MIX_AAC_BR_NULL=-1,
+  MIX_AAC_BR_CONSTANT=0,
+  MIX_AAC_BR_VARIABLE,
+  MIX_AAC_BR_LAST
+} MixAACBitrateType;
+</pre>
+<p>
+Types of bitrate in AAC.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-AAC-BR-NULL--CAPS"></a><span class="term"><code class="literal">MIX_AAC_BR_NULL</code></span></p></td>
+<td> Undefined bit rate type.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-BR-CONSTANT--CAPS"></a><span class="term"><code class="literal">MIX_AAC_BR_CONSTANT</code></span></p></td>
+<td> Constant bit rate.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-BR-VARIABLE--CAPS"></a><span class="term"><code class="literal">MIX_AAC_BR_VARIABLE</code></span></p></td>
+<td> Variable bit rate.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-BR-LAST--CAPS"></a><span class="term"><code class="literal">MIX_AAC_BR_LAST</code></span></p></td>
+<td> last entry.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixAACBitstreamFormt"></a><h3>enum MixAACBitstreamFormt</h3>
+<pre class="programlisting">typedef enum {
+  MIX_AAC_BS_NULL=-1,
+  MIX_AAC_BS_ADTS=0,
+  MIX_AAC_BS_ADIF,
+  MIX_AAC_BS_RAW,
+  MIX_AAC_BS_LAST
+} MixAACBitstreamFormt;
+</pre>
+<p>
+AAC bitstream format.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-AAC-BS-NULL--CAPS"></a><span class="term"><code class="literal">MIX_AAC_BS_NULL</code></span></p></td>
+<td> Undefined bitstream format.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-BS-ADTS--CAPS"></a><span class="term"><code class="literal">MIX_AAC_BS_ADTS</code></span></p></td>
+<td> Bitstream is in ADTS format.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-BS-ADIF--CAPS"></a><span class="term"><code class="literal">MIX_AAC_BS_ADIF</code></span></p></td>
+<td> Bitstream is in ADIF format.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-BS-RAW--CAPS"></a><span class="term"><code class="literal">MIX_AAC_BS_RAW</code></span></p></td>
+<td> Bitstream is in raw format.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-BS-LAST--CAPS"></a><span class="term"><code class="literal">MIX_AAC_BS_LAST</code></span></p></td>
+<td> Last entry.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixAACProfile"></a><h3>enum MixAACProfile</h3>
+<pre class="programlisting">typedef enum {
+  MIX_AAC_PROFILE_NULL=-1,
+  MIX_AAC_PROFILE_MAIN=0,
+  MIX_AAC_PROFILE_LC,
+  MIX_AAC_PROFILE_SSR,
+  MIX_AAC_PROFILE_LAST
+} MixAACProfile;
+</pre>
+<p>
+AAC profiles definitions.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-AAC-PROFILE-NULL--CAPS"></a><span class="term"><code class="literal">MIX_AAC_PROFILE_NULL</code></span></p></td>
+<td> Undefined profile.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-PROFILE-MAIN--CAPS"></a><span class="term"><code class="literal">MIX_AAC_PROFILE_MAIN</code></span></p></td>
+<td> <span class="emphasis"><em>Not Supported</em></span> AAC Main profile. 
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-PROFILE-LC--CAPS"></a><span class="term"><code class="literal">MIX_AAC_PROFILE_LC</code></span></p></td>
+<td> AAC-LC profile, including support of SBR and PS tool.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-PROFILE-SSR--CAPS"></a><span class="term"><code class="literal">MIX_AAC_PROFILE_SSR</code></span></p></td>
+<td> <span class="emphasis"><em>Not Supported</em></span> SSR profile. 
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-PROFILE-LAST--CAPS"></a><span class="term"><code class="literal">MIX_AAC_PROFILE_LAST</code></span></p></td>
+<td> Last entry.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixAACMpegID"></a><h3>enum MixAACMpegID</h3>
+<pre class="programlisting">typedef enum {
+  MIX_AAC_MPEG_ID_NULL=-1,
+  MIX_AAC_MPEG_2_ID = 0,
+  MIX_AAC_MPEG_4_ID = 1,
+  MIX_AAC_MPEG_LAST
+} MixAACMpegID;
+</pre>
+<p>
+AAC MPEG ID.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-AAC-MPEG-ID-NULL--CAPS"></a><span class="term"><code class="literal">MIX_AAC_MPEG_ID_NULL</code></span></p></td>
+<td> Undefined MPEG ID.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-MPEG-2-ID--CAPS"></a><span class="term"><code class="literal">MIX_AAC_MPEG_2_ID</code></span></p></td>
+<td> Indicate MPEG 2 Audio.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-MPEG-4-ID--CAPS"></a><span class="term"><code class="literal">MIX_AAC_MPEG_4_ID</code></span></p></td>
+<td> Indicate MPEG 4 Audio.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AAC-MPEG-LAST--CAPS"></a><span class="term"><code class="literal">MIX_AAC_MPEG_LAST</code></span></p></td>
+<td> last entry. 
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixAudioConfigParamsAAC"></a><h3>MixAudioConfigParamsAAC</h3>
+<pre class="programlisting">typedef struct {
+  MixAudioConfigParams parent;
+
+  /* Audio Format Parameters */
+  MixAACMpegID MPEG_id;
+  MixAACBitstreamFormt bit_stream_format;
+  MixAACProfile aac_profile;
+  guint aot;
+  guint aac_sample_rate;      
+  guint aac_channels;  
+  MixAACBitrateType bit_rate_type;
+  gboolean CRC;
+  guint sbrPresentFlag;
+  guint psPresentFlag;
+  gboolean pce_present;
+  gint8 syntc_id[2]; 
+  gint8 syntc_tag[2]; 
+  gint num_syntc_elems;
+} MixAudioConfigParamsAAC;
+</pre>
+<p>
+MixAudio Parameter object</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> <em class="structfield"><code>parent</code></em>;</span></p></td>
+<td> parent.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACMpegID" title="enum MixAACMpegID">MixAACMpegID</a> <em class="structfield"><code>MPEG_id</code></em>;</span></p></td>
+<td> MPEG ID. See <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-mpeg-id" title="mix_acp_aac_set_mpeg_id ()"><span class="type">mix_acp_aac_set_mpeg_id</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitstreamFormt" title="enum MixAACBitstreamFormt">MixAACBitstreamFormt</a> <em class="structfield"><code>bit_stream_format</code></em>;</span></p></td>
+<td> Bitstream format. See <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-bit-stream-format" title="mix_acp_aac_set_bit_stream_format ()"><span class="type">mix_acp_aac_set_bit_stream_format</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACProfile" title="enum MixAACProfile">MixAACProfile</a> <em class="structfield"><code>aac_profile</code></em>;</span></p></td>
+<td> AAC profile. See <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-aac-profile" title="mix_acp_aac_set_aac_profile ()"><span class="type">mix_acp_aac_set_aac_profile</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">guint <em class="structfield"><code>aot</code></em>;</span></p></td>
+<td> Audio object type. See <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-aot" title="mix_acp_aac_set_aot ()"><span class="type">mix_acp_aac_set_aot</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term">guint <em class="structfield"><code>aac_sample_rate</code></em>;</span></p></td>
+<td> See <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-SAMPLE-RATE--CAPS" title="MIX_ACP_AAC_SAMPLE_RATE()"><span class="type">MIX_ACP_AAC_SAMPLE_RATE</span></a> macro.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">guint <em class="structfield"><code>aac_channels</code></em>;</span></p></td>
+<td> See <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-CHANNELS--CAPS" title="MIX_ACP_AAC_CHANNELS()"><span class="type">MIX_ACP_AAC_CHANNELS</span></a> macro.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitrateType" title="enum MixAACBitrateType">MixAACBitrateType</a> <em class="structfield"><code>bit_rate_type</code></em>;</span></p></td>
+<td> Bitrate type. See <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-bit-rate-type" title="mix_acp_aac_set_bit_rate_type ()"><span class="type">mix_acp_aac_set_bit_rate_type</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term">gboolean <em class="structfield"><code>CRC</code></em>;</span></p></td>
+<td> CRC check 0:disable, 1:enable.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">guint <em class="structfield"><code>sbrPresentFlag</code></em>;</span></p></td>
+<td> See <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-SBR-FLAG--CAPS" title="MIX_ACP_AAC_SBR_FLAG()"><span class="type">MIX_ACP_AAC_SBR_FLAG</span></a> macro.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">guint <em class="structfield"><code>psPresentFlag</code></em>;</span></p></td>
+<td> See <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-PS-FLAG--CAPS" title="MIX_ACP_AAC_PS_FLAG()"><span class="type">MIX_ACP_AAC_PS_FLAG</span></a> macro.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">gboolean <em class="structfield"><code>pce_present</code></em>;</span></p></td>
+<td> <span class="emphasis"><em>Not Used.</em></span> See <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-PCE-FLAG--CAPS" title="MIX_ACP_AAC_PCE_FLAG()"><span class="type">MIX_ACP_AAC_PCE_FLAG</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term">gint8 <em class="structfield"><code>syntc_id</code></em>[2];</span></p></td>
+<td> <span class="emphasis"><em>Not Used.</em></span> 0 for ID_SCE(Dula Mono), -1 for raw. 
+</td>
+</tr>
+<tr>
+<td><p><span class="term">gint8 <em class="structfield"><code>syntc_tag</code></em>[2];</span></p></td>
+<td> <span class="emphasis"><em>Not Used.</em></span> -1 for raw. 0-16 for rest of the streams. 
+</td>
+</tr>
+<tr>
+<td><p><span class="term">gint <em class="structfield"><code>num_syntc_elems</code></em>;</span></p></td>
+<td> <span class="emphasis"><em>Not Used.</em></span> Number of syntatic elements. 
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-aac-new"></a><h3>mix_acp_aac_new ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> * mix_acp_aac_new               (void);</pre>
+<p>
+Use this method to create new instance of <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> A newly allocated instance of <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-aac-ref"></a><h3>mix_acp_aac_ref ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> * mix_acp_aac_ref               (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *mix);</pre>
+<p>
+Add reference count.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> object to add reference
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> the MixAudioConfigParamsAAC instance where reference count has been increased.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-aac-unref"></a><h3>mix_acp_aac_unref()</h3>
+<pre class="programlisting">#define mix_acp_aac_unref(obj) mix_params_unref(MIX_PARAMS(obj))
+</pre>
+<p>
+Decrement reference count of the object.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> object to unref.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-aac-set-mpeg-id"></a><h3>mix_acp_aac_set_mpeg_id ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_acp_aac_set_mpeg_id             (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACMpegID" title="enum MixAACMpegID">MixAACMpegID</a> mpegid);</pre>
+<p>
+Configure decoder to treat audio as MPEG 2 or MPEG 4.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mpegid</code></em> :</span></p></td>
+<td> MPEG ID to set.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>return</code></em> :</span></p></td>
+<td> MIX_RESULT
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-aac-get-mpeg-id"></a><h3>mix_acp_aac_get_mpeg_id ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACMpegID" title="enum MixAACMpegID">MixAACMpegID</a>        mix_acp_aac_get_mpeg_id             (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj);</pre>
+<p>
+Retrieve currently configured mpeg id value.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a> object
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> MPEG ID.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-AAC-CRC--CAPS"></a><h3>MIX_ACP_AAC_CRC()</h3>
+<pre class="programlisting">#define MIX_ACP_AAC_CRC(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)-&gt;CRC)
+</pre>
+<p>
+<span class="type">MixAudioConfigParamAAC</span>.CRC accessor.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a> object.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-aac-set-aot"></a><h3>mix_acp_aac_set_aot ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_acp_aac_set_aot                 (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj,
+                                                         guint aot);</pre>
+<p>
+Audio Object Type for the MPEG-4 audio stream. Valid value are:
+</p>
+<p>
+2 - for AAC-LC
+</p>
+<p>
+5 - for SBR
+</p>
+<p>
+Method returns MIX_RESULT_NOT_SUPPORTED for not supported value.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>aot</code></em> :</span></p></td>
+<td> Audio Object Type.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-aac-get-aot"></a><h3>mix_acp_aac_get_aot ()</h3>
+<pre class="programlisting">guint               mix_acp_aac_get_aot                 (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj);</pre>
+<p>
+To retrieve currently configured audio object type.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>aot</code></em> :</span></p></td>
+<td> Pointer to receive the Audio Object Type.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>return</code></em> :</span></p></td>
+<td> Currently configured audio object type. Or 0 if not yet specified.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-AAC-SBR-FLAG--CAPS"></a><h3>MIX_ACP_AAC_SBR_FLAG()</h3>
+<pre class="programlisting">#define MIX_ACP_AAC_SBR_FLAG(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)-&gt;sbrPresentFlag)
+</pre>
+<p>
+MixAudioConfigParamAAC.sbrPresentFlag accessor.
+</p>
+<p>
+Applicable only when <em class="parameter"><code>bit_stream_format</code></em>==<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-BS-RAW--CAPS"><span class="type">MIX_AAC_BS_RAW</span></a>. Indicates whether SBR data is present. 
+</p>
+<p>
+0: Absent
+</p>
+<p>
+1: Present
+</p>
+<p>
+-1 (0xffffffff): indicates implicit signalling.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a> object
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-AAC-PS-FLAG--CAPS"></a><h3>MIX_ACP_AAC_PS_FLAG()</h3>
+<pre class="programlisting">#define MIX_ACP_AAC_PS_FLAG(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)-&gt;psPresentFlag)
+</pre>
+<p>
+MixAudioConfigParamAAC.psPresentFlag accessor.
+</p>
+<p>
+Applicable only when <em class="parameter"><code>bit_stream_format</code></em>==<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-BS-RAW--CAPS"><span class="type">MIX_AAC_BS_RAW</span></a>. Indicates whether PS data is present. 
+</p>
+<p>
+0: Absent
+</p>
+<p>
+1: Present
+</p>
+<p>
+-1 (0xffffffff): indicates implicit signalling.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a> object
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-AAC-PCE-FLAG--CAPS"></a><h3>MIX_ACP_AAC_PCE_FLAG()</h3>
+<pre class="programlisting">#define MIX_ACP_AAC_PCE_FLAG(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)-&gt;pce_present)
+</pre>
+<p>
+MixAudioConfigParamAAC.pce_present accessor.
+</p>
+<p>
+Applicable only when <em class="parameter"><code>bit_stream_format</code></em>==<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-BS-RAW--CAPS"><span class="type">MIX_AAC_BS_RAW</span></a>. Indicates PCE data presence. 
+</p>
+<p>
+1:present
+</p>
+<p>
+0:absent.
+</p>
+<p>
+<em><span class="remark">Not Used on Moorestown.</span></em></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a> object.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-AAC-SAMPLE-RATE--CAPS"></a><h3>MIX_ACP_AAC_SAMPLE_RATE()</h3>
+<pre class="programlisting">#define MIX_ACP_AAC_SAMPLE_RATE(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)-&gt;aac_sample_rate)
+</pre>
+<p>
+MixAudioConfigParamAAC.aac_sample_rate accessor.
+</p>
+<p>
+Plain AAC decoder operating sample rate. Which could be different from the output sampling rate with HE AAC v1 and v2.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a> object.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-AAC-CHANNELS--CAPS"></a><h3>MIX_ACP_AAC_CHANNELS()</h3>
+<pre class="programlisting">#define MIX_ACP_AAC_CHANNELS(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)-&gt;aac_channels)
+</pre>
+<p>
+MixAudioConfigParamAAC.aac_channels accessor. 
+</p>
+<p>
+Indicates the number of output channels used by AAC decoder before SBR or PS tools are applied.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-aac-get-bit-stream-format"></a><h3>mix_acp_aac_get_bit_stream_format ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitstreamFormt" title="enum MixAACBitstreamFormt">MixAACBitstreamFormt</a>  mix_acp_aac_get_bit_stream_format (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj);</pre>
+<p>
+Return the bitstream format currently configured.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitstreamFormt" title="enum MixAACBitstreamFormt"><span class="type">MixAACBitstreamFormt</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-aac-set-bit-stream-format"></a><h3>mix_acp_aac_set_bit_stream_format ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_acp_aac_set_bit_stream_format   (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitstreamFormt" title="enum MixAACBitstreamFormt">MixAACBitstreamFormt</a> bit_stream_format);</pre>
+<p>
+Set the type of bitstream format as specified in <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitstreamFormt" title="enum MixAACBitstreamFormt"><span class="type">MixAACBitstreamFormt</span></a>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bit_stream_format</code></em> :</span></p></td>
+<td> Bit stream format.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> MIX_RESULT
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-aac-get-aac-profile"></a><h3>mix_acp_aac_get_aac_profile ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACProfile" title="enum MixAACProfile">MixAACProfile</a>       mix_acp_aac_get_aac_profile         (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj);</pre>
+<p>
+Retrieve the AAC profile currently configured.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACProfile" title="enum MixAACProfile"><span class="type">MixAACProfile</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-aac-set-aac-profile"></a><h3>mix_acp_aac_set_aac_profile ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_acp_aac_set_aac_profile         (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACProfile" title="enum MixAACProfile">MixAACProfile</a> aac_profile);</pre>
+<p>
+Configure AAC profile for current session.
+</p>
+<p>
+Only <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-PROFILE-LC--CAPS"><span class="type">MIX_AAC_PROFILE_LC</span></a> is supported in Moorestown.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>aac_profile</code></em> :</span></p></td>
+<td> AAC profile to set.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> MIX_RESULT
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-aac-get-bit-rate-type"></a><h3>mix_acp_aac_get_bit_rate_type ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitrateType" title="enum MixAACBitrateType">MixAACBitrateType</a>   mix_acp_aac_get_bit_rate_type       (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj);</pre>
+<p>
+Retrieve the bit rate type currently configured.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitrateType" title="enum MixAACBitrateType"><span class="type">MixAACBitrateType</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-aac-set-bit-rate-type"></a><h3>mix_acp_aac_set_bit_rate_type ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_acp_aac_set_bit_rate_type       (<a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitrateType" title="enum MixAACBitrateType">MixAACBitrateType</a> bit_rate_type);</pre>
+<p>
+Set the bit rate type used.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC" title="MixAudioConfigParamsAAC"><span class="type">MixAudioConfigParamsAAC</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bit_rate_type</code></em> :</span></p></td>
+<td> Bit rate type to set.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> MIX_RESULT
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioConfigParamsMP3.html b/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioConfigParamsMP3.html
new file mode 100644
index 0000000..8c97357
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioConfigParamsMP3.html
@@ -0,0 +1,221 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>MixAudioConfigParamsMP3</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="MixAudio Reference Manual">
+<link rel="up" href="ch01.html" title="Mix Audio API">
+<link rel="prev" href="MixAudio-MixAudioConfigParamsAAC.html" title="MixAudioConfigParamsAAC">
+<link rel="next" href="MixAudio-MixAudioConfigParamsWMA.html" title="MixAudioConfigParamsWMA">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Mix Audio API">
+<link rel="chapter" href="tree-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="api-index-full.html" title="API Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="MixAudio-MixAudioConfigParamsAAC.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">MixAudio Reference Manual</th>
+<td><a accesskey="n" href="MixAudio-MixAudioConfigParamsWMA.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#MixAudio-MixAudioConfigParamsMP3.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#MixAudio-MixAudioConfigParamsMP3.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="MixAudio-MixAudioConfigParamsMP3"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="MixAudio-MixAudioConfigParamsMP3.top_of_page"></a>MixAudioConfigParamsMP3</span></h2>
+<p>MixAudioConfigParamsMP3 — Audio configuration parameters for MP3 audio.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="MixAudio-MixAudioConfigParamsMP3.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;mixacpmp3.h&gt;
+
+                    <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3" title="MixAudioConfigParamsMP3">MixAudioConfigParamsMP3</a>;
+<a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3" title="MixAudioConfigParamsMP3">MixAudioConfigParamsMP3</a> * <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-new" title="mix_acp_mp3_new ()">mix_acp_mp3_new</a>               (void);
+<a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3" title="MixAudioConfigParamsMP3">MixAudioConfigParamsMP3</a> * <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-ref" title="mix_acp_mp3_ref ()">mix_acp_mp3_ref</a>               (<a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3" title="MixAudioConfigParamsMP3">MixAudioConfigParamsMP3</a> *mix);
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-unref" title="mix_acp_mp3_unref()">mix_acp_mp3_unref</a>                   (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-CRC--CAPS" title="MIX_ACP_MP3_CRC()">MIX_ACP_MP3_CRC</a>                     (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-MPEG-FORMAT--CAPS" title="MIX_ACP_MP3_MPEG_FORMAT()">MIX_ACP_MP3_MPEG_FORMAT</a>             (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-MPEG-LAYER--CAPS" title="MIX_ACP_MP3_MPEG_LAYER()">MIX_ACP_MP3_MPEG_LAYER</a>              (obj)
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio-MixAudioConfigParamsMP3.description"></a><h2>Description</h2>
+<p>
+A data object which stores audio specific parameters for MP3 audio.
+</p>
+<p>
+Additional parameters must be set in the parent object <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a></p>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio-MixAudioConfigParamsMP3.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="MixAudioConfigParamsMP3"></a><h3>MixAudioConfigParamsMP3</h3>
+<pre class="programlisting">typedef struct {
+  MixAudioConfigParams parent;
+
+  /* Audio Format Parameters */
+  gboolean CRC;
+  gint MPEG_format;
+  gint MPEG_layer;
+} MixAudioConfigParamsMP3;
+</pre>
+<p>
+MI-X Audio Parameter object for MP3 Audio.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> <em class="structfield"><code>parent</code></em>;</span></p></td>
+<td> parent.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">gboolean <em class="structfield"><code>CRC</code></em>;</span></p></td>
+<td> CRC. See <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-CRC--CAPS" title="MIX_ACP_MP3_CRC()"><span class="type">MIX_ACP_MP3_CRC</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term">gint <em class="structfield"><code>MPEG_format</code></em>;</span></p></td>
+<td> <span class="emphasis"><em>Optional</em></span>MPEG format of the mpeg audio. See <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-MPEG-FORMAT--CAPS" title="MIX_ACP_MP3_MPEG_FORMAT()"><span class="type">MIX_ACP_MP3_MPEG_FORMAT</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term">gint <em class="structfield"><code>MPEG_layer</code></em>;</span></p></td>
+<td> <span class="emphasis"><em>Optional</em></span>MPEG layer of the mpeg audio. See <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-MPEG-LAYER--CAPS" title="MIX_ACP_MP3_MPEG_LAYER()"><span class="type">MIX_ACP_MP3_MPEG_LAYER</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-mp3-new"></a><h3>mix_acp_mp3_new ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3" title="MixAudioConfigParamsMP3">MixAudioConfigParamsMP3</a> * mix_acp_mp3_new               (void);</pre>
+<p>
+Use this method to create new instance of <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3" title="MixAudioConfigParamsMP3"><span class="type">MixAudioConfigParamsMP3</span></a></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> A newly allocated instance of <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3" title="MixAudioConfigParamsMP3"><span class="type">MixAudioConfigParamsMP3</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-mp3-ref"></a><h3>mix_acp_mp3_ref ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3" title="MixAudioConfigParamsMP3">MixAudioConfigParamsMP3</a> * mix_acp_mp3_ref               (<a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3" title="MixAudioConfigParamsMP3">MixAudioConfigParamsMP3</a> *mix);</pre>
+<p>
+Add reference count.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> object to add reference
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> the MixAudioConfigParamsMP3 instance where reference count has been increased.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-mp3-unref"></a><h3>mix_acp_mp3_unref()</h3>
+<pre class="programlisting">#define mix_acp_mp3_unref(obj) mix_params_unref(MIX_PARAMS(obj))
+</pre>
+<p>
+Decrement reference count of the object.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> object to unref.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-MP3-CRC--CAPS"></a><h3>MIX_ACP_MP3_CRC()</h3>
+<pre class="programlisting">#define MIX_ACP_MP3_CRC(obj) (MIX_AUDIOCONFIGPARAMSMP3(obj)-&gt;CRC)
+</pre>
+<p>
+MixAudioConfigParamMP3.CRC accessor.
+</p>
+<p>
+<em><span class="remark">Optional</span></em></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3" title="MixAudioConfigParamsMP3"><span class="type">MixAudioConfigParamsMP3</span></a> object.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-MP3-MPEG-FORMAT--CAPS"></a><h3>MIX_ACP_MP3_MPEG_FORMAT()</h3>
+<pre class="programlisting">#define MIX_ACP_MP3_MPEG_FORMAT(obj) (MIX_AUDIOCONFIGPARAMSMP3(obj)-&gt;MPEG_format)
+</pre>
+<p>
+MixAudioConfigParamMP3.MPEG_format accessor.
+</p>
+<p>
+Supported MPEG format should be 1 or 2.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3" title="MixAudioConfigParamsMP3"><span class="type">MixAudioConfigParamsMP3</span></a> object.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-MP3-MPEG-LAYER--CAPS"></a><h3>MIX_ACP_MP3_MPEG_LAYER()</h3>
+<pre class="programlisting">#define MIX_ACP_MP3_MPEG_LAYER(obj) (MIX_AUDIOCONFIGPARAMSMP3(obj)-&gt;MPEG_layer)
+</pre>
+<p>
+MixAudioConfigParamMP3.MPEG_layer accessor.
+</p>
+<p>
+Supported layer should be 1, 2, or 3.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3" title="MixAudioConfigParamsMP3"><span class="type">MixAudioConfigParamsMP3</span></a> object.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioConfigParamsWMA.html b/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioConfigParamsWMA.html
new file mode 100644
index 0000000..efd14ca
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioConfigParamsWMA.html
@@ -0,0 +1,391 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>MixAudioConfigParamsWMA</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="MixAudio Reference Manual">
+<link rel="up" href="ch01.html" title="Mix Audio API">
+<link rel="prev" href="MixAudio-MixAudioConfigParamsMP3.html" title="MixAudioConfigParamsMP3">
+<link rel="next" href="MixAudio-MixAudioConfigParams.html" title="MixAudioConfigParams">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Mix Audio API">
+<link rel="chapter" href="tree-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="api-index-full.html" title="API Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="MixAudio-MixAudioConfigParamsMP3.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">MixAudio Reference Manual</th>
+<td><a accesskey="n" href="MixAudio-MixAudioConfigParams.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#MixAudio-MixAudioConfigParamsWMA.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#MixAudio-MixAudioConfigParamsWMA.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="MixAudio-MixAudioConfigParamsWMA"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="MixAudio-MixAudioConfigParamsWMA.top_of_page"></a>MixAudioConfigParamsWMA</span></h2>
+<p>MixAudioConfigParamsWMA — Audio parameters for WMA audio.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="MixAudio-MixAudioConfigParamsWMA.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;mixacpwma.h&gt;
+
+enum                <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioWMAVersion" title="enum MixAudioWMAVersion">MixAudioWMAVersion</a>;
+                    <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA">MixAudioConfigParamsWMA</a>;
+<a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA">MixAudioConfigParamsWMA</a> * <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-new" title="mix_acp_wma_new ()">mix_acp_wma_new</a>               (void);
+<a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA">MixAudioConfigParamsWMA</a> * <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-ref" title="mix_acp_wma_ref ()">mix_acp_wma_ref</a>               (<a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA">MixAudioConfigParamsWMA</a> *mix);
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-unref" title="mix_acp_wma_unref()">mix_acp_wma_unref</a>                   (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-CHANNEL-MASK--CAPS" title="MIX_ACP_WMA_CHANNEL_MASK()">MIX_ACP_WMA_CHANNEL_MASK</a>            (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-FORMAT-TAG--CAPS" title="MIX_ACP_WMA_FORMAT_TAG()">MIX_ACP_WMA_FORMAT_TAG</a>              (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-BLOCK-ALIGN--CAPS" title="MIX_ACP_WMA_BLOCK_ALIGN()">MIX_ACP_WMA_BLOCK_ALIGN</a>             (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-ENCODE-OPT--CAPS" title="MIX_ACP_WMA_ENCODE_OPT()">MIX_ACP_WMA_ENCODE_OPT</a>              (obj)
+#define             <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-PCM-BIT-WIDTH--CAPS" title="MIX_ACP_WMA_PCM_BIT_WIDTH()">MIX_ACP_WMA_PCM_BIT_WIDTH</a>           (obj)
+<a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioWMAVersion" title="enum MixAudioWMAVersion">MixAudioWMAVersion</a>  <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-get-version" title="mix_acp_wma_get_version ()">mix_acp_wma_get_version</a>             (<a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA">MixAudioConfigParamsWMA</a> *obj);
+MIX_RESULT          <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-set-version" title="mix_acp_wma_set_version ()">mix_acp_wma_set_version</a>             (<a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA">MixAudioConfigParamsWMA</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioWMAVersion" title="enum MixAudioWMAVersion">MixAudioWMAVersion</a> ver);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio-MixAudioConfigParamsWMA.description"></a><h2>Description</h2>
+<p>
+A data object which stores audio specific parameters for WMA.
+</p>
+<p>
+In Moorestown, only WMA2 is supported.
+</p>
+<p>
+Additional parameters must be set in the parent object <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a></p>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio-MixAudioConfigParamsWMA.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="MixAudioWMAVersion"></a><h3>enum MixAudioWMAVersion</h3>
+<pre class="programlisting">typedef enum {
+  MIX_AUDIO_WMA_VUNKNOWN,
+  MIX_AUDIO_WMA_V9,
+  MIX_AUDIO_WMA_V10,
+  MIX_AUDIO_WMA_V10P,
+  MIX_AUDIO_WMA_LAST
+} MixAudioWMAVersion;
+</pre>
+<p>
+WMA version.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-AUDIO-WMA-VUNKNOWN--CAPS"></a><span class="term"><code class="literal">MIX_AUDIO_WMA_VUNKNOWN</code></span></p></td>
+<td> WMA version undefined.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AUDIO-WMA-V9--CAPS"></a><span class="term"><code class="literal">MIX_AUDIO_WMA_V9</code></span></p></td>
+<td> WMA 9
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AUDIO-WMA-V10--CAPS"></a><span class="term"><code class="literal">MIX_AUDIO_WMA_V10</code></span></p></td>
+<td> <span class="emphasis"><em>Not Supported</em></span> WMA 10
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AUDIO-WMA-V10P--CAPS"></a><span class="term"><code class="literal">MIX_AUDIO_WMA_V10P</code></span></p></td>
+<td> <span class="emphasis"><em>Not Supported</em></span> WMA 10 Pro
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AUDIO-WMA-LAST--CAPS"></a><span class="term"><code class="literal">MIX_AUDIO_WMA_LAST</code></span></p></td>
+<td> last entry.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixAudioConfigParamsWMA"></a><h3>MixAudioConfigParamsWMA</h3>
+<pre class="programlisting">typedef struct {
+  MixAudioConfigParams parent;
+
+  /* Audio Format Parameters */
+  guint32 channel_mask;
+  guint16 format_tag;
+  guint16 block_align;
+  guint16 wma_encode_opt;/* Encoder option */
+  guint8 pcm_bit_width;  /* source pcm bit width */
+  MixAudioWMAVersion wma_version;
+} MixAudioConfigParamsWMA;
+</pre>
+<p>
+MI-X Audio Parameter object</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> <em class="structfield"><code>parent</code></em>;</span></p></td>
+<td> parent.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">guint32 <em class="structfield"><code>channel_mask</code></em>;</span></p></td>
+<td> Channel Mask. See <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-CHANNEL-MASK--CAPS" title="MIX_ACP_WMA_CHANNEL_MASK()"><span class="type">MIX_ACP_WMA_CHANNEL_MASK</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term">guint16 <em class="structfield"><code>format_tag</code></em>;</span></p></td>
+<td> Format tag. See <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-FORMAT-TAG--CAPS" title="MIX_ACP_WMA_FORMAT_TAG()"><span class="type">MIX_ACP_WMA_FORMAT_TAG</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term">guint16 <em class="structfield"><code>block_align</code></em>;</span></p></td>
+<td></td>
+</tr>
+<tr>
+<td><p><span class="term">guint16 <em class="structfield"><code>wma_encode_opt</code></em>;</span></p></td>
+<td> Encoder option. See <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-ENCODE-OPT--CAPS" title="MIX_ACP_WMA_ENCODE_OPT()"><span class="type">MIX_ACP_WMA_ENCODE_OPT</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term">guint8 <em class="structfield"><code>pcm_bit_width</code></em>;</span></p></td>
+<td> Source pcm bit width. See <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-PCM-BIT-WIDTH--CAPS" title="MIX_ACP_WMA_PCM_BIT_WIDTH()"><span class="type">MIX_ACP_WMA_PCM_BIT_WIDTH</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioWMAVersion" title="enum MixAudioWMAVersion">MixAudioWMAVersion</a> <em class="structfield"><code>wma_version</code></em>;</span></p></td>
+<td> WMA version. See <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-set-version" title="mix_acp_wma_set_version ()"><span class="type">mix_acp_wma_set_version</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-wma-new"></a><h3>mix_acp_wma_new ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA">MixAudioConfigParamsWMA</a> * mix_acp_wma_new               (void);</pre>
+<p>
+Use this method to create new instance of <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA"><span class="type">MixAudioConfigParamsWMA</span></a></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> A newly allocated instance of <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA"><span class="type">MixAudioConfigParamsWMA</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-wma-ref"></a><h3>mix_acp_wma_ref ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA">MixAudioConfigParamsWMA</a> * mix_acp_wma_ref               (<a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA">MixAudioConfigParamsWMA</a> *mix);</pre>
+<p>
+Add reference count.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> object to add reference
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> the MixAudioConfigParamsWMA instance where reference count has been increased.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-wma-unref"></a><h3>mix_acp_wma_unref()</h3>
+<pre class="programlisting">#define mix_acp_wma_unref(obj) mix_params_unref(MIX_PARAMS(obj))
+</pre>
+<p>
+Decrement reference count of the object.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> object to unref.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-WMA-CHANNEL-MASK--CAPS"></a><h3>MIX_ACP_WMA_CHANNEL_MASK()</h3>
+<pre class="programlisting">#define MIX_ACP_WMA_CHANNEL_MASK(obj) (MIX_AUDIOCONFIGPARAMSWMA(obj)-&gt;channel_mask)
+</pre>
+<p>
+MixAudioConfigParamWMA.channel_mask accessor.
+</p>
+<p>
+Channel mask must be one of the following:
+</p>
+<p>
+4: For single (1) channel output.
+</p>
+<p>
+3: For stereo (2) channels output.
+</p>
+<p>
+Only 1 or 2 output channels are supported.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA"><span class="type">MixAudioConfigParamsWMA</span></a> object
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-WMA-FORMAT-TAG--CAPS"></a><h3>MIX_ACP_WMA_FORMAT_TAG()</h3>
+<pre class="programlisting">#define MIX_ACP_WMA_FORMAT_TAG(obj) (MIX_AUDIOCONFIGPARAMSWMA(obj)-&gt;format_tag)
+</pre>
+<p>
+MixAudioConfigParamWMA.format_tag accessor.
+</p>
+<p>
+<em><span class="remark">In Moorestown, only value 0x0161 combined with use of <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-AUDIO-WMA-V9--CAPS"><span class="type">MIX_AUDIO_WMA_V9</span></a> is supported.</span></em></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA"><span class="type">MixAudioConfigParamsWMA</span></a> object
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-WMA-BLOCK-ALIGN--CAPS"></a><h3>MIX_ACP_WMA_BLOCK_ALIGN()</h3>
+<pre class="programlisting">#define MIX_ACP_WMA_BLOCK_ALIGN(obj) (MIX_AUDIOCONFIGPARAMSWMA(obj)-&gt;block_align)
+</pre>
+<p>
+MixAudioConfigParamWMA.block_align accessor.
+</p>
+<p>
+Block alignment indicates packet size. Available from ASF Header.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA"><span class="type">MixAudioConfigParamsWMA</span></a> object
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-WMA-ENCODE-OPT--CAPS"></a><h3>MIX_ACP_WMA_ENCODE_OPT()</h3>
+<pre class="programlisting">#define MIX_ACP_WMA_ENCODE_OPT(obj) (MIX_AUDIOCONFIGPARAMSWMA(obj)-&gt;wma_encode_opt)
+</pre>
+<p>
+MixAudioConfigParamWMA.wma_encode_opt accessor.
+</p>
+<p>
+Encoder option available from ASF header.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA"><span class="type">MixAudioConfigParamsWMA</span></a> object
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MIX-ACP-WMA-PCM-BIT-WIDTH--CAPS"></a><h3>MIX_ACP_WMA_PCM_BIT_WIDTH()</h3>
+<pre class="programlisting">#define MIX_ACP_WMA_PCM_BIT_WIDTH(obj) (MIX_AUDIOCONFIGPARAMSWMA(obj)-&gt;pcm_bit_width)
+</pre>
+<p>
+MixAudioConfigParamWMA.pcm_bit_width accessor.
+</p>
+<p>
+Source pcm bit width available from ASF Header.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA"><span class="type">MixAudioConfigParamsWMA</span></a> object
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-wma-get-version"></a><h3>mix_acp_wma_get_version ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioWMAVersion" title="enum MixAudioWMAVersion">MixAudioWMAVersion</a>  mix_acp_wma_get_version             (<a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA">MixAudioConfigParamsWMA</a> *obj);</pre>
+<p>
+Get WMA Version.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA"><span class="type">MixAudioConfigParamsWMA</span></a> object
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> MixAudioWMAVersion
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-acp-wma-set-version"></a><h3>mix_acp_wma_set_version ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_acp_wma_set_version             (<a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA">MixAudioConfigParamsWMA</a> *obj,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioWMAVersion" title="enum MixAudioWMAVersion">MixAudioWMAVersion</a> ver);</pre>
+<p>
+Set WMA Version.
+</p>
+<p>
+<em><span class="remark">In Moorestown, only <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-AUDIO-WMA-V9--CAPS"><span class="type">MIX_AUDIO_WMA_V9</span></a> is supported</span></em></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA" title="MixAudioConfigParamsWMA"><span class="type">MixAudioConfigParamsWMA</span></a> object
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ver</code></em> :</span></p></td>
+<td> MixAudioWMAVersion to set.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> MIX_RESULT.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioInitParams.html b/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioInitParams.html
new file mode 100644
index 0000000..5aa7e45
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/MixAudio-MixAudioInitParams.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>MixAudioInitParams</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="MixAudio Reference Manual">
+<link rel="up" href="ch01.html" title="Mix Audio API">
+<link rel="prev" href="MixAudio-MixAudioConfigParams.html" title="MixAudioConfigParams">
+<link rel="next" href="MixAudio.html" title="MixAudio">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Mix Audio API">
+<link rel="chapter" href="tree-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="api-index-full.html" title="API Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="MixAudio-MixAudioConfigParams.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">MixAudio Reference Manual</th>
+<td><a accesskey="n" href="MixAudio.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#MixAudio-MixAudioInitParams.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#MixAudio-MixAudioInitParams.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="MixAudio-MixAudioInitParams"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="MixAudio-MixAudioInitParams.top_of_page"></a>MixAudioInitParams</span></h2>
+<p>MixAudioInitParams — Initialization parameters object.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="MixAudio-MixAudioInitParams.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;mixacp.h&gt;
+
+                    <a class="link" href="MixAudio-MixAudioInitParams.html#MixAudioInitParams" title="MixAudioInitParams">MixAudioInitParams</a>;
+<a class="link" href="MixAudio-MixAudioInitParams.html#MixAudioInitParams" title="MixAudioInitParams">MixAudioInitParams</a> * <a class="link" href="MixAudio-MixAudioInitParams.html#mix-aip-new" title="mix_aip_new ()">mix_aip_new</a>                        (void);
+<a class="link" href="MixAudio-MixAudioInitParams.html#MixAudioInitParams" title="MixAudioInitParams">MixAudioInitParams</a> * <a class="link" href="MixAudio-MixAudioInitParams.html#mix-aip-ref" title="mix_aip_ref ()">mix_aip_ref</a>                        (<a class="link" href="MixAudio-MixAudioInitParams.html#MixAudioInitParams" title="MixAudioInitParams">MixAudioInitParams</a> *mix);
+#define             <a class="link" href="MixAudio-MixAudioInitParams.html#mix-aip-unref" title="mix_aip_unref()">mix_aip_unref</a>                       (obj)
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio-MixAudioInitParams.description"></a><h2>Description</h2>
+<p>
+A data object which stores initialization specific parameters.
+</p>
+<p>
+Not Implemented in Moorestown.</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio-MixAudioInitParams.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="MixAudioInitParams"></a><h3>MixAudioInitParams</h3>
+<pre class="programlisting">typedef struct {
+  MixParams parent;
+} MixAudioInitParams;
+</pre>
+<p>
+<em class="parameter"><code>MixAudio</code></em> initialization parameter object.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term">MixParams <em class="structfield"><code>parent</code></em>;</span></p></td>
+<td> Parent.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-aip-new"></a><h3>mix_aip_new ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioInitParams.html#MixAudioInitParams" title="MixAudioInitParams">MixAudioInitParams</a> * mix_aip_new                        (void);</pre>
+<p>
+Use this method to create new instance of <a class="link" href="MixAudio-MixAudioInitParams.html#MixAudioInitParams" title="MixAudioInitParams"><span class="type">MixAudioInitParams</span></a></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> A newly allocated instance of <a class="link" href="MixAudio-MixAudioInitParams.html#MixAudioInitParams" title="MixAudioInitParams"><span class="type">MixAudioInitParams</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-aip-ref"></a><h3>mix_aip_ref ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio-MixAudioInitParams.html#MixAudioInitParams" title="MixAudioInitParams">MixAudioInitParams</a> * mix_aip_ref                        (<a class="link" href="MixAudio-MixAudioInitParams.html#MixAudioInitParams" title="MixAudioInitParams">MixAudioInitParams</a> *mix);</pre>
+<p>
+Add reference count.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> object to add reference
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> the MixAudioInitParams instance where reference count has been increased.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-aip-unref"></a><h3>mix_aip_unref()</h3>
+<pre class="programlisting">#define mix_aip_unref(obj) mix_params_unref(MIX_PARAMS(obj))
+</pre>
+<p>
+Decrement reference count of the object.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> object to unref.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/mix_audio/docs/reference/MixAudio/html/MixAudio-mixaudiotypes.html b/mix_audio/docs/reference/MixAudio/html/MixAudio-mixaudiotypes.html
new file mode 100644
index 0000000..7166107
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/MixAudio-mixaudiotypes.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Mix Audio Types</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="MixAudio Reference Manual">
+<link rel="up" href="ch01.html" title="Mix Audio API">
+<link rel="prev" href="MixAudio.html" title="MixAudio">
+<link rel="next" href="tree-hierarchy.html" title="Object Hierarchy">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Mix Audio API">
+<link rel="chapter" href="tree-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="api-index-full.html" title="API Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="MixAudio.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">MixAudio Reference Manual</th>
+<td><a accesskey="n" href="tree-hierarchy.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#MixAudio-mixaudiotypes.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#MixAudio-mixaudiotypes.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="MixAudio-mixaudiotypes"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="MixAudio-mixaudiotypes.top_of_page"></a>Mix Audio Types</span></h2>
+<p>Mix Audio Types — Miscellanous types used by <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> API.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="MixAudio-mixaudiotypes.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;mixaudiotypes.h&gt;
+
+enum                <a class="link" href="MixAudio-mixaudiotypes.html#MixAudioManager" title="enum MixAudioManager">MixAudioManager</a>;
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio-mixaudiotypes.description"></a><h2>Description</h2>
+<p>
+Miscellanous types used by <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> API.</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio-mixaudiotypes.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="MixAudioManager"></a><h3>enum MixAudioManager</h3>
+<pre class="programlisting">typedef enum {
+  MIX_AUDIOMANAGER_NONE = 0,
+  MIX_AUDIOMANAGER_INTELAUDIOMANAGER,
+  MIX_AUDIOMANAGER_LAST
+} MixAudioManager;
+</pre>
+<p>
+Audio Manager enumerations.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-AUDIOMANAGER-NONE--CAPS"></a><span class="term"><code class="literal">MIX_AUDIOMANAGER_NONE</code></span></p></td>
+<td> No Audio Manager.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AUDIOMANAGER-INTELAUDIOMANAGER--CAPS"></a><span class="term"><code class="literal">MIX_AUDIOMANAGER_INTELAUDIOMANAGER</code></span></p></td>
+<td> Intel Audio Manager.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AUDIOMANAGER-LAST--CAPS"></a><span class="term"><code class="literal">MIX_AUDIOMANAGER_LAST</code></span></p></td>
+<td> Last index.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/mix_audio/docs/reference/MixAudio/html/MixAudio.devhelp b/mix_audio/docs/reference/MixAudio/html/MixAudio.devhelp
new file mode 100644
index 0000000..9063304
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/MixAudio.devhelp
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="MixAudio Reference Manual" link="index.html" author="" name="MixAudio">
+  <chapters>
+    <sub name="Mix Audio API" link="ch01.html">
+      <sub name="MixAudioConfigParamsAAC" link="MixAudio-MixAudioConfigParamsAAC.html"/>
+      <sub name="MixAudioConfigParamsMP3" link="MixAudio-MixAudioConfigParamsMP3.html"/>
+      <sub name="MixAudioConfigParamsWMA" link="MixAudio-MixAudioConfigParamsWMA.html"/>
+      <sub name="MixAudioConfigParams" link="MixAudio-MixAudioConfigParams.html"/>
+      <sub name="MixAudioInitParams" link="MixAudio-MixAudioInitParams.html"/>
+      <sub name="MixAudio" link="MixAudio.html"/>
+      <sub name="Mix Audio Types" link="MixAudio-mixaudiotypes.html"/>
+    </sub>
+    <sub name="Object Hierarchy" link="tree-hierarchy.html"/>
+    <sub name="API Index" link="api-index-full.html"/>
+  </chapters>
+  <functions>
+    <function name="enum MixAACBitrateType" link="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitrateType"/>
+    <function name="enum MixAACBitstreamFormt" link="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitstreamFormt"/>
+    <function name="enum MixAACProfile" link="MixAudio-MixAudioConfigParamsAAC.html#MixAACProfile"/>
+    <function name="enum MixAACMpegID" link="MixAudio-MixAudioConfigParamsAAC.html#MixAACMpegID"/>
+    <function name="MixAudioConfigParamsAAC" link="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC"/>
+    <function name="mix_acp_aac_new ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-new"/>
+    <function name="mix_acp_aac_ref ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-ref"/>
+    <function name="mix_acp_aac_unref()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-unref"/>
+    <function name="mix_acp_aac_set_mpeg_id ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-mpeg-id"/>
+    <function name="mix_acp_aac_get_mpeg_id ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-mpeg-id"/>
+    <function name="MIX_ACP_AAC_CRC()" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-CRC--CAPS"/>
+    <function name="mix_acp_aac_set_aot ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-aot"/>
+    <function name="mix_acp_aac_get_aot ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-aot"/>
+    <function name="MIX_ACP_AAC_SBR_FLAG()" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-SBR-FLAG--CAPS"/>
+    <function name="MIX_ACP_AAC_PS_FLAG()" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-PS-FLAG--CAPS"/>
+    <function name="MIX_ACP_AAC_PCE_FLAG()" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-PCE-FLAG--CAPS"/>
+    <function name="MIX_ACP_AAC_SAMPLE_RATE()" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-SAMPLE-RATE--CAPS"/>
+    <function name="MIX_ACP_AAC_CHANNELS()" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-CHANNELS--CAPS"/>
+    <function name="mix_acp_aac_get_bit_stream_format ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-bit-stream-format"/>
+    <function name="mix_acp_aac_set_bit_stream_format ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-bit-stream-format"/>
+    <function name="mix_acp_aac_get_aac_profile ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-aac-profile"/>
+    <function name="mix_acp_aac_set_aac_profile ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-aac-profile"/>
+    <function name="mix_acp_aac_get_bit_rate_type ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-bit-rate-type"/>
+    <function name="mix_acp_aac_set_bit_rate_type ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-bit-rate-type"/>
+    <function name="MixAudioConfigParamsMP3" link="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3"/>
+    <function name="mix_acp_mp3_new ()" link="MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-new"/>
+    <function name="mix_acp_mp3_ref ()" link="MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-ref"/>
+    <function name="mix_acp_mp3_unref()" link="MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-unref"/>
+    <function name="MIX_ACP_MP3_CRC()" link="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-CRC--CAPS"/>
+    <function name="MIX_ACP_MP3_MPEG_FORMAT()" link="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-MPEG-FORMAT--CAPS"/>
+    <function name="MIX_ACP_MP3_MPEG_LAYER()" link="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-MPEG-LAYER--CAPS"/>
+    <function name="enum MixAudioWMAVersion" link="MixAudio-MixAudioConfigParamsWMA.html#MixAudioWMAVersion"/>
+    <function name="MixAudioConfigParamsWMA" link="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA"/>
+    <function name="mix_acp_wma_new ()" link="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-new"/>
+    <function name="mix_acp_wma_ref ()" link="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-ref"/>
+    <function name="mix_acp_wma_unref()" link="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-unref"/>
+    <function name="MIX_ACP_WMA_CHANNEL_MASK()" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-CHANNEL-MASK--CAPS"/>
+    <function name="MIX_ACP_WMA_FORMAT_TAG()" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-FORMAT-TAG--CAPS"/>
+    <function name="MIX_ACP_WMA_BLOCK_ALIGN()" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-BLOCK-ALIGN--CAPS"/>
+    <function name="MIX_ACP_WMA_ENCODE_OPT()" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-ENCODE-OPT--CAPS"/>
+    <function name="MIX_ACP_WMA_PCM_BIT_WIDTH()" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-PCM-BIT-WIDTH--CAPS"/>
+    <function name="mix_acp_wma_get_version ()" link="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-get-version"/>
+    <function name="mix_acp_wma_set_version ()" link="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-set-version"/>
+    <function name="enum MixACPOpAlign" link="MixAudio-MixAudioConfigParams.html#MixACPOpAlign"/>
+    <function name="enum MixACPBPSType" link="MixAudio-MixAudioConfigParams.html#MixACPBPSType"/>
+    <function name="enum MixDecodeMode" link="MixAudio-MixAudioConfigParams.html#MixDecodeMode"/>
+    <function name="MixAudioConfigParams" link="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams"/>
+    <function name="mix_acp_new ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-new"/>
+    <function name="mix_acp_ref ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-ref"/>
+    <function name="mix_acp_unref()" link="MixAudio-MixAudioConfigParams.html#mix-acp-unref"/>
+    <function name="MIX_ACP_DECODEMODE()" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-DECODEMODE--CAPS"/>
+    <function name="MIX_ACP_NUM_CHANNELS()" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-NUM-CHANNELS--CAPS"/>
+    <function name="MIX_ACP_BITRATE()" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-BITRATE--CAPS"/>
+    <function name="MIX_ACP_SAMPLE_FREQ()" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-SAMPLE-FREQ--CAPS"/>
+    <function name="mix_acp_get_decodemode ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-get-decodemode"/>
+    <function name="mix_acp_set_decodemode ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-set-decodemode"/>
+    <function name="mix_acp_get_streamname ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-get-streamname"/>
+    <function name="mix_acp_set_streamname ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-set-streamname"/>
+    <function name="mix_acp_set_audio_manager ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-set-audio-manager"/>
+    <function name="mix_acp_get_audio_manager ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-get-audio-manager"/>
+    <function name="mix_acp_is_streamname_valid ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-is-streamname-valid"/>
+    <function name="mix_acp_get_bps ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-get-bps"/>
+    <function name="mix_acp_set_bps ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-set-bps"/>
+    <function name="mix_acp_get_op_align ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-get-op-align"/>
+    <function name="mix_acp_set_op_align ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-set-op-align"/>
+    <function name="MixAudioInitParams" link="MixAudio-MixAudioInitParams.html#MixAudioInitParams"/>
+    <function name="mix_aip_new ()" link="MixAudio-MixAudioInitParams.html#mix-aip-new"/>
+    <function name="mix_aip_ref ()" link="MixAudio-MixAudioInitParams.html#mix-aip-ref"/>
+    <function name="mix_aip_unref()" link="MixAudio-MixAudioInitParams.html#mix-aip-unref"/>
+    <function name="enum MixStreamState" link="MixAudio.html#MixStreamState"/>
+    <function name="enum MixState" link="MixAudio.html#MixState"/>
+    <function name="enum MixCodecMode" link="MixAudio.html#MixCodecMode"/>
+    <function name="enum MixVolType" link="MixAudio.html#MixVolType"/>
+    <function name="enum MixVolRamp" link="MixAudio.html#MixVolRamp"/>
+    <function name="MixIOVec" link="MixAudio.html#MixIOVec"/>
+    <function name="enum MixDeviceState" link="MixAudio.html#MixDeviceState"/>
+    <function name="MixAudio" link="MixAudio.html#MixAudio-struct"/>
+    <function name="mix_audio_new ()" link="MixAudio.html#mix-audio-new"/>
+    <function name="mix_audio_ref ()" link="MixAudio.html#mix-audio-ref"/>
+    <function name="mix_audio_unref()" link="MixAudio.html#mix-audio-unref"/>
+    <function name="mix_audio_get_version ()" link="MixAudio.html#mix-audio-get-version"/>
+    <function name="mix_audio_initialize ()" link="MixAudio.html#mix-audio-initialize"/>
+    <function name="mix_audio_configure ()" link="MixAudio.html#mix-audio-configure"/>
+    <function name="mix_audio_decode ()" link="MixAudio.html#mix-audio-decode"/>
+    <function name="mix_audio_capture_encode ()" link="MixAudio.html#mix-audio-capture-encode"/>
+    <function name="mix_audio_start ()" link="MixAudio.html#mix-audio-start"/>
+    <function name="mix_audio_stop_drop ()" link="MixAudio.html#mix-audio-stop-drop"/>
+    <function name="mix_audio_stop_drain ()" link="MixAudio.html#mix-audio-stop-drain"/>
+    <function name="mix_audio_pause ()" link="MixAudio.html#mix-audio-pause"/>
+    <function name="mix_audio_resume ()" link="MixAudio.html#mix-audio-resume"/>
+    <function name="mix_audio_get_timestamp ()" link="MixAudio.html#mix-audio-get-timestamp"/>
+    <function name="mix_audio_set_mute ()" link="MixAudio.html#mix-audio-set-mute"/>
+    <function name="mix_audio_get_mute ()" link="MixAudio.html#mix-audio-get-mute"/>
+    <function name="mix_audio_get_max_vol ()" link="MixAudio.html#mix-audio-get-max-vol"/>
+    <function name="mix_audio_get_min_vol ()" link="MixAudio.html#mix-audio-get-min-vol"/>
+    <function name="mix_audio_get_volume ()" link="MixAudio.html#mix-audio-get-volume"/>
+    <function name="mix_audio_set_volume ()" link="MixAudio.html#mix-audio-set-volume"/>
+    <function name="mix_audio_deinitialize ()" link="MixAudio.html#mix-audio-deinitialize"/>
+    <function name="mix_audio_get_stream_state ()" link="MixAudio.html#mix-audio-get-stream-state"/>
+    <function name="mix_audio_get_state ()" link="MixAudio.html#mix-audio-get-state"/>
+    <function name="mix_audio_am_is_enabled ()" link="MixAudio.html#mix-audio-am-is-enabled"/>
+    <function name="mix_audio_is_am_available ()" link="MixAudio.html#mix-audio-is-am-available"/>
+    <function name="mix_audio_get_output_configuration ()" link="MixAudio.html#mix-audio-get-output-configuration"/>
+    <function name="mix_audio_get_stream_byte_decoded ()" link="MixAudio.html#mix-audio-get-stream-byte-decoded"/>
+    <function name="enum MixAudioManager" link="MixAudio-mixaudiotypes.html#MixAudioManager"/>
+  </functions>
+</book>
diff --git a/mix_audio/docs/reference/MixAudio/html/MixAudio.devhelp2 b/mix_audio/docs/reference/MixAudio/html/MixAudio.devhelp2
new file mode 100644
index 0000000..f9e0358
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/MixAudio.devhelp2
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="MixAudio Reference Manual" link="index.html" author="" name="MixAudio" version="2" language="c">
+  <chapters>
+    <sub name="Mix Audio API" link="ch01.html">
+      <sub name="MixAudioConfigParamsAAC" link="MixAudio-MixAudioConfigParamsAAC.html"/>
+      <sub name="MixAudioConfigParamsMP3" link="MixAudio-MixAudioConfigParamsMP3.html"/>
+      <sub name="MixAudioConfigParamsWMA" link="MixAudio-MixAudioConfigParamsWMA.html"/>
+      <sub name="MixAudioConfigParams" link="MixAudio-MixAudioConfigParams.html"/>
+      <sub name="MixAudioInitParams" link="MixAudio-MixAudioInitParams.html"/>
+      <sub name="MixAudio" link="MixAudio.html"/>
+      <sub name="Mix Audio Types" link="MixAudio-mixaudiotypes.html"/>
+    </sub>
+    <sub name="Object Hierarchy" link="tree-hierarchy.html"/>
+    <sub name="API Index" link="api-index-full.html"/>
+  </chapters>
+  <functions>
+    <keyword type="enum" name="enum MixAACBitrateType" link="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitrateType"/>
+    <keyword type="enum" name="enum MixAACBitstreamFormt" link="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitstreamFormt"/>
+    <keyword type="enum" name="enum MixAACProfile" link="MixAudio-MixAudioConfigParamsAAC.html#MixAACProfile"/>
+    <keyword type="enum" name="enum MixAACMpegID" link="MixAudio-MixAudioConfigParamsAAC.html#MixAACMpegID"/>
+    <keyword type="struct" name="MixAudioConfigParamsAAC" link="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC"/>
+    <keyword type="function" name="mix_acp_aac_new ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-new"/>
+    <keyword type="function" name="mix_acp_aac_ref ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-ref"/>
+    <keyword type="macro" name="mix_acp_aac_unref()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-unref"/>
+    <keyword type="function" name="mix_acp_aac_set_mpeg_id ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-mpeg-id"/>
+    <keyword type="function" name="mix_acp_aac_get_mpeg_id ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-mpeg-id"/>
+    <keyword type="macro" name="MIX_ACP_AAC_CRC()" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-CRC--CAPS"/>
+    <keyword type="function" name="mix_acp_aac_set_aot ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-aot"/>
+    <keyword type="function" name="mix_acp_aac_get_aot ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-aot"/>
+    <keyword type="macro" name="MIX_ACP_AAC_SBR_FLAG()" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-SBR-FLAG--CAPS"/>
+    <keyword type="macro" name="MIX_ACP_AAC_PS_FLAG()" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-PS-FLAG--CAPS"/>
+    <keyword type="macro" name="MIX_ACP_AAC_PCE_FLAG()" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-PCE-FLAG--CAPS"/>
+    <keyword type="macro" name="MIX_ACP_AAC_SAMPLE_RATE()" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-SAMPLE-RATE--CAPS"/>
+    <keyword type="macro" name="MIX_ACP_AAC_CHANNELS()" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-CHANNELS--CAPS"/>
+    <keyword type="function" name="mix_acp_aac_get_bit_stream_format ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-bit-stream-format"/>
+    <keyword type="function" name="mix_acp_aac_set_bit_stream_format ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-bit-stream-format"/>
+    <keyword type="function" name="mix_acp_aac_get_aac_profile ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-aac-profile"/>
+    <keyword type="function" name="mix_acp_aac_set_aac_profile ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-aac-profile"/>
+    <keyword type="function" name="mix_acp_aac_get_bit_rate_type ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-bit-rate-type"/>
+    <keyword type="function" name="mix_acp_aac_set_bit_rate_type ()" link="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-bit-rate-type"/>
+    <keyword type="struct" name="MixAudioConfigParamsMP3" link="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3"/>
+    <keyword type="function" name="mix_acp_mp3_new ()" link="MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-new"/>
+    <keyword type="function" name="mix_acp_mp3_ref ()" link="MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-ref"/>
+    <keyword type="macro" name="mix_acp_mp3_unref()" link="MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-unref"/>
+    <keyword type="macro" name="MIX_ACP_MP3_CRC()" link="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-CRC--CAPS"/>
+    <keyword type="macro" name="MIX_ACP_MP3_MPEG_FORMAT()" link="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-MPEG-FORMAT--CAPS"/>
+    <keyword type="macro" name="MIX_ACP_MP3_MPEG_LAYER()" link="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-MPEG-LAYER--CAPS"/>
+    <keyword type="enum" name="enum MixAudioWMAVersion" link="MixAudio-MixAudioConfigParamsWMA.html#MixAudioWMAVersion"/>
+    <keyword type="struct" name="MixAudioConfigParamsWMA" link="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA"/>
+    <keyword type="function" name="mix_acp_wma_new ()" link="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-new"/>
+    <keyword type="function" name="mix_acp_wma_ref ()" link="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-ref"/>
+    <keyword type="macro" name="mix_acp_wma_unref()" link="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-unref"/>
+    <keyword type="macro" name="MIX_ACP_WMA_CHANNEL_MASK()" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-CHANNEL-MASK--CAPS"/>
+    <keyword type="macro" name="MIX_ACP_WMA_FORMAT_TAG()" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-FORMAT-TAG--CAPS"/>
+    <keyword type="macro" name="MIX_ACP_WMA_BLOCK_ALIGN()" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-BLOCK-ALIGN--CAPS"/>
+    <keyword type="macro" name="MIX_ACP_WMA_ENCODE_OPT()" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-ENCODE-OPT--CAPS"/>
+    <keyword type="macro" name="MIX_ACP_WMA_PCM_BIT_WIDTH()" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-PCM-BIT-WIDTH--CAPS"/>
+    <keyword type="function" name="mix_acp_wma_get_version ()" link="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-get-version"/>
+    <keyword type="function" name="mix_acp_wma_set_version ()" link="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-set-version"/>
+    <keyword type="enum" name="enum MixACPOpAlign" link="MixAudio-MixAudioConfigParams.html#MixACPOpAlign"/>
+    <keyword type="enum" name="enum MixACPBPSType" link="MixAudio-MixAudioConfigParams.html#MixACPBPSType"/>
+    <keyword type="enum" name="enum MixDecodeMode" link="MixAudio-MixAudioConfigParams.html#MixDecodeMode"/>
+    <keyword type="struct" name="MixAudioConfigParams" link="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams"/>
+    <keyword type="function" name="mix_acp_new ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-new"/>
+    <keyword type="function" name="mix_acp_ref ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-ref"/>
+    <keyword type="macro" name="mix_acp_unref()" link="MixAudio-MixAudioConfigParams.html#mix-acp-unref"/>
+    <keyword type="macro" name="MIX_ACP_DECODEMODE()" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-DECODEMODE--CAPS"/>
+    <keyword type="macro" name="MIX_ACP_NUM_CHANNELS()" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-NUM-CHANNELS--CAPS"/>
+    <keyword type="macro" name="MIX_ACP_BITRATE()" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-BITRATE--CAPS"/>
+    <keyword type="macro" name="MIX_ACP_SAMPLE_FREQ()" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-SAMPLE-FREQ--CAPS"/>
+    <keyword type="function" name="mix_acp_get_decodemode ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-get-decodemode"/>
+    <keyword type="function" name="mix_acp_set_decodemode ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-set-decodemode"/>
+    <keyword type="function" name="mix_acp_get_streamname ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-get-streamname"/>
+    <keyword type="function" name="mix_acp_set_streamname ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-set-streamname"/>
+    <keyword type="function" name="mix_acp_set_audio_manager ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-set-audio-manager"/>
+    <keyword type="function" name="mix_acp_get_audio_manager ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-get-audio-manager"/>
+    <keyword type="function" name="mix_acp_is_streamname_valid ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-is-streamname-valid"/>
+    <keyword type="function" name="mix_acp_get_bps ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-get-bps"/>
+    <keyword type="function" name="mix_acp_set_bps ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-set-bps"/>
+    <keyword type="function" name="mix_acp_get_op_align ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-get-op-align"/>
+    <keyword type="function" name="mix_acp_set_op_align ()" link="MixAudio-MixAudioConfigParams.html#mix-acp-set-op-align"/>
+    <keyword type="struct" name="MixAudioInitParams" link="MixAudio-MixAudioInitParams.html#MixAudioInitParams"/>
+    <keyword type="function" name="mix_aip_new ()" link="MixAudio-MixAudioInitParams.html#mix-aip-new"/>
+    <keyword type="function" name="mix_aip_ref ()" link="MixAudio-MixAudioInitParams.html#mix-aip-ref"/>
+    <keyword type="macro" name="mix_aip_unref()" link="MixAudio-MixAudioInitParams.html#mix-aip-unref"/>
+    <keyword type="enum" name="enum MixStreamState" link="MixAudio.html#MixStreamState"/>
+    <keyword type="enum" name="enum MixState" link="MixAudio.html#MixState"/>
+    <keyword type="enum" name="enum MixCodecMode" link="MixAudio.html#MixCodecMode"/>
+    <keyword type="enum" name="enum MixVolType" link="MixAudio.html#MixVolType"/>
+    <keyword type="enum" name="enum MixVolRamp" link="MixAudio.html#MixVolRamp"/>
+    <keyword type="struct" name="MixIOVec" link="MixAudio.html#MixIOVec"/>
+    <keyword type="enum" name="enum MixDeviceState" link="MixAudio.html#MixDeviceState"/>
+    <keyword type="struct" name="MixAudio" link="MixAudio.html#MixAudio-struct"/>
+    <keyword type="function" name="mix_audio_new ()" link="MixAudio.html#mix-audio-new"/>
+    <keyword type="function" name="mix_audio_ref ()" link="MixAudio.html#mix-audio-ref"/>
+    <keyword type="macro" name="mix_audio_unref()" link="MixAudio.html#mix-audio-unref"/>
+    <keyword type="function" name="mix_audio_get_version ()" link="MixAudio.html#mix-audio-get-version"/>
+    <keyword type="function" name="mix_audio_initialize ()" link="MixAudio.html#mix-audio-initialize"/>
+    <keyword type="function" name="mix_audio_configure ()" link="MixAudio.html#mix-audio-configure"/>
+    <keyword type="function" name="mix_audio_decode ()" link="MixAudio.html#mix-audio-decode"/>
+    <keyword type="function" name="mix_audio_capture_encode ()" link="MixAudio.html#mix-audio-capture-encode"/>
+    <keyword type="function" name="mix_audio_start ()" link="MixAudio.html#mix-audio-start"/>
+    <keyword type="function" name="mix_audio_stop_drop ()" link="MixAudio.html#mix-audio-stop-drop"/>
+    <keyword type="function" name="mix_audio_stop_drain ()" link="MixAudio.html#mix-audio-stop-drain"/>
+    <keyword type="function" name="mix_audio_pause ()" link="MixAudio.html#mix-audio-pause"/>
+    <keyword type="function" name="mix_audio_resume ()" link="MixAudio.html#mix-audio-resume"/>
+    <keyword type="function" name="mix_audio_get_timestamp ()" link="MixAudio.html#mix-audio-get-timestamp"/>
+    <keyword type="function" name="mix_audio_set_mute ()" link="MixAudio.html#mix-audio-set-mute"/>
+    <keyword type="function" name="mix_audio_get_mute ()" link="MixAudio.html#mix-audio-get-mute"/>
+    <keyword type="function" name="mix_audio_get_max_vol ()" link="MixAudio.html#mix-audio-get-max-vol"/>
+    <keyword type="function" name="mix_audio_get_min_vol ()" link="MixAudio.html#mix-audio-get-min-vol"/>
+    <keyword type="function" name="mix_audio_get_volume ()" link="MixAudio.html#mix-audio-get-volume"/>
+    <keyword type="function" name="mix_audio_set_volume ()" link="MixAudio.html#mix-audio-set-volume"/>
+    <keyword type="function" name="mix_audio_deinitialize ()" link="MixAudio.html#mix-audio-deinitialize"/>
+    <keyword type="function" name="mix_audio_get_stream_state ()" link="MixAudio.html#mix-audio-get-stream-state"/>
+    <keyword type="function" name="mix_audio_get_state ()" link="MixAudio.html#mix-audio-get-state"/>
+    <keyword type="function" name="mix_audio_am_is_enabled ()" link="MixAudio.html#mix-audio-am-is-enabled"/>
+    <keyword type="function" name="mix_audio_is_am_available ()" link="MixAudio.html#mix-audio-is-am-available"/>
+    <keyword type="function" name="mix_audio_get_output_configuration ()" link="MixAudio.html#mix-audio-get-output-configuration"/>
+    <keyword type="function" name="mix_audio_get_stream_byte_decoded ()" link="MixAudio.html#mix-audio-get-stream-byte-decoded"/>
+    <keyword type="enum" name="enum MixAudioManager" link="MixAudio-mixaudiotypes.html#MixAudioManager"/>
+    <keyword type="constant" name="MIX_AAC_BR_NULL" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-BR-NULL--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_BR_CONSTANT" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-BR-CONSTANT--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_BR_VARIABLE" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-BR-VARIABLE--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_BR_LAST" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-BR-LAST--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_BS_NULL" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-BS-NULL--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_BS_ADTS" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-BS-ADTS--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_BS_ADIF" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-BS-ADIF--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_BS_RAW" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-BS-RAW--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_BS_LAST" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-BS-LAST--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_PROFILE_NULL" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-PROFILE-NULL--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_PROFILE_MAIN" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-PROFILE-MAIN--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_PROFILE_LC" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-PROFILE-LC--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_PROFILE_SSR" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-PROFILE-SSR--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_PROFILE_LAST" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-PROFILE-LAST--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_MPEG_ID_NULL" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-MPEG-ID-NULL--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_MPEG_2_ID" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-MPEG-2-ID--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_MPEG_4_ID" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-MPEG-4-ID--CAPS"/>
+    <keyword type="constant" name="MIX_AAC_MPEG_LAST" link="MixAudio-MixAudioConfigParamsAAC.html#MIX-AAC-MPEG-LAST--CAPS"/>
+    <keyword type="constant" name="MIX_AUDIO_WMA_VUNKNOWN" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-AUDIO-WMA-VUNKNOWN--CAPS"/>
+    <keyword type="constant" name="MIX_AUDIO_WMA_V9" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-AUDIO-WMA-V9--CAPS"/>
+    <keyword type="constant" name="MIX_AUDIO_WMA_V10" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-AUDIO-WMA-V10--CAPS"/>
+    <keyword type="constant" name="MIX_AUDIO_WMA_V10P" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-AUDIO-WMA-V10P--CAPS"/>
+    <keyword type="constant" name="MIX_AUDIO_WMA_LAST" link="MixAudio-MixAudioConfigParamsWMA.html#MIX-AUDIO-WMA-LAST--CAPS"/>
+    <keyword type="constant" name="MIX_ACP_OUTPUT_ALIGN_UNKNOWN" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-OUTPUT-ALIGN-UNKNOWN--CAPS"/>
+    <keyword type="constant" name="MIX_ACP_OUTPUT_ALIGN_16" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-OUTPUT-ALIGN-16--CAPS"/>
+    <keyword type="constant" name="MIX_ACP_OUTPUT_ALIGN_MSB" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-OUTPUT-ALIGN-MSB--CAPS"/>
+    <keyword type="constant" name="MIX_ACP_OUTPUT_ALIGN_LSB" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-OUTPUT-ALIGN-LSB--CAPS"/>
+    <keyword type="constant" name="MIX_ACP_OUTPUT_ALIGN_LAST" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-OUTPUT-ALIGN-LAST--CAPS"/>
+    <keyword type="constant" name="MIX_ACP_BPS_UNKNOWN" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-BPS-UNKNOWN--CAPS"/>
+    <keyword type="constant" name="MIX_ACP_BPS_16" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-BPS-16--CAPS"/>
+    <keyword type="constant" name="MIX_ACP_BPS_24" link="MixAudio-MixAudioConfigParams.html#MIX-ACP-BPS-24--CAPS"/>
+    <keyword type="constant" name="MIX_DECODE_NULL" link="MixAudio-MixAudioConfigParams.html#MIX-DECODE-NULL--CAPS"/>
+    <keyword type="constant" name="MIX_DECODE_DIRECTRENDER" link="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"/>
+    <keyword type="constant" name="MIX_DECODE_DECODERETURN" link="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DECODERETURN--CAPS"/>
+    <keyword type="constant" name="MIX_DECODE_LAST" link="MixAudio-MixAudioConfigParams.html#MIX-DECODE-LAST--CAPS"/>
+    <keyword type="constant" name="MIX_STREAM_NULL" link="MixAudio.html#MIX-STREAM-NULL--CAPS"/>
+    <keyword type="constant" name="MIX_STREAM_STOPPED" link="MixAudio.html#MIX-STREAM-STOPPED--CAPS"/>
+    <keyword type="constant" name="MIX_STREAM_PLAYING" link="MixAudio.html#MIX-STREAM-PLAYING--CAPS"/>
+    <keyword type="constant" name="MIX_STREAM_PAUSED" link="MixAudio.html#MIX-STREAM-PAUSED--CAPS"/>
+    <keyword type="constant" name="MIX_STREAM_DRAINING" link="MixAudio.html#MIX-STREAM-DRAINING--CAPS"/>
+    <keyword type="constant" name="MIX_STREAM_LAST" link="MixAudio.html#MIX-STREAM-LAST--CAPS"/>
+    <keyword type="constant" name="MIX_STATE_NULL" link="MixAudio.html#MIX-STATE-NULL--CAPS"/>
+    <keyword type="constant" name="MIX_STATE_UNINITIALIZED" link="MixAudio.html#MIX-STATE-UNINITIALIZED--CAPS"/>
+    <keyword type="constant" name="MIX_STATE_INITIALIZED" link="MixAudio.html#MIX-STATE-INITIALIZED--CAPS"/>
+    <keyword type="constant" name="MIX_STATE_CONFIGURED" link="MixAudio.html#MIX-STATE-CONFIGURED--CAPS"/>
+    <keyword type="constant" name="MIX_STATE_LAST" link="MixAudio.html#MIX-STATE-LAST--CAPS"/>
+    <keyword type="constant" name="MIX_CODING_INVALID" link="MixAudio.html#MIX-CODING-INVALID--CAPS"/>
+    <keyword type="constant" name="MIX_CODING_ENCODE" link="MixAudio.html#MIX-CODING-ENCODE--CAPS"/>
+    <keyword type="constant" name="MIX_CODING_DECODE" link="MixAudio.html#MIX-CODING-DECODE--CAPS"/>
+    <keyword type="constant" name="MIX_CODING_LAST" link="MixAudio.html#MIX-CODING-LAST--CAPS"/>
+    <keyword type="constant" name="MIX_VOL_PERCENT" link="MixAudio.html#MIX-VOL-PERCENT--CAPS"/>
+    <keyword type="constant" name="MIX_VOL_DECIBELS" link="MixAudio.html#MIX-VOL-DECIBELS--CAPS"/>
+    <keyword type="constant" name="MIX_VOL_LAST" link="MixAudio.html#MIX-VOL-LAST--CAPS"/>
+    <keyword type="constant" name="MIX_RAMP_LINEAR" link="MixAudio.html#MIX-RAMP-LINEAR--CAPS"/>
+    <keyword type="constant" name="MIX_RAMP_EXPONENTIAL" link="MixAudio.html#MIX-RAMP-EXPONENTIAL--CAPS"/>
+    <keyword type="constant" name="MIX_RAMP_LAST" link="MixAudio.html#MIX-RAMP-LAST--CAPS"/>
+    <keyword type="constant" name="MIX_AUDIO_DEV_CLOSED" link="MixAudio.html#MIX-AUDIO-DEV-CLOSED--CAPS"/>
+    <keyword type="constant" name="MIX_AUDIO_DEV_OPENED" link="MixAudio.html#MIX-AUDIO-DEV-OPENED--CAPS"/>
+    <keyword type="constant" name="MIX_AUDIO_DEV_ALLOCATED" link="MixAudio.html#MIX-AUDIO-DEV-ALLOCATED--CAPS"/>
+    <keyword type="constant" name="MIX_AUDIOMANAGER_NONE" link="MixAudio-mixaudiotypes.html#MIX-AUDIOMANAGER-NONE--CAPS"/>
+    <keyword type="constant" name="MIX_AUDIOMANAGER_INTELAUDIOMANAGER" link="MixAudio-mixaudiotypes.html#MIX-AUDIOMANAGER-INTELAUDIOMANAGER--CAPS"/>
+    <keyword type="constant" name="MIX_AUDIOMANAGER_LAST" link="MixAudio-mixaudiotypes.html#MIX-AUDIOMANAGER-LAST--CAPS"/>
+  </functions>
+</book>
diff --git a/mix_audio/docs/reference/MixAudio/html/MixAudio.html b/mix_audio/docs/reference/MixAudio/html/MixAudio.html
new file mode 100644
index 0000000..2f53577
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/MixAudio.html
@@ -0,0 +1,1286 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>MixAudio</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="MixAudio Reference Manual">
+<link rel="up" href="ch01.html" title="Mix Audio API">
+<link rel="prev" href="MixAudio-MixAudioInitParams.html" title="MixAudioInitParams">
+<link rel="next" href="MixAudio-mixaudiotypes.html" title="Mix Audio Types">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Mix Audio API">
+<link rel="chapter" href="tree-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="api-index-full.html" title="API Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="MixAudio-MixAudioInitParams.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">MixAudio Reference Manual</th>
+<td><a accesskey="n" href="MixAudio-mixaudiotypes.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#MixAudio.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#MixAudio.description" class="shortcut">Description</a>
+                 | 
+                <a href="#MixAudio.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="MixAudio"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="MixAudio.top_of_page"></a>MixAudio</span></h2>
+<p>MixAudio — Object to support a single stream playback using hardware accelerated decoder.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="MixAudio.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;mixaudio.h&gt;
+
+enum                <a class="link" href="MixAudio.html#MixStreamState" title="enum MixStreamState">MixStreamState</a>;
+enum                <a class="link" href="MixAudio.html#MixState" title="enum MixState">MixState</a>;
+enum                <a class="link" href="MixAudio.html#MixCodecMode" title="enum MixCodecMode">MixCodecMode</a>;
+enum                <a class="link" href="MixAudio.html#MixVolType" title="enum MixVolType">MixVolType</a>;
+enum                <a class="link" href="MixAudio.html#MixVolRamp" title="enum MixVolRamp">MixVolRamp</a>;
+                    <a class="link" href="MixAudio.html#MixIOVec" title="MixIOVec">MixIOVec</a>;
+enum                <a class="link" href="MixAudio.html#MixDeviceState" title="enum MixDeviceState">MixDeviceState</a>;
+                    <a class="link" href="MixAudio.html#MixAudio-struct" title="MixAudio">MixAudio</a>;
+<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *          <a class="link" href="MixAudio.html#mix-audio-new" title="mix_audio_new ()">mix_audio_new</a>                       (void);
+<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *          <a class="link" href="MixAudio.html#mix-audio-ref" title="mix_audio_ref ()">mix_audio_ref</a>                       (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);
+#define             <a class="link" href="MixAudio.html#mix-audio-unref" title="mix_audio_unref()">mix_audio_unref</a>                     (obj)
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-get-version" title="mix_audio_get_version ()">mix_audio_get_version</a>               (guint *major,
+                                                         guint *minor);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-initialize" title="mix_audio_initialize ()">mix_audio_initialize</a>                (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio.html#MixCodecMode" title="enum MixCodecMode">MixCodecMode</a> mode,
+                                                         <a class="link" href="MixAudio-MixAudioInitParams.html#MixAudioInitParams" title="MixAudioInitParams">MixAudioInitParams</a> *aip,
+                                                         MixDrmParams *drminitparams);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-configure" title="mix_audio_configure ()">mix_audio_configure</a>                 (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *audioconfigparams,
+                                                         MixDrmParams *drmparams);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-decode" title="mix_audio_decode ()">mix_audio_decode</a>                    (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         const <a class="link" href="MixAudio.html#MixIOVec" title="MixIOVec">MixIOVec</a> *iovin,
+                                                         gint iovincnt,
+                                                         guint64 *insize,
+                                                         <a class="link" href="MixAudio.html#MixIOVec" title="MixIOVec">MixIOVec</a> *iovout,
+                                                         gint iovoutcnt,
+                                                         guint64 *outsize);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-capture-encode" title="mix_audio_capture_encode ()">mix_audio_capture_encode</a>            (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio.html#MixIOVec" title="MixIOVec">MixIOVec</a> *iovout,
+                                                         gint iovoutcnt);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-start" title="mix_audio_start ()">mix_audio_start</a>                     (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-stop-drop" title="mix_audio_stop_drop ()">mix_audio_stop_drop</a>                 (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-stop-drain" title="mix_audio_stop_drain ()">mix_audio_stop_drain</a>                (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-pause" title="mix_audio_pause ()">mix_audio_pause</a>                     (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-resume" title="mix_audio_resume ()">mix_audio_resume</a>                    (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-get-timestamp" title="mix_audio_get_timestamp ()">mix_audio_get_timestamp</a>             (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         guint64 *msecs);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-set-mute" title="mix_audio_set_mute ()">mix_audio_set_mute</a>                  (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         gboolean mute);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-get-mute" title="mix_audio_get_mute ()">mix_audio_get_mute</a>                  (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         gboolean *muted);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-get-max-vol" title="mix_audio_get_max_vol ()">mix_audio_get_max_vol</a>               (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         gint *maxvol);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-get-min-vol" title="mix_audio_get_min_vol ()">mix_audio_get_min_vol</a>               (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         gint *minvol);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-get-volume" title="mix_audio_get_volume ()">mix_audio_get_volume</a>                (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         gint *currvol,
+                                                         <a class="link" href="MixAudio.html#MixVolType" title="enum MixVolType">MixVolType</a> type);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-set-volume" title="mix_audio_set_volume ()">mix_audio_set_volume</a>                (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         gint currvol,
+                                                         <a class="link" href="MixAudio.html#MixVolType" title="enum MixVolType">MixVolType</a> type,
+                                                         gulong msecs,
+                                                         <a class="link" href="MixAudio.html#MixVolRamp" title="enum MixVolRamp">MixVolRamp</a> ramptype);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-deinitialize" title="mix_audio_deinitialize ()">mix_audio_deinitialize</a>              (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-get-stream-state" title="mix_audio_get_stream_state ()">mix_audio_get_stream_state</a>          (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio.html#MixStreamState" title="enum MixStreamState">MixStreamState</a> *streamState);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-get-state" title="mix_audio_get_state ()">mix_audio_get_state</a>                 (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio.html#MixState" title="enum MixState">MixState</a> *state);
+gboolean            <a class="link" href="MixAudio.html#mix-audio-am-is-enabled" title="mix_audio_am_is_enabled ()">mix_audio_am_is_enabled</a>             (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-is-am-available" title="mix_audio_is_am_available ()">mix_audio_is_am_available</a>           (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio-mixaudiotypes.html#MixAudioManager" title="enum MixAudioManager">MixAudioManager</a> am,
+                                                         gboolean *avail);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-get-output-configuration" title="mix_audio_get_output_configuration ()">mix_audio_get_output_configuration</a>  (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> **audioconfigparams);
+MIX_RESULT          <a class="link" href="MixAudio.html#mix-audio-get-stream-byte-decoded" title="mix_audio_get_stream_byte_decoded ()">mix_audio_get_stream_byte_decoded</a>   (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         guint64 *byte);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  GObject
+   +----MixAudio
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object provide thread-safe API for application and/or multimedia framework to take advantage of Intel Smart Sound Technology(TM) driver for hardware audio decode and render.
+</p>
+<p>
+Each <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object represents one streaming session with the Intel Smart Sound driver and provides configuration and control of the decoding and playback options.
+</p>
+<p>
+The <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object also support integration with Intel Audio Manager service.
+</p>
+<p>
+An application can utilize the <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object by calling the following sequence:
+</p>
+<div class="orderedlist"><ol type="1">
+<li>
+<a class="link" href="MixAudio.html#mix-audio-new" title="mix_audio_new ()"><code class="function">mix_audio_new()</code></a> to create a <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> instance.</li>
+<li>
+<a class="link" href="MixAudio.html#mix-audio-initialize" title="mix_audio_initialize ()"><code class="function">mix_audio_initialize()</code></a> to allocate Intel Smart Sound Technology resource.</li>
+<li>
+<a class="link" href="MixAudio.html#mix-audio-configure" title="mix_audio_configure ()"><code class="function">mix_audio_configure()</code></a> to configure stream parameters.</li>
+<li>
+<a class="link" href="MixAudio.html#mix-audio-decode" title="mix_audio_decode ()"><code class="function">mix_audio_decode()</code></a> can be called repeatedly for decoding and, optionally, rendering.</li>
+<li>
+<a class="link" href="MixAudio.html#mix-audio-start" title="mix_audio_start ()"><code class="function">mix_audio_start()</code></a> is called after the 1st <a class="link" href="MixAudio.html#mix-audio-decode" title="mix_audio_decode ()"><code class="function">mix_audio_decode()</code></a> method to start rendering.</li>
+<li>
+<a class="link" href="MixAudio.html#mix-audio-stop-drain" title="mix_audio_stop_drain ()"><code class="function">mix_audio_stop_drain()</code></a> is called after the last buffer is passed for decoding in with <a class="link" href="MixAudio.html#mix-audio-decode" title="mix_audio_decode ()"><code class="function">mix_audio_decode()</code></a>. </li>
+<li>
+<a class="link" href="MixAudio.html#mix-audio-deinitialize" title="mix_audio_deinitialize ()"><code class="function">mix_audio_deinitialize()</code></a> to free resource once playback is completed.</li>
+</ol></div>
+<p>
+</p>
+<p>
+Since <a class="link" href="MixAudio.html#mix-audio-decode" title="mix_audio_decode ()"><code class="function">mix_audio_decode()</code></a> is a blocking call during playback, the following methods are called in a seperate thread to control progress:
+</p>
+<div class="itemizedlist"><ul type="disc">
+<li><a class="link" href="MixAudio.html#mix-audio-start" title="mix_audio_start ()"><code class="function">mix_audio_start()</code></a></li>
+<li><a class="link" href="MixAudio.html#mix-audio-pause" title="mix_audio_pause ()"><code class="function">mix_audio_pause()</code></a></li>
+<li><a class="link" href="MixAudio.html#mix-audio-resume" title="mix_audio_resume ()"><code class="function">mix_audio_resume()</code></a></li>
+<li><a class="link" href="MixAudio.html#mix-audio-stop-drop" title="mix_audio_stop_drop ()"><code class="function">mix_audio_stop_drop()</code></a></li>
+</ul></div>
+</div>
+<div class="refsect1" lang="en">
+<a name="MixAudio.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="MixStreamState"></a><h3>enum MixStreamState</h3>
+<pre class="programlisting">typedef enum {
+  MIX_STREAM_NULL=0,
+  MIX_STREAM_STOPPED,
+  MIX_STREAM_PLAYING,
+  MIX_STREAM_PAUSED,
+  MIX_STREAM_DRAINING,
+  MIX_STREAM_LAST
+} MixStreamState;
+</pre>
+<p>
+Stream State during Decode and Render or Encode mode. These states do not apply to Decode and Return mode.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-STREAM-NULL--CAPS"></a><span class="term"><code class="literal">MIX_STREAM_NULL</code></span></p></td>
+<td> Stream is not allocated.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-STREAM-STOPPED--CAPS"></a><span class="term"><code class="literal">MIX_STREAM_STOPPED</code></span></p></td>
+<td> Stream is at STOP state. This is the only state DNR is allowed.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-STREAM-PLAYING--CAPS"></a><span class="term"><code class="literal">MIX_STREAM_PLAYING</code></span></p></td>
+<td> Stream is at Playing state.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-STREAM-PAUSED--CAPS"></a><span class="term"><code class="literal">MIX_STREAM_PAUSED</code></span></p></td>
+<td> Stream is Paused.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-STREAM-DRAINING--CAPS"></a><span class="term"><code class="literal">MIX_STREAM_DRAINING</code></span></p></td>
+<td> Stream is draining -- remaining of the buffer in the device are playing. This state is special due to the limitation that no other control operations are allowed at this state. Stream will become <em class="parameter"><code>MIX_STREAM_STOPPED</code></em> automatically when this data draining has completed.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-STREAM-LAST--CAPS"></a><span class="term"><code class="literal">MIX_STREAM_LAST</code></span></p></td>
+<td> Last index in the enumeration.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixState"></a><h3>enum MixState</h3>
+<pre class="programlisting">typedef enum {
+  MIX_STATE_NULL=0,
+  MIX_STATE_UNINITIALIZED,
+  MIX_STATE_INITIALIZED,
+  MIX_STATE_CONFIGURED,
+  MIX_STATE_LAST
+} MixState;
+</pre>
+<p>
+The varies states the device is in.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-STATE-NULL--CAPS"></a><span class="term"><code class="literal">MIX_STATE_NULL</code></span></p></td>
+<td></td>
+</tr>
+<tr>
+<td><p><a name="MIX-STATE-UNINITIALIZED--CAPS"></a><span class="term"><code class="literal">MIX_STATE_UNINITIALIZED</code></span></p></td>
+<td> MIX is not initialized.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-STATE-INITIALIZED--CAPS"></a><span class="term"><code class="literal">MIX_STATE_INITIALIZED</code></span></p></td>
+<td> MIX is initialized.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-STATE-CONFIGURED--CAPS"></a><span class="term"><code class="literal">MIX_STATE_CONFIGURED</code></span></p></td>
+<td> MIX is configured successfully.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-STATE-LAST--CAPS"></a><span class="term"><code class="literal">MIX_STATE_LAST</code></span></p></td>
+<td> Last index in the enumeration.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixCodecMode"></a><h3>enum MixCodecMode</h3>
+<pre class="programlisting">typedef enum {
+  MIX_CODING_INVALID=0,
+  MIX_CODING_ENCODE,
+  MIX_CODING_DECODE,
+  MIX_CODING_LAST
+} MixCodecMode;
+</pre>
+<p>
+Mode where device is operating on. See <a class="link" href="MixAudio.html#mix-audio-initialize" title="mix_audio_initialize ()"><code class="function">mix_audio_initialize()</code></a>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-CODING-INVALID--CAPS"></a><span class="term"><code class="literal">MIX_CODING_INVALID</code></span></p></td>
+<td> Indicates device uninitialied for any mode.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-CODING-ENCODE--CAPS"></a><span class="term"><code class="literal">MIX_CODING_ENCODE</code></span></p></td>
+<td> Indicates device is opened for encoding.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-CODING-DECODE--CAPS"></a><span class="term"><code class="literal">MIX_CODING_DECODE</code></span></p></td>
+<td> Indicates device is opened for decoding.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-CODING-LAST--CAPS"></a><span class="term"><code class="literal">MIX_CODING_LAST</code></span></p></td>
+<td> Last index in the enumeration.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixVolType"></a><h3>enum MixVolType</h3>
+<pre class="programlisting">typedef enum {
+  MIX_VOL_PERCENT=0,
+  MIX_VOL_DECIBELS,
+  MIX_VOL_LAST
+} MixVolType;
+</pre>
+<p>
+See <code class="function">mix_audio_getvolume()</code> and <code class="function">mix_audio_setvolume()</code>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-VOL-PERCENT--CAPS"></a><span class="term"><code class="literal">MIX_VOL_PERCENT</code></span></p></td>
+<td> volume is expressed in percentage.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-VOL-DECIBELS--CAPS"></a><span class="term"><code class="literal">MIX_VOL_DECIBELS</code></span></p></td>
+<td> volume is expressed in decibel.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-VOL-LAST--CAPS"></a><span class="term"><code class="literal">MIX_VOL_LAST</code></span></p></td>
+<td> last entry.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixVolRamp"></a><h3>enum MixVolRamp</h3>
+<pre class="programlisting">typedef enum 
+{
+  MIX_RAMP_LINEAR = 0,
+  MIX_RAMP_EXPONENTIAL,
+  MIX_RAMP_LAST
+} MixVolRamp;
+</pre>
+<p>
+See <code class="function">mix_audio_getvolume()</code> and <code class="function">mix_audio_setvolume()</code>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-RAMP-LINEAR--CAPS"></a><span class="term"><code class="literal">MIX_RAMP_LINEAR</code></span></p></td>
+<td> volume is expressed in percentage.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-RAMP-EXPONENTIAL--CAPS"></a><span class="term"><code class="literal">MIX_RAMP_EXPONENTIAL</code></span></p></td>
+<td> volume is expressed in decibel.
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-RAMP-LAST--CAPS"></a><span class="term"><code class="literal">MIX_RAMP_LAST</code></span></p></td>
+<td> last entry.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixIOVec"></a><h3>MixIOVec</h3>
+<pre class="programlisting">typedef struct {
+  guchar *data;
+  gint size;
+} MixIOVec;
+</pre>
+<p>
+Scatter-gather style structure. To be used by <a class="link" href="MixAudio.html#mix-audio-decode" title="mix_audio_decode ()"><code class="function">mix_audio_decode()</code></a> method for input and output buffer.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">guchar *<em class="structfield"><code>data</code></em>;</span></p></td>
+<td> data pointer
+</td>
+</tr>
+<tr>
+<td><p><span class="term">gint <em class="structfield"><code>size</code></em>;</span></p></td>
+<td> size of buffer in <em class="parameter"><code>data</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixDeviceState"></a><h3>enum MixDeviceState</h3>
+<pre class="programlisting">typedef enum {
+  MIX_AUDIO_DEV_CLOSED=0,
+  MIX_AUDIO_DEV_OPENED,
+  MIX_AUDIO_DEV_ALLOCATED
+} MixDeviceState;
+</pre>
+<p>
+Device state.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="MIX-AUDIO-DEV-CLOSED--CAPS"></a><span class="term"><code class="literal">MIX_AUDIO_DEV_CLOSED</code></span></p></td>
+<td> TBD
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AUDIO-DEV-OPENED--CAPS"></a><span class="term"><code class="literal">MIX_AUDIO_DEV_OPENED</code></span></p></td>
+<td> TBD
+</td>
+</tr>
+<tr>
+<td><p><a name="MIX-AUDIO-DEV-ALLOCATED--CAPS"></a><span class="term"><code class="literal">MIX_AUDIO_DEV_ALLOCATED</code></span></p></td>
+<td> TBD
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="MixAudio-struct"></a><h3>MixAudio</h3>
+<pre class="programlisting">typedef struct {
+  GObject parent;
+} MixAudio;
+</pre>
+<p>
+MI-X Audio object</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term">GObject <em class="structfield"><code>parent</code></em>;</span></p></td>
+<td> Parent object.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-new"></a><h3>mix_audio_new ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *          mix_audio_new                       (void);</pre>
+<p>
+Use this method to create new instance of <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> A newly allocated instance of <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-ref"></a><h3>mix_audio_ref ()</h3>
+<pre class="programlisting"><a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *          mix_audio_ref                       (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);</pre>
+<p>
+Add reference count.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> object to add reference
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> the MixAudio instance where reference count has been increased.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-unref"></a><h3>mix_audio_unref()</h3>
+<pre class="programlisting">#define mix_audio_unref(obj) g_object_unref (G_OBJECT(obj))
+</pre>
+<p>
+Decrement reference count of the object.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td> object to unref.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-get-version"></a><h3>mix_audio_get_version ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_get_version               (guint *major,
+                                                         guint *minor);</pre>
+<p>
+Returns the version of the MI-X library.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> 
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-initialize"></a><h3>mix_audio_initialize ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_initialize                (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio.html#MixCodecMode" title="enum MixCodecMode">MixCodecMode</a> mode,
+                                                         <a class="link" href="MixAudio-MixAudioInitParams.html#MixAudioInitParams" title="MixAudioInitParams">MixAudioInitParams</a> *aip,
+                                                         MixDrmParams *drminitparams);</pre>
+<p>
+This function will initialize an encode or decode session with this <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> instance.  During this call, the device will be opened. If the device is not available, an error is returned to the caller so that an alternative (e.g. software decoding) can be configured instead. Use <a class="link" href="MixAudio.html#mix-audio-deinitialize" title="mix_audio_deinitialize ()"><code class="function">mix_audio_deinitialize()</code></a> to close the device.
+</p>
+<p>
+A previous initialized session must be de-initialized using <a class="link" href="MixAudio.html#mix-audio-deinitialize" title="mix_audio_deinitialize ()"><code class="function">mix_audio_deinitialize()</code></a> before it can be initialized again.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mode</code></em> :</span></p></td>
+<td> Requested <a class="link" href="MixAudio.html#MixCodecMode" title="enum MixCodecMode"><span class="type">MixCodecMode</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>aip</code></em> :</span></p></td>
+<td> Audio initialization parameters.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>drminitparams</code></em> :</span></p></td>
+<td> <span class="emphasis"><em>Optional.</em></span> DRM initialization param if applicable.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> on successful initilaization. <span class="type">MIX_RESULT_ALREADY_INIT</span> if session is already initialized.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-configure"></a><h3>mix_audio_configure ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_configure                 (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> *audioconfigparams,
+                                                         MixDrmParams *drmparams);</pre>
+<p>
+This function can be used to configure a stream for the current session.  The caller can use this function to do the following:
+</p>
+<p>
+</p>
+<div class="itemizedlist"><ul type="disc">
+<li>Choose decoding mode (direct-render or decode-return)</li>
+<li>Provide DRM parameters (using DRMparams object)</li>
+<li>Provide stream parameters (using STRMparams objects)</li>
+<li>Provide a stream name for the Intel Smart Sound Technology stream</li>
+</ul></div>
+<p>
+</p>
+<p>
+SST stream parameters will be set during this call, and stream resources allocated in SST.
+</p>
+<p>
+</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Intel Audio Manager support:</h3>
+<p>If Intel Audio Manager support is enabled, and if <em class="parameter"><code>mode</code></em> is specified to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a>, the SST stream will be registered with Intel Audio Manager in the context of this call, using the stream name provided in <em class="parameter"><code>streamname</code></em>. Application will receive a notification from Intel Audio Manager that the stream has been created during or soon after this call. The application should be ready to handle either possibility.  A stream ID (associated with the stream name) will be provided by Intel Audio Manager which will be used for subsequent notifications from Intel Audio Manager or calls to Intel Audio Manager for muting, pause and resume. See <code class="function">mix_audio_getstreamid()</code></p>
+<p>If a stream is already registered with Intel Audio Manager, application must pass the same <em class="parameter"><code>streamname</code></em> argument to retain the session. Otherwise, the existing stream will be unregistered and a new stream will be registered with the new <em class="parameter"><code>streamname</code></em>.
+</p>
+</div>
+<p>
+</p>
+<p>
+If <em class="parameter"><code>mode</code></em> is specified to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a> but direct-render mode is not available (due to end user use of alternative output device), an error indication will be returned to the caller so that an alternate pipeline configuration can be created (e.g. including a Pulse Audio sink, and support for output buffers).  In this case, the caller will need to call <a class="link" href="MixAudio.html#mix-audio-configure" title="mix_audio_configure ()"><code class="function">mix_audio_configure()</code></a> again to with <em class="parameter"><code>mode</code></em> specify as <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DECODERETURN--CAPS"><span class="type">MIX_DECODE_DECODERETURN</span></a> to request decode-return mode.
+</p>
+<p>
+This method can be called multiple times if reconfiguration of the stream is needed. However, this method must be called when the stream is in <a class="link" href="MixAudio.html#MIX-STREAM-STOPPED--CAPS"><span class="type">MIX_STREAM_STOPPED</span></a> state.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>audioconfigparams</code></em> :</span></p></td>
+<td> a <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams"><span class="type">MixAudioConfigParams</span></a> derived object containing information for the specific stream type.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>drmparams</code></em> :</span></p></td>
+<td> <span class="emphasis"><em>Optional.</em></span> DRM initialization param if applicable.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> Result indicates successful or not.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-decode"></a><h3>mix_audio_decode ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_decode                    (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         const <a class="link" href="MixAudio.html#MixIOVec" title="MixIOVec">MixIOVec</a> *iovin,
+                                                         gint iovincnt,
+                                                         guint64 *insize,
+                                                         <a class="link" href="MixAudio.html#MixIOVec" title="MixIOVec">MixIOVec</a> *iovout,
+                                                         gint iovoutcnt,
+                                                         guint64 *outsize);</pre>
+<p>
+This function is used to initiate HW accelerated decoding of encoded data buffers.  This function may be used in two major modes, direct-render or decode-return.  
+</p>
+<p>
+With direct-render, input buffers are provided by the caller which hold encoded audio data, and no output buffers are provided.  The encoded data is decoded, and the decoded data is sent directly to the output speaker.  This allows very low power audio rendering and is the best choice of operation for longer battery life.
+</p>
+<p>
+</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Intel Audio Manager Support</h3>
+However, if the user has connected a different target output device, such as Bluetooth headphones, this mode cannot be used as the decoded audio must be directed to the Pulse Audio stack where the output to Bluetooth device can be supported, per Intel Audio Manager guidelines.  This mode is called decode-return, and requires the caller to provide output buffers for the decoded data.
+</div>
+<p>
+</p>
+<p>
+Input buffers in both modes are one or more user space buffers using a scatter/gather style vector interface.
+</p>
+<p>
+Output buffers for the decode-return mode are one or more user space buffers in a scatter style vector interface.  Buffers will be filled in order and lengths of data filled will be returned.
+</p>
+<p>
+This call will block until data has been completely copied or queued to the driver.  All user space buffers may be used or released when this call returns.
+</p>
+<p>
+Note: If the stream is configured as <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a>, and whenever the stream in <a class="link" href="MixAudio.html#MIX-STREAM-STOPPED--CAPS"><span class="type">MIX_STREAM_STOPPED</span></a> state, the call to <a class="link" href="MixAudio.html#mix-audio-decode" title="mix_audio_decode ()"><code class="function">mix_audio_decode()</code></a> will not start the playback until <a class="link" href="MixAudio.html#mix-audio-start" title="mix_audio_start ()"><code class="function">mix_audio_start()</code></a> is called. This behavior would allow application to queue up data but delay the playback until appropriate time.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iovin</code></em> :</span></p></td>
+<td> a pointer to an array of <a class="link" href="MixAudio.html#MixIOVec" title="MixIOVec"><span class="type">MixIOVec</span></a> structure that contains the input buffers
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iovincnt</code></em> :</span></p></td>
+<td> the number of entry in the <em class="parameter"><code>iovin</code></em> array
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iovout</code></em> :</span></p></td>
+<td> a pointer to an arrya of <a class="link" href="MixAudio.html#MixIOVec" title="MixIOVec"><span class="type">MixIOVec</span></a> structure that represent the output buffer. During input, each size in the <a class="link" href="MixAudio.html#MixIOVec" title="MixIOVec"><span class="type">MixIOVec</span></a> array represents the available buffer size pointed to by data. Upon return, each size value will be updated to reflect how much data has been filled. This parameter is ignored if stream is configured to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a>. See <a class="link" href="MixAudio.html#mix-audio-configure" title="mix_audio_configure ()"><code class="function">mix_audio_configure()</code></a> for more detail.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iovoutcnt</code></em> :</span></p></td>
+<td> in/out parameter which when input, it contains the number of entry available in the <em class="parameter"><code>iovout</code></em> array. Upon return, this value will be updated to reflect how many entry in the <em class="parameter"><code>iovout</code></em> array has been populated with data. This parameter is ignored if stream is configured to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a>. See <a class="link" href="MixAudio.html#mix-audio-configure" title="mix_audio_configure ()"><code class="function">mix_audio_configure()</code></a> for more detail.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>outsize</code></em> :</span></p></td>
+<td> Total number of bytes returned for the decode session. This parameter is ignored if stream is configured to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-capture-encode"></a><h3>mix_audio_capture_encode ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_capture_encode            (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio.html#MixIOVec" title="MixIOVec">MixIOVec</a> *iovout,
+                                                         gint iovoutcnt);</pre>
+<p>
+To read encoded data from device.
+</p>
+<p>
+<em><span class="comment">
+NOTE: May need to rename to "read_encoded" or other name. Since "encode" seems to mean taking raw audio and convert to compressed audio.
+</span></em></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iovout</code></em> :</span></p></td>
+<td> Capture audio samples.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iovoutcnt</code></em> :</span></p></td>
+<td> Number of entry in the input vector <em class="parameter"><code>iovout</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-start"></a><h3>mix_audio_start ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_start                     (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);</pre>
+<p>
+If the stream is configured to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a>, application use this call to change the stream out of the <a class="link" href="MixAudio.html#MIX-STREAM-STOPPED--CAPS"><span class="type">MIX_STREAM_STOPPED</span></a> state. If <a class="link" href="MixAudio.html#mix-audio-decode" title="mix_audio_decode ()"><code class="function">mix_audio_decode()</code></a> is called and blocking in a seperate thread prior to this call. This method causes the device to start rendering data.
+</p>
+<p>
+In <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DECODERETURN--CAPS"><span class="type">MIX_DECODE_DECODERETURN</span></a>, this method is no op.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> if the resulting state is either <a class="link" href="MixAudio.html#MIX-STREAM-PLAYING--CAPS"><span class="type">MIX_STREAM_PLAYING</span></a> or <a class="link" href="MixAudio.html#MIX-STREAM-PAUSED--CAPS"><span class="type">MIX_STREAM_PAUSED</span></a>. Fail code otherwise.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-stop-drop"></a><h3>mix_audio_stop_drop ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_stop_drop                 (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);</pre>
+<p>
+If the stream is configured to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a>, application uses this function to stop the processing and playback of audio.
+</p>
+<p>
+All remaining frames to be decoded or rendered will be discarded and playback will stop immediately, unblocks any pending <a class="link" href="MixAudio.html#mix-audio-decode" title="mix_audio_decode ()"><code class="function">mix_audio_decode()</code></a>.
+</p>
+<p>
+If <span class="type">MIX_STOP_DRAIN</span> is requested, the call will block with stream state set to <a class="link" href="MixAudio.html#MIX-STREAM-DRAINING--CAPS"><span class="type">MIX_STREAM_DRAINING</span></a>, and return only until all remaining frame in previously submitted buffers are decoded and rendered. When <span class="type">MIX_STOP_DRAIN</span> returns successfully, the stream would have reached <a class="link" href="MixAudio.html#MIX-STREAM-STOPPED--CAPS"><span class="type">MIX_STREAM_STOPPED</span></a> successfully.
+</p>
+<p>
+After this call, timestamp retrived by <code class="function">mix_audio_gettimestamp()</code> is reset to zero.
+</p>
+<p>
+Note that this method returns <span class="type">MIX_RESULT_WRONG_STATE</span> if the stream is in <a class="link" href="MixAudio.html#MIX-STREAM-DRAINING--CAPS"><span class="type">MIX_STREAM_DRAINING</span></a> state.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> if the resulting state has successfully reached <a class="link" href="MixAudio.html#MIX-STREAM-STOPPED--CAPS"><span class="type">MIX_STREAM_STOPPED</span></a>. Fail code otherwise.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-stop-drain"></a><h3>mix_audio_stop_drain ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_stop_drain                (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);</pre>
+<p>
+If the stream is configured to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a>, application uses this function to stop the processing and playback of audio.
+</p>
+<p>
+The call will block with stream state set to <a class="link" href="MixAudio.html#MIX-STREAM-DRAINING--CAPS"><span class="type">MIX_STREAM_DRAINING</span></a>, and return only until all remaining frame in previously submitted buffers are decoded and rendered.
+</p>
+<p>
+Note that this method blocks until <a class="link" href="MixAudio.html#MIX-STREAM-STOPPED--CAPS"><span class="type">MIX_STREAM_STOPPED</span></a> is reached if it is called when the stream is already in <a class="link" href="MixAudio.html#MIX-STREAM-DRAINING--CAPS"><span class="type">MIX_STREAM_DRAINING</span></a> state.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> if the resulting state has successfully reached <a class="link" href="MixAudio.html#MIX-STREAM-STOPPED--CAPS"><span class="type">MIX_STREAM_STOPPED</span></a>. Fail code otherwise.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-pause"></a><h3>mix_audio_pause ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_pause                     (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);</pre>
+<p>
+If the stream is configured to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a>, application uses this call to change the stream state from <a class="link" href="MixAudio.html#MIX-STREAM-PLAYING--CAPS"><span class="type">MIX_STREAM_PLAYING</span></a> to <a class="link" href="MixAudio.html#MIX-STREAM-PAUSED--CAPS"><span class="type">MIX_STREAM_PAUSED</span></a>. Note that this method returns sucessful only when the resulting state reaches <a class="link" href="MixAudio.html#MIX-STREAM-PAUSED--CAPS"><span class="type">MIX_STREAM_PAUSED</span></a>. Meaning it will return fail code if it is called in a state such as <a class="link" href="MixAudio.html#MIX-STREAM-STOPPED--CAPS"><span class="type">MIX_STREAM_STOPPED</span></a>, where transitioning to <a class="link" href="MixAudio.html#MIX-STREAM-PAUSED--CAPS"><span class="type">MIX_STREAM_PAUSED</span></a> is not possible.
+</p>
+<p>
+In some situation, where there is potential race condition with the DRAINING operation, this method may return MIX_RESULT_NEED_RETRY to indicate last operation result is inclusive and request caller to call again.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> if <a class="link" href="MixAudio.html#MIX-STREAM-PAUSED--CAPS"><span class="type">MIX_STREAM_PAUSED</span></a> state is reached successfully. <span class="type">MIX_RESULT_WRONG_STATE</span> if operation is not allowed with the current state.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-resume"></a><h3>mix_audio_resume ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_resume                    (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);</pre>
+<p>
+If the stream is configured to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a>, application uses this call to change the stream state to <a class="link" href="MixAudio.html#MIX-STREAM-PLAYING--CAPS"><span class="type">MIX_STREAM_PLAYING</span></a>. Note that this method returns sucessful only when the resulting state reaches <a class="link" href="MixAudio.html#MIX-STREAM-PAUSED--CAPS"><span class="type">MIX_STREAM_PAUSED</span></a>. Meaning it will return fail code if it is called in a state such as <a class="link" href="MixAudio.html#MIX-STREAM-DRAINING--CAPS"><span class="type">MIX_STREAM_DRAINING</span></a>, where transitioning to <a class="link" href="MixAudio.html#MIX-STREAM-PLAYING--CAPS"><span class="type">MIX_STREAM_PLAYING</span></a> is not possible.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> if <a class="link" href="MixAudio.html#MIX-STREAM-PLAYING--CAPS"><span class="type">MIX_STREAM_PLAYING</span></a> state is reached successfully. <span class="type">MIX_RESULT_WRONG_STATE</span> if operation is not allowed with the current state.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-get-timestamp"></a><h3>mix_audio_get_timestamp ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_get_timestamp             (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         guint64 *msecs);</pre>
+<p>
+This function can be used to retrieve the current timestamp for audio playback in milliseconds.  The timestamp will reflect the amount of audio data rendered since the start of stream, or since the last stop.  Note that the timestamp is always reset to zero when the stream enter <a class="link" href="MixAudio.html#MIX-STREAM-STOPPED--CAPS"><span class="type">MIX_STREAM_STOPPED</span></a> state. The timestamp is an unsigned long value, so the value will wrap when the timestamp reaches <span class="type">ULONG_MAX</span>. This function is only valid in direct-render mode.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msecs</code></em> :</span></p></td>
+<td> play time in milliseconds.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> if the timestamp is available. <span class="type">MIX_RESULT_WRONG_MODE</span> if operation is not allowed with the current mode.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-set-mute"></a><h3>mix_audio_set_mute ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_set_mute                  (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         gboolean mute);</pre>
+<p>
+This function is used to mute and unmute audio playback. While muted, playback would continue but silently. This function is only valid when the session is configured to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a> mode.
+</p>
+<p>
+Note that playback volumn may change due to change of global settings while stream is muted.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mute</code></em> :</span></p></td>
+<td> Turn mute on/off.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> on success or other fail code.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-get-mute"></a><h3>mix_audio_get_mute ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_get_mute                  (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         gboolean *muted);</pre>
+<p>
+Get Mute.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>muted</code></em> :</span></p></td>
+<td> current mute state.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> on success or other fail code.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-get-max-vol"></a><h3>mix_audio_get_max_vol ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_get_max_vol               (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         gint *maxvol);</pre>
+<p>
+This function can be used if the application will be setting the audio volume using decibels instead of percentage.  The maximum volume in decibels supported by the driver will be returned.  This value can be used to determine the upper bound of the decibel range in calculating volume levels.  This value is a signed integer. This function is only valid if stream is configured to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a> mode.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>maxvol</code></em> :</span></p></td>
+<td> pointer to receive max volumn.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> on success or other fail code.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-get-min-vol"></a><h3>mix_audio_get_min_vol ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_get_min_vol               (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         gint *minvol);</pre>
+<p>
+This function can be used if the application will be setting the audio volume using decibels instead of percentage.  The minimum volume in decibels supported by the driver will be returned.  This value can be used to determine the lower bound of the decibel range in calculating volume levels.  This value is a signed integer. This function is only valid if stream is configured to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a> mode.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>minvol</code></em> :</span></p></td>
+<td> pointer to receive max volumn.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> on success or other fail code.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-get-volume"></a><h3>mix_audio_get_volume ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_get_volume                (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         gint *currvol,
+                                                         <a class="link" href="MixAudio.html#MixVolType" title="enum MixVolType">MixVolType</a> type);</pre>
+<p>
+This function returns the current volume setting in either decibels or percentage. This function is only valid if stream is configured to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a> mode.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>currvol</code></em> :</span></p></td>
+<td> Current volume. Note that if <em class="parameter"><code>type</code></em> equals <a class="link" href="MixAudio.html#MIX-VOL-PERCENT--CAPS"><span class="type">MIX_VOL_PERCENT</span></a>, this value will be return within the range of 0 to 100 inclusive.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td> The type represented by <em class="parameter"><code>currvol</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> on success or other fail code.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-set-volume"></a><h3>mix_audio_set_volume ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_set_volume                (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         gint currvol,
+                                                         <a class="link" href="MixAudio.html#MixVolType" title="enum MixVolType">MixVolType</a> type,
+                                                         gulong msecs,
+                                                         <a class="link" href="MixAudio.html#MixVolRamp" title="enum MixVolRamp">MixVolRamp</a> ramptype);</pre>
+<p>
+This function sets the current volume setting in either decibels or percentage.  This function is only valid if the stream is configured to <a class="link" href="MixAudio-MixAudioConfigParams.html#MIX-DECODE-DIRECTRENDER--CAPS"><span class="type">MIX_DECODE_DIRECTRENDER</span></a> mode.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>currvol</code></em> :</span></p></td>
+<td> Current volume. Note that if <em class="parameter"><code>type</code></em> equals <a class="link" href="MixAudio.html#MIX-VOL-PERCENT--CAPS"><span class="type">MIX_VOL_PERCENT</span></a>, this value will be trucated to within the range of 0 to 100 inclusive.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td> The type represented by <em class="parameter"><code>currvol</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> on success or other fail code.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-deinitialize"></a><h3>mix_audio_deinitialize ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_deinitialize              (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);</pre>
+<p>
+This function will uninitialize a session with this MI-X instance.  During this call, the SST device will be closed and resources including mmapped buffers would be freed.This function should be called by the application once <code class="function">mix_audio_init()</code> has been called.
+</p>
+<p>
+</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Intel Audio Manager Support</h3>
+The SST stream would be unregistered with Intel Audio Manager if it was registered.  
+</div>
+<p>
+</p>
+<p>
+Note that if this method should not fail normally. If it does return failure, the state of this object and the underlying mechanism is compromised and application should not attempt to reuse this object.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> on success or other fail code.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-get-stream-state"></a><h3>mix_audio_get_stream_state ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_get_stream_state          (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio.html#MixStreamState" title="enum MixStreamState">MixStreamState</a> *streamState);</pre>
+<p>
+Get the stream state of the current stream.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>streamState</code></em> :</span></p></td>
+<td> pointer to receive stream state.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-get-state"></a><h3>mix_audio_get_state ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_get_state                 (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio.html#MixState" title="enum MixState">MixState</a> *state);</pre>
+<p>
+Get the device state of the audio session.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>state</code></em> :</span></p></td>
+<td> pointer to receive state
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> Current device state.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-am-is-enabled"></a><h3>mix_audio_am_is_enabled ()</h3>
+<pre class="programlisting">gboolean            mix_audio_am_is_enabled             (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix);</pre>
+<p>
+This method checks if the current session is configure to use Intel Audio Manager. Note that Intel Audio Manager is considered disabled if the stream has not be initialized to use the service explicitly.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> boolean indicates if Intel Audio Manager is enabled with the current session.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-is-am-available"></a><h3>mix_audio_is_am_available ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_is_am_available           (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio-mixaudiotypes.html#MixAudioManager" title="enum MixAudioManager">MixAudioManager</a> am,
+                                                         gboolean *avail);</pre>
+<p>
+Check if AM is available.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> TBD
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>am</code></em> :</span></p></td>
+<td> TBD
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>avail</code></em> :</span></p></td>
+<td> TBD
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> TBD
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-get-output-configuration"></a><h3>mix_audio_get_output_configuration ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_get_output_configuration  (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         <a class="link" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams" title="MixAudioConfigParams">MixAudioConfigParams</a> **audioconfigparams);</pre>
+<p>
+This method retrieve the current configuration. This can be called after initialization. If a stream has been configured, it returns the corresponding derive object of MixAudioConfigParams.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>audioconfigparams</code></em> :</span></p></td>
+<td> double pointer to hold output configuration.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> on success or other fail code.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="mix-audio-get-stream-byte-decoded"></a><h3>mix_audio_get_stream_byte_decoded ()</h3>
+<pre class="programlisting">MIX_RESULT          mix_audio_get_stream_byte_decoded   (<a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a> *mix,
+                                                         guint64 *byte);</pre>
+<p>
+Retrive the culmulative byte decoded.
+</p>
+<p>
+<em><span class="remark">Not Implemented.</span></em></p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mix</code></em> :</span></p></td>
+<td> <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msecs</code></em> :</span></p></td>
+<td> stream byte decoded..
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>returns</code></em> :</span></p></td>
+<td> <span class="type">MIX_RESULT_SUCCESS</span> if the value is available. <span class="type">MIX_RESULT_WRONG_MODE</span> if operation is not allowed with the current mode.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/mix_audio/docs/reference/MixAudio/html/api-index-full.html b/mix_audio/docs/reference/MixAudio/html/api-index-full.html
new file mode 100644
index 0000000..99c830e
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/api-index-full.html
@@ -0,0 +1,259 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>API Index</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="MixAudio Reference Manual">
+<link rel="up" href="index.html" title="MixAudio Reference Manual">
+<link rel="prev" href="tree-hierarchy.html" title="Object Hierarchy">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Mix Audio API">
+<link rel="chapter" href="tree-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="api-index-full.html" title="API Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="tree-hierarchy.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">MixAudio Reference Manual</th>
+<td> </td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="api-index-full"></a>API Index</h2></div></div></div>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<tbody><tr>
+<td>GObject</td>
+<td><a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a></td>
+<td class="auto-generated"> </td>
+</tr></tbody>
+</table></div>
+<div class="index"><div class="indexdiv">
+<h3>M</h3>
+<dl>
+<dt>MixAACBitrateType, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitrateType">enum MixAACBitrateType</a>
+</dt>
+<dt>MixAACBitstreamFormt, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACBitstreamFormt">enum MixAACBitstreamFormt</a>
+</dt>
+<dt>MixAACMpegID, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACMpegID">enum MixAACMpegID</a>
+</dt>
+<dt>MixAACProfile, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#MixAACProfile">enum MixAACProfile</a>
+</dt>
+<dt>MixACPBPSType, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#MixACPBPSType">enum MixACPBPSType</a>
+</dt>
+<dt>MixACPOpAlign, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#MixACPOpAlign">enum MixACPOpAlign</a>
+</dt>
+<dt>MixAudio, <a class="indexterm" href="MixAudio.html#MixAudio-struct">MixAudio</a>
+</dt>
+<dt>MixAudioConfigParams, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#MixAudioConfigParams">MixAudioConfigParams</a>
+</dt>
+<dt>MixAudioConfigParamsAAC, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC">MixAudioConfigParamsAAC</a>
+</dt>
+<dt>MixAudioConfigParamsMP3, <a class="indexterm" href="MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3">MixAudioConfigParamsMP3</a>
+</dt>
+<dt>MixAudioConfigParamsWMA, <a class="indexterm" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA">MixAudioConfigParamsWMA</a>
+</dt>
+<dt>MixAudioInitParams, <a class="indexterm" href="MixAudio-MixAudioInitParams.html#MixAudioInitParams">MixAudioInitParams</a>
+</dt>
+<dt>MixAudioManager, <a class="indexterm" href="MixAudio-mixaudiotypes.html#MixAudioManager">enum MixAudioManager</a>
+</dt>
+<dt>MixAudioWMAVersion, <a class="indexterm" href="MixAudio-MixAudioConfigParamsWMA.html#MixAudioWMAVersion">enum MixAudioWMAVersion</a>
+</dt>
+<dt>MixCodecMode, <a class="indexterm" href="MixAudio.html#MixCodecMode">enum MixCodecMode</a>
+</dt>
+<dt>MixDecodeMode, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#MixDecodeMode">enum MixDecodeMode</a>
+</dt>
+<dt>MixDeviceState, <a class="indexterm" href="MixAudio.html#MixDeviceState">enum MixDeviceState</a>
+</dt>
+<dt>MixIOVec, <a class="indexterm" href="MixAudio.html#MixIOVec">MixIOVec</a>
+</dt>
+<dt>MixState, <a class="indexterm" href="MixAudio.html#MixState">enum MixState</a>
+</dt>
+<dt>MixStreamState, <a class="indexterm" href="MixAudio.html#MixStreamState">enum MixStreamState</a>
+</dt>
+<dt>MixVolRamp, <a class="indexterm" href="MixAudio.html#MixVolRamp">enum MixVolRamp</a>
+</dt>
+<dt>MixVolType, <a class="indexterm" href="MixAudio.html#MixVolType">enum MixVolType</a>
+</dt>
+<dt>MIX_ACP_AAC_CHANNELS, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-CHANNELS--CAPS">MIX_ACP_AAC_CHANNELS()</a>
+</dt>
+<dt>MIX_ACP_AAC_CRC, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-CRC--CAPS">MIX_ACP_AAC_CRC()</a>
+</dt>
+<dt>mix_acp_aac_get_aac_profile, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-aac-profile">mix_acp_aac_get_aac_profile ()</a>
+</dt>
+<dt>mix_acp_aac_get_aot, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-aot">mix_acp_aac_get_aot ()</a>
+</dt>
+<dt>mix_acp_aac_get_bit_rate_type, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-bit-rate-type">mix_acp_aac_get_bit_rate_type ()</a>
+</dt>
+<dt>mix_acp_aac_get_bit_stream_format, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-bit-stream-format">mix_acp_aac_get_bit_stream_format ()</a>
+</dt>
+<dt>mix_acp_aac_get_mpeg_id, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-mpeg-id">mix_acp_aac_get_mpeg_id ()</a>
+</dt>
+<dt>mix_acp_aac_new, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-new">mix_acp_aac_new ()</a>
+</dt>
+<dt>MIX_ACP_AAC_PCE_FLAG, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-PCE-FLAG--CAPS">MIX_ACP_AAC_PCE_FLAG()</a>
+</dt>
+<dt>MIX_ACP_AAC_PS_FLAG, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-PS-FLAG--CAPS">MIX_ACP_AAC_PS_FLAG()</a>
+</dt>
+<dt>mix_acp_aac_ref, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-ref">mix_acp_aac_ref ()</a>
+</dt>
+<dt>MIX_ACP_AAC_SAMPLE_RATE, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-SAMPLE-RATE--CAPS">MIX_ACP_AAC_SAMPLE_RATE()</a>
+</dt>
+<dt>MIX_ACP_AAC_SBR_FLAG, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-SBR-FLAG--CAPS">MIX_ACP_AAC_SBR_FLAG()</a>
+</dt>
+<dt>mix_acp_aac_set_aac_profile, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-aac-profile">mix_acp_aac_set_aac_profile ()</a>
+</dt>
+<dt>mix_acp_aac_set_aot, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-aot">mix_acp_aac_set_aot ()</a>
+</dt>
+<dt>mix_acp_aac_set_bit_rate_type, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-bit-rate-type">mix_acp_aac_set_bit_rate_type ()</a>
+</dt>
+<dt>mix_acp_aac_set_bit_stream_format, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-bit-stream-format">mix_acp_aac_set_bit_stream_format ()</a>
+</dt>
+<dt>mix_acp_aac_set_mpeg_id, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-mpeg-id">mix_acp_aac_set_mpeg_id ()</a>
+</dt>
+<dt>mix_acp_aac_unref, <a class="indexterm" href="MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-unref">mix_acp_aac_unref()</a>
+</dt>
+<dt>MIX_ACP_BITRATE, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#MIX-ACP-BITRATE--CAPS">MIX_ACP_BITRATE()</a>
+</dt>
+<dt>MIX_ACP_DECODEMODE, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#MIX-ACP-DECODEMODE--CAPS">MIX_ACP_DECODEMODE()</a>
+</dt>
+<dt>mix_acp_get_audio_manager, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-get-audio-manager">mix_acp_get_audio_manager ()</a>
+</dt>
+<dt>mix_acp_get_bps, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-get-bps">mix_acp_get_bps ()</a>
+</dt>
+<dt>mix_acp_get_decodemode, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-get-decodemode">mix_acp_get_decodemode ()</a>
+</dt>
+<dt>mix_acp_get_op_align, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-get-op-align">mix_acp_get_op_align ()</a>
+</dt>
+<dt>mix_acp_get_streamname, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-get-streamname">mix_acp_get_streamname ()</a>
+</dt>
+<dt>mix_acp_is_streamname_valid, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-is-streamname-valid">mix_acp_is_streamname_valid ()</a>
+</dt>
+<dt>MIX_ACP_MP3_CRC, <a class="indexterm" href="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-CRC--CAPS">MIX_ACP_MP3_CRC()</a>
+</dt>
+<dt>MIX_ACP_MP3_MPEG_FORMAT, <a class="indexterm" href="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-MPEG-FORMAT--CAPS">MIX_ACP_MP3_MPEG_FORMAT()</a>
+</dt>
+<dt>MIX_ACP_MP3_MPEG_LAYER, <a class="indexterm" href="MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-MPEG-LAYER--CAPS">MIX_ACP_MP3_MPEG_LAYER()</a>
+</dt>
+<dt>mix_acp_mp3_new, <a class="indexterm" href="MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-new">mix_acp_mp3_new ()</a>
+</dt>
+<dt>mix_acp_mp3_ref, <a class="indexterm" href="MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-ref">mix_acp_mp3_ref ()</a>
+</dt>
+<dt>mix_acp_mp3_unref, <a class="indexterm" href="MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-unref">mix_acp_mp3_unref()</a>
+</dt>
+<dt>mix_acp_new, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-new">mix_acp_new ()</a>
+</dt>
+<dt>MIX_ACP_NUM_CHANNELS, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#MIX-ACP-NUM-CHANNELS--CAPS">MIX_ACP_NUM_CHANNELS()</a>
+</dt>
+<dt>mix_acp_ref, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-ref">mix_acp_ref ()</a>
+</dt>
+<dt>MIX_ACP_SAMPLE_FREQ, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#MIX-ACP-SAMPLE-FREQ--CAPS">MIX_ACP_SAMPLE_FREQ()</a>
+</dt>
+<dt>mix_acp_set_audio_manager, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-audio-manager">mix_acp_set_audio_manager ()</a>
+</dt>
+<dt>mix_acp_set_bps, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-bps">mix_acp_set_bps ()</a>
+</dt>
+<dt>mix_acp_set_decodemode, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-decodemode">mix_acp_set_decodemode ()</a>
+</dt>
+<dt>mix_acp_set_op_align, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-op-align">mix_acp_set_op_align ()</a>
+</dt>
+<dt>mix_acp_set_streamname, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-set-streamname">mix_acp_set_streamname ()</a>
+</dt>
+<dt>mix_acp_unref, <a class="indexterm" href="MixAudio-MixAudioConfigParams.html#mix-acp-unref">mix_acp_unref()</a>
+</dt>
+<dt>MIX_ACP_WMA_BLOCK_ALIGN, <a class="indexterm" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-BLOCK-ALIGN--CAPS">MIX_ACP_WMA_BLOCK_ALIGN()</a>
+</dt>
+<dt>MIX_ACP_WMA_CHANNEL_MASK, <a class="indexterm" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-CHANNEL-MASK--CAPS">MIX_ACP_WMA_CHANNEL_MASK()</a>
+</dt>
+<dt>MIX_ACP_WMA_ENCODE_OPT, <a class="indexterm" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-ENCODE-OPT--CAPS">MIX_ACP_WMA_ENCODE_OPT()</a>
+</dt>
+<dt>MIX_ACP_WMA_FORMAT_TAG, <a class="indexterm" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-FORMAT-TAG--CAPS">MIX_ACP_WMA_FORMAT_TAG()</a>
+</dt>
+<dt>mix_acp_wma_get_version, <a class="indexterm" href="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-get-version">mix_acp_wma_get_version ()</a>
+</dt>
+<dt>mix_acp_wma_new, <a class="indexterm" href="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-new">mix_acp_wma_new ()</a>
+</dt>
+<dt>MIX_ACP_WMA_PCM_BIT_WIDTH, <a class="indexterm" href="MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-PCM-BIT-WIDTH--CAPS">MIX_ACP_WMA_PCM_BIT_WIDTH()</a>
+</dt>
+<dt>mix_acp_wma_ref, <a class="indexterm" href="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-ref">mix_acp_wma_ref ()</a>
+</dt>
+<dt>mix_acp_wma_set_version, <a class="indexterm" href="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-set-version">mix_acp_wma_set_version ()</a>
+</dt>
+<dt>mix_acp_wma_unref, <a class="indexterm" href="MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-unref">mix_acp_wma_unref()</a>
+</dt>
+<dt>mix_aip_new, <a class="indexterm" href="MixAudio-MixAudioInitParams.html#mix-aip-new">mix_aip_new ()</a>
+</dt>
+<dt>mix_aip_ref, <a class="indexterm" href="MixAudio-MixAudioInitParams.html#mix-aip-ref">mix_aip_ref ()</a>
+</dt>
+<dt>mix_aip_unref, <a class="indexterm" href="MixAudio-MixAudioInitParams.html#mix-aip-unref">mix_aip_unref()</a>
+</dt>
+<dt>mix_audio_am_is_enabled, <a class="indexterm" href="MixAudio.html#mix-audio-am-is-enabled">mix_audio_am_is_enabled ()</a>
+</dt>
+<dt>mix_audio_capture_encode, <a class="indexterm" href="MixAudio.html#mix-audio-capture-encode">mix_audio_capture_encode ()</a>
+</dt>
+<dt>mix_audio_configure, <a class="indexterm" href="MixAudio.html#mix-audio-configure">mix_audio_configure ()</a>
+</dt>
+<dt>mix_audio_decode, <a class="indexterm" href="MixAudio.html#mix-audio-decode">mix_audio_decode ()</a>
+</dt>
+<dt>mix_audio_deinitialize, <a class="indexterm" href="MixAudio.html#mix-audio-deinitialize">mix_audio_deinitialize ()</a>
+</dt>
+<dt>mix_audio_get_max_vol, <a class="indexterm" href="MixAudio.html#mix-audio-get-max-vol">mix_audio_get_max_vol ()</a>
+</dt>
+<dt>mix_audio_get_min_vol, <a class="indexterm" href="MixAudio.html#mix-audio-get-min-vol">mix_audio_get_min_vol ()</a>
+</dt>
+<dt>mix_audio_get_mute, <a class="indexterm" href="MixAudio.html#mix-audio-get-mute">mix_audio_get_mute ()</a>
+</dt>
+<dt>mix_audio_get_output_configuration, <a class="indexterm" href="MixAudio.html#mix-audio-get-output-configuration">mix_audio_get_output_configuration ()</a>
+</dt>
+<dt>mix_audio_get_state, <a class="indexterm" href="MixAudio.html#mix-audio-get-state">mix_audio_get_state ()</a>
+</dt>
+<dt>mix_audio_get_stream_byte_decoded, <a class="indexterm" href="MixAudio.html#mix-audio-get-stream-byte-decoded">mix_audio_get_stream_byte_decoded ()</a>
+</dt>
+<dt>mix_audio_get_stream_state, <a class="indexterm" href="MixAudio.html#mix-audio-get-stream-state">mix_audio_get_stream_state ()</a>
+</dt>
+<dt>mix_audio_get_timestamp, <a class="indexterm" href="MixAudio.html#mix-audio-get-timestamp">mix_audio_get_timestamp ()</a>
+</dt>
+<dt>mix_audio_get_version, <a class="indexterm" href="MixAudio.html#mix-audio-get-version">mix_audio_get_version ()</a>
+</dt>
+<dt>mix_audio_get_volume, <a class="indexterm" href="MixAudio.html#mix-audio-get-volume">mix_audio_get_volume ()</a>
+</dt>
+<dt>mix_audio_initialize, <a class="indexterm" href="MixAudio.html#mix-audio-initialize">mix_audio_initialize ()</a>
+</dt>
+<dt>mix_audio_is_am_available, <a class="indexterm" href="MixAudio.html#mix-audio-is-am-available">mix_audio_is_am_available ()</a>
+</dt>
+<dt>mix_audio_new, <a class="indexterm" href="MixAudio.html#mix-audio-new">mix_audio_new ()</a>
+</dt>
+<dt>mix_audio_pause, <a class="indexterm" href="MixAudio.html#mix-audio-pause">mix_audio_pause ()</a>
+</dt>
+<dt>mix_audio_ref, <a class="indexterm" href="MixAudio.html#mix-audio-ref">mix_audio_ref ()</a>
+</dt>
+<dt>mix_audio_resume, <a class="indexterm" href="MixAudio.html#mix-audio-resume">mix_audio_resume ()</a>
+</dt>
+<dt>mix_audio_set_mute, <a class="indexterm" href="MixAudio.html#mix-audio-set-mute">mix_audio_set_mute ()</a>
+</dt>
+<dt>mix_audio_set_volume, <a class="indexterm" href="MixAudio.html#mix-audio-set-volume">mix_audio_set_volume ()</a>
+</dt>
+<dt>mix_audio_start, <a class="indexterm" href="MixAudio.html#mix-audio-start">mix_audio_start ()</a>
+</dt>
+<dt>mix_audio_stop_drain, <a class="indexterm" href="MixAudio.html#mix-audio-stop-drain">mix_audio_stop_drain ()</a>
+</dt>
+<dt>mix_audio_stop_drop, <a class="indexterm" href="MixAudio.html#mix-audio-stop-drop">mix_audio_stop_drop ()</a>
+</dt>
+<dt>mix_audio_unref, <a class="indexterm" href="MixAudio.html#mix-audio-unref">mix_audio_unref()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/mix_audio/docs/reference/MixAudio/html/ch01.html b/mix_audio/docs/reference/MixAudio/html/ch01.html
new file mode 100644
index 0000000..2ab25e8
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/ch01.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Mix Audio API</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="MixAudio Reference Manual">
+<link rel="up" href="index.html" title="MixAudio Reference Manual">
+<link rel="prev" href="index.html" title="MixAudio Reference Manual">
+<link rel="next" href="MixAudio-MixAudioConfigParamsAAC.html" title="MixAudioConfigParamsAAC">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Mix Audio API">
+<link rel="chapter" href="tree-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="api-index-full.html" title="API Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">MixAudio Reference Manual</th>
+<td><a accesskey="n" href="MixAudio-MixAudioConfigParamsAAC.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id2563229"></a>Mix Audio API</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="MixAudio-MixAudioConfigParamsAAC.html">MixAudioConfigParamsAAC</a></span><span class="refpurpose"> — Audio configuration parameters for AAC-LC, HEAAC v1, and HEAAC v2 audio format.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="MixAudio-MixAudioConfigParamsMP3.html">MixAudioConfigParamsMP3</a></span><span class="refpurpose"> — Audio configuration parameters for MP3 audio.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="MixAudio-MixAudioConfigParamsWMA.html">MixAudioConfigParamsWMA</a></span><span class="refpurpose"> — Audio parameters for WMA audio.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="MixAudio-MixAudioConfigParams.html">MixAudioConfigParams</a></span><span class="refpurpose"> — MixAudio configuration parameters object.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="MixAudio-MixAudioInitParams.html">MixAudioInitParams</a></span><span class="refpurpose"> — Initialization parameters object.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="MixAudio.html">MixAudio</a></span><span class="refpurpose"> — Object to support a single stream playback using hardware accelerated decoder.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="MixAudio-mixaudiotypes.html">Mix Audio Types</a></span><span class="refpurpose"> — Miscellanous types used by <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> API.</span>
+</dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/mix_audio/docs/reference/MixAudio/html/index.html b/mix_audio/docs/reference/MixAudio/html/index.html
new file mode 100644
index 0000000..ab60f03
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/index.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>MixAudio Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="MixAudio Reference Manual">
+<link rel="next" href="ch01.html" title="Mix Audio API">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Mix Audio API">
+<link rel="chapter" href="tree-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="api-index-full.html" title="API Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="book" lang="en">
+<div class="titlepage">
+<div>
+<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">MixAudio Reference Manual</p></th></tr></table></div>
+<div><p class="releaseinfo">
+      MixAudio version 0.3
+
+    </p></div>
+</div>
+<hr>
+</div>
+<div class="toc"><dl>
+<dt><span class="chapter"><a href="ch01.html">Mix Audio API</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="MixAudio-MixAudioConfigParamsAAC.html">MixAudioConfigParamsAAC</a></span><span class="refpurpose"> — Audio configuration parameters for AAC-LC, HEAAC v1, and HEAAC v2 audio format.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="MixAudio-MixAudioConfigParamsMP3.html">MixAudioConfigParamsMP3</a></span><span class="refpurpose"> — Audio configuration parameters for MP3 audio.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="MixAudio-MixAudioConfigParamsWMA.html">MixAudioConfigParamsWMA</a></span><span class="refpurpose"> — Audio parameters for WMA audio.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="MixAudio-MixAudioConfigParams.html">MixAudioConfigParams</a></span><span class="refpurpose"> — MixAudio configuration parameters object.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="MixAudio-MixAudioInitParams.html">MixAudioInitParams</a></span><span class="refpurpose"> — Initialization parameters object.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="MixAudio.html">MixAudio</a></span><span class="refpurpose"> — Object to support a single stream playback using hardware accelerated decoder.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="MixAudio-mixaudiotypes.html">Mix Audio Types</a></span><span class="refpurpose"> — Miscellanous types used by <a class="link" href="MixAudio.html" title="MixAudio"><span class="type">MixAudio</span></a> API.</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="tree-hierarchy.html">Object Hierarchy</a></span></dt>
+<dt><span class="index"><a href="api-index-full.html">API Index</a></span></dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/mix_audio/docs/reference/MixAudio/html/index.sgml b/mix_audio/docs/reference/MixAudio/html/index.sgml
new file mode 100644
index 0000000..0cc1a2a
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/index.sgml
@@ -0,0 +1,134 @@
+<ANCHOR id="MixAudio-MixAudioConfigParamsAAC" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html">
+<ANCHOR id="MixAudio-MixAudioConfigParamsAAC.synopsis" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MixAudio-MixAudioConfigParamsAAC.synopsis">
+<ANCHOR id="MixAudio-MixAudioConfigParamsAAC.description" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MixAudio-MixAudioConfigParamsAAC.description">
+<ANCHOR id="MixAudio-MixAudioConfigParamsAAC.details" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MixAudio-MixAudioConfigParamsAAC.details">
+<ANCHOR id="MixAACBitrateType" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MixAACBitrateType">
+<ANCHOR id="MixAACBitstreamFormt" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MixAACBitstreamFormt">
+<ANCHOR id="MixAACProfile" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MixAACProfile">
+<ANCHOR id="MixAACMpegID" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MixAACMpegID">
+<ANCHOR id="MixAudioConfigParamsAAC" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MixAudioConfigParamsAAC">
+<ANCHOR id="mix-acp-aac-new" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-new">
+<ANCHOR id="mix-acp-aac-ref" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-ref">
+<ANCHOR id="mix-acp-aac-unref" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-unref">
+<ANCHOR id="mix-acp-aac-set-mpeg-id" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-mpeg-id">
+<ANCHOR id="mix-acp-aac-get-mpeg-id" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-mpeg-id">
+<ANCHOR id="MIX-ACP-AAC-CRC--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-CRC--CAPS">
+<ANCHOR id="mix-acp-aac-set-aot" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-aot">
+<ANCHOR id="mix-acp-aac-get-aot" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-aot">
+<ANCHOR id="MIX-ACP-AAC-SBR-FLAG--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-SBR-FLAG--CAPS">
+<ANCHOR id="MIX-ACP-AAC-PS-FLAG--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-PS-FLAG--CAPS">
+<ANCHOR id="MIX-ACP-AAC-PCE-FLAG--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-PCE-FLAG--CAPS">
+<ANCHOR id="MIX-ACP-AAC-SAMPLE-RATE--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-SAMPLE-RATE--CAPS">
+<ANCHOR id="MIX-ACP-AAC-CHANNELS--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#MIX-ACP-AAC-CHANNELS--CAPS">
+<ANCHOR id="mix-acp-aac-get-bit-stream-format" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-bit-stream-format">
+<ANCHOR id="mix-acp-aac-set-bit-stream-format" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-bit-stream-format">
+<ANCHOR id="mix-acp-aac-get-aac-profile" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-aac-profile">
+<ANCHOR id="mix-acp-aac-set-aac-profile" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-aac-profile">
+<ANCHOR id="mix-acp-aac-get-bit-rate-type" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-get-bit-rate-type">
+<ANCHOR id="mix-acp-aac-set-bit-rate-type" href="MixAudio/MixAudio-MixAudioConfigParamsAAC.html#mix-acp-aac-set-bit-rate-type">
+<ANCHOR id="MixAudio-MixAudioConfigParamsMP3" href="MixAudio/MixAudio-MixAudioConfigParamsMP3.html">
+<ANCHOR id="MixAudio-MixAudioConfigParamsMP3.synopsis" href="MixAudio/MixAudio-MixAudioConfigParamsMP3.html#MixAudio-MixAudioConfigParamsMP3.synopsis">
+<ANCHOR id="MixAudio-MixAudioConfigParamsMP3.description" href="MixAudio/MixAudio-MixAudioConfigParamsMP3.html#MixAudio-MixAudioConfigParamsMP3.description">
+<ANCHOR id="MixAudio-MixAudioConfigParamsMP3.details" href="MixAudio/MixAudio-MixAudioConfigParamsMP3.html#MixAudio-MixAudioConfigParamsMP3.details">
+<ANCHOR id="MixAudioConfigParamsMP3" href="MixAudio/MixAudio-MixAudioConfigParamsMP3.html#MixAudioConfigParamsMP3">
+<ANCHOR id="mix-acp-mp3-new" href="MixAudio/MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-new">
+<ANCHOR id="mix-acp-mp3-ref" href="MixAudio/MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-ref">
+<ANCHOR id="mix-acp-mp3-unref" href="MixAudio/MixAudio-MixAudioConfigParamsMP3.html#mix-acp-mp3-unref">
+<ANCHOR id="MIX-ACP-MP3-CRC--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-CRC--CAPS">
+<ANCHOR id="MIX-ACP-MP3-MPEG-FORMAT--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-MPEG-FORMAT--CAPS">
+<ANCHOR id="MIX-ACP-MP3-MPEG-LAYER--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsMP3.html#MIX-ACP-MP3-MPEG-LAYER--CAPS">
+<ANCHOR id="MixAudio-MixAudioConfigParamsWMA" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html">
+<ANCHOR id="MixAudio-MixAudioConfigParamsWMA.synopsis" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#MixAudio-MixAudioConfigParamsWMA.synopsis">
+<ANCHOR id="MixAudio-MixAudioConfigParamsWMA.description" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#MixAudio-MixAudioConfigParamsWMA.description">
+<ANCHOR id="MixAudio-MixAudioConfigParamsWMA.details" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#MixAudio-MixAudioConfigParamsWMA.details">
+<ANCHOR id="MixAudioWMAVersion" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#MixAudioWMAVersion">
+<ANCHOR id="MixAudioConfigParamsWMA" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#MixAudioConfigParamsWMA">
+<ANCHOR id="mix-acp-wma-new" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-new">
+<ANCHOR id="mix-acp-wma-ref" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-ref">
+<ANCHOR id="mix-acp-wma-unref" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-unref">
+<ANCHOR id="MIX-ACP-WMA-CHANNEL-MASK--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-CHANNEL-MASK--CAPS">
+<ANCHOR id="MIX-ACP-WMA-FORMAT-TAG--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-FORMAT-TAG--CAPS">
+<ANCHOR id="MIX-ACP-WMA-BLOCK-ALIGN--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-BLOCK-ALIGN--CAPS">
+<ANCHOR id="MIX-ACP-WMA-ENCODE-OPT--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-ENCODE-OPT--CAPS">
+<ANCHOR id="MIX-ACP-WMA-PCM-BIT-WIDTH--CAPS" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#MIX-ACP-WMA-PCM-BIT-WIDTH--CAPS">
+<ANCHOR id="mix-acp-wma-get-version" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-get-version">
+<ANCHOR id="mix-acp-wma-set-version" href="MixAudio/MixAudio-MixAudioConfigParamsWMA.html#mix-acp-wma-set-version">
+<ANCHOR id="MixAudio-MixAudioConfigParams" href="MixAudio/MixAudio-MixAudioConfigParams.html">
+<ANCHOR id="MixAudio-MixAudioConfigParams.synopsis" href="MixAudio/MixAudio-MixAudioConfigParams.html#MixAudio-MixAudioConfigParams.synopsis">
+<ANCHOR id="MixAudio-MixAudioConfigParams.description" href="MixAudio/MixAudio-MixAudioConfigParams.html#MixAudio-MixAudioConfigParams.description">
+<ANCHOR id="MixAudio-MixAudioConfigParams.details" href="MixAudio/MixAudio-MixAudioConfigParams.html#MixAudio-MixAudioConfigParams.details">
+<ANCHOR id="MixACPOpAlign" href="MixAudio/MixAudio-MixAudioConfigParams.html#MixACPOpAlign">
+<ANCHOR id="MixACPBPSType" href="MixAudio/MixAudio-MixAudioConfigParams.html#MixACPBPSType">
+<ANCHOR id="MixDecodeMode" href="MixAudio/MixAudio-MixAudioConfigParams.html#MixDecodeMode">
+<ANCHOR id="MixAudioConfigParams" href="MixAudio/MixAudio-MixAudioConfigParams.html#MixAudioConfigParams">
+<ANCHOR id="mix-acp-new" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-new">
+<ANCHOR id="mix-acp-ref" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-ref">
+<ANCHOR id="mix-acp-unref" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-unref">
+<ANCHOR id="MIX-ACP-DECODEMODE--CAPS" href="MixAudio/MixAudio-MixAudioConfigParams.html#MIX-ACP-DECODEMODE--CAPS">
+<ANCHOR id="MIX-ACP-NUM-CHANNELS--CAPS" href="MixAudio/MixAudio-MixAudioConfigParams.html#MIX-ACP-NUM-CHANNELS--CAPS">
+<ANCHOR id="MIX-ACP-BITRATE--CAPS" href="MixAudio/MixAudio-MixAudioConfigParams.html#MIX-ACP-BITRATE--CAPS">
+<ANCHOR id="MIX-ACP-SAMPLE-FREQ--CAPS" href="MixAudio/MixAudio-MixAudioConfigParams.html#MIX-ACP-SAMPLE-FREQ--CAPS">
+<ANCHOR id="mix-acp-get-decodemode" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-get-decodemode">
+<ANCHOR id="mix-acp-set-decodemode" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-set-decodemode">
+<ANCHOR id="mix-acp-get-streamname" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-get-streamname">
+<ANCHOR id="mix-acp-set-streamname" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-set-streamname">
+<ANCHOR id="mix-acp-set-audio-manager" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-set-audio-manager">
+<ANCHOR id="mix-acp-get-audio-manager" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-get-audio-manager">
+<ANCHOR id="mix-acp-is-streamname-valid" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-is-streamname-valid">
+<ANCHOR id="mix-acp-get-bps" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-get-bps">
+<ANCHOR id="mix-acp-set-bps" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-set-bps">
+<ANCHOR id="mix-acp-get-op-align" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-get-op-align">
+<ANCHOR id="mix-acp-set-op-align" href="MixAudio/MixAudio-MixAudioConfigParams.html#mix-acp-set-op-align">
+<ANCHOR id="MixAudio-MixAudioInitParams" href="MixAudio/MixAudio-MixAudioInitParams.html">
+<ANCHOR id="MixAudio-MixAudioInitParams.synopsis" href="MixAudio/MixAudio-MixAudioInitParams.html#MixAudio-MixAudioInitParams.synopsis">
+<ANCHOR id="MixAudio-MixAudioInitParams.description" href="MixAudio/MixAudio-MixAudioInitParams.html#MixAudio-MixAudioInitParams.description">
+<ANCHOR id="MixAudio-MixAudioInitParams.details" href="MixAudio/MixAudio-MixAudioInitParams.html#MixAudio-MixAudioInitParams.details">
+<ANCHOR id="MixAudioInitParams" href="MixAudio/MixAudio-MixAudioInitParams.html#MixAudioInitParams">
+<ANCHOR id="mix-aip-new" href="MixAudio/MixAudio-MixAudioInitParams.html#mix-aip-new">
+<ANCHOR id="mix-aip-ref" href="MixAudio/MixAudio-MixAudioInitParams.html#mix-aip-ref">
+<ANCHOR id="mix-aip-unref" href="MixAudio/MixAudio-MixAudioInitParams.html#mix-aip-unref">
+<ANCHOR id="MixAudio" href="MixAudio/MixAudio.html">
+<ANCHOR id="MixAudio.synopsis" href="MixAudio/MixAudio.html#MixAudio.synopsis">
+<ANCHOR id="MixAudio.object-hierarchy" href="MixAudio/MixAudio.html#MixAudio.object-hierarchy">
+<ANCHOR id="MixAudio.description" href="MixAudio/MixAudio.html#MixAudio.description">
+<ANCHOR id="MixAudio.details" href="MixAudio/MixAudio.html#MixAudio.details">
+<ANCHOR id="MixStreamState" href="MixAudio/MixAudio.html#MixStreamState">
+<ANCHOR id="MixState" href="MixAudio/MixAudio.html#MixState">
+<ANCHOR id="MixCodecMode" href="MixAudio/MixAudio.html#MixCodecMode">
+<ANCHOR id="MixVolType" href="MixAudio/MixAudio.html#MixVolType">
+<ANCHOR id="MixVolRamp" href="MixAudio/MixAudio.html#MixVolRamp">
+<ANCHOR id="MixIOVec" href="MixAudio/MixAudio.html#MixIOVec">
+<ANCHOR id="MixDeviceState" href="MixAudio/MixAudio.html#MixDeviceState">
+<ANCHOR id="MixAudio-struct" href="MixAudio/MixAudio.html#MixAudio-struct">
+<ANCHOR id="mix-audio-new" href="MixAudio/MixAudio.html#mix-audio-new">
+<ANCHOR id="mix-audio-ref" href="MixAudio/MixAudio.html#mix-audio-ref">
+<ANCHOR id="mix-audio-unref" href="MixAudio/MixAudio.html#mix-audio-unref">
+<ANCHOR id="mix-audio-get-version" href="MixAudio/MixAudio.html#mix-audio-get-version">
+<ANCHOR id="mix-audio-initialize" href="MixAudio/MixAudio.html#mix-audio-initialize">
+<ANCHOR id="mix-audio-configure" href="MixAudio/MixAudio.html#mix-audio-configure">
+<ANCHOR id="mix-audio-decode" href="MixAudio/MixAudio.html#mix-audio-decode">
+<ANCHOR id="mix-audio-capture-encode" href="MixAudio/MixAudio.html#mix-audio-capture-encode">
+<ANCHOR id="mix-audio-start" href="MixAudio/MixAudio.html#mix-audio-start">
+<ANCHOR id="mix-audio-stop-drop" href="MixAudio/MixAudio.html#mix-audio-stop-drop">
+<ANCHOR id="mix-audio-stop-drain" href="MixAudio/MixAudio.html#mix-audio-stop-drain">
+<ANCHOR id="mix-audio-pause" href="MixAudio/MixAudio.html#mix-audio-pause">
+<ANCHOR id="mix-audio-resume" href="MixAudio/MixAudio.html#mix-audio-resume">
+<ANCHOR id="mix-audio-get-timestamp" href="MixAudio/MixAudio.html#mix-audio-get-timestamp">
+<ANCHOR id="mix-audio-set-mute" href="MixAudio/MixAudio.html#mix-audio-set-mute">
+<ANCHOR id="mix-audio-get-mute" href="MixAudio/MixAudio.html#mix-audio-get-mute">
+<ANCHOR id="mix-audio-get-max-vol" href="MixAudio/MixAudio.html#mix-audio-get-max-vol">
+<ANCHOR id="mix-audio-get-min-vol" href="MixAudio/MixAudio.html#mix-audio-get-min-vol">
+<ANCHOR id="mix-audio-get-volume" href="MixAudio/MixAudio.html#mix-audio-get-volume">
+<ANCHOR id="mix-audio-set-volume" href="MixAudio/MixAudio.html#mix-audio-set-volume">
+<ANCHOR id="mix-audio-deinitialize" href="MixAudio/MixAudio.html#mix-audio-deinitialize">
+<ANCHOR id="mix-audio-get-stream-state" href="MixAudio/MixAudio.html#mix-audio-get-stream-state">
+<ANCHOR id="mix-audio-get-state" href="MixAudio/MixAudio.html#mix-audio-get-state">
+<ANCHOR id="mix-audio-am-is-enabled" href="MixAudio/MixAudio.html#mix-audio-am-is-enabled">
+<ANCHOR id="mix-audio-is-am-available" href="MixAudio/MixAudio.html#mix-audio-is-am-available">
+<ANCHOR id="mix-audio-get-output-configuration" href="MixAudio/MixAudio.html#mix-audio-get-output-configuration">
+<ANCHOR id="mix-audio-get-stream-byte-decoded" href="MixAudio/MixAudio.html#mix-audio-get-stream-byte-decoded">
+<ANCHOR id="MixAudio-mixaudiotypes" href="MixAudio/MixAudio-mixaudiotypes.html">
+<ANCHOR id="MixAudio-mixaudiotypes.synopsis" href="MixAudio/MixAudio-mixaudiotypes.html#MixAudio-mixaudiotypes.synopsis">
+<ANCHOR id="MixAudio-mixaudiotypes.description" href="MixAudio/MixAudio-mixaudiotypes.html#MixAudio-mixaudiotypes.description">
+<ANCHOR id="MixAudio-mixaudiotypes.details" href="MixAudio/MixAudio-mixaudiotypes.html#MixAudio-mixaudiotypes.details">
+<ANCHOR id="MixAudioManager" href="MixAudio/MixAudio-mixaudiotypes.html#MixAudioManager">
diff --git a/mix_audio/docs/reference/MixAudio/html/style.css b/mix_audio/docs/reference/MixAudio/html/style.css
new file mode 100644
index 0000000..bb44c28
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/style.css
@@ -0,0 +1,167 @@
+.synopsis, .classsynopsis
+{
+  background: #eeeeee;
+  border: solid 1px #aaaaaa;
+  padding: 0.5em;
+}
+.programlisting
+{
+  background: #eeeeff;
+  border: solid 1px #aaaaff;
+  padding: 0.5em;
+}
+.variablelist
+{
+  padding: 4px;
+  margin-left: 3em;
+}
+.variablelist td:first-child
+{
+  vertical-align: top;
+}
+
+/* this is needed so that the local anchors are displayed below the naviagtion */
+@media screen {
+  sup a.footnote
+  {
+    position: relative;
+    top: 0em ! important;
+  }
+  div.refnamediv a[name], div.refsect1 a[name]
+  {
+    position: relative;
+    top: -4.5em;
+  }
+  table.navigation#top
+  {
+    background: #ffeeee;
+    border: solid 1px #ffaaaa;
+    margin-top: 0;
+    margin-bottom: 0;
+    position: fixed;
+    top: 0;
+    left: 0;
+    height: 2em;
+    z-index: 1;
+  }
+  .navigation a
+  {
+    color: #770000;
+  }
+  .navigation a:visited
+  {
+    color: #550000;
+  }
+  td.shortcuts
+  {
+    color: #770000;
+    font-size: 80%;
+    white-space: nowrap;
+  }
+  div.refentry, div.chapter, div.reference, div.part, div.book, div.glossary, div.sect1, div.appendix, div.preface
+  {
+    position: relative;
+    top: 3em;
+    z-index: 0;
+  }
+  div.glossary, div.index
+  {
+    position: relative;
+    top: 2em;
+    z-index: 0;
+  }
+  div.refnamediv
+  {
+    margin-top: 2em;
+  }
+  body
+  {
+    padding-bottom: 20em;
+  }
+}
+@media print {
+  table.navigation {
+    visibility: collapse;
+    display: none;
+  }
+  div.titlepage table.navigation {
+    visibility: visible;
+    display: table;
+    background: #ffeeee;
+    border: solid 1px #ffaaaa;
+    margin-top: 0;
+    margin-bottom: 0;
+    top: 0;
+    left: 0;
+    height: 2em;
+  }
+}
+
+.navigation .title
+{
+  font-size: 200%;
+}
+
+
+div.gallery-float
+{
+  float: left;
+  padding: 10px;
+}
+div.gallery-float img
+{
+  border-style: none;
+}
+div.gallery-spacer
+{
+  clear: both;
+}
+a
+{
+  text-decoration: none;
+}
+a:hover
+{
+  text-decoration: underline;
+  color: #FF0000;
+}
+
+div.table table
+{
+  border-collapse: collapse;
+  border-spacing: 0px;
+  border-style: solid;
+  border-color: #777777;
+  border-width: 1px;
+}
+
+div.table table td, div.table table th
+{
+  border-style: solid;
+  border-color: #777777;
+  border-width: 1px;
+  padding: 3px;
+  vertical-align: top;
+}
+
+div.table table th
+{
+  background-color: #eeeeee;
+}
+
+hr
+{
+  color: #777777;
+  background: #777777;
+  border: 0;
+  height: 1px;
+  clear: both;
+}
+
+.footer
+{
+  padding-top: 3.5em;
+  color: #777777;
+  text-align: center;
+  font-size: 80%;
+}
diff --git a/mix_audio/docs/reference/MixAudio/html/tree-hierarchy.html b/mix_audio/docs/reference/MixAudio/html/tree-hierarchy.html
new file mode 100644
index 0000000..e6f8029
--- /dev/null
+++ b/mix_audio/docs/reference/MixAudio/html/tree-hierarchy.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Object Hierarchy</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="MixAudio Reference Manual">
+<link rel="up" href="index.html" title="MixAudio Reference Manual">
+<link rel="prev" href="MixAudio-mixaudiotypes.html" title="Mix Audio Types">
+<link rel="next" href="api-index-full.html" title="API Index">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Mix Audio API">
+<link rel="chapter" href="tree-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="api-index-full.html" title="API Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="MixAudio-mixaudiotypes.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">MixAudio Reference Manual</th>
+<td><a accesskey="n" href="api-index-full.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="tree-hierarchy"></a>Object Hierarchy</h2></div></div></div>
+<pre class="screen">
+    GObject
+        <a class="link" href="MixAudio.html" title="MixAudio">MixAudio</a>
+</pre>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/mix_audio/m4/Makefile.am b/mix_audio/m4/Makefile.am
new file mode 100644
index 0000000..66381d4
--- /dev/null
+++ b/mix_audio/m4/Makefile.am
@@ -0,0 +1 @@
+EXTRA_DIST += 
diff --git a/mix_audio/m4/as-mix-version.m4 b/mix_audio/m4/as-mix-version.m4
new file mode 100644
index 0000000..8b09d7c
--- /dev/null
+++ b/mix_audio/m4/as-mix-version.m4
@@ -0,0 +1,35 @@
+dnl as-mix-version.m4 
+
+dnl AS_MIX_VERSION(PACKAGE, PREFIX, MAJOR, MINOR, RELEASE)
+
+dnl example
+dnl AS_MIX_VERSION(mixaudio,MIXAUDIO, 0, 3, 2,)
+dnl for a 0.3.2 release version
+
+dnl this macro
+dnl - defines [$PREFIX]_MAJOR, MINOR and REVISION, CURRENT, AGE
+dnl - defines [$PREFIX], VERSION
+dnl - AC_SUBST's all defined vars
+
+AC_DEFUN([AS_MIX_VERSION],
+[
+  PACKAGE=[$1]
+  [$2]_MAJOR=[$3]
+  [$2]_MINOR=[$4]
+  [$2]_REVISION=[$5]
+  [$2]_CURRENT=m4_eval([$3] + [$4])
+  [$2]_AGE=[$4]
+  VERSION=[$3].[$4].[$5]
+
+  AC_SUBST([$2]_MAJOR)
+  AC_SUBST([$2]_MINOR)
+  AC_SUBST([$2]_REVISION)
+  AC_SUBST([$2]_CURRENT)
+  AC_SUBST([$2]_AGE)
+
+  AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Define the package name])
+  AC_SUBST(PACKAGE)
+  AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Define the version])
+  AC_SUBST(VERSION)
+  
+])
diff --git a/mix_audio/mixaudio.spec b/mix_audio/mixaudio.spec
new file mode 100644
index 0000000..e618d51
--- /dev/null
+++ b/mix_audio/mixaudio.spec
@@ -0,0 +1,56 @@
+# INTEL CONFIDENTIAL
+# Copyright 2009 Intel Corporation All Rights Reserved. 
+# The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+#
+# No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+
+Summary: MIX Audio
+Name: mixaudio
+Version: 0.3.5
+Release: 1
+Source0: %{name}-%{version}.tar.gz
+NoSource: 0
+License: Intel Proprietary
+Group: System Environment/Libraries
+BuildRoot: %{_tmppath}/%{name}-root
+ExclusiveArch: i586 i386
+BuildRequires: glib2-devel mixcommon-devel dbus-glib-devel
+
+%description
+MIX Audio is an user library interface for various hardware audio codecs
+available on the platform.
+
+%package devel
+Summary: Libraries include files
+Group: Development/Libraries
+Requires: %{name} = %{version}
+
+%description devel
+The %{name}-devel package contains the header files and static libraries
+for building applications which use %{name}.
+
+%prep
+%setup -q
+
+%build
+%autogen
+%configure --prefix=%{_prefix}
+make
+
+%install
+%make_install
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+%{_libdir}/libmixaudio.so.*
+
+%files devel
+%defattr(-,root,root)
+%{_libdir}/libmixaudio.so
+%{_libdir}/libmixaudio.la
+%{_libdir}/pkgconfig/mixaudio.pc
+%{_includedir}/*.h
+%doc COPYING
diff --git a/mix_audio/pkgconfig/Makefile.am b/mix_audio/pkgconfig/Makefile.am
new file mode 100644
index 0000000..ceea4fa
--- /dev/null
+++ b/mix_audio/pkgconfig/Makefile.am
@@ -0,0 +1,11 @@
+### all of the standard pc files we need to generate
+pcfiles = mixaudio.pc
+
+all-local: $(pcfiles)
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = $(pcfiles)
+
+EXTRA_DIST = mixaudio.pc.in	
+
+CLEANFILES = $(pcfiles)
diff --git a/mix_audio/pkgconfig/mixaudio.pc.in b/mix_audio/pkgconfig/mixaudio.pc.in
new file mode 100644
index 0000000..b521b5b
--- /dev/null
+++ b/mix_audio/pkgconfig/mixaudio.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+toolsdir=${exec_prefix}/bin
+
+Name: MixAudio
+Description: Intel MIX Audio 
+Requires: @MIXAUDIO_PKG_DEPS@
+Version: @VERSION@
+Libs: -L${libdir} -lmixaudio
+Cflags: -I${includedir}
diff --git a/mix_audio/src/Makefile.am b/mix_audio/src/Makefile.am
new file mode 100644
index 0000000..b03751b
--- /dev/null
+++ b/mix_audio/src/Makefile.am
@@ -0,0 +1,61 @@
+#INTEL CONFIDENTIAL
+#Copyright 2009 Intel Corporation All Rights Reserved. 
+#The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+#No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+#
+
+lib_LTLIBRARIES = libmixaudio.la 
+#noinst_LTLIBRARIES = libmixaudio_stub.la
+
+##############################################################################
+# sources used to compile
+libmixaudio_la_SOURCES = mixaudio.c \
+	sst_proxy.c \
+	mixaip.c \
+	mixacp.c \
+	mixacpmp3.c \
+	mixacpwma.c \
+	mixacpaac.c 
+
+# flags used to compile this plugin
+# add other _CFLAGS and _LIBS as needed
+libmixaudio_la_CFLAGS = $(DBUS_GLIB_CFLAGS) $(GLIB_CFLAGS) $(MIX_CFLAGS) $(GOBJECT_CFLAGS) $(GTHREAD_CFLAGS) -DMIXAUDIO_CURRENT=@MIXAUDIO_CURRENT@ -DMIXAUDIO_AGE=@MIXAUDIO_AGE@ -DMIXAUDIO_REVISION=@MIXAUDIO_REVISION@ $(MIXCOMMON_CFLAGS) -DMIX_LOG_ENABLE
+libmixaudio_la_LIBADD = $(DBUS_GLIB_LIBS) $(GLIB_LIBS) $(GOBJECT_LIBS) $(GTHREAD_LIBS) $(MIXCOMMON_LIBS)
+libmixaudio_la_LDFLAGS = $(DBUS_GLIB_LIBS)$(GLIB_LIBS) $(GOBJECT_LIBS) $(GTHREAD_LIBS) -version-info @MIXAUDIO_CURRENT@:@MIXAUDIO_REVISION@:@MIXAUDIO_AGE@ $(MIXCOMMON_LIBS)
+
+libmixaudio_la_LIBTOOLFLAGS = --tag=disable-static 
+
+# additional flags to enable backdoor or workaround
+if LPESTUB
+libmixaudio_la_CFLAGS += -DLPESTUB
+endif
+
+if WORKAROUND
+libmixaudio_la_CFLAGS += -DDROP_WORKAROUND
+endif
+
+#libmixaudio_stub_la_SOURCES = $(libmixaudio_la_SOURCES)
+#libmixaudio_stub_la_CFLAGS = $(libmixaudio_la_CFLAGS) -DLPESTUB
+#libmixaudio_stub_la_LIBADD = $(libmixaudio_la_LIBADD)
+#libmixaudio_stub_la_LDFLAGS = $(libmixaudio_la_LDFLAGS)
+#libmixaudio_stub_la_LIBTOOLFLAGS = $(libmixaudio_la_LIBTOOLFLAGS)
+
+# headers we need but don't want installed
+noinst_HEADERS = intel_sst_ioctl.h sst_proxy.h pvt.h amhelper.h
+
+# TODO: decide whehter a /usr/include/mix is needed for mix headers
+include_HEADERS = mixaudio.h \
+	mixaudiotypes.h \
+	mixaip.h \
+	mixacp.h \
+	mixacpmp3.h \
+	mixacpwma.h \
+	mixacpaac.h 
+
+if AUDIO_MANAGER
+libmixaudio_la_CFLAGS += -DAUDIO_MANAGER
+libmixaudio_la_SOURCES += amhelper.c 
+#include_HEADERS += amhelper.h
+endif
+
diff --git a/mix_audio/src/amhelper.c b/mix_audio/src/amhelper.c
new file mode 100644
index 0000000..501ece7
--- /dev/null
+++ b/mix_audio/src/amhelper.c
@@ -0,0 +1,120 @@
+#include "amhelper.h"
+#include <mixlog.h>
+
+static DBusGConnection *connection;
+
+static DBusGProxy *proxy_lpe = NULL;
+
+static gboolean am_enable=FALSE;
+
+/* Connect to am dbus server
+ * return -1 means failed
+ * return 0 means succeeded
+ * */
+gint dbus_init() {
+    GError *error;
+    const char *name = "org.moblin.audiomanager";
+
+    const char *path_lpe = "/org/moblin/audiomanager/lpe";
+    const char *interface_lpe = "org.moblin.audiomanager.lpe";
+
+    const gchar* env  = g_getenv("MIX_AM");
+    if (env && env[0] == '1') {
+	am_enable = TRUE;
+    }
+    else
+	am_enable = FALSE;
+
+    if (am_enable) {
+	    error = NULL;
+	    connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
+
+	    if (connection == NULL) {
+		mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "Failed to open connection to bus: %s\n",
+		            error->message);
+		g_error_free(error);
+		return -1;
+	    }
+	    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_VERBOSE, "Successfully get a dbus connection\n");
+
+	    proxy_lpe = dbus_g_proxy_new_for_name(connection, name,
+		                            path_lpe, interface_lpe);
+	    if (proxy_lpe == NULL) {
+		mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "Failed to connect to AM dbus server\n");
+		return -1;
+	    } 
+	    else {
+	    	mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_VERBOSE, "Successfully connected to AM dbus\npath: %s\ninterface: %s\n",
+			path_lpe, interface_lpe);
+	    }
+    }
+    return 0;
+}
+
+gint32 lpe_stream_register(guint32 lpe_stream_id, char* media_role, char* lpe_stream_name, guint32 stream_type)
+{
+  GError *error;
+  gint32 s_output = 0;
+  error = NULL;
+
+  if (am_enable) {
+	  mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "lpe_stream_id: %d\n", lpe_stream_id);
+
+	  if (lpe_stream_id == 0) {
+		return 0;
+	  }
+	  if(!dbus_g_proxy_call (proxy_lpe, "LPEStreamRegister", &error, G_TYPE_UINT, 
+		lpe_stream_id, G_TYPE_STRING, media_role, G_TYPE_STRING, lpe_stream_name, G_TYPE_UINT, stream_type,
+		G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID)) {
+		mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "LPEStreamRegister failed: %s\n", error->message);
+                g_error_free(error);
+		return s_output;
+	  }
+
+	  mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "LPEStreamRegister returned am stream id %d\n", s_output);
+  }
+
+  return s_output;
+}
+
+gint32 lpe_stream_unregister(guint32 am_stream_id)
+{
+  GError *error;
+  gint32 s_output = 0;
+
+  if (am_enable) {
+	  error = NULL;
+	  if(!dbus_g_proxy_call (proxy_lpe, "LPEStreamUnregister", &error, G_TYPE_UINT, am_stream_id, 
+		G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID)){
+		mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "LPEStreamUnregister failed: %s\n", error->message);
+		g_error_free(error);
+		return s_output;
+	  }
+  }
+  return s_output;
+}
+
+gint32 lpe_stream_notify_pause(guint32 stream_id)
+{
+  GError *error;
+  gint32 s_output=0;
+
+  if (am_enable) {
+    dbus_g_proxy_call (proxy_lpe, "LPEStreamNotifyPause", &error, G_TYPE_UINT, stream_id, G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID);
+  }
+
+  return s_output;
+}
+
+gint32 lpe_stream_notify_resume(guint32 stream_id)
+{
+  GError *error;
+  gint32 s_output=0;
+
+  if (am_enable) {
+    dbus_g_proxy_call (proxy_lpe, "LPEStreamNotifyResume", &error, G_TYPE_UINT, stream_id, G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID);
+  }
+
+  return s_output;
+}
+
diff --git a/mix_audio/src/amhelper.h b/mix_audio/src/amhelper.h
new file mode 100644
index 0000000..9ec115c
--- /dev/null
+++ b/mix_audio/src/amhelper.h
@@ -0,0 +1,25 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+#ifndef __MIX_AM_HELPER_H__
+#define __MIX_AM_HELPER_H__
+
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib.h>
+
+gint dbus_init();
+
+gint32 lpe_stream_register(guint32 lpe_stream_id, char* media_role, char* lpe_stream_name, guint32 stream_type);
+
+gint32 lpe_stream_unregister(guint32 am_stream_id);
+
+gint32 lpe_stream_notify_pause(guint32 stream_id);
+
+gint32 lpe_stream_notify_resume(guint32 stream_id);
+
+#endif
diff --git a/mix_audio/src/intel_sst_ioctl.h b/mix_audio/src/intel_sst_ioctl.h
new file mode 100644
index 0000000..7fecf12
--- /dev/null
+++ b/mix_audio/src/intel_sst_ioctl.h
@@ -0,0 +1,337 @@
+#ifndef __INTEL_SST_IOCTL_H__
+#define __INTEL_SST_IOCTL_H__
+
+enum sst_codec_types {
+/*  AUDIO/MUSIC CODEC Type Definitions */
+	SST_CODEC_TYPE_UNKNOWN = 0,
+	SST_CODEC_TYPE_PCM,	/* Pass through Audio codec */
+	SST_CODEC_TYPE_MP3,
+	SST_CODEC_TYPE_MP24,
+	SST_CODEC_TYPE_AAC,
+	SST_CODEC_TYPE_AACP,
+	SST_CODEC_TYPE_eAACP,
+	SST_CODEC_TYPE_WMA9,
+	SST_CODEC_TYPE_WMA10,
+	SST_CODEC_TYPE_WMA10P,
+	SST_CODEC_TYPE_RA,
+	SST_CODEC_TYPE_DDAC3,
+	SST_CODEC_TYPE_STEREO_TRUE_HD,
+	SST_CODEC_TYPE_STEREO_HD_PLUS,
+
+	/*  VOICE CODEC Type Definitions */
+	SST_CODEC_TYPE_VOICE_PCM = 0x21, /* Pass through voice codec */
+	SST_CODEC_SRC = 0x64,
+	SST_CODEC_MIXER = 0x65,
+	SST_CODEC_DOWN_MIXER = 0x66,
+	SST_CODEC_VOLUME_CONTROL = 0x67,
+	SST_CODEC_OEM1 = 0xC8,
+	SST_CODEC_OEM2 = 0xC9,
+};
+
+enum snd_sst_stream_ops {
+	STREAM_OPS_PLAYBACK = 0,	/* Decode */
+	STREAM_OPS_CAPTURE,		/* Encode */
+	STREAM_OPS_PLAYBACK_DRM,	/* Play Audio/Voice */
+	STREAM_OPS_PLAYBACK_ALERT,	/* Play Audio/Voice */
+	STREAM_OPS_CAPTURE_VOICE_CALL,	/* CSV Voice recording */
+};
+
+enum stream_type {
+	STREAM_TYPE_MUSIC = 1,
+	STREAM_TYPE_VOICE
+};
+
+/* Firmware Version info */
+struct snd_sst_fw_version {
+	__u8 build;	/* build number*/
+	__u8 minor;	/* minor number*/
+	__u8 major;	/* major number*/
+	__u8 type; /* build type*/
+};
+
+/* Port info structure */
+struct snd_sst_port_info {
+	__u16 port_type;
+	__u16  reserved;
+};
+
+/* Mixer info structure */
+struct snd_sst_mix_info {
+	__u16 max_streams;
+	__u16 reserved;
+};
+
+/* PCM Parameters */
+struct snd_pcm_params {
+	__u16 codec;	/* codec type */
+	__u8 num_chan;	/* 1=Mono, 2=Stereo	*/
+	__u8 pcm_wd_sz;	/* 16/24 - bit*/
+	__u32 brate;	/* Bitrate in bits per second */
+	__u32 sfreq;	/* Sampling rate in Hz */
+	__u16 frame_size;
+	__u16 samples_per_frame;	/* Frame size num samples per frame */
+	__u32 period_count; /* period elapsed time count, in samples,*/
+};
+
+/* MP3 Music Parameters Message */
+struct snd_mp3_params {
+	__u16  codec;
+	__u8   num_chan;	/* 1=Mono, 2=Stereo	*/
+	__u8   pcm_wd_sz; /* 16/24 - bit*/
+	__u32  brate; /* Use the hard coded value. */
+	__u32  sfreq; /* Sampling freq eg. 8000, 441000, 48000 */
+	__u8  crc_check; /* crc_check - disable (0) or enable (1) */
+	__u8  op_align; /* op align 0- 16 bit, 1- MSB, 2 LSB*/
+	__u16  reserved;	/* Unused */
+};
+
+#define AAC_BIT_STREAM_ADTS		0
+#define AAC_BIT_STREAM_ADIF		1
+#define AAC_BIT_STREAM_RAW		2
+
+/* AAC Music Parameters Message */
+struct snd_aac_params {
+	__u16 codec;
+	__u8 num_chan; /* 1=Mono, 2=Stereo*/
+	__u8 pcm_wd_sz; /* 16/24 - bit*/
+	__u32 brate;
+	__u32 sfreq; /* Sampling freq eg. 8000, 441000, 48000 */
+	__u32 aac_srate;	/* Plain AAC decoder operating sample rate */
+	__u8 mpg_id; /* 0=MPEG-2, 1=MPEG-4 */
+	__u8 bs_format; /* input bit stream format adts=0, adif=1, raw=2 */
+	__u8 aac_profile; /* 0=Main Profile, 1=LC profile, 3=SSR profile */
+	__u8 ext_chl; /* No.of external channels */
+	__u8 aot; /* Audio object type. 1=Main , 2=LC , 3=SSR, 4=SBR*/
+	__u8 op_align; /* output alignment 0=16 bit , 1=MSB, 2= LSB align */
+	__u8 brate_type; /* 0=CBR, 1=VBR */
+	__u8 crc_check; /* crc check 0= disable, 1=enable */
+	__s8 bit_stream_format[8]; /* input bit stream format adts/adif/raw */
+	__u8 jstereo; /* Joint stereo Flag */
+	__u8 sbr_present; /* 1 = SBR Present, 0 = SBR absent, for RAW */
+	__u8 downsample;       /* 1 = Downsampling ON, 0 = Downsampling OFF */
+	__u8 num_syntc_elems; /* 1- Mono/stereo, 0 - Dual Mono, 0 - for raw */
+	__s8 syntc_id[2]; /* 0 for ID_SCE(Dula Mono), -1 for raw */
+	__s8 syntc_tag[2]; /* raw - -1 and 0 -16 for rest of the streams */
+	__u8 pce_present; /* Flag. 1- present 0 - not present, for RAW */
+	__u8 reserved;
+	__u16 reserved1;
+
+};
+
+/* WMA Music Parameters Message */
+struct snd_wma_params {
+	__u16  codec;
+	__u8   num_chan;	/* 1=Mono, 2=Stereo	*/
+	__u8   pcm_wd_sz;	/* 16/24 - bit*/
+	__u32  brate; 	/* Use the hard coded value. */
+	__u32  sfreq;	/* Sampling freq eg. 8000, 441000, 48000 */
+	__u32  channel_mask;  /* Channel Mask */
+	__u16  format_tag;	/* Format Tag */
+	__u16  block_align;	/* packet size */
+	__u16  wma_encode_opt;/* Encoder option */
+	__u8 op_align;	/* op align 0- 16 bit, 1- MSB, 2 LSB*/
+	__u8 pcm_src;	/* input pcm bit width*/
+};
+
+/* Pre processing param structure */
+struct snd_prp_params {
+	__u32  reserved;	/* No pre-processing defined yet */
+};
+
+/* Post processing Capability info structure */
+struct snd_sst_postproc_info {
+	__u32 src_min;		/* Supported SRC Min sampling freq */
+	__u32 src_max;		/* Supported SRC Max sampling freq */
+	__u8  src;		/* 0=Not supported, 1=Supported */
+	__u8  bass_boost;		/* 0=Not Supported, 1=Supported */
+	__u8  stereo_widening;	/* 0=Not Supported, 1=Supported */
+	__u8  volume_control; 	/* 0=Not Supported, 1=Supported */
+	__s16 min_vol;		/* Minimum value of Volume in dB */
+	__s16 max_vol;		/* Maximum value of Volume in dB */
+	__u8 mute_control;		/*0=No Mute, 1=Mute*/
+	__u8 reserved1;
+	__u16 reserved2;
+};
+
+/* pre processing Capability info structure */
+struct snd_sst_prp_info {
+	__s16 min_vol;			/* Minimum value of Volume in dB */
+	__s16 max_vol;			/* Maximum value of Volume in dB */
+	__u8 volume_control; 		/* 0=Not Supported, 1=Supported */
+	__u8 reserved1;			/* for 32 bit alignment */
+	__u16 reserved2;			/* for 32 bit alignment */
+} __attribute__ ((packed));
+
+/* Firmware capabilities info */
+struct snd_sst_fw_info {
+	struct snd_sst_fw_version fw_version; /* Firmware version */
+	__u8 audio_codecs_supported[8];	/* Codecs supported by FW */
+	__u32 recommend_min_duration; /* Min duration for Low power Playback*/
+	__u8 max_pcm_streams_supported; /*Max number of PCM streams supported */
+	__u8 max_enc_streams_supported;	/*Max number of Encoded streams */
+	__u16 reserved;			/* 32 bit alignment*/
+	struct snd_sst_postproc_info pop_info; /* Post processing capability*/
+	struct snd_sst_prp_info prp_info; /* pre_processing mod cap info */
+	struct snd_sst_port_info port_info[2]; /* Port info */
+	struct snd_sst_mix_info mix_info; 	/* Mixer info */
+	__u32 min_input_buf; /*minmum i/p buffer for decode*/
+};
+
+/* Add the codec parameter structures for new codecs to be supported */
+#define CODEC_PARAM_STRUCTURES \
+	struct snd_pcm_params pcm_params; \
+	struct snd_mp3_params mp3_params; \
+	struct snd_aac_params aac_params; \
+	struct snd_wma_params wma_params;
+
+/* Pre and Post Processing param structures */
+#define PPP_PARAM_STRUCTURES \
+	struct snd_prp_params prp_params;
+
+/* Codec params struture */
+union  snd_sst_codec_params {
+	 CODEC_PARAM_STRUCTURES;
+};
+
+/* Pre-processing params struture */
+union snd_sst_ppp_params{
+	 PPP_PARAM_STRUCTURES;
+};
+
+struct snd_sst_stream_params {
+	union snd_sst_codec_params uc;
+} __attribute__ ((packed));
+
+struct snd_sst_params {
+	__u32 result;
+	__u32 stream_id;
+	__u8 codec;
+	__u8 ops;
+	__u8 stream_type;
+	struct snd_sst_stream_params sparams;
+};
+
+/*ioctl related stuff here*/
+struct snd_sst_pmic_config {
+	__u32  sfreq;                /* Sampling rate in Hz */
+	__u16  num_chan;             /* Mono =1 or Stereo =2 */
+	__u16  pcm_wd_sz;            /* Number of bits per sample */
+} __attribute__ ((packed));
+
+struct snd_sst_get_stream_params {
+	struct snd_sst_params codec_params;
+	struct snd_sst_pmic_config pcm_params;
+};
+
+enum snd_sst_target_type {
+	SND_SST_TARGET_PMIC = 1,
+	SND_SST_TARGET_OTHER,
+};
+
+enum snd_sst_port_action {
+	SND_SST_PORT_PREPARE = 1,
+	SND_SST_PORT_ACTIVATE,
+};
+
+/* Target selection per device structure */
+struct snd_sst_slot_info {
+	__u8 mix_enable;		/* Mixer enable or disable */
+	__u8 device_type;
+	__u8 device_instance; 	/* 0, 1, 2 */
+	__u8 target_type;
+	__u16 slot[2];
+	__u8 master;
+	__u8 action;
+	__u16 reserved;
+	struct snd_sst_pmic_config pcm_params;
+} __attribute__ ((packed));
+
+/* Target device list structure */
+struct snd_sst_target_device  {
+	__u32 device_route;
+	struct snd_sst_slot_info devices[2];
+} __attribute__ ((packed));
+
+struct snd_sst_driver_info {
+	__u32 version;	/* Version of the driver */
+	__u32 active_pcm_streams;
+	__u32 active_enc_streams;
+	__u32 max_pcm_streams;
+	__u32 max_enc_streams;
+	__u32 buf_per_stream;
+};
+
+struct snd_sst_vol {
+	__u32	stream_id;
+	__s32		volume;
+	__u32	ramp_duration;
+	__u32 ramp_type;		/* Ramp type, default=0 */
+};
+
+struct snd_sst_mute {
+	__u32	stream_id;
+	__u32	mute;
+};
+
+enum snd_sst_buff_type {
+	SST_BUF_USER = 1,
+	SST_BUF_MMAP,
+	SST_BUF_RAR,
+};
+
+struct snd_sst_mmap_buff_entry {
+	unsigned int offset;
+	unsigned int size;
+};
+
+struct snd_sst_mmap_buffs {
+	unsigned int entries;
+	enum snd_sst_buff_type type;
+	struct snd_sst_mmap_buff_entry *buff;
+};
+
+struct snd_sst_buff_entry {
+	void *buffer;
+	unsigned int size;
+};
+
+struct snd_sst_buffs {
+	unsigned int entries;
+	__u8 type;
+	struct snd_sst_buff_entry *buff_entry;
+};
+
+struct snd_sst_dbufs  {
+	unsigned long long input_bytes_consumed;
+	unsigned long long output_bytes_produced;
+	struct snd_sst_buffs *ibufs;
+	struct snd_sst_buffs *obufs;
+};
+
+/*IOCTL defined here*/
+/*SST MMF IOCTLS only*/
+#define SNDRV_SST_STREAM_SET_PARAMS _IOR('L', 0x00, \
+					struct snd_sst_stream_params *)
+#define SNDRV_SST_STREAM_GET_PARAMS _IOWR('L', 0x01, \
+					struct snd_sst_get_stream_params *)
+#define SNDRV_SST_STREAM_GET_TSTAMP _IOWR('L', 0x02, __u64 *)
+#define	SNDRV_SST_STREAM_DECODE	_IOWR('L', 0x03, struct snd_sst_dbufs *)
+#define SNDRV_SST_STREAM_BYTES_DECODED _IOWR('L', 0x04, __u64 *)
+#define SNDRV_SST_STREAM_START	_IO('A', 0x42)
+#define SNDRV_SST_STREAM_DROP 	_IO('A', 0x43)
+#define SNDRV_SST_STREAM_DRAIN	_IO('A', 0x44)
+#define SNDRV_SST_STREAM_PAUSE 	_IOW('A', 0x45, int)
+#define SNDRV_SST_STREAM_RESUME _IO('A', 0x47)
+#define SNDRV_SST_MMAP_PLAY	_IOW('L', 0x05, struct snd_sst_mmap_buffs *)
+#define SNDRV_SST_MMAP_CAPTURE _IOW('L', 0x06, struct snd_sst_mmap_buffs *)
+/*SST common ioctls */
+#define SNDRV_SST_DRIVER_INFO	_IOR('L', 0x10, struct snd_sst_driver_info *)
+#define SNDRV_SST_SET_VOL	_IOW('L', 0x11, struct snd_sst_vol *)
+#define SNDRV_SST_GET_VOL	_IOW('L', 0x12, struct snd_sst_vol *)
+#define SNDRV_SST_MUTE		_IOW('L', 0x13, struct snd_sst_mute *)
+/*AM Ioctly only*/
+#define SNDRV_SST_FW_INFO	_IOR('L', 0x20,  struct snd_sst_fw_info *)
+#define SNDRV_SST_SET_TARGET_DEVICE _IOW('L', 0x21, \
+					struct snd_sst_target_device *)
+
+#endif /*__INTEL_SST_IOCTL_H__*/
diff --git a/mix_audio/src/mixacp.c b/mix_audio/src/mixacp.c
new file mode 100644
index 0000000..e7ce507
--- /dev/null
+++ b/mix_audio/src/mixacp.c
@@ -0,0 +1,322 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+/**
+ * SECTION:mixacp
+ * @short_description: MixAudio configuration parameters object.
+ * @include: mixacp.h
+ *
+ * #MixAudio configuration parameters object which is used to communicate audio specific parameters.
+ * 
+ * This object is should not be instantiated as codec specific parameters are definied in individual derive classes.
+ */
+
+#include "mixacp.h"
+#include <mixlog.h>
+
+static GType _mix_acp_type = 0;
+static MixParamsClass *parent_class = NULL;
+
+#define _do_init { _mix_acp_type = g_define_type_id; }
+
+gboolean mix_acp_copy(MixParams* target, const MixParams *src);
+MixParams* mix_acp_dup(const MixParams *obj);
+gboolean mix_acp_equal(MixParams* first, MixParams *second);
+static void mix_acp_finalize(MixParams *obj);
+
+G_DEFINE_TYPE_WITH_CODE(MixAudioConfigParams, mix_acp, MIX_TYPE_PARAMS, _do_init);
+
+void
+_mix_acp_initialize (void)
+{
+  /* the MixParams types need to be class_ref'd once before it can be
+   * done from multiple threads;
+   * see http://bugzilla.gnome.org/show_bug.cgi?id=304551 */
+  g_type_class_ref (mix_acp_get_type ());
+}
+
+static void mix_acp_init (MixAudioConfigParams *self)
+{
+  self->decode_mode = MIX_DECODE_NULL;
+  self->stream_name = NULL;
+  self->audio_manager=MIX_AUDIOMANAGER_NONE;
+  self->num_channels = 0;
+  self->bit_rate = 0;
+  self->sample_freq = 0;
+  self->bits_per_sample = MIX_ACP_BPS_16;
+  self->op_align = MIX_ACP_OUTPUT_ALIGN_16;
+}
+
+static void mix_acp_class_init(MixAudioConfigParamsClass *klass)
+{
+  MixParamsClass *mixparams_class = MIX_PARAMS_CLASS(klass);
+
+  /* setup static parent class */
+  parent_class = (MixParamsClass *) g_type_class_peek_parent (klass);
+
+  mixparams_class->finalize = mix_acp_finalize;
+  mixparams_class->copy = (MixParamsCopyFunction)mix_acp_copy;
+  mixparams_class->dup = (MixParamsDupFunction)mix_acp_dup;
+  mixparams_class->equal = (MixParamsEqualFunction)mix_acp_equal;
+
+  klass->print_params = NULL;
+}
+
+MixAudioConfigParams *mix_acp_new(void)
+{
+  MixAudioConfigParams *ret = (MixAudioConfigParams *)g_type_create_instance (MIX_TYPE_AUDIOCONFIGPARAMS);
+
+  return ret;
+}
+
+void mix_acp_finalize(MixParams *obj)
+{
+  /* clean up here. */
+  MixAudioConfigParams *acp = MIX_AUDIOCONFIGPARAMS(obj);
+
+  if (acp->stream_name) {
+    g_free(acp->stream_name);
+    acp->stream_name = NULL;
+  }
+  
+  /* Chain up parent */ 
+  if (parent_class->finalize) 
+    parent_class->finalize(obj);
+}
+
+MixAudioConfigParams *mix_acp_ref(MixAudioConfigParams *mix) 
+{ 
+  return (MixAudioConfigParams*)mix_params_ref(MIX_PARAMS(mix)); 
+}
+
+/**
+ * mix_acp_dup:
+ * @obj: a #MixAudioConfigParams object
+ * @returns: a newly allocated duplicate of the object.
+ * 
+ * Copy duplicate of the object.
+ */
+MixParams* mix_acp_dup(const MixParams *obj)
+{
+  MixParams *ret = NULL;
+
+  if (MIX_IS_AUDIOCONFIGPARAMS(obj))
+  {
+    MixAudioConfigParams *duplicate = mix_acp_new();
+    if (mix_acp_copy(MIX_PARAMS(duplicate), MIX_PARAMS(obj)))
+    {
+      ret = MIX_PARAMS(duplicate);
+    }
+    else
+    {
+      mix_acp_unref(duplicate);
+    }
+  }
+
+  return ret;
+}
+
+/**
+ * mix_acp_copy:
+ * @target: copy to target
+ * @src: copy from src
+ * @returns: boolean indicates if copy is successful.
+ * 
+ * Copy instance data from @src to @target.
+ */
+gboolean mix_acp_copy(MixParams* target, const MixParams *src)
+{
+  if (MIX_IS_AUDIOCONFIGPARAMS(target) && MIX_IS_AUDIOCONFIGPARAMS(src))
+  {
+    MixAudioConfigParams *t = MIX_AUDIOCONFIGPARAMS(target);
+    MixAudioConfigParams *s = MIX_AUDIOCONFIGPARAMS(src);
+
+    t->decode_mode = s->decode_mode;
+    t->stream_name = g_strdup(s->stream_name);
+    t->audio_manager=s->audio_manager;
+    t->num_channels = s->num_channels;
+    t->bit_rate = s->bit_rate;
+    t->sample_freq = s->sample_freq;
+    t->bits_per_sample = s->bits_per_sample;
+    t->op_align = s->op_align;
+
+    // Now chainup base class
+    if (parent_class->copy)
+    {
+      return parent_class->copy(MIX_PARAMS_CAST(target), MIX_PARAMS_CAST(src));
+    }
+    else
+      return TRUE;
+  }
+  return FALSE;
+}
+
+/**
+ * mix_acp_equal:
+ * @first: first object to compare
+ * @second: seond object to compare
+ * @returns: boolean indicates if instance are equal.
+ * 
+ * Copy instance data from @src to @target.
+ */
+gboolean mix_acp_equal(MixParams* first, MixParams *second)
+{
+  gboolean ret = FALSE;
+  
+  if (first && second)
+  {
+    if (first == second) return TRUE;
+  }
+  else
+  {
+    // one of them is NULL.
+    return FALSE;
+  }
+
+  // members within this scope equal. chaining up.
+  MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class);
+  if (klass->equal)
+    ret = parent_class->equal(first, second);
+  else
+    ret = TRUE;
+
+  if (ret && MIX_IS_AUDIOCONFIGPARAMS(first) && MIX_IS_AUDIOCONFIGPARAMS(second))
+  {
+    MixAudioConfigParams *acp1 = MIX_AUDIOCONFIGPARAMS(first);
+    MixAudioConfigParams *acp2 = MIX_AUDIOCONFIGPARAMS(second);
+
+    ret = (acp1->decode_mode == acp2->decode_mode) &&
+            (acp1->audio_manager == acp2->audio_manager) &&
+            (acp1->num_channels == acp2->num_channels) &&
+            (acp1->bit_rate == acp2->bit_rate) &&
+            (acp1->sample_freq == acp2->sample_freq) &&
+            (acp1->bits_per_sample == acp2->bits_per_sample) &&
+            (acp1->op_align == acp2->op_align) && 
+            (!g_strcmp0(acp1->stream_name, acp2->stream_name));
+            //g_strcmp0 handles NULL gracefully
+  }
+
+  return ret;
+}
+
+
+gboolean mix_acp_is_streamname_valid(MixAudioConfigParams *obj)
+{
+  if (MIX_IS_AUDIOCONFIGPARAMS(obj))
+    if ((obj->stream_name) && (obj->stream_name[0] != 0)) return TRUE;
+
+  return FALSE;
+}
+
+gchar *mix_acp_get_streamname(MixAudioConfigParams *obj)
+{
+  gchar *ret = NULL;
+  if (G_LIKELY(MIX_IS_AUDIOCONFIGPARAMS(obj)) && obj->stream_name)
+  {
+    ret = g_strdup(obj->stream_name);
+  }
+  return ret;
+}
+
+MIX_RESULT mix_acp_set_streamname(MixAudioConfigParams *obj, const gchar *streamname)
+{
+  MIX_RESULT ret = MIX_RESULT_FAIL;
+
+  if (!obj) return MIX_RESULT_NULL_PTR;
+
+  if (G_LIKELY(MIX_IS_AUDIOCONFIGPARAMS(obj)))
+  {
+    if (obj->stream_name)
+    {
+      g_free(obj->stream_name);
+      obj->stream_name = NULL;
+    }
+
+    if (streamname) obj->stream_name = g_strdup(streamname);
+
+    ret = MIX_RESULT_SUCCESS;
+  }
+  else
+  {
+    ret = MIX_RESULT_INVALID_PARAM;
+  }  
+
+  return ret;
+}
+
+MixACPBPSType mix_acp_get_bps(MixAudioConfigParams *obj)
+{
+  if (G_LIKELY(obj))
+    return obj->bits_per_sample;
+  else
+    return 0;
+}
+
+MIX_RESULT mix_acp_set_bps(MixAudioConfigParams *obj, MixACPBPSType type)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+  
+  if (!obj) return MIX_RESULT_NULL_PTR;
+  
+  if (G_LIKELY(MIX_IS_AUDIOCONFIGPARAMS(obj)))
+  {
+    switch (type)
+    {
+      case MIX_ACP_BPS_UNKNOWN:
+      case MIX_ACP_BPS_16:
+      case MIX_ACP_BPS_24:
+        obj->bits_per_sample = type;
+        break;
+      default:
+        ret = MIX_RESULT_INVALID_PARAM;
+        break;
+    }
+  }
+  else
+  {
+    ret = MIX_RESULT_INVALID_PARAM;
+  }
+
+  return ret;
+}
+
+
+MixACPOpAlign mix_acp_get_op_align(MixAudioConfigParams *obj)
+{
+  return (obj->op_align);
+}
+
+MIX_RESULT mix_acp_set_op_align(MixAudioConfigParams *obj, MixACPOpAlign op_align)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  if ((op_align >= MIX_ACP_OUTPUT_ALIGN_16) && (op_align < MIX_ACP_OUTPUT_ALIGN_LAST))
+    obj->op_align = op_align;
+  else ret=MIX_RESULT_INVALID_PARAM;
+
+  return ret;
+}
+
+void mix_acp_print_params(MixAudioConfigParams *obj)
+{
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "decode_mode: %d\n", obj->decode_mode);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "stream_name: %s\n", obj->stream_name);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "audio_manager: %d\n", obj->audio_manager);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "num_channels: %d\n", obj->num_channels);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "bit_rate: %d\n", obj->bit_rate);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "sample_freq: %d\n", obj->sample_freq);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "bits_per_sample: %d\n", obj->bits_per_sample);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "op_align: %d\n", obj->op_align);
+
+    MixAudioConfigParamsClass *klass = MIX_AUDIOCONFIGPARAMS_GET_CLASS(obj);
+    if (klass->print_params)
+    {
+      klass->print_params(obj);
+    } 
+}
+
diff --git a/mix_audio/src/mixacp.h b/mix_audio/src/mixacp.h
new file mode 100644
index 0000000..0acd309
--- /dev/null
+++ b/mix_audio/src/mixacp.h
@@ -0,0 +1,367 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+#ifndef __MIX_AUDIOCONFIGPARAMS_H__
+#define __MIX_AUDIOCONFIGPARAMS_H__
+
+
+#include "mixparams.h"
+#include "mixresult.h"
+#include "mixaudiotypes.h"
+
+/**
+ * MixACPOpAlign:
+ * @MIX_ACP_OUTPUT_ALIGN_UNKNOWN: Output alignment undefined.
+ * @IX_ACP_OUTPUT_ALIGN_16: Output word is 16-bit aligned
+ * @MIX_ACP_OUTPUT_ALIGN_MSB: Output word is MSB aligned
+ * @MIX_ACP_OUTPUT_ALIGN_LSB: Output word is LSB aligned
+ * @MIX_ACP_OUTPUT_ALIGN_LAST: Last entry in list.
+ * 
+ * Audio Output alignment.
+ * 
+ */
+typedef enum {
+  MIX_ACP_OUTPUT_ALIGN_UNKNOWN=-1,
+  MIX_ACP_OUTPUT_ALIGN_16=0,
+  MIX_ACP_OUTPUT_ALIGN_MSB,
+  MIX_ACP_OUTPUT_ALIGN_LSB,
+  MIX_ACP_OUTPUT_ALIGN_LAST
+} MixACPOpAlign;
+
+/**
+ * MixACPBPSType:
+ * @MIX_ACP_BPS_UNKNOWN: Bit Per Sample undefined.
+ * @MIX_ACP_BPS_16: Output bits per sample is 16 bits 
+ * @MIX_ACP_BPS_24: Output bits per sample is 24 bits 
+ * 
+ * Audio Output Size in bits per sample.
+ * 
+ */
+typedef enum {
+  MIX_ACP_BPS_UNKNOWN=0,
+  MIX_ACP_BPS_16=16,
+  MIX_ACP_BPS_24=24,
+} MixACPBPSType;
+
+/**
+ * MIX_TYPE_AUDIOCONFIGPARAMS:
+ * 
+ * Get type of class.
+ */
+#define MIX_TYPE_AUDIOCONFIGPARAMS (mix_acp_get_type ())
+
+/**
+ * MIX_AUDIOCONFIGPARAMS:
+ * @obj: object to be type-casted.
+ * 
+ * Type casting.
+ */
+#define MIX_AUDIOCONFIGPARAMS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIX_TYPE_AUDIOCONFIGPARAMS, MixAudioConfigParams))
+
+/**
+ * MIX_IS_AUDIOCONFIGPARAMS:
+ * @obj: an object.
+ * 
+ * Checks if the given object is an instance of #MixAudioConfigParams
+ */
+#define MIX_IS_AUDIOCONFIGPARAMS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIX_TYPE_AUDIOCONFIGPARAMS))
+
+/**
+ * MIX_AUDIOCONFIGPARAMS_CLASS:
+ * @klass: class to be type-casted.
+ *
+ * Type casting.
+ */
+#define MIX_AUDIOCONFIGPARAMS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MIX_TYPE_AUDIOCONFIGPARAMS, MixAudioConfigParamsClass))
+
+/**
+ * MIX_IS_AUDIOCONFIGPARAMS_CLASS:
+ * @klass: a class.
+ * 
+ * Checks if the given class is #MixAudioConfigParamsClass
+ */
+#define MIX_IS_AUDIOCONFIGPARAMS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MIX_TYPE_AUDIOCONFIGPARAMS))
+
+/**
+ * MIX_AUDIOCONFIGPARAMS_GET_CLASS:
+ * @obj: a #MixParams object.
+ * 
+ * Get the class instance of the object.
+ */
+#define MIX_AUDIOCONFIGPARAMS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MIX_TYPE_AUDIOCONFIGPARAMS, MixAudioConfigParamsClass))
+
+typedef struct _MixAudioConfigParams        MixAudioConfigParams;
+typedef struct _MixAudioConfigParamsClass   MixAudioConfigParamsClass;
+
+/**
+ * MixDecodeMode:
+ * @MIX_DECODE_NULL: Undefined decode mode.
+ * @MIX_DECODE_DIRECTRENDER: Stream is configured in Direct Render mode
+ * @MIX_DECODE_DECODERETURN: Stream is configured in Decode Return mode
+ * @MIX_DECODE_LAST: Last index in the enumeration.
+ * 
+ * Operation Mode for a MI-X session. See mix_audio_configure().
+ * 
+ */
+typedef enum {
+  MIX_DECODE_NULL=0,
+  MIX_DECODE_DIRECTRENDER,
+  MIX_DECODE_DECODERETURN,
+  MIX_DECODE_LAST
+} MixDecodeMode;
+
+/**
+ * MixAudioConfigParams:
+ * @parent: parent.
+ * @decode_mode: Decode Mode to use for current session. See #mix_acp_set_decodemode
+ * @stream_name: Stream name. See #mix_acp_set_streamname. This object will release the string upon destruction.
+ * @audio_manager: Type of Audio Manager. See #mix_acp_set_audio_manager.
+ * @num_channels: Number of output channels. See #MIX_ACP_NUM_CHANNELS
+ * @bit_rate: <emphasis>Optional.</emphasis> See #MIX_ACP_BITRATE
+ * @sample_freq: Output frequency. See #MIX_ACP_SAMPLE_FREQ
+ * @bits_per_sample: Number of output bit per sample. See #mix_acp_set_bps
+ * @op_align: Output Byte Alignment. See #mix_acp_set_op_align
+ *
+ * @MixAudio configuration parameters object.
+ */
+struct _MixAudioConfigParams
+{
+  /*< public >*/
+  MixParams parent;
+
+  /*< public >*/
+  /* Audio Session Parameters */
+  MixDecodeMode decode_mode;
+  gchar *stream_name;
+  MixAudioManager audio_manager;
+
+  /*< public >*/
+  /* Audio Format Parameters */
+  gint num_channels;
+  gint bit_rate;
+  gint sample_freq;
+  MixACPBPSType bits_per_sample;
+  MixACPOpAlign op_align;
+  /*< private >*/
+  void* reserved1;
+  void* reserved2;
+  void* reserved3;
+  void* reserved4;
+};
+
+/**
+ * MixAudioConfigParamsClass:
+ * 
+ * MI-X Audio object class
+ */
+struct _MixAudioConfigParamsClass
+{
+  /*< public >*/
+  MixParamsClass parent_class;
+
+  /*< virtual public >*/
+  void (*print_params) (MixAudioConfigParams *obj);
+
+  /* class members */
+
+};
+
+/**
+ * mix_acp_get_type:
+ * @returns: type
+ * 
+ * Get the type of object.
+ */
+GType mix_acp_get_type (void);
+
+/**
+ * mix_acp_new:
+ * @returns: A newly allocated instance of #MixAudioConfigParams
+ * 
+ * Use this method to create new instance of #MixAudioConfigParams
+ */
+MixAudioConfigParams *mix_acp_new(void);
+
+/**
+ * mix_acp_ref:
+ * @mix: object to add reference
+ * @returns: the MixAudioConfigParams instance where reference count has been increased.
+ * 
+ * Add reference count.
+ */
+MixAudioConfigParams *mix_acp_ref(MixAudioConfigParams *mix);
+
+/**
+ * mix_acp_unref:
+ * @obj: object to unref.
+ * 
+ * Decrement reference count of the object.
+ */
+#define mix_acp_unref(obj) mix_params_unref(MIX_PARAMS(obj))
+
+/* Class Methods */
+
+/**
+ * MIX_ACP_DECODEMODE:
+ * @obj: #MixAudioConfigParams object
+ * 
+ * MixAudioConfigParam.decode_mode accessor.
+ * 
+ * Configure the decode mode to one of #MixDecodeMode value.
+*/
+#define MIX_ACP_DECODEMODE(obj) (MIX_AUDIOCONFIGPARAMS(obj)->decode_mode)
+
+/**
+ * MIX_ACP_NUM_CHANNELS:
+ * @obj: #MixAudioConfigParams object
+ * 
+ * MixAudioConfigParam.num_channels accessor.
+ * 
+ * Configure the number of output channels. This value need to be exact the same as the supported output channel in the audio since down-mixing is not supported.
+ * 
+ * This value can be used during #MIX_DECODE_DECODERETURN mode for buffer size/duration calculation.
+ * 
+ * In Moorestown, number of channel must be 1 or 2.
+*/
+#define MIX_ACP_NUM_CHANNELS(obj) (MIX_AUDIOCONFIGPARAMS(obj)->num_channels)
+
+/**
+ * MIX_ACP_BITRATE:
+ * @obj: #MixAudioConfigParams object
+ * 
+ * MixAudioConfigParam.bit_rate accessor.
+ * 
+ * Bit rate of the current audio.
+ * 
+ * <remark>Optional</remark>
+*/
+#define MIX_ACP_BITRATE(obj) (MIX_AUDIOCONFIGPARAMS(obj)->bit_rate)
+
+/**
+ * MIX_ACP_SAMPLE_FREQ:
+ * @obj: #MixAudioConfigParams object
+ * 
+ * MixAudioConfigParam.sample_freq accessor.
+ * 
+ * Output sampling frequency.
+ * 
+ * This value can be used during #MIX_DECODE_DECODERETURN mode for buffer size/duration calculation.
+*/
+#define MIX_ACP_SAMPLE_FREQ(obj) (MIX_AUDIOCONFIGPARAMS(obj)->sample_freq)
+
+/**
+ * mix_acp_get_decodemode:
+ * @obj: #MixAudioConfigParams
+ * @returns: #MixDecodeMode
+ * 
+ * Retrieve currently configured #MixDecodeMode.
+ */
+MixDecodeMode mix_acp_get_decodemode(MixAudioConfigParams *obj);
+
+/**
+ * mix_acp_set_decodemode:
+ * @obj: #MixAudioConfigParams
+ * @mode: #MixDecodeMode to set
+ * @returns: #MIX_RESULT
+ * 
+ * Configure session for one of the #MixDecodeMode.
+ */
+MIX_RESULT mix_acp_set_decodemode(MixAudioConfigParams *obj, MixDecodeMode mode);
+
+/**
+ * mix_acp_get_streamname:
+ * @obj: #MixAudioConfigParams
+ * @returns: pointer to a copy of the stream name. NULL if name is not available.
+ * 
+ * Return copy of streamname. caller must free with g_free()
+ */
+gchar *mix_acp_get_streamname(MixAudioConfigParams *obj);
+
+/**
+ * mix_acp_set_streamname:
+ * @obj: #MixAudioConfigParams
+ * @streamname: Stream name to set
+ * @returns: #MIX_RESULT
+ * 
+ * Set the stream name. The object will make a copy of the input stream name string.
+ * 
+ */
+MIX_RESULT mix_acp_set_streamname(MixAudioConfigParams *obj, const gchar *streamname);
+
+/**
+ * mix_acp_set_audio_manager:
+ * @obj: #MixAudioConfigParams
+ * @am: #MixAudioManager
+ * @returns: #MIX_RESULT
+ * 
+ * Set the Audio Manager to one of the #MixAudioManager.
+ */
+MIX_RESULT mix_acp_set_audio_manager(MixAudioConfigParams *obj, MixAudioManager am);
+
+/**
+ * mix_acp_get_audio_manager:
+ * @obj: #MixAudioConfigParams
+ * @returns: #MixAudioManager
+ * 
+ * Retrieve name of currently configured audio manager.
+ */
+MixAudioManager mix_acp_get_audio_manager(MixAudioConfigParams *obj);
+
+/**
+ * mix_acp_is_streamname_valid:
+ * @obj: #MixAudioConfigParams
+ * @returns: boolean indicates if stream name is valid.
+ * 
+ * Check if stream name is valid considering the current Decode Mode.
+ */
+gboolean mix_acp_is_streamname_valid(MixAudioConfigParams *obj);
+
+
+/**
+ * mix_acp_get_bps:
+ * @obj: #MixAudioConfigParams
+ * @returns: #MixACPBPSType
+ * 
+ * Retrive currently configured bit-per-stream value.
+ */
+MixACPBPSType mix_acp_get_bps(MixAudioConfigParams *obj);
+
+/**
+ * mix_acp_set_bps:
+ * @obj: #MixAudioConfigParams
+ * @mode: #MixACPBPSType to set
+ * @returns: #MIX_RESULT
+ * 
+ * Configure bit-per-stream of one of the supported #MixACPBPSType.
+ */
+MIX_RESULT mix_acp_set_bps(MixAudioConfigParams *obj, MixACPBPSType type);
+
+/**
+ * mix_acp_get_op_align:
+ * @obj: #MixAudioConfigParams object
+ * @returns: #MixACPOpAlign
+ * 
+ * Get Output Alignment.
+ */
+MixACPOpAlign mix_acp_get_op_align(MixAudioConfigParams *obj);
+
+/**
+ * mix_acp_set_op_align:
+ * @obj: #MixAudioConfigParams object
+ * @op_align: One of the supported #MixACPOpAlign
+ * @returns: MIX_RESULT
+ * 
+ * Set Output Alignment to one of the #MixACPOpAlign value.
+ */
+MIX_RESULT mix_acp_set_op_align(MixAudioConfigParams *obj, MixACPOpAlign op_align);
+
+/* void mix_acp_print_params(MixAudioConfigParams *obj); */
+
+
+#endif /* __MIX_AUDIOCONFIGPARAMS_H__ */
+
diff --git a/mix_audio/src/mixacpaac.c b/mix_audio/src/mixacpaac.c
new file mode 100644
index 0000000..4f83eb9
--- /dev/null
+++ b/mix_audio/src/mixacpaac.c
@@ -0,0 +1,360 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+/**
+ * SECTION:mixacpaac
+ * @short_description: Audio configuration parameters for AAC-LC, HEAAC v1, and HEAAC v2 audio format.
+ * @include: mixacpaac.h
+ *
+ * A data object which stores audio specific parameters for the following formats:
+ * <itemizedlist>
+ * <listitem>AAC-LC</listitem>
+ * <listitem>HE-AAC v1</listitem>
+ * <listitem>HE-AAC v2</listitem>
+ * </itemizedlist>
+ * 
+ * Additional parameters must be set in the parent object #MixAudioConfigParams
+ */
+
+#include "mixacpaac.h"
+#include <string.h>
+#include <mixlog.h>
+
+static GType _mix_acp_aac_type = 0;
+static MixAudioConfigParamsClass *parent_class = NULL;
+
+#define _do_init { _mix_acp_aac_type = g_define_type_id; }
+
+gboolean mix_acp_aac_copy(MixParams* target, const MixParams *src);
+MixParams* mix_acp_aac_dup(const MixParams *obj);
+gboolean mix_acp_aac_equal(MixParams* first, MixParams *second);
+static void mix_acp_aac_finalize(MixParams *obj);
+
+void mix_aac_print_params(MixAudioConfigParams *obj);
+
+G_DEFINE_TYPE_WITH_CODE(MixAudioConfigParamsAAC, mix_acp_aac, MIX_TYPE_AUDIOCONFIGPARAMS, _do_init);
+
+static void mix_acp_aac_init (MixAudioConfigParamsAAC *self)
+{
+  self->MPEG_id = MIX_AAC_MPEG_ID_NULL;
+  self->bit_stream_format= MIX_AAC_BS_NULL;
+  self->aac_profile=MIX_AAC_PROFILE_NULL;
+  self->aot=0;
+  self->bit_rate_type=MIX_AAC_BR_NULL; /* 0=CBR, 1=VBR */
+  self->CRC=FALSE;
+  self->sbrPresentFlag = -1;
+  self->psPresentFlag = -1;
+  self->pce_present=FALSE; /* Flag. 1- present 0 - not present, for RAW */
+  self->syntc_id[0] = self->syntc_id[1] = 0; /* 0 for ID_SCE(Dula Mono), -1 for raw */
+  self->syntc_tag[0] = self->syntc_tag[1] = 0; /* raw - -1 and 0 -16 for rest of the streams */
+  self->num_syntc_elems = 0;
+  self->aac_sample_rate = 0;
+  self->aac_channels = 0;
+}
+
+static void mix_acp_aac_class_init(MixAudioConfigParamsAACClass *klass)
+{
+  MixParamsClass *mixparams_class = MIX_PARAMS_CLASS(klass);
+
+  /* setup static parent class */
+  parent_class = (MixAudioConfigParamsClass *) g_type_class_peek_parent (klass);
+
+  mixparams_class->finalize = mix_acp_aac_finalize;
+  mixparams_class->copy = (MixParamsCopyFunction)mix_acp_aac_copy;
+  mixparams_class->dup = (MixParamsDupFunction)mix_acp_aac_dup;
+  mixparams_class->equal = (MixParamsEqualFunction)mix_acp_aac_equal;
+
+//  MixAudioConfigParamsClass *acp = MIX_AUDIOCONFIGPARAMS_GET_CLASS(klass);
+  MixAudioConfigParamsClass *acp = (MixAudioConfigParamsClass *)klass;
+  acp->print_params = mix_aac_print_params;
+}
+
+MixAudioConfigParamsAAC *mix_acp_aac_new(void)
+{
+  MixAudioConfigParamsAAC *ret = (MixAudioConfigParamsAAC *)g_type_create_instance (MIX_TYPE_AUDIOCONFIGPARAMSAAC);
+
+  return ret;
+}
+
+void mix_acp_aac_finalize(MixParams *obj)
+{
+  /* clean up here. */
+  
+  /* Chain up parent */ 
+  MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class);
+  if (klass->finalize) 
+    klass->finalize(obj);
+}
+
+MixAudioConfigParamsAAC *mix_acp_aac_ref(MixAudioConfigParamsAAC *mix) 
+{ 
+  return (MixAudioConfigParamsAAC*)mix_params_ref(MIX_PARAMS(mix)); 
+}
+
+/**
+ * mix_acp_aac_dup:
+ * @obj: a #MixAudioConfigParamsAAC object
+ * @returns: a newly allocated duplicate of the object.
+ * 
+ * Copy duplicate of the object.
+ */
+MixParams* mix_acp_aac_dup(const MixParams *obj)
+{
+  MixParams *ret = NULL;
+  
+  if (MIX_IS_AUDIOCONFIGPARAMSAAC(obj))
+  {
+    MixAudioConfigParamsAAC *duplicate = mix_acp_aac_new();
+    if (mix_acp_aac_copy(MIX_PARAMS(duplicate), MIX_PARAMS(obj)))
+    {
+      ret = MIX_PARAMS(duplicate);
+    }
+    else
+    {
+      mix_acp_aac_unref(duplicate);
+    }
+  }
+
+  return ret;
+}
+
+/**
+ * mix_acp_aac_copy:
+ * @target: copy to target
+ * @src: copy from src
+ * @returns: boolean indicates if copy is successful.
+ * 
+ * Copy instance data from @src to @target.
+ */
+gboolean mix_acp_aac_copy(MixParams* target, const MixParams *src)
+{
+  if (MIX_IS_AUDIOCONFIGPARAMSAAC(target) && MIX_IS_AUDIOCONFIGPARAMSAAC(src))
+  {
+    MixAudioConfigParamsAAC *t = MIX_AUDIOCONFIGPARAMSAAC(target);
+    MixAudioConfigParamsAAC *s = MIX_AUDIOCONFIGPARAMSAAC(src);
+
+    t->MPEG_id = s->MPEG_id;
+    t->bit_stream_format = s->bit_stream_format;
+    t->aac_profile = s->aac_profile;
+    t->aot = s->aot;
+    t->bit_rate_type = s->bit_rate_type;
+    t->CRC = s->CRC;
+
+    // Now chainup base class
+    MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class); 
+    if (klass->copy)
+    {
+      return klass->copy(MIX_PARAMS_CAST(target), MIX_PARAMS_CAST(src));
+    }
+    else
+      return TRUE;
+  }
+  return FALSE;
+}
+
+/**
+ * mix_acp_aac_equal:
+ * @first: first object to compare
+ * @second: seond object to compare
+ * @returns: boolean indicates if instance are equal.
+ * 
+ * Copy instance data from @src to @target.
+ */
+gboolean mix_acp_aac_equal(MixParams* first, MixParams *second)
+{
+  gboolean ret = FALSE;
+  
+  if (first && second)
+  {
+    if (first == second) return TRUE;
+  }
+  else
+  {
+    return FALSE;
+  }
+
+  // members within this scope equal. chaining up.
+  MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class);
+  if (klass->equal)
+    ret = klass->equal(first, second);
+  else
+    ret = TRUE;
+
+  if (ret && MIX_IS_AUDIOCONFIGPARAMSAAC(first) && MIX_IS_AUDIOCONFIGPARAMSAAC(second))
+  {
+
+    MixAudioConfigParamsAAC *acp1 = MIX_AUDIOCONFIGPARAMSAAC(first);
+    MixAudioConfigParamsAAC *acp2 = MIX_AUDIOCONFIGPARAMSAAC(second);
+  
+    ret = (acp1->MPEG_id == acp2->MPEG_id) &&
+          (acp1->bit_stream_format && acp2->bit_stream_format) &&
+          (acp1->aac_profile == acp2->aac_profile) &&
+          (acp1->aot == acp2->aot) &&
+          (acp1->bit_rate_type == acp2->bit_rate_type) &&
+          (acp1->CRC == acp2->CRC) &&
+          (acp1->sbrPresentFlag == acp2->sbrPresentFlag) &&
+          (acp1->psPresentFlag == acp2->psPresentFlag) &&
+          (acp1->pce_present == acp2->pce_present) &&
+          (acp1->syntc_id[0] == acp2->syntc_id[0]) &&
+          (acp1->syntc_id[1] == acp2->syntc_id[1]) &&
+          (acp1->syntc_tag[0] == acp2->syntc_tag[0]) &&
+          (acp1->syntc_tag[1] == acp2->syntc_tag[1]);
+  }
+
+  return ret;
+}
+
+MIX_RESULT mix_acp_aac_set_bit_stream_format(MixAudioConfigParamsAAC *obj, MixAACBitstreamFormt bit_stream_format)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  if (!obj) return MIX_RESULT_NULL_PTR;
+  
+  if (bit_stream_format < MIX_AAC_BS_ADTS && bit_stream_format >= MIX_AAC_BS_LAST)
+  {
+    ret = MIX_RESULT_INVALID_PARAM;
+  }
+  else
+  {
+    obj->bit_stream_format = bit_stream_format;
+  }
+  
+  return ret;
+}
+MixAACBitstreamFormt mix_acp_aac_get_bit_stream_format(MixAudioConfigParamsAAC *obj)
+{
+  if (obj)
+    return obj->bit_stream_format;
+  else
+    return MIX_AAC_BS_NULL;
+}
+
+MIX_RESULT mix_acp_aac_set_aac_profile(MixAudioConfigParamsAAC *obj, MixAACProfile aac_profile)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+  
+  if (!obj) return MIX_RESULT_NULL_PTR;
+  
+  if (aac_profile < MIX_AAC_PROFILE_MAIN || aac_profile >= MIX_AAC_PROFILE_LAST)
+  {
+    ret = MIX_RESULT_INVALID_PARAM;
+  }
+  else
+  {
+    obj->aac_profile = aac_profile;
+  }
+  
+  return ret;
+}
+MixAACProfile mix_acp_aac_get_aac_profile(MixAudioConfigParamsAAC *obj)
+{
+  if (obj)
+    return obj->aac_profile;
+  else
+    return MIX_AAC_PROFILE_NULL;
+}
+
+MIX_RESULT mix_acp_aac_set_bit_rate_type(MixAudioConfigParamsAAC *obj, MixAACBitrateType bit_rate_type)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+  
+  if (!obj) return MIX_RESULT_NULL_PTR;
+  
+  if (bit_rate_type != MIX_AAC_BR_CONSTANT && bit_rate_type != MIX_AAC_BR_VARIABLE)
+  {
+    ret = MIX_RESULT_INVALID_PARAM;
+  }
+  else
+  {
+    obj->bit_rate_type = bit_rate_type;
+  }
+  
+  return ret;
+}
+MixAACBitrateType mix_acp_aac_get_bit_rate_type(MixAudioConfigParamsAAC *obj)
+{
+  if (obj)
+    return obj->bit_rate_type;
+  else
+    return MIX_AAC_BR_NULL;
+}
+
+void mix_aac_print_params(MixAudioConfigParams *obj)
+{
+    MixAudioConfigParamsAAC *t = MIX_AUDIOCONFIGPARAMSAAC(obj);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "Mpeg ID: %d\n", t->MPEG_id);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "bit_stream_format: %d\n", t->bit_stream_format);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "aac_profile: %d\n", t->aac_profile);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "aot: %d\n", t->aot);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "bit_rate_type: %d\n", t->bit_rate_type);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "CRC: %d\n", t->CRC);
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, " \n");
+}
+
+
+MIX_RESULT mix_acp_aac_set_aot(MixAudioConfigParamsAAC *obj, guint aot)
+{
+    if (!obj) return MIX_RESULT_NULL_PTR;
+    
+    if (MIX_IS_AUDIOCONFIGPARAMSAAC(obj))
+    {
+        if ((aot == 2) || (aot == 5))
+        {
+            obj->aot=aot;
+            return MIX_RESULT_SUCCESS;
+        }
+        else
+        {
+            return MIX_RESULT_NOT_SUPPORTED;
+        }
+    }
+    else
+    {
+        return MIX_RESULT_INVALID_PARAM;
+    }
+}
+
+guint mix_acp_aac_get_aot(MixAudioConfigParamsAAC *obj)
+{
+    if (MIX_IS_AUDIOCONFIGPARAMSAAC(obj))
+        return obj->aot;
+    else
+        return 0;
+}
+
+
+MIX_RESULT mix_acp_aac_set_mpeg_id(MixAudioConfigParamsAAC *obj, MixAACMpegID mpegid)
+{
+    if (!obj) return MIX_RESULT_NULL_PTR;
+    
+    if (MIX_IS_AUDIOCONFIGPARAMSAAC(obj))
+    {
+        if ((mpegid >= MIX_AAC_MPEG_ID_NULL) || (mpegid < MIX_AAC_MPEG_LAST))
+        {
+            obj->MPEG_id=mpegid;
+            return MIX_RESULT_SUCCESS;
+        }
+        else
+        {
+            return MIX_RESULT_NOT_SUPPORTED;
+        }
+    }
+    else
+    {
+        return MIX_RESULT_INVALID_PARAM;
+    }
+}
+
+MixAACMpegID mix_acp_aac_get_mpeg_id(MixAudioConfigParamsAAC *obj)
+{
+    if (MIX_IS_AUDIOCONFIGPARAMSAAC(obj))
+        return obj->MPEG_id;
+    else
+        return MIX_AAC_MPEG_ID_NULL;
+}
+
diff --git a/mix_audio/src/mixacpaac.h b/mix_audio/src/mixacpaac.h
new file mode 100644
index 0000000..7de2d95
--- /dev/null
+++ b/mix_audio/src/mixacpaac.h
@@ -0,0 +1,413 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+#ifndef __MIX_ACP_AAC_H__
+#define __MIX_ACP_AAC_H__
+
+#include "mixacp.h"
+
+/**
+ * MIX_TYPE_AUDIOCONFIGPARAMSAAC:
+ * 
+ * Get type of class.
+ */
+#define MIX_TYPE_AUDIOCONFIGPARAMSAAC (mix_acp_aac_get_type ())
+
+/**
+ * MIX_AUDIOCONFIGPARAMSAAC:
+ * @obj: object to be type-casted.
+ * 
+ * Type casting
+ */
+#define MIX_AUDIOCONFIGPARAMSAAC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIX_TYPE_AUDIOCONFIGPARAMSAAC, MixAudioConfigParamsAAC))
+
+/**
+ * MIX_IS_AUDIOCONFIGPARAMSAAC:
+ * @obj: an object.
+ * 
+ * Checks if the given object is an instance of #MixAudioConfigParams
+ */
+#define MIX_IS_AUDIOCONFIGPARAMSAAC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIX_TYPE_AUDIOCONFIGPARAMSAAC))
+
+/**
+ * MIX_AUDIOCONFIGPARAMSAAC_CLASS:
+ * @klass: class to be type-casted.
+ * 
+ * Type Casting.
+ */
+#define MIX_AUDIOCONFIGPARAMSAAC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MIX_TYPE_AUDIOCONFIGPARAMSAAC, MixAudioConfigParamsAACClass))
+
+/**
+ * MIX_IS_AUDIOCONFIGPARAMSAAC_CLASS:
+ * @klass: a class.
+ * 
+ * Checks if the given class is #MixAudioConfigParamsClass
+ */
+#define MIX_IS_AUDIOCONFIGPARAMSAAC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MIX_TYPE_AUDIOCONFIGPARAMSAAC))
+
+/**
+ * MIX_AUDIOCONFIGPARAMSAAC_GET_CLASS:
+ * @obj: a #MixAudioConfigParams object.
+ * 
+ * Get the class instance of the object.
+ */
+#define MIX_AUDIOCONFIGPARAMSAAC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MIX_TYPE_AUDIOCONFIGPARAMSAAC, MixAudioConfigParamsAACClass))
+
+typedef struct _MixAudioConfigParamsAAC        MixAudioConfigParamsAAC;
+typedef struct _MixAudioConfigParamsAACClass   MixAudioConfigParamsAACClass;
+
+/**
+ * MixAACBitrateType:
+ * @MIX_AAC_BR_NULL: Undefined bit rate type.
+ * @MIX_AAC_BR_CONSTANT: Constant bit rate.
+ * @MIX_AAC_BR_VARIABLE: Variable bit rate.
+ * @MIX_AAC_BR_LAST: last entry.
+ * 
+ * Types of bitrate in AAC.
+ */
+typedef enum {
+  MIX_AAC_BR_NULL=-1,
+  MIX_AAC_BR_CONSTANT=0,
+  MIX_AAC_BR_VARIABLE,
+  MIX_AAC_BR_LAST
+} MixAACBitrateType;
+
+/**
+ * MixAACBitstreamFormt:
+ * @MIX_AAC_BS_NULL: Undefined bitstream format.
+ * @MIX_AAC_BS_ADTS: Bitstream is in ADTS format.
+ * @MIX_AAC_BS_ADIF: Bitstream is in ADIF format.
+ * @MIX_AAC_BS_RAW: Bitstream is in raw format.
+ * @MIX_AAC_BS_LAST: Last entry.
+ * 
+ * AAC bitstream format.
+ */
+typedef enum {
+  MIX_AAC_BS_NULL=-1,
+  MIX_AAC_BS_ADTS=0,
+  MIX_AAC_BS_ADIF,
+  MIX_AAC_BS_RAW,
+  MIX_AAC_BS_LAST
+} MixAACBitstreamFormt;
+
+/**
+ * MixAACProfile:
+ * @MIX_AAC_PROFILE_NULL: Undefined profile.
+ * @MIX_AAC_PROFILE_MAIN: <emphasis>Not Supported</emphasis> AAC Main profile. 
+ * @MIX_AAC_PROFILE_LC: AAC-LC profile, including support of SBR and PS tool.
+ * @MIX_AAC_PROFILE_SSR: <emphasis>Not Supported</emphasis> SSR profile. 
+ * @MIX_AAC_PROFILE_LAST: Last entry.
+ * 
+ * AAC profiles definitions.
+ */
+typedef enum {
+  MIX_AAC_PROFILE_NULL=-1,
+  MIX_AAC_PROFILE_MAIN=0,
+  MIX_AAC_PROFILE_LC,
+  MIX_AAC_PROFILE_SSR,
+  MIX_AAC_PROFILE_LAST
+} MixAACProfile;
+
+/* Using enumeration as this MPEG ID definition is specific to SST and different from
+ any MPEG/ADTS header.
+*/
+/**
+ * MixAACMpegID:
+ * @MIX_AAC_MPEG_ID_NULL: Undefined MPEG ID.
+ * @MIX_AAC_MPEG_2_ID: Indicate MPEG 2 Audio.
+ * @MIX_AAC_MPEG_4_ID: Indicate MPEG 4 Audio.
+ * @MIX_AAC_MPEG_LAST: last entry. 
+ * 
+ * AAC MPEG ID.
+*/
+typedef enum {
+  MIX_AAC_MPEG_ID_NULL=-1,
+  MIX_AAC_MPEG_2_ID = 0,
+  MIX_AAC_MPEG_4_ID = 1,
+  MIX_AAC_MPEG_LAST
+} MixAACMpegID;
+
+/**
+ * MixAudioConfigParamsAAC:
+ * @parent: parent.
+ * @MPEG_id: MPEG ID. See #mix_acp_aac_set_mpeg_id
+ * @bit_stream_format: Bitstream format. See #mix_acp_aac_set_bit_stream_format.
+ * @aac_profile: AAC profile. See #mix_acp_aac_set_aac_profile.
+ * @aot: Audio object type. See #mix_acp_aac_set_aot
+ * @aac_sample_rate: See #MIX_ACP_AAC_SAMPLE_RATE macro.
+ * @aac_channels: See #MIX_ACP_AAC_CHANNELS macro.
+ * @bit_rate_type: Bitrate type. See #mix_acp_aac_set_bit_rate_type
+ * @sbrPresentFlag: See #MIX_ACP_AAC_SBR_FLAG macro.
+ * @psPresentFlag: See #MIX_ACP_AAC_PS_FLAG macro.
+ * @CRC: CRC check 0:disable, 1:enable.
+ * @pce_present: <emphasis>Not Used.</emphasis> See #MIX_ACP_AAC_PCE_FLAG
+ * @syntc_id: <emphasis>Not Used.</emphasis> 0 for ID_SCE(Dula Mono), -1 for raw. 
+ * @syntc_tag: <emphasis>Not Used.</emphasis> -1 for raw. 0-16 for rest of the streams. 
+ * @num_syntc_elems: <emphasis>Not Used.</emphasis> Number of syntatic elements. 
+ *
+ * MixAudio Parameter object
+ */
+struct _MixAudioConfigParamsAAC
+{
+  /*< public >*/
+  MixAudioConfigParams parent;
+
+  /*< public >*/
+  /* Audio Format Parameters */
+  MixAACMpegID MPEG_id;
+  MixAACBitstreamFormt bit_stream_format;
+  MixAACProfile aac_profile;
+  guint aot;
+  guint aac_sample_rate;      
+  guint aac_channels;  
+  MixAACBitrateType bit_rate_type;
+  gboolean CRC;
+  guint sbrPresentFlag;
+  guint psPresentFlag;
+  gboolean pce_present;
+  gint8 syntc_id[2]; 
+  gint8 syntc_tag[2]; 
+  gint num_syntc_elems;
+  /*< private >*/
+  void* reserved1;
+  void* reserved2;
+  void* reserved3;
+  void* reserved4;
+};
+
+/**
+ * MixAudioConfigParamsAACClass:
+ * 
+ * MI-X Audio object class
+ */
+struct _MixAudioConfigParamsAACClass
+{
+  /*< public >*/
+  MixAudioConfigParamsClass parent_class;
+
+  /* class members */
+};
+ 
+/**
+ * mix_acp_aac_get_type:
+ * @returns: type
+ * 
+ * Get the type of object.
+ */
+GType mix_acp_aac_get_type (void);
+
+/**
+ * mix_acp_aac_new:
+ * @returns: A newly allocated instance of #MixAudioConfigParamsAAC
+ * 
+ * Use this method to create new instance of #MixAudioConfigParamsAAC
+ */
+MixAudioConfigParamsAAC *mix_acp_aac_new(void);
+
+/**
+ * mix_acp_aac_ref:
+ * @mix: object to add reference
+ * @returns: the MixAudioConfigParamsAAC instance where reference count has been increased.
+ * 
+ * Add reference count.
+ */
+MixAudioConfigParamsAAC *mix_acp_aac_ref(MixAudioConfigParamsAAC *mix);
+
+/**
+ * mix_acp_aac_unref:
+ * @obj: object to unref.
+ * 
+ * Decrement reference count of the object.
+ */
+#define mix_acp_aac_unref(obj) mix_params_unref(MIX_PARAMS(obj))
+
+/* Class Methods */
+
+
+/**
+ * mix_acp_aac_set_mpeg_id:
+ * @obj: #MixAudioConfigParamsAAC
+ * @mpegid: MPEG ID to set.
+ * @return: MIX_RESULT
+ * 
+ * Configure decoder to treat audio as MPEG 2 or MPEG 4.
+*/
+MIX_RESULT mix_acp_aac_set_mpeg_id(MixAudioConfigParamsAAC *obj, MixAACMpegID mpegid);
+
+/**
+ * mix_acp_aac_get_mpeg_id:
+ * @obj: #MixAudioConfigParamsAAC object
+ * @returns: MPEG ID.
+ * 
+ * Retrieve currently configured mpeg id value.
+*/
+MixAACMpegID mix_acp_aac_get_mpeg_id(MixAudioConfigParamsAAC *obj);
+
+/**
+ * MIX_ACP_AAC_CRC:
+ * @obj: #MixAudioConfigParamsAAC object.
+ * 
+ * #MixAudioConfigParamAAC.CRC accessor.
+*/
+#define MIX_ACP_AAC_CRC(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)->CRC)
+
+/**
+ * mix_acp_aac_set_aot:
+ * @obj: #MixAudioConfigParamsAAC
+ * @aot: Audio Object Type.
+ * 
+ * Audio Object Type for the MPEG-4 audio stream. Valid value are:
+ * 
+ * 2 - for AAC-LC
+ * 
+ * 5 - for SBR
+ * 
+ * Method returns MIX_RESULT_NOT_SUPPORTED for not supported value.
+ * 
+*/
+MIX_RESULT mix_acp_aac_set_aot(MixAudioConfigParamsAAC *obj, guint aot);
+
+/**
+ * mix_acp_aac_get_aot:
+ * @obj: #MixAudioConfigParamsAAC
+ * @aot: Pointer to receive the Audio Object Type.
+ * @return: Currently configured audio object type. Or 0 if not yet specified.
+ * 
+ * To retrieve currently configured audio object type.
+*/
+guint mix_acp_aac_get_aot(MixAudioConfigParamsAAC *obj);
+
+/**
+ * MIX_ACP_AAC_SBR_FLAG:
+ * @obj: #MixAudioConfigParamsAAC object
+ * 
+ * MixAudioConfigParamAAC.sbrPresentFlag accessor.
+ * 
+ * Applicable only when @bit_stream_format==#MIX_AAC_BS_RAW. Indicates whether SBR data is present. 
+ * 
+ * 0: Absent
+ * 
+ * 1: Present
+ * 
+ * -1 (0xffffffff): indicates implicit signalling.
+ */
+#define MIX_ACP_AAC_SBR_FLAG(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)->sbrPresentFlag)
+
+/**
+ * MIX_ACP_AAC_PS_FLAG:
+ * @obj: #MixAudioConfigParamsAAC object
+ * 
+ * MixAudioConfigParamAAC.psPresentFlag accessor.
+ * 
+ * Applicable only when @bit_stream_format==#MIX_AAC_BS_RAW. Indicates whether PS data is present. 
+ * 
+ * 0: Absent
+ * 
+ * 1: Present
+ * 
+ * -1 (0xffffffff): indicates implicit signalling.
+ */
+#define MIX_ACP_AAC_PS_FLAG(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)->psPresentFlag)
+
+/**
+ * MIX_ACP_AAC_PCE_FLAG:
+ * @obj: #MixAudioConfigParamsAAC object.
+ * 
+ * MixAudioConfigParamAAC.pce_present accessor.
+ * 
+ * Applicable only when @bit_stream_format==#MIX_AAC_BS_RAW. Indicates PCE data presence. 
+ * 
+ * 1:present
+ * 
+ * 0:absent.
+ * 
+ * <remark>Not Used on Moorestown.</remark>
+ */
+#define MIX_ACP_AAC_PCE_FLAG(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)->pce_present)
+
+/**
+ * MIX_ACP_AAC_SAMPLE_RATE:
+ * @obj: #MixAudioConfigParamsAAC object.
+ * 
+ * MixAudioConfigParamAAC.aac_sample_rate accessor.
+ * 
+ * Plain AAC decoder operating sample rate. Which could be different from the output sampling rate with HE AAC v1 and v2. 
+ */
+#define MIX_ACP_AAC_SAMPLE_RATE(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)->aac_sample_rate)
+
+/**
+ * MIX_ACP_AAC_CHANNELS:
+ * @obj: #MixAudioConfigParamsAAC
+ * 
+ * MixAudioConfigParamAAC.aac_channels accessor. 
+ * 
+ * Indicates the number of output channels used by AAC decoder before SBR or PS tools are applied.
+ * 
+ */
+#define MIX_ACP_AAC_CHANNELS(obj) (MIX_AUDIOCONFIGPARAMSAAC(obj)->aac_channels)
+
+/**
+ * mix_acp_aac_get_bit_stream_format:
+ * @obj: #MixAudioConfigParamsAAC
+ * @returns: #MixAACBitstreamFormt
+ * 
+ * Return the bitstream format currently configured.
+ */
+MixAACBitstreamFormt mix_acp_aac_get_bit_stream_format(MixAudioConfigParamsAAC *obj);
+
+/**
+ * mix_acp_aac_set_bit_stream_format:
+ * @obj: #MixAudioConfigParamsAAC
+ * @bit_stream_format: Bit stream format.
+ * @returns: MIX_RESULT
+ * 
+ * Set the type of bitstream format as specified in #MixAACBitstreamFormt.
+ */
+MIX_RESULT mix_acp_aac_set_bit_stream_format(MixAudioConfigParamsAAC *obj, MixAACBitstreamFormt bit_stream_format);
+
+/**
+ * mix_acp_aac_get_aac_profile:
+ * @obj: #MixAudioConfigParamsAAC
+ * @returns: #MixAACProfile
+ * 
+ * Retrieve the AAC profile currently configured.
+ */
+MixAACProfile mix_acp_aac_get_aac_profile(MixAudioConfigParamsAAC *obj);
+
+/**
+ * mix_acp_aac_set_aac_profile:
+ * @obj: #MixAudioConfigParamsAAC
+ * @aac_profile: AAC profile to set.
+ * @returns: MIX_RESULT
+ * 
+ * Configure AAC profile for current session.
+ * 
+ * Only #MIX_AAC_PROFILE_LC is supported in Moorestown.
+ */
+MIX_RESULT mix_acp_aac_set_aac_profile(MixAudioConfigParamsAAC *obj, MixAACProfile aac_profile);
+
+/**
+ * mix_acp_aac_get_bit_rate_type:
+ * @obj: #MixAudioConfigParamsAAC
+ * @returns: #MixAACBitrateType
+ * 
+ * Retrieve the bit rate type currently configured.
+ */
+MixAACBitrateType mix_acp_aac_get_bit_rate_type(MixAudioConfigParamsAAC *obj);
+
+/**
+ * mix_acp_aac_set_bit_rate_type:
+ * @obj: #MixAudioConfigParamsAAC
+ * @bit_rate_type: Bit rate type to set.
+ * @returns: MIX_RESULT
+ * 
+ * Set the bit rate type used.
+ */
+MIX_RESULT mix_acp_aac_set_bit_rate_type(MixAudioConfigParamsAAC *obj, MixAACBitrateType bit_rate_type);
+
+#endif /* __MIX_AUDIOCONFIGPARAMSAAC_H__ */
diff --git a/mix_audio/src/mixacpmp3.c b/mix_audio/src/mixacpmp3.c
new file mode 100644
index 0000000..75ab8cb
--- /dev/null
+++ b/mix_audio/src/mixacpmp3.c
@@ -0,0 +1,175 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+/**
+ * SECTION:mixacpmp3
+ * @short_description: Audio configuration parameters for MP3 audio.
+ * @include: mixacpmp3.h
+ *
+ * A data object which stores audio specific parameters for MP3 audio.
+ * 
+ * Additional parameters must be set in the parent object #MixAudioConfigParams
+ */
+
+#include "mixacpmp3.h"
+
+static GType _mix_acp_mp3_type = 0;
+static MixAudioConfigParamsClass *parent_class = NULL;
+
+#define _do_init { _mix_acp_mp3_type = g_define_type_id; }
+
+gboolean mix_acp_mp3_copy(MixParams* target, const MixParams *src);
+MixParams* mix_acp_mp3_dup(const MixParams *obj);
+gboolean mix_acp_mp3_equal(MixParams* first, MixParams *second);
+static void mix_acp_mp3_finalize(MixParams *obj);
+
+G_DEFINE_TYPE_WITH_CODE(MixAudioConfigParamsMP3, mix_acp_mp3, MIX_TYPE_AUDIOCONFIGPARAMS, _do_init);
+
+static void mix_acp_mp3_init (MixAudioConfigParamsMP3 *self)
+{
+  self->CRC=FALSE;
+  self->MPEG_format=0;
+  self->MPEG_layer=0;
+}
+
+static void mix_acp_mp3_class_init(MixAudioConfigParamsMP3Class *klass)
+{
+  MixParamsClass *mixparams_class = MIX_PARAMS_CLASS(klass);
+
+  /* setup static parent class */
+  parent_class = (MixAudioConfigParamsClass *) g_type_class_peek_parent (klass);
+
+  mixparams_class->finalize = mix_acp_mp3_finalize;
+  mixparams_class->copy = (MixParamsCopyFunction)mix_acp_mp3_copy;
+  mixparams_class->dup = (MixParamsDupFunction)mix_acp_mp3_dup;
+  mixparams_class->equal = (MixParamsEqualFunction)mix_acp_mp3_equal;
+}
+
+MixAudioConfigParamsMP3 *mix_acp_mp3_new(void)
+{
+  MixAudioConfigParamsMP3 *ret = (MixAudioConfigParamsMP3 *)g_type_create_instance (MIX_TYPE_AUDIOCONFIGPARAMSMP3);
+
+  return ret;
+}
+
+void mix_acp_mp3_finalize(MixParams *obj)
+{
+  /* clean up here. */
+  
+  /* Chain up parent */ 
+  MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class);
+  if (klass->finalize) 
+    klass->finalize(obj);
+}
+
+MixAudioConfigParamsMP3 *mix_acp_mp3_ref(MixAudioConfigParamsMP3 *mix) 
+{
+  if (G_UNLIKELY(!mix)) return NULL;
+  return (MixAudioConfigParamsMP3*)mix_params_ref(MIX_PARAMS(mix)); 
+}
+
+/**
+ * mix_acp_mp3_dup:
+ * @obj: a #MixAudioConfigParamsMP3 object
+ * @returns: a newly allocated duplicate of the object.
+ * 
+ * Copy duplicate of the object.
+ */
+MixParams* mix_acp_mp3_dup(const MixParams *obj)
+{
+  MixParams *ret = NULL;
+
+  if (MIX_IS_AUDIOCONFIGPARAMSMP3(obj))
+  {
+    MixAudioConfigParamsMP3 *duplicate = mix_acp_mp3_new();
+    if (mix_acp_mp3_copy(MIX_PARAMS(duplicate), MIX_PARAMS(obj)))
+    {
+      ret = MIX_PARAMS(duplicate);
+    }
+    else
+    {
+      mix_acp_mp3_unref(duplicate);
+    }
+  }
+
+  return ret;
+}
+
+/**
+ * mix_acp_mp3_copy:
+ * @target: copy to target
+ * @src: copy from src
+ * @returns: boolean indicates if copy is successful.
+ * 
+ * Copy instance data from @src to @target.
+ */
+gboolean mix_acp_mp3_copy(MixParams* target, const MixParams *src)
+{
+  if (MIX_IS_AUDIOCONFIGPARAMSMP3(target) && MIX_IS_AUDIOCONFIGPARAMSMP3(src))
+  {
+    MixAudioConfigParamsMP3 *t = MIX_AUDIOCONFIGPARAMSMP3(target);
+    MixAudioConfigParamsMP3 *s = MIX_AUDIOCONFIGPARAMSMP3(src);
+
+    t->CRC = s->CRC;
+    t->MPEG_format = s->MPEG_format;
+    t->MPEG_layer = s->MPEG_layer;
+
+    // Now chainup base class
+    MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class); 
+    if (klass->copy)
+    {
+      return klass->copy(MIX_PARAMS_CAST(target), MIX_PARAMS_CAST(src));
+    }
+    else
+      return TRUE;
+  }
+  return FALSE;
+}
+
+/**
+ * mix_acp_mp3_equal:
+ * @first: first object to compare
+ * @second: seond object to compare
+ * @returns: boolean indicates if instance are equal.
+ * 
+ * Copy instance data from @src to @target.
+ */
+gboolean mix_acp_mp3_equal(MixParams* first, MixParams *second)
+{
+  gboolean ret = FALSE;
+  
+  if (first && second)
+  {
+    if (first == second) return TRUE;
+  }
+  else
+  {
+    return FALSE;
+  }
+
+  // members within this scope equal. chaining up.
+  MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class);
+  if (klass->equal)
+    ret = klass->equal(first, second);
+  else
+    ret = TRUE;
+
+  if (ret && MIX_IS_AUDIOCONFIGPARAMSMP3(first) && MIX_IS_AUDIOCONFIGPARAMSMP3(second))
+  {
+    MixAudioConfigParamsMP3 *acp1 = MIX_AUDIOCONFIGPARAMSMP3(first);
+    MixAudioConfigParamsMP3 *acp2 = MIX_AUDIOCONFIGPARAMSMP3(second);
+
+    ret = (acp1->CRC == acp2->CRC) &&
+          (acp1->MPEG_format == acp2->MPEG_format) &&
+          (acp1->MPEG_layer == acp2->MPEG_layer);
+  }
+
+  return ret;
+}
+
+
diff --git a/mix_audio/src/mixacpmp3.h b/mix_audio/src/mixacpmp3.h
new file mode 100644
index 0000000..e000b4f
--- /dev/null
+++ b/mix_audio/src/mixacpmp3.h
@@ -0,0 +1,170 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+#ifndef __MIX_ACP_MP3_H__
+#define __MIX_ACP_MP3_H__
+
+
+#include "mixacp.h"
+
+/**
+ * MIX_TYPE_AUDIOCONFIGPARAMSMP3:
+ * 
+ * Get type of class.
+ */
+#define MIX_TYPE_AUDIOCONFIGPARAMSMP3 (mix_acp_mp3_get_type ())
+
+/**
+ * MIX_AUDIOCONFIGPARAMSMP3:
+ * @obj: object to be type-casted.
+ * 
+ * Type casting.
+ */
+#define MIX_AUDIOCONFIGPARAMSMP3(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIX_TYPE_AUDIOCONFIGPARAMSMP3, MixAudioConfigParamsMP3))
+
+/**
+ * MIX_IS_AUDIOCONFIGPARAMSMP3:
+ * @obj: an object.
+ * 
+ * Checks if the given object is an instance of #MixAudioConfigParamsMP3
+ */
+#define MIX_IS_AUDIOCONFIGPARAMSMP3(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIX_TYPE_AUDIOCONFIGPARAMSMP3))
+
+/**
+ * MIX_AUDIOCONFIGPARAMSMP3_CLASS:
+ * @klass: class to be type-casted.
+ * 
+ * Type casting.
+ */
+#define MIX_AUDIOCONFIGPARAMSMP3_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MIX_TYPE_AUDIOCONFIGPARAMSMP3, MixAudioConfigParamsMP3Class))
+
+/**
+ * MIX_IS_AUDIOCONFIGPARAMSMP3_CLASS:
+ * @klass: a class.
+ * 
+ * Checks if the given class is #MixAudioConfigParamsMP3Class
+ */
+#define MIX_IS_AUDIOCONFIGPARAMSMP3_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MIX_TYPE_AUDIOCONFIGPARAMSMP3))
+
+/**
+ * MIX_AUDIOCONFIGPARAMSMP3_GET_CLASS:
+ * @obj: a #MixAudioConfigParams object.
+ * 
+ * Get the class instance of the object.
+ */
+#define MIX_AUDIOCONFIGPARAMSMP3_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MIX_TYPE_AUDIOCONFIGPARAMSMP3, MixAudioConfigParamsMP3Class))
+
+typedef struct _MixAudioConfigParamsMP3        MixAudioConfigParamsMP3;
+typedef struct _MixAudioConfigParamsMP3Class   MixAudioConfigParamsMP3Class;
+
+/**
+ * MixAudioConfigParamsMP3:
+ * @parent: parent.
+ * @CRC: CRC. See #MIX_ACP_MP3_CRC
+ * @MPEG_format: <emphasis>Optional</emphasis>MPEG format of the mpeg audio. See #MIX_ACP_MP3_MPEG_FORMAT
+ * @MPEG_layer: <emphasis>Optional</emphasis>MPEG layer of the mpeg audio. See #MIX_ACP_MP3_MPEG_LAYER
+ *
+ * MI-X Audio Parameter object for MP3 Audio.
+ */
+struct _MixAudioConfigParamsMP3
+{
+  /*< public >*/
+  MixAudioConfigParams parent;
+
+  /*< public >*/
+  /* Audio Format Parameters */
+  gboolean CRC;
+  gint MPEG_format;
+  gint MPEG_layer;
+
+  /*< private >*/
+  void* reserved1;
+  void* reserved2;
+  void* reserved3;
+  void* reserved4;
+};
+
+/**
+ * MixAudioConfigParamsMP3Class:
+ * 
+ * MI-X Audio object class
+ */
+struct _MixAudioConfigParamsMP3Class
+{
+  /*< public >*/
+  MixAudioConfigParamsClass parent_class;
+
+  /* class members */
+};
+ 
+/**
+ * mix_acp_mp3_get_type:
+ * @returns: type
+ * 
+ * Get the type of object.
+ */
+GType mix_acp_mp3_get_type (void);
+
+/**
+ * mix_acp_mp3_new:
+ * @returns: A newly allocated instance of #MixAudioConfigParamsMP3
+ * 
+ * Use this method to create new instance of #MixAudioConfigParamsMP3
+ */
+MixAudioConfigParamsMP3 *mix_acp_mp3_new(void);
+
+/**
+ * mix_acp_mp3_ref:
+ * @mix: object to add reference
+ * @returns: the MixAudioConfigParamsMP3 instance where reference count has been increased.
+ * 
+ * Add reference count.
+ */
+MixAudioConfigParamsMP3 *mix_acp_mp3_ref(MixAudioConfigParamsMP3 *mix);
+
+/**
+ * mix_acp_mp3_unref:
+ * @obj: object to unref.
+ * 
+ * Decrement reference count of the object.
+ */
+#define mix_acp_mp3_unref(obj) mix_params_unref(MIX_PARAMS(obj))
+
+/* Class Methods */
+
+/**
+ * MIX_ACP_MP3_CRC:
+ * @obj: #MixAudioConfigParamsMP3 object.
+ * 
+ * MixAudioConfigParamMP3.CRC accessor.
+ * 
+ * <remark>Optional</remark>
+*/
+#define MIX_ACP_MP3_CRC(obj) (MIX_AUDIOCONFIGPARAMSMP3(obj)->CRC)
+
+/**
+ * MIX_ACP_MP3_MPEG_FORMAT:
+ * @obj: #MixAudioConfigParamsMP3 object.
+ * 
+ * MixAudioConfigParamMP3.MPEG_format accessor.
+ * 
+ * Supported MPEG format should be 1 or 2.
+*/
+#define MIX_ACP_MP3_MPEG_FORMAT(obj) (MIX_AUDIOCONFIGPARAMSMP3(obj)->MPEG_format)
+
+/**
+ * MIX_ACP_MP3_MPEG_LAYER:
+ * @obj: #MixAudioConfigParamsMP3 object.
+ * 
+ * MixAudioConfigParamMP3.MPEG_layer accessor.
+ * 
+ * Supported layer should be 1, 2, or 3.
+*/
+#define MIX_ACP_MP3_MPEG_LAYER(obj) (MIX_AUDIOCONFIGPARAMSMP3(obj)->MPEG_layer)
+
+#endif /* __MIX_AUDIOCONFIGPARAMSMP3_H__ */
diff --git a/mix_audio/src/mixacpwma.c b/mix_audio/src/mixacpwma.c
new file mode 100644
index 0000000..cf2590f
--- /dev/null
+++ b/mix_audio/src/mixacpwma.c
@@ -0,0 +1,205 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+/**
+ * SECTION:mixacpwma
+ * @short_description: Audio parameters for WMA audio.
+ * @include: mixacpwma.h
+ *
+ * A data object which stores audio specific parameters for WMA.
+ * 
+ * In Moorestown, only WMA2 is supported.
+ * 
+ * Additional parameters must be set in the parent object #MixAudioConfigParams
+ */
+
+#include "mixacpwma.h"
+
+static GType _mix_acp_wma_type = 0;
+static MixAudioConfigParamsClass *parent_class = NULL;
+
+#define _do_init { _mix_acp_wma_type = g_define_type_id; }
+
+gboolean mix_acp_wma_copy(MixParams* target, const MixParams *src);
+MixParams* mix_acp_wma_dup(const MixParams *obj);
+gboolean mix_acp_wma_equal(MixParams* first, MixParams *second);
+static void mix_acp_wma_finalize(MixParams *obj);
+
+G_DEFINE_TYPE_WITH_CODE(MixAudioConfigParamsWMA, mix_acp_wma, MIX_TYPE_AUDIOCONFIGPARAMS, _do_init);
+
+static void mix_acp_wma_init (MixAudioConfigParamsWMA *self)
+{
+  self->channel_mask = 0;
+  self->format_tag = 0;
+  self->block_align = 0;
+  self->wma_encode_opt = 0;
+  self->pcm_bit_width = 0;  /* source pcm bit width */
+  self->wma_version = MIX_AUDIO_WMA_VUNKNOWN;
+}
+
+static void mix_acp_wma_class_init(MixAudioConfigParamsWMAClass *klass)
+{
+  MixParamsClass *mixparams_class = MIX_PARAMS_CLASS(klass);
+
+  /* setup static parent class */
+  parent_class = (MixAudioConfigParamsClass *) g_type_class_peek_parent (klass);
+
+  mixparams_class->finalize = mix_acp_wma_finalize;
+  mixparams_class->copy = (MixParamsCopyFunction)mix_acp_wma_copy;
+  mixparams_class->dup = (MixParamsDupFunction)mix_acp_wma_dup;
+  mixparams_class->equal = (MixParamsEqualFunction)mix_acp_wma_equal;
+}
+
+MixAudioConfigParamsWMA *mix_acp_wma_new(void)
+{
+  MixAudioConfigParamsWMA *ret = (MixAudioConfigParamsWMA *)g_type_create_instance (MIX_TYPE_AUDIOCONFIGPARAMSWMA);
+
+  return ret;
+}
+
+void mix_acp_wma_finalize(MixParams *obj)
+{
+  /* clean up here. */
+  
+  /* Chain up parent */ 
+  MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class);
+  if (klass->finalize) 
+    klass->finalize(obj);
+}
+
+MixAudioConfigParamsWMA *mix_acp_wma_ref(MixAudioConfigParamsWMA *obj) 
+{ 
+  return (MixAudioConfigParamsWMA*)mix_params_ref(MIX_PARAMS(obj)); 
+}
+
+/**
+ * mix_acp_wma_dup:
+ * @obj: a #MixAudioConfigParamsWMA object
+ * @returns: a newly allocated duplicate of the object.
+ * 
+ * Copy duplicate of the object.
+ */
+MixParams* mix_acp_wma_dup(const MixParams *obj)
+{
+  MixParams *ret = NULL;
+
+  if (MIX_IS_AUDIOCONFIGPARAMSWMA(obj))
+  {
+    MixAudioConfigParamsWMA *duplicate = mix_acp_wma_new();
+    if (mix_acp_wma_copy(MIX_PARAMS(duplicate), MIX_PARAMS(obj)))
+    {
+      ret = MIX_PARAMS(duplicate);
+    }
+    else
+    {
+      mix_acp_wma_unref(duplicate);
+    }
+  }
+
+  return ret;
+}
+
+/**
+ * mix_acp_wma_copy:
+ * @target: copy to target
+ * @src: copy from src
+ * @returns: boolean indicates if copy is successful.
+ * 
+ * Copy instance data from @src to @target.
+ */
+gboolean mix_acp_wma_copy(MixParams* target, const MixParams *src)
+{
+  if (MIX_IS_AUDIOCONFIGPARAMSWMA(target) && MIX_IS_AUDIOCONFIGPARAMSWMA(src))
+  {
+    MixAudioConfigParamsWMA *t = MIX_AUDIOCONFIGPARAMSWMA(target);
+    MixAudioConfigParamsWMA *s = MIX_AUDIOCONFIGPARAMSWMA(src);
+
+    t->channel_mask = s->channel_mask;
+    t->format_tag = s->format_tag;
+    t->block_align = s->block_align;
+    t->wma_encode_opt = s->wma_encode_opt;
+    t->wma_version = s->wma_version;
+    t->pcm_bit_width = s->pcm_bit_width;
+
+    // Now chainup base class
+    MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class); 
+    if (klass->copy)
+    {
+      return klass->copy(MIX_PARAMS_CAST(target), MIX_PARAMS_CAST(src));
+    }
+    else
+      return TRUE;
+  }
+  return FALSE;
+}
+
+/**
+ * mix_acp_wma_equal:
+ * @first: first object to compare
+ * @second: seond object to compare
+ * @returns: boolean indicates if instance are equal.
+ * 
+ * Copy instance data from @src to @target.
+ */
+gboolean mix_acp_wma_equal(MixParams* first, MixParams *second)
+{
+  gboolean ret = FALSE;
+  
+  if (first && second)
+  {
+    if (first == second) return TRUE;
+  }
+  else
+  {
+    return FALSE;
+  }
+
+  MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class);
+  if (klass->equal)
+    ret = klass->equal(first, second);
+  else
+    ret = TRUE;
+
+  if (ret && MIX_IS_AUDIOCONFIGPARAMSWMA(first) && MIX_IS_AUDIOCONFIGPARAMSWMA(second))
+  {
+    MixAudioConfigParamsWMA *acp1 = MIX_AUDIOCONFIGPARAMSWMA(first);
+    MixAudioConfigParamsWMA *acp2 = MIX_AUDIOCONFIGPARAMSWMA(second);
+
+    ret = (acp1->channel_mask == acp2->channel_mask) &&
+          (acp1->format_tag == acp2->format_tag) &&
+          (acp1->block_align == acp2->block_align) &&
+          (acp1->wma_encode_opt == acp2->wma_encode_opt) &&
+          (acp1->pcm_bit_width == acp2->pcm_bit_width) &&
+          (acp1->wma_version == acp2->wma_version);
+  }
+
+  return ret;
+}
+
+MixAudioWMAVersion mix_acp_wma_get_version(MixAudioConfigParamsWMA *obj)
+{
+  if (obj)
+    return (obj->wma_version);
+  else
+    return MIX_AUDIO_WMA_VUNKNOWN;
+}
+
+MIX_RESULT mix_acp_wma_set_version(MixAudioConfigParamsWMA *obj, MixAudioWMAVersion ver)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  if (!obj) return MIX_RESULT_NULL_PTR;
+
+  if ((ver > MIX_AUDIO_WMA_VUNKNOWN) && (ver < MIX_AUDIO_WMA_LAST))
+    obj->wma_version = ver;
+  else 
+    ret=MIX_RESULT_INVALID_PARAM;
+
+  return ret;
+}
+
diff --git a/mix_audio/src/mixacpwma.h b/mix_audio/src/mixacpwma.h
new file mode 100644
index 0000000..8c617fd
--- /dev/null
+++ b/mix_audio/src/mixacpwma.h
@@ -0,0 +1,235 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+#ifndef __MIX_ACP_WMA_H__
+#define __MIX_ACP_WMA_H__
+
+
+#include "mixacp.h"
+
+/**
+ * MIX_TYPE_AUDIOCONFIGPARAMSWMA:
+ * 
+ * Get type of class.
+ */
+#define MIX_TYPE_AUDIOCONFIGPARAMSWMA (mix_acp_wma_get_type ())
+
+/**
+ * MIX_AUDIOCONFIGPARAMSWMA:
+ * @obj: object to be type-casted.
+ * 
+ * Type casting.
+ */
+#define MIX_AUDIOCONFIGPARAMSWMA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIX_TYPE_AUDIOCONFIGPARAMSWMA, MixAudioConfigParamsWMA))
+
+/**
+ * MIX_IS_AUDIOCONFIGPARAMSWMA:
+ * @obj: an object.
+ * 
+ * Checks if the given object is an instance of #MixAudioConfigParamsWMA
+ */
+#define MIX_IS_AUDIOCONFIGPARAMSWMA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIX_TYPE_AUDIOCONFIGPARAMSWMA))
+
+/**
+ * MIX_AUDIOCONFIGPARAMSWMA_CLASS:
+ * @klass: class to be type-casted.
+ * 
+ * Type casting.
+ */
+#define MIX_AUDIOCONFIGPARAMSWMA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MIX_TYPE_AUDIOCONFIGPARAMSWMA, MixAudioConfigParamsWMAClass))
+
+/**
+ * MIX_IS_AUDIOCONFIGPARAMSWMA_CLASS:
+ * @klass: a class.
+ * 
+ * Checks if the given class is #MixAudioConfigParamsWMAClass
+ */
+#define MIX_IS_AUDIOCONFIGPARAMSWMA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MIX_TYPE_AUDIOCONFIGPARAMSWMA))
+
+/**
+ * MIX_AUDIOCONFIGPARAMSWMA_GET_CLASS:
+ * @obj: a #MixAudioConfigParamsWMA object.
+ * 
+ * Get the class instance of the object.
+ */
+#define MIX_AUDIOCONFIGPARAMSWMA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MIX_TYPE_AUDIOCONFIGPARAMSWMA, MixAudioConfigParamsWMAClass))
+
+/**
+ * MixAudioWMAVersion:
+ * @MIX_AUDIO_WMA_VUNKNOWN: WMA version undefined.
+ * @MIX_AUDIO_WMA_V9: WMA 9
+ * @MIX_AUDIO_WMA_V10: <emphasis>Not Supported</emphasis> WMA 10
+ * @MIX_AUDIO_WMA_V10P: <emphasis>Not Supported</emphasis> WMA 10 Pro
+ * @MIX_AUDIO_WMA_LAST: last entry.
+ * 
+ * WMA version.
+ */
+typedef enum {
+  MIX_AUDIO_WMA_VUNKNOWN,
+  MIX_AUDIO_WMA_V9,
+  MIX_AUDIO_WMA_V10,
+  MIX_AUDIO_WMA_V10P,
+  MIX_AUDIO_WMA_LAST
+} MixAudioWMAVersion;
+
+typedef struct _MixAudioConfigParamsWMA        MixAudioConfigParamsWMA;
+typedef struct _MixAudioConfigParamsWMAClass   MixAudioConfigParamsWMAClass;
+
+/**
+ * MixAudioConfigParamsWMA:
+ * @parent: parent.
+ * @channel_mask: Channel Mask. See #MIX_ACP_WMA_CHANNEL_MASK
+ * @format_tag: Format tag. See #MIX_ACP_WMA_FORMAT_TAG
+ * @block_algin: Block alignment. See #MIX_ACP_WMA_BLOCK_ALIGN
+ * @wma_encode_opt: Encoder option. See #MIX_ACP_WMA_ENCODE_OPT
+ * @pcm_bit_width: Source pcm bit width. See #MIX_ACP_WMA_PCM_BIT_WIDTH
+ * @wma_version: WMA version. See #mix_acp_wma_set_version
+ *
+ * MI-X Audio Parameter object
+ */
+struct _MixAudioConfigParamsWMA
+{
+  /*< public >*/
+  MixAudioConfigParams parent;
+
+  /*< public >*/
+  /* Audio Format Parameters */
+  guint32 channel_mask;
+  guint16 format_tag;
+  guint16 block_align;
+  guint16 wma_encode_opt;/* Encoder option */
+  guint8 pcm_bit_width;  /* source pcm bit width */
+  MixAudioWMAVersion wma_version;
+};
+
+/**
+ * MixAudioConfigParamsWMAClass:
+ * 
+ * MI-X Audio object class
+ */
+struct _MixAudioConfigParamsWMAClass
+{
+  /*< public >*/
+  MixAudioConfigParamsClass parent_class;
+
+  /* class members */
+};
+ 
+/**
+ * mix_acp_wma_get_type:
+ * @returns: type
+ * 
+ * Get the type of object.
+ */
+GType mix_acp_wma_get_type (void);
+
+/**
+ * mix_acp_wma_new:
+ * @returns: A newly allocated instance of #MixAudioConfigParamsWMA
+ * 
+ * Use this method to create new instance of #MixAudioConfigParamsWMA
+ */
+MixAudioConfigParamsWMA *mix_acp_wma_new(void);
+
+/**
+ * mix_acp_wma_ref:
+ * @mix: object to add reference
+ * @returns: the MixAudioConfigParamsWMA instance where reference count has been increased.
+ * 
+ * Add reference count.
+ */
+MixAudioConfigParamsWMA *mix_acp_wma_ref(MixAudioConfigParamsWMA *mix);
+
+/**
+ * mix_acp_wma_unref:
+ * @obj: object to unref.
+ * 
+ * Decrement reference count of the object.
+ */
+#define mix_acp_wma_unref(obj) mix_params_unref(MIX_PARAMS(obj))
+
+/**
+ * MIX_ACP_WMA_CHANNEL_MASK:
+ * @obj: #MixAudioConfigParamsWMA object
+ * 
+ * MixAudioConfigParamWMA.channel_mask accessor.
+ * 
+ * Channel mask must be one of the following:
+ * 
+ * 4: For single (1) channel output.
+ * 
+ * 3: For stereo (2) channels output.
+ * 
+ * Only 1 or 2 output channels are supported.
+ * 
+*/
+#define MIX_ACP_WMA_CHANNEL_MASK(obj) (MIX_AUDIOCONFIGPARAMSWMA(obj)->channel_mask)
+
+/**
+ * MIX_ACP_WMA_FORMAT_TAG:
+ * @obj: #MixAudioConfigParamsWMA object
+ * 
+ * MixAudioConfigParamWMA.format_tag accessor.
+ * 
+ * <remark>In Moorestown, only value 0x0161 combined with use of #MIX_AUDIO_WMA_V9 is supported.</remark>
+*/
+#define MIX_ACP_WMA_FORMAT_TAG(obj) (MIX_AUDIOCONFIGPARAMSWMA(obj)->format_tag)
+
+/**
+ * MIX_ACP_WMA_BLOCK_ALIGN:
+ * @obj: #MixAudioConfigParamsWMA object
+ * 
+ * MixAudioConfigParamWMA.block_align accessor.
+ * 
+ * Block alignment indicates packet size. Available from ASF Header.
+*/
+#define MIX_ACP_WMA_BLOCK_ALIGN(obj) (MIX_AUDIOCONFIGPARAMSWMA(obj)->block_align)
+
+/**
+ * MIX_ACP_WMA_ENCODE_OPT:
+ * @obj: #MixAudioConfigParamsWMA object
+ * 
+ * MixAudioConfigParamWMA.wma_encode_opt accessor.
+ * 
+ * Encoder option available from ASF header.
+*/
+#define MIX_ACP_WMA_ENCODE_OPT(obj) (MIX_AUDIOCONFIGPARAMSWMA(obj)->wma_encode_opt)
+
+/**
+ * MIX_ACP_WMA_PCM_BIT_WIDTH:
+ * @obj: #MixAudioConfigParamsWMA object
+ * 
+ * MixAudioConfigParamWMA.pcm_bit_width accessor.
+ * 
+ * Source pcm bit width available from ASF Header.
+*/
+#define MIX_ACP_WMA_PCM_BIT_WIDTH(obj) (MIX_AUDIOCONFIGPARAMSWMA(obj)->pcm_bit_width)
+
+/* Class Methods */
+/**
+ * mix_acp_wma_get_version:
+ * @obj: #MixAudioConfigParamsWMA object
+ * @returns: MixAudioWMAVersion
+ * 
+ * Get WMA Version.
+*/
+MixAudioWMAVersion mix_acp_wma_get_version(MixAudioConfigParamsWMA *obj);
+
+/**
+ * mix_acp_wma_set_version:
+ * @obj: #MixAudioConfigParamsWMA object
+ * @ver: MixAudioWMAVersion to set.
+ * @returns: MIX_RESULT.
+ * 
+ * Set WMA Version.
+ * 
+ * <remark>In Moorestown, only #MIX_AUDIO_WMA_V9 is supported</remark>
+*/
+MIX_RESULT mix_acp_wma_set_version(MixAudioConfigParamsWMA *obj, MixAudioWMAVersion ver);
+
+#endif /* __MIX_AUDIOCONFIGPARAMSWMA_H__ */
diff --git a/mix_audio/src/mixaip.c b/mix_audio/src/mixaip.c
new file mode 100644
index 0000000..8ee0811
--- /dev/null
+++ b/mix_audio/src/mixaip.c
@@ -0,0 +1,167 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+/**
+ * SECTION:mixaip
+ * @short_description: Initialization parameters object.
+ * @include: mixacp.h
+ *
+ * A data object which stores initialization specific parameters.
+ * 
+ * Not Implemented in Moorestown.
+ */
+
+#include "mixaip.h"
+
+//static GType _mix_aip_type = 0;
+static MixParamsClass *parent_class = NULL;
+
+// #define _do_init { _mix_aip_type = g_define_type_id; };
+#define _do_init 
+
+gboolean mix_aip_copy(MixParams* target, const MixParams *src);
+MixParams* mix_aip_dup(const MixParams *obj);
+gboolean mix_aip_equal(MixParams* first, MixParams *second);
+static void mix_aip_finalize(MixParams *obj);
+
+G_DEFINE_TYPE_WITH_CODE(MixAudioInitParams, mix_aip, MIX_TYPE_PARAMS, _do_init );
+
+#if 0
+void _mix_aip_initialize (void)
+{
+  /* the MixParams types need to be class_ref'd once before it can be
+   * done from multiple threads;
+   * see http://bugzilla.gnome.org/show_bug.cgi?id=304551 */
+  g_type_class_ref (mix_aip_get_type ());
+}
+#endif
+
+static void mix_aip_init (MixAudioInitParams *self)
+{
+  self->reserved1 = self->reserved2 = self->reserved3 = self->reserved4 = NULL;
+}
+
+static void mix_aip_class_init(MixAudioInitParamsClass *klass)
+{
+  MixParamsClass *mixparams_class = MIX_PARAMS_CLASS(klass);
+
+  /* setup static parent class */
+  parent_class = (MixParamsClass *) g_type_class_peek_parent (klass);
+
+  mixparams_class->finalize = mix_aip_finalize;
+  mixparams_class->copy = (MixParamsCopyFunction)mix_aip_copy;
+  mixparams_class->dup = (MixParamsDupFunction)mix_aip_dup;
+  mixparams_class->equal = (MixParamsEqualFunction)mix_aip_equal;
+}
+
+MixAudioInitParams *mix_aip_new(void)
+{
+  MixAudioInitParams *ret = (MixAudioInitParams *)g_type_create_instance (MIX_TYPE_AUDIOINITPARAMS);
+
+  return ret;
+}
+
+void mix_aip_finalize(MixParams *obj)
+{
+  /* clean up here. */
+  
+  /* Chain up parent */ 
+  if (parent_class->finalize) 
+    parent_class->finalize(obj);
+}
+
+MixAudioInitParams *mix_aip_ref(MixAudioInitParams *mix) 
+{ 
+  return (MixAudioInitParams*)mix_params_ref(MIX_PARAMS(mix)); 
+}
+
+/**
+ * mix_aip_dup:
+ * @obj: a #MixAudioInitParams object
+ * @returns: a newly allocated duplicate of the object.
+ * 
+ * Copy duplicate of the object.
+ */
+MixParams* mix_aip_dup(const MixParams *obj)
+{
+  MixParams *ret = NULL;
+
+  if (MIX_IS_AUDIOINITPARAMS(obj))
+  {
+    MixAudioInitParams *duplicate = mix_aip_new();
+    if (mix_aip_copy(MIX_PARAMS(duplicate), MIX_PARAMS(obj)))
+    {
+      ret = MIX_PARAMS(duplicate);
+    }
+    else
+    {
+      mix_aip_unref(duplicate);
+    }
+  }
+
+  return ret;
+}
+
+/**
+ * mix_aip_copy:
+ * @target: copy to target
+ * @src: copy from src
+ * @returns: boolean indicates if copy is successful.
+ * 
+ * Copy instance data from @src to @target.
+ */
+gboolean mix_aip_copy(MixParams* target, const MixParams *src)
+{
+  if (MIX_IS_AUDIOINITPARAMS(target) && MIX_IS_AUDIOINITPARAMS(src))
+  {
+    // TODO perform copy.
+    // 
+    // Now chainup base class
+    // Get the root class from the cached parent_class object. This cached parent_class object has not be overwritten by this current class.
+    // Using the cached parent_class object because this_class would have ->copy pointing to this method!
+    // Cached parent_class contains the class object before it is overwritten by this derive class.
+    // MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class); 
+    if (parent_class->copy)
+    {
+      return parent_class->copy(MIX_PARAMS_CAST(target), MIX_PARAMS_CAST(src));
+    }
+    else
+      return TRUE;
+  }
+  return FALSE;
+}
+
+/**
+ * mix_aip_equal:
+ * @first: first object to compare
+ * @second: seond object to compare
+ * @returns: boolean indicates if instance are equal.
+ * 
+ * Copy instance data from @src to @target.
+ */
+gboolean mix_aip_equal(MixParams* first, MixParams *second)
+{
+  gboolean ret = FALSE;
+
+  if (MIX_IS_AUDIOINITPARAMS(first) && MIX_IS_AUDIOINITPARAMS(second))
+  {
+    // TODO: do deep compare
+
+    if (ret)
+    {
+      // members within this scope equal. chaining up.
+      MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class);
+      if (klass->equal)
+        ret = parent_class->equal(first, second);
+      else
+        ret = TRUE;
+    }
+  }
+
+  return ret;
+}
diff --git a/mix_audio/src/mixaip.h b/mix_audio/src/mixaip.h
new file mode 100644
index 0000000..613ed54
--- /dev/null
+++ b/mix_audio/src/mixaip.h
@@ -0,0 +1,132 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+#ifndef __MIX_AUDIOINITPARAMS_H__
+#define __MIX_AUDIOINITPARAMS_H__
+
+
+#include <mixparams.h>
+
+/**
+ * MIX_TYPE_AUDIOINITPARAMS:
+ * 
+ * Get type of class.
+ */
+#define MIX_TYPE_AUDIOINITPARAMS (mix_aip_get_type ())
+
+/**
+ * MIX_AUDIOINITPARAMS:
+ * @obj: object to be type-casted.
+ * 
+ * Type casting.
+ */
+#define MIX_AUDIOINITPARAMS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIX_TYPE_AUDIOINITPARAMS, MixAudioInitParams))
+
+/**
+ * MIX_IS_AUDIOINITPARAMS:
+ * @obj: an object.
+ * 
+ * Checks if the given object is an instance of #MixParams
+ */
+#define MIX_IS_AUDIOINITPARAMS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIX_TYPE_AUDIOINITPARAMS))
+
+/**
+ * MIX_AUDIOINITPARAMS_CLASS:
+ * @klass: class to be type-casted.
+ * 
+ * Type casting.
+ */
+#define MIX_AUDIOINITPARAMS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MIX_TYPE_AUDIOINITPARAMS, MixAudioInitParamsClass))
+
+/**
+ * MIX_IS_AUDIOINITPARAMS_CLASS:
+ * @klass: a class.
+ * 
+ * Checks if the given class is #MixParamsClass
+ */
+#define MIX_IS_AUDIOINITPARAMS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MIX_TYPE_AUDIOINITPARAMS))
+
+/**
+ * MIX_AUDIOINITPARAMS_GET_CLASS:
+ * @obj: a #MixParams object.
+ * 
+ * Get the class instance of the object.
+ */
+#define MIX_AUDIOINITPARAMS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MIX_TYPE_AUDIOINITPARAMS, MixAudioInitParamsClass))
+
+typedef struct _MixAudioInitParams        MixAudioInitParams;
+typedef struct _MixAudioInitParamsClass   MixAudioInitParamsClass;
+
+/**
+ * MixAudioInitParams:
+ * @parent: Parent.
+ *
+ * @MixAudio initialization parameter object.
+ */
+struct _MixAudioInitParams
+{
+  /*< public >*/
+  MixParams parent;
+
+  /*< private >*/
+  void* reserved1;
+  void* reserved2;
+  void* reserved3;
+  void* reserved4;
+};
+
+/**
+ * MixAudioInitParamsClass:
+ * @parent_class: Parent class.
+ * 
+ * @MixAudio initialization parameter object class structure.
+ */
+struct _MixAudioInitParamsClass
+{
+  /*< public >*/
+  MixParamsClass parent_class;
+
+  /* class members */
+};
+
+/**
+ * mix_aip_get_type:
+ * @returns: type
+ * 
+ * Get the type of object.
+ */
+GType mix_aip_get_type (void);
+
+/**
+ * mix_aip_new:
+ * @returns: A newly allocated instance of #MixAudioInitParams
+ * 
+ * Use this method to create new instance of #MixAudioInitParams
+ */
+MixAudioInitParams *mix_aip_new(void);
+
+/**
+ * mix_aip_ref:
+ * @mix: object to add reference
+ * @returns: the MixAudioInitParams instance where reference count has been increased.
+ * 
+ * Add reference count.
+ */
+MixAudioInitParams *mix_aip_ref(MixAudioInitParams *mix);
+
+/**
+ * mix_aip_unref:
+ * @obj: object to unref.
+ * 
+ * Decrement reference count of the object.
+ */
+#define mix_aip_unref(obj) mix_params_unref(MIX_PARAMS(obj))
+
+/* Class Methods */
+
+#endif /* __MIX_AUDIOINITPARAMS_H__ */
diff --git a/mix_audio/src/mixaudio.c b/mix_audio/src/mixaudio.c
new file mode 100644
index 0000000..6d41350
--- /dev/null
+++ b/mix_audio/src/mixaudio.c
@@ -0,0 +1,2092 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+/**
+ * SECTION:mixaudio
+ * @short_description: Object to support a single stream playback using hardware accelerated decoder.
+ * @include: mixaudio.h
+ * 
+ * #MixAudio object provide thread-safe API for application and/or multimedia framework to take advantage of Intel Smart Sound Technology(TM) driver for hardware audio decode and render.
+ * 
+ * Each #MixAudio object represents one streaming session with the Intel Smart Sound driver and provides configuration and control of the decoding and playback options.
+ * 
+ * The #MixAudio object also support integration with Intel Audio Manager service.
+ * 
+ * An application can utilize the #MixAudio object by calling the following sequence:
+ * <orderedlist numeration="arabic">
+ * <listitem>mix_audio_new() to create a #MixAudio instance.</listitem>
+ * <listitem>mix_audio_initialize() to allocate Intel Smart Sound Technology resource.</listitem>
+ * <listitem>mix_audio_configure() to configure stream parameters.</listitem>
+ * <listitem>mix_audio_decode() can be called repeatedly for decoding and, optionally, rendering.</listitem>
+ * <listitem>mix_audio_start() is called after the 1st mix_audio_decode() method to start rendering.</listitem>
+ * <listitem>mix_audio_stop_drain() is called after the last buffer is passed for decoding in with mix_audio_decode(). </listitem>
+ * <listitem>mix_audio_deinitialize() to free resource once playback is completed.</listitem>
+ * </orderedlist>
+ * 
+ * Since mix_audio_decode() is a blocking call during playback, the following methods are called in a seperate thread to control progress:
+ * <itemizedlist>
+ * <listitem>mix_audio_start()</listitem>
+ * <listitem>mix_audio_pause()</listitem>
+ * <listitem>mix_audio_resume()</listitem>
+ * <listitem>mix_audio_stop_drop()</listitem>
+ * </itemizedlist>
+ */
+
+/**
+ * SECTION:mixaudiotypes
+ * @title: Mix Audio Types
+ * @short_description: Miscellanous types used by #MixAudio API.
+ * @include: mixaudiotypes.h
+ * 
+ * Miscellanous types used by #MixAudio API.
+*/
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/uio.h>
+#include <string.h>
+
+#include <glib.h>
+#include <glib/gprintf.h>
+#include <mixlog.h>
+#include "mixaudio.h"
+
+#ifdef AUDIO_MANAGER
+#include "amhelper.h"
+#endif
+
+#ifndef MIXAUDIO_CURRENT
+#define MIXAUDIO_CURRENT 0
+#endif
+#ifndef MIXAUDIO_AGE
+#define MIXAUDIO_AGE 0
+#endif
+
+/* Include this now but it will change when driver updates.
+   We would want to build against a kernel dev package if that
+   is available.
+*/
+#include <linux/types.h>
+#include "intel_sst_ioctl.h"
+#include "sst_proxy.h"
+
+#ifdef G_LOG_DOMAIN
+#undef G_LOG_DOMAIN
+#define G_LOG_DOMAIN    ((gchar*)"mixaudio")
+#endif
+
+/**
+ * LPE_DEVICE:
+ * 
+ * LPE Device location.
+ */
+static const char* LPE_DEVICE="/dev/lpe";
+/* #define LPE_DEVICE "/dev/lpe" */
+
+#define _LOCK(obj) g_static_rec_mutex_lock(obj);
+#define _UNLOCK(obj) g_static_rec_mutex_unlock(obj);
+
+#define _UNLOCK_RETURN(obj, res) { _UNLOCK(obj); return res; }
+
+typedef enum {
+  MIX_STREAM_PAUSED_DRAINING = MIX_STREAM_LAST,
+  MIX_STREAM_INTERNAL_LAST
+} MixStreamStateInternal;
+
+
+MIX_RESULT mix_audio_initialize_default(MixAudio *mix, MixCodecMode mode, MixAudioInitParams *aip, MixDrmParams *drminitparams);
+MIX_RESULT mix_audio_configure_default(MixAudio *mix, MixAudioConfigParams *audioconfigparams, MixDrmParams *drmparams);
+MIX_RESULT mix_audio_decode_default(MixAudio *mix, const MixIOVec *iovin, gint iovincnt, guint64 *insize, MixIOVec *iovout, gint iovoutcnt, guint64 *outsize);
+MIX_RESULT mix_audio_capture_encode_default(MixAudio *mix, MixIOVec *iovout, gint iovoutcnt);
+MIX_RESULT mix_audio_start_default(MixAudio *mix);
+MIX_RESULT mix_audio_stop_drop_default(MixAudio *mix);
+MIX_RESULT mix_audio_stop_drain_default(MixAudio *mix);
+MIX_RESULT mix_audio_pause_default(MixAudio *mix);
+MIX_RESULT mix_audio_resume_default(MixAudio *mix);
+MIX_RESULT mix_audio_get_timestamp_default(MixAudio *mix, guint64 *msecs);
+MIX_RESULT mix_audio_set_mute_default(MixAudio *mix, gboolean mute);
+MIX_RESULT mix_audio_get_mute_default(MixAudio *mix, gboolean* muted);
+MIX_RESULT mix_audio_get_max_vol_default(MixAudio *mix, gint *maxvol);
+MIX_RESULT mix_audio_get_min_vol_default(MixAudio *mix, gint *minvol);
+MIX_RESULT mix_audio_get_volume_default(MixAudio *mix, gint *currvol, MixVolType type);
+MIX_RESULT mix_audio_set_volume_default(MixAudio *mix, gint currvol, MixVolType type, gulong msecs, MixVolRamp ramptype);
+MIX_RESULT mix_audio_deinitialize_default(MixAudio *mix);
+MIX_RESULT mix_audio_get_stream_state_default(MixAudio *mix, MixStreamState *streamState);
+MIX_RESULT mix_audio_get_state_default(MixAudio *mix, MixState *state);
+MIX_RESULT mix_audio_is_am_available_default(MixAudio *mix, MixAudioManager am, gboolean *avail);
+MIX_RESULT mix_audio_get_output_configuration_default(MixAudio *mix, MixAudioConfigParams **audioconfigparams);
+
+static gboolean g_IAM_available = FALSE;
+MIX_RESULT mix_audio_am_unregister(MixAudio *mix, MixAudioConfigParams *audioconfigparams);
+MIX_RESULT mix_audio_am_register(MixAudio *mix, MixAudioConfigParams *audioconfigparams);
+MIX_RESULT mix_audio_AM_Change(MixAudioConfigParams *oldparams, MixAudioConfigParams *newparams);
+
+static void mix_audio_finalize(GObject *obj);
+G_DEFINE_TYPE (MixAudio, mix_audio, G_TYPE_OBJECT);
+
+static gboolean has_FW_INFO = FALSE;
+static struct snd_sst_fw_info cur_FW_INFO = {{0}};
+
+static MIX_RESULT mix_audio_FW_INFO(MixAudio *mix);
+static MIX_RESULT mix_audio_SST_SET_PARAMS(MixAudio *mix, MixAudioConfigParams *params);
+static MIX_RESULT mix_audio_SST_writev(MixAudio *mix, const MixIOVec *iovin, gint iovincnt, guint64 *insize);
+static MIX_RESULT mix_audio_SST_STREAM_DECODE(MixAudio *mix, const MixIOVec *iovin, gint iovincnt, guint64 *insize, MixIOVec *iovout, gint iovoutcnt, guint64 *outsize);
+static void mix_audio_debug_dump(MixAudio *mix);
+
+static guint g_log_handler=0;
+static void mix_audio_log(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data);
+
+/**
+ * mix_acp_print_params:
+ * @obj: TBD
+ * 
+ * This method is to print acp param. It is a hidden implementation within MixAudioConfigParams.
+*/
+void mix_acp_print_params(MixAudioConfigParams *obj);
+
+static void mix_audio_init (MixAudio *self)
+{
+  self->useIAM = FALSE;
+  self->streamID = 0; // TODO: Find out the invalid value for stream ID when integrates with IAM.
+  self->amStreamID = 0;         // TODO: as above
+  self->streamState = MIX_STREAM_NULL;
+  self->encoding = NULL;
+  self->fileDescriptor = -1;
+  self->state = MIX_STATE_UNINITIALIZED;
+  self->codecMode = MIX_CODING_INVALID;
+  self->am_registered = FALSE;
+
+  /* private member initialization */
+  g_static_rec_mutex_init (&self->streamlock);
+  g_static_rec_mutex_init (&self->controllock);
+
+  self->audioconfigparams = NULL;
+  self->deviceState = MIX_AUDIO_DEV_CLOSED;
+
+#ifdef LPESTUB
+  g_message("MixAudio running in stub mode!");
+  self->ts_last = 0;
+  self->ts_elapsed = 0;
+#endif
+
+  self->bytes_written=0;
+
+}
+
+void _mix_aip_initialize (void);
+
+static void mix_audio_class_init (MixAudioClass *klass)
+{
+  GObjectClass *gobject_class = (GObjectClass*)klass;
+
+  gobject_class->finalize = mix_audio_finalize;
+
+  // Init thread before any threads/sync object are used.
+  if (!g_thread_supported ()) g_thread_init (NULL);
+
+  /* Init some global vars */
+  g_IAM_available = FALSE;
+
+  // base implementations
+  klass->initialize = mix_audio_initialize_default;
+  klass->configure = mix_audio_configure_default;
+  klass->decode = mix_audio_decode_default;
+  klass->capture_encode = mix_audio_capture_encode_default;
+  klass->start = mix_audio_start_default;
+  klass->stop_drop = mix_audio_stop_drop_default;
+  klass->stop_drain = mix_audio_stop_drain_default;
+  klass->pause = mix_audio_pause_default;
+  klass->resume = mix_audio_resume_default;
+  klass->get_timestamp = mix_audio_get_timestamp_default;
+  klass->set_mute = mix_audio_set_mute_default;
+  klass->get_mute = mix_audio_get_mute_default;
+  klass->get_max_vol = mix_audio_get_max_vol_default;
+  klass->get_min_vol = mix_audio_get_min_vol_default;
+  klass->get_volume = mix_audio_get_volume_default;
+  klass->set_volume = mix_audio_set_volume_default;
+  klass->deinitialize = mix_audio_deinitialize_default;
+  klass->get_stream_state = mix_audio_get_stream_state_default;
+  klass->get_state = mix_audio_get_state_default;
+  klass->is_am_available = mix_audio_is_am_available_default;
+  klass->get_output_configuration = mix_audio_get_output_configuration_default;
+
+  // Set log handler...
+  if (!g_log_handler)
+  {
+    // Get Environment variable 
+    // See mix_audio_log for details
+    const gchar* loglevel = g_getenv("MIX_AUDIO_DEBUG");
+    guint64 ll = 0;
+    if (loglevel)
+    {
+      if (g_strstr_len(loglevel,-1, "0x") == loglevel)
+      {
+        // Hex string
+        ll = g_ascii_strtoull(loglevel+2, NULL, 16);
+      }
+      else
+      {
+        // Decimal string
+        ll = g_ascii_strtoull(loglevel, NULL, 10);
+      }
+    }
+    guint32 mask = (guint32)ll;
+    g_log_handler = g_log_set_handler(G_LOG_DOMAIN, 0xffffffff, mix_audio_log, (gpointer)mask);
+/*
+    g_debug("DEBUG Enabled");
+    g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "%s", "LOG Enabled");
+    g_message("MESSAGE Enabled");
+    g_warning("WARNING Enabled");
+    g_critical("CRITICAL Enabled");
+    g_error("ERROR Enabled");
+*/
+  }
+}
+
+static void mix_audio_log(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data)
+{
+  // Log message based on a mask.
+  // Mask could be read from MIX_AUDIO_DEBUG environment variable
+  // mask is a bit mask specifying the message to print. The lsb (0) is "ERROR" and graduating increasing
+  // value as describe in GLogLevelFlags structure. Not that lsb in GLogLevelFlags is not "ERROR" and
+  // here we shifted the log_level to ignore the first 2 values in GLogLevelFlags, making ERROR align to
+  // the lsb.
+  static const gchar* lognames[] = {"error", "critical", "warning", "message", "log", "debug"};
+  guint32 mask = (guint32)user_data & ((G_LOG_LEVEL_MASK & log_level) >> 2);
+  gint index = 0;
+
+  GTimeVal t = {0};
+
+  // convert bit mask back to index.
+  index = ffs(mask) - 1;
+  
+  if ((index<0) || (index >= (sizeof(lognames)/sizeof(lognames[0])))) return;
+
+  g_get_current_time(&t);
+  g_printerr("%" G_GUINT64_FORMAT ":%s-%s: %s\n", 
+    ((guint64)1000000 * t.tv_sec + (guint64)t.tv_usec),
+    log_domain?log_domain:G_LOG_DOMAIN,
+    lognames[index],
+    message?message:"NULL");
+}
+
+MixAudio *mix_audio_new(void)
+{
+  MixAudio *ret = g_object_new(MIX_TYPE_AUDIO, NULL);
+
+  return ret;
+}
+
+void mix_audio_finalize(GObject *obj)
+{
+  /* clean up here. */
+  MixAudio *mix = MIX_AUDIO(obj);
+
+  if (G_UNLIKELY(!mix)) return;
+
+  /*
+    We are not going to check the thread lock anymore in this method.
+    If a thread is accessing the object it better still have a ref on this
+    object and in that case, this method won't be called.
+    
+    The application have to risk access violation if it calls the methods in
+    a thread without actually holding a reference.
+  */
+
+  g_debug("_finalized(). bytes written=%" G_GUINT64_FORMAT, mix->bytes_written);
+
+  g_static_rec_mutex_free (&mix->streamlock);
+  g_static_rec_mutex_free (&mix->controllock);
+
+  if (mix->audioconfigparams)
+  {
+    mix_acp_unref(mix->audioconfigparams);
+    mix->audioconfigparams = NULL;
+  }
+}
+
+MixAudio *mix_audio_ref(MixAudio *mix) 
+{ 
+  if (G_UNLIKELY(!mix)) return NULL;
+
+  return (MixAudio*)g_object_ref(G_OBJECT(mix)); 
+}
+
+MIX_RESULT mix_audio_initialize_default(MixAudio *mix, MixCodecMode mode, MixAudioInitParams *aip, MixDrmParams *drminitparams)
+{
+  MIX_RESULT ret = MIX_RESULT_FAIL;
+
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  // TODO: parse and process MixAudioInitParams. It is ignored for now.
+
+  // initialized must be called with both thread-lock held, so no other operation is allowed.
+  
+  // try lock stream thread. If failed, a pending _decode/_encode/_drain is ongoing.
+  if (!g_static_rec_mutex_trylock(&mix->streamlock)) return MIX_RESULT_WRONG_STATE;
+
+  // also lock the control thread lock.
+  _LOCK(&mix->controllock);
+
+  if (mix->state == MIX_STATE_UNINITIALIZED)
+  {
+    // Only allowed in uninitialized state.
+    switch (mode)
+    {
+      case MIX_CODING_DECODE:
+      case MIX_CODING_ENCODE:
+        {
+          // Open device. Same flags to open for decode and encode?
+#ifdef LPESTUB
+          //g_debug("Reading env var LPESTUB_FILE for data output file.\n");
+          //const char* filename = g_getenv("LPESTUB_FILE");
+          gchar *filename = NULL;
+          GError *err = NULL;
+          const gchar* fn = NULL;
+	  fn = g_getenv("MIX_AUDIO_OUTPUT");
+	  if (fn)
+	    mix->fileDescriptor = open(fn, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
+
+          if (mix->fileDescriptor == -1)
+          {
+	    mix->fileDescriptor = g_file_open_tmp ("mixaudio.XXXXXX", &filename, &err);
+
+            if (err)
+            {
+              g_warning("Oops, cannot open temp file: Error message: %s", err->message);
+            }
+            else
+            {
+              g_debug("Opening %s as output data file.\n", filename);
+            }
+          }
+          else
+          {
+            g_debug("Opening %s as output data file.\n", fn);
+          }
+          if (filename) g_free(filename);
+#else
+          g_debug("Opening %s\n", LPE_DEVICE);
+          mix->fileDescriptor = open(LPE_DEVICE, O_RDWR);
+#endif
+          if (mix->fileDescriptor != -1)
+          {
+            mix->codecMode = mode;
+            mix->state = MIX_STATE_INITIALIZED;
+            ret = MIX_RESULT_SUCCESS;
+            g_debug("open() succeeded. fd=%d", mix->fileDescriptor);
+          }
+          else
+          {
+            ret = MIX_RESULT_LPE_NOTAVAIL;
+          }
+        }
+        break;
+      default:
+        ret = MIX_RESULT_INVALID_PARAM;
+      break;
+    }
+  }
+  else
+  {
+    ret = MIX_RESULT_WRONG_STATE;
+  }
+
+  _UNLOCK(&mix->controllock);
+  _UNLOCK(&mix->streamlock);
+
+  return ret;
+}
+
+gboolean mix_audio_am_is_available(void)
+{
+  // return FALSE for now until IAM is available for integration.
+  // TODO: Check IAM
+  return FALSE;
+}
+
+gboolean mix_audio_base_am_is_enabled(MixAudio *mix)
+{
+  // TODO: Check IAM usage
+  return FALSE;
+}
+
+/**
+ * mix_audio_SST_SET_PARAMS:
+ * @mix: #MixAudio object.
+ * @params: Audio parameter used to configure SST.
+ * @returns: #MIX_RESULT indicating configuration result.
+ * 
+ * This method setup up a SST stream with the given parameters. Note that even though 
+ * this method could succeed and SST stream is setup properly, client may still not be able
+ * to use the session if other condition are met, such as a successfully set-up IAM, if used.
+ */
+MIX_RESULT mix_audio_SST_SET_PARAMS(MixAudio *mix, MixAudioConfigParams *params)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  if (mix->state == MIX_STATE_UNINITIALIZED) return MIX_RESULT_NOT_INIT;
+
+  if (!MIX_IS_AUDIOCONFIGPARAMS(params)) return MIX_RESULT_INVALID_PARAM;
+
+  mix_acp_print_params(params);
+
+  struct snd_sst_params sst_params = {0};
+
+  gboolean converted = mix_sst_params_convert(params, &sst_params);
+
+  if (converted)
+  {
+    // Setup the driver structure
+    // We are assuming the configstream will always be called after open so the codec mode
+    // should already been setup.
+    sst_params.stream_id = mix->streamID;
+    // We are not checking the codecMODE here for out-of-range...assuming we check that
+    // during init...
+    if (mix->codecMode == MIX_CODING_ENCODE)
+      sst_params.ops = STREAM_OPS_CAPTURE;
+    else sst_params.ops = STREAM_OPS_PLAYBACK;
+
+     // hard-coded to support music only.
+    sst_params.stream_type = 0x0; // stream_type 0x00 is STREAM_TYPE_MUSIC per SST doc.
+
+    // SET_PARAMS
+    int retVal = 0;
+
+#ifdef LPESTUB
+    // Not calling the ioctl
+#else
+    g_debug("Calling SNDRV_SST_STREAM_SET_PARAMS. fd=%d", mix->fileDescriptor);
+    retVal = ioctl(mix->fileDescriptor, SNDRV_SST_STREAM_SET_PARAMS, &sst_params);
+    g_debug("_SET_PARAMS returned %d", retVal);
+#endif
+
+    if (!retVal)
+    {
+      // IOCTL success.
+      switch (sst_params.result)
+      {
+        // Please refers to SST API doc for return value definition.
+        case 5:
+          g_debug("SET_PARAMS succeeded with Stream Parameter Modified.");
+        case 0:
+          // driver says ok, too.
+          ret = MIX_RESULT_SUCCESS;
+          mix->deviceState = MIX_AUDIO_DEV_ALLOCATED;
+          mix->streamState = MIX_STREAM_STOPPED;
+          mix->streamID = sst_params.stream_id;
+          // clear old params
+          if (MIX_IS_AUDIOCONFIGPARAMS(mix->audioconfigparams))
+          {
+            mix_acp_unref(mix->audioconfigparams);
+            mix->audioconfigparams=NULL;
+          }
+          // replace with new one.
+          mix->audioconfigparams = MIX_AUDIOCONFIGPARAMS(mix_params_dup(MIX_PARAMS(params)));
+          // Note: do not set mix->state here because this state may rely op other than SET_PARAMS
+          g_debug("SET_PARAMS succeeded streamID=%d.", mix->streamID);
+          break;
+        case 1:
+          ret = MIX_RESULT_STREAM_NOTAVAIL;
+          g_debug("SET_PARAMS failed STREAM not available.");
+          break;
+        case 2:
+          ret = MIX_RESULT_CODEC_NOTAVAIL;
+          g_debug("SET_PARAMS failed CODEC not available.");
+          break;
+        case 3:
+          ret = MIX_RESULT_CODEC_NOTSUPPORTED;
+          g_debug("SET_PARAMS failed CODEC not supported.");
+          break;
+        case 4:
+          ret = MIX_RESULT_INVALID_PARAM;
+          g_debug("SET_PARAMS failed Invalid Stream Parameters.");
+          break;
+        case 6:
+          g_debug("SET_PARAMS failed Invalid Stream ID.");
+        default:
+          ret = MIX_RESULT_FAIL;
+          g_critical("SET_PARAMS failed unexpectedly. Result code: %u\n", sst_params.result);
+          break;
+      }
+    }
+    else
+    {
+      // log errors
+      ret = MIX_RESULT_SYSTEM_ERRNO; 
+      g_debug("Failed to SET_PARAMS. errno:0x%08x. %s\n", errno, strerror(errno));
+    }
+  }
+  else
+  {
+    ret = MIX_RESULT_INVALID_PARAM;
+  }
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_get_state_default(MixAudio *mix, MixState *state)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+  
+  if (state)
+    *state = mix->state;
+  else
+    ret = MIX_RESULT_NULL_PTR;
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_decode_default(MixAudio *mix, const MixIOVec *iovin, gint iovincnt, guint64 *insize, MixIOVec *iovout, gint iovoutcnt, guint64 *outsize)
+{
+  MIX_RESULT ret = MIX_RESULT_FAIL;
+
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  if (!g_static_rec_mutex_trylock(&mix->streamlock)) return MIX_RESULT_WRONG_STATE;
+
+  if (mix->state != MIX_STATE_CONFIGURED) _UNLOCK_RETURN(&mix->streamlock, MIX_RESULT_WRONG_STATE);
+
+  if (MIX_ACP_DECODEMODE(mix->audioconfigparams) == MIX_DECODE_DIRECTRENDER)
+    ret = mix_audio_SST_writev(mix, iovin, iovincnt, insize);
+  else
+    ret = mix_audio_SST_STREAM_DECODE(mix, iovin, iovincnt, insize, iovout, iovoutcnt, outsize);
+
+  _UNLOCK(&mix->streamlock);
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_deinitialize_default(MixAudio *mix)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  if (!g_static_rec_mutex_trylock(&mix->streamlock)) return MIX_RESULT_WRONG_STATE;
+
+#ifdef AUDIO_MANAGER
+  if (mix->amStreamID && (lpe_stream_unregister(mix->amStreamID) < 0)) {
+    g_debug("lpe_stream_unregister failed\n");
+    //return MIX_RESULT_FAIL;   // TODO: not sure what to do here
+  }
+#endif
+
+  _LOCK(&mix->controllock);
+
+  if (mix->state == MIX_STATE_UNINITIALIZED)
+    ret = MIX_RESULT_SUCCESS;
+  else if ((mix->streamState != MIX_STREAM_STOPPED) && (mix->streamState != MIX_STREAM_NULL))
+    ret = MIX_RESULT_WRONG_STATE;
+  else
+  {
+    if (mix->fileDescriptor != -1)
+    {
+      g_debug("Closing fd=%d\n", mix->fileDescriptor);
+      close(mix->fileDescriptor);
+      mix->fileDescriptor = -1;
+      mix->deviceState = MIX_AUDIO_DEV_CLOSED;
+    }
+    mix->state = MIX_STATE_UNINITIALIZED;
+  }
+
+  mix->bytes_written = 0;
+
+  _UNLOCK(&mix->controllock);
+  _UNLOCK(&mix->streamlock);
+
+  return ret;
+}
+
+
+MIX_RESULT mix_audio_stop_drop_default(MixAudio *mix)
+{
+  MIX_RESULT ret = MIX_RESULT_FAIL;
+
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  _LOCK(&mix->controllock);
+
+  if (mix->state != MIX_STATE_CONFIGURED)
+    _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_NOT_CONFIGURED);
+
+  // Will call DROP even if we are already stopped. It is needed to unblock any pending write() call.
+//  if (mix->streamState == MIX_STREAM_DRAINING)
+//    ret = MIX_RESULT_WRONG_STATE;
+//  else
+  {
+    int retVal = 0;
+#ifdef LPESTUB
+    // Not calling ioctl.
+#else
+    g_debug("Calling SNDRV_SST_STREAM_DROP. fd=%d", mix->fileDescriptor);
+    retVal = ioctl(mix->fileDescriptor, SNDRV_SST_STREAM_DROP);
+    g_debug("_DROP returned %d", retVal);
+#endif
+
+    if (!retVal)
+      {
+        mix->streamState = MIX_STREAM_STOPPED;
+        ret = MIX_RESULT_SUCCESS;
+      }
+    else
+      {
+        ret = MIX_RESULT_SYSTEM_ERRNO; 
+        g_debug("Failed to stop stream. Error:0x%08x. Unknown stream state.", errno);
+      }
+  }
+
+  _UNLOCK(&mix->controllock);
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_stop_drain_default(MixAudio *mix)
+{
+  MIX_RESULT ret = MIX_RESULT_FAIL;
+  int retVal = 0;
+
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  // No need to lock to check vars that won't be changed in this function
+
+  if (g_static_rec_mutex_trylock(&mix->streamlock))
+  {
+    gboolean doDrain = FALSE;
+
+    if (mix->state != MIX_STATE_CONFIGURED) 
+      _UNLOCK_RETURN(&mix->streamlock, MIX_RESULT_NOT_CONFIGURED);
+
+    _LOCK(&mix->controllock);
+    {
+      if (mix->streamState == MIX_STREAM_STOPPED)
+        ret = MIX_RESULT_SUCCESS;
+      else if ((mix->streamState == MIX_STREAM_DRAINING) || mix->streamState == MIX_STREAM_PAUSED_DRAINING)
+        ret = MIX_RESULT_WRONG_STATE;
+      else
+      {
+        doDrain = TRUE;
+        g_debug("MIX stream is DRAINING");
+        mix->streamState = MIX_STREAM_DRAINING;
+      }
+    }
+    _UNLOCK(&mix->controllock);
+
+
+    if (doDrain)
+    {
+      // Calling the blocking DRAIN without holding the controllock
+      // TODO: remove this ifdef when API becomes available.
+  #ifdef LPESTUB
+      
+  #else
+      //g_debug("Calling SNDRV_SST_STREAM_DRAIN. fd=0x%08x", mix->fileDescriptor);
+      //retVal = ioctl(mix->fileDescriptor, SNDRV_SST_STREAM_DRAIN);
+//      g_warning("Calling SNDRV_SST_STREAM_DROP instead of SNDRV_SST_STREAM_DRAIN here since DRAIN is not yet integrated. There may be data loss. fd=%d", mix->fileDescriptor);
+      g_debug("Calling SNDRV_SST_STREAM_DRAIN fd=%d", mix->fileDescriptor);
+      retVal = ioctl(mix->fileDescriptor, SNDRV_SST_STREAM_DRAIN);
+      g_debug("_DRAIN returned %d", retVal);
+  #endif
+
+      if (retVal)
+      {
+        _LOCK(&mix->controllock);
+        if (mix->streamState != MIX_STREAM_STOPPED)
+        {
+          // DRAIN could return failed if DROP is called during DRAIN.
+          // Any state resulting as a failed DRAIN would be error, execpt STOPPED.
+          ret = MIX_RESULT_SYSTEM_ERRNO;
+          g_debug("Failed to drain stream. Error:0x%08x. Unknown stream state.", errno);
+        }
+        _UNLOCK(&mix->controllock);
+      }
+      else
+      {
+        _LOCK(&mix->controllock);
+        if ((mix->streamState != MIX_STREAM_DRAINING) &&
+          (mix->streamState != MIX_STREAM_STOPPED))
+        {
+          // State is changed while in DRAINING. This should not be allowed and is a bug.
+          g_warning("MIX Internal state error! DRAIN state(%u) changed!",mix->streamState);
+          ret = MIX_RESULT_FAIL;
+        }
+        else
+        {
+          mix->streamState = MIX_STREAM_STOPPED;
+          ret = MIX_RESULT_SUCCESS;
+        }
+        _UNLOCK(&mix->controllock);
+      }
+    }
+
+    _UNLOCK(&mix->streamlock);
+  }
+  else
+  {
+    // Cannot obtain stream lock meaning there's a pending _decode/_encode.
+    // Will not proceed.
+    ret = MIX_RESULT_WRONG_STATE;
+  }
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_start_default(MixAudio *mix)
+{
+  MIX_RESULT ret = MIX_RESULT_FAIL;
+
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  _LOCK(&mix->controllock);
+
+  if (mix->state != MIX_STATE_CONFIGURED)
+    _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_NOT_CONFIGURED);
+
+  if (MIX_ACP_DECODEMODE(mix->audioconfigparams) == MIX_DECODE_DECODERETURN)
+    _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_WRONGMODE);
+
+  // Note this impl return success even if stream is already started.
+  switch (mix->streamState)
+  {
+    case MIX_STREAM_PLAYING:
+    case MIX_STREAM_PAUSED:
+    case MIX_STREAM_PAUSED_DRAINING:
+      ret = MIX_RESULT_SUCCESS;
+      break;
+    case MIX_STREAM_STOPPED:
+      {
+        int retVal = 0;
+#ifdef LPESTUB
+        // Not calling ioctl.
+#else
+        g_debug("Calling SNDRV_SST_STREAM_START. fd=%d", mix->fileDescriptor);
+        retVal = ioctl(mix->fileDescriptor, SNDRV_SST_STREAM_START);
+        g_debug("_START returned %d", retVal);
+#endif
+        if (retVal)
+        {
+          ret = MIX_RESULT_SYSTEM_ERRNO; 
+          g_debug("Fail to START. Error:0x%08x. Stream state unchanged.", errno);
+          mix_audio_debug_dump(mix);
+        }
+        else
+        {
+          mix->streamState = MIX_STREAM_PLAYING;
+          ret = MIX_RESULT_SUCCESS;
+        }
+      }
+      break;
+    case MIX_STREAM_DRAINING:
+    default:
+      ret = MIX_RESULT_WRONG_STATE;
+      break;
+  }
+
+  _UNLOCK(&mix->controllock);
+
+#ifdef LPESTUB
+  if (MIX_SUCCEEDED(ret))
+  {
+    if (mix->ts_last == 0)
+    {
+      GTimeVal tval = {0};
+      g_get_current_time(&tval);
+      mix->ts_last = 1000ll * tval.tv_sec + tval.tv_usec / 1000;
+    }
+  }
+#endif
+  return ret;
+}
+
+MIX_RESULT mix_audio_get_version(guint* major, guint *minor)
+{
+  // simulate the way libtool generate version so the number synchronize with the filename.
+  if (major)
+    *major = MIXAUDIO_CURRENT-MIXAUDIO_AGE;
+
+  if (minor)
+    *minor = MIXAUDIO_AGE;
+
+  return MIX_RESULT_SUCCESS;
+}
+
+MIX_RESULT mix_audio_configure_default(MixAudio *mix, MixAudioConfigParams *audioconfigparams, MixDrmParams *drmparams)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  // param checks
+  if (!MIX_IS_AUDIOCONFIGPARAMS(audioconfigparams)) return MIX_RESULT_NOT_ACP;
+  if (MIX_ACP_DECODEMODE(audioconfigparams) >= MIX_DECODE_LAST) return MIX_RESULT_INVALID_DECODE_MODE;
+  if (!mix_acp_is_streamname_valid(audioconfigparams)) return MIX_RESULT_INVALID_STREAM_NAME;
+
+  // If we cannot lock stream thread, data is flowing and we can't configure.
+  if (!g_static_rec_mutex_trylock(&mix->streamlock)) return MIX_RESULT_WRONG_STATE;
+
+  _LOCK(&mix->controllock);
+
+  // Check all unallowed conditions
+  if (mix->state == MIX_STATE_UNINITIALIZED) 
+    ret = MIX_RESULT_NOT_INIT; // Will not allowed if the state is still UNINITIALIZED
+  else if ((mix->codecMode != MIX_CODING_DECODE) && (mix->codecMode != MIX_CODING_ENCODE))
+    ret = MIX_RESULT_WRONGMODE; // This configure is allowed only in DECODE mode.
+  else if ((mix->streamState != MIX_STREAM_STOPPED) && (mix->streamState != MIX_STREAM_NULL))
+    ret = MIX_RESULT_WRONG_STATE;
+
+  if (!MIX_SUCCEEDED(ret))
+  {
+    // Some check failed. Unlock and return.
+    _UNLOCK(&mix->controllock);
+    _UNLOCK(&mix->streamlock);
+    return ret;
+  }
+
+  if (audioconfigparams->audio_manager == MIX_AUDIOMANAGER_INTELAUDIOMANAGER) {
+    mix->useIAM = TRUE;
+  }
+  // now configure stream.
+
+  ret = mix_audio_am_unregister(mix, audioconfigparams);
+
+  if (MIX_SUCCEEDED(ret))
+  {
+    ret = mix_audio_SST_SET_PARAMS(mix, audioconfigparams);
+  }
+
+  if (MIX_SUCCEEDED(ret))
+  {
+    ret = mix_audio_am_register(mix, audioconfigparams);
+  }
+
+  if (MIX_SUCCEEDED(ret))
+  {
+    mix->state = MIX_STATE_CONFIGURED;
+  }
+  else
+  {
+    mix->state = MIX_STATE_INITIALIZED;
+  }
+
+  _UNLOCK(&mix->controllock);
+  _UNLOCK(&mix->streamlock);
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_get_timestamp_default(MixAudio *mix, guint64 *msecs)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  if (!msecs) return MIX_RESULT_NULL_PTR;
+
+  _LOCK(&mix->controllock);
+
+  if (mix->state == MIX_STATE_CONFIGURED)
+  {
+    if ((mix->codecMode == MIX_CODING_DECODE) && (MIX_ACP_DECODEMODE(mix->audioconfigparams) == MIX_DECODE_DECODERETURN))
+    {
+      ret = MIX_RESULT_WRONGMODE;
+    }
+    else {
+
+      unsigned long long ts = 0;
+      int retVal = 0;
+
+#ifdef LPESTUB
+      // For stubbing, just get system clock.
+      if (MIX_ACP_BITRATE(mix->audioconfigparams) > 0)
+      {
+        // use bytes_written and bitrate
+        // to get times in msec.
+        ts = mix->bytes_written * 8000 / MIX_ACP_BITRATE(mix->audioconfigparams);
+      }
+      else if (mix->ts_last)
+      {
+        GTimeVal tval = {0};
+        g_get_current_time(&tval);
+        ts = 1000ll * tval.tv_sec + tval.tv_usec / 1000;
+        ts -= mix->ts_last;
+        ts += mix->ts_elapsed;
+      }
+      else
+      {
+        ts = 0;
+      }
+#else
+      g_debug("Calling SNDRV_SST_STREAM_GET_TSTAMP. fd=%d", mix->fileDescriptor);
+      ioctl(mix->fileDescriptor, SNDRV_SST_STREAM_GET_TSTAMP, &ts);
+#endif
+
+      if (retVal)
+      {
+        ret = MIX_RESULT_SYSTEM_ERRNO; 
+        g_debug("_GET_TSTAMP failed. Error:0x%08x", errno);
+        //ret = MIX_RESULT_FAIL;
+        mix_audio_debug_dump(mix);
+      }
+      else
+      {
+        *msecs = ts;
+        g_debug("_GET_TSTAMP returned %" G_GUINT64_FORMAT, ts);
+      }
+    }
+  }
+  else
+    ret = MIX_RESULT_NOT_CONFIGURED;
+
+  _UNLOCK(&mix->controllock);
+
+  return ret;
+}
+
+gboolean mix_audio_AM_Change(MixAudioConfigParams *oldparams, MixAudioConfigParams *newparams) 
+{
+  if (g_strcmp0(oldparams->stream_name, newparams->stream_name) == 0) {
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+MIX_RESULT mix_audio_am_unregister(MixAudio *mix, MixAudioConfigParams *audioconfigparams)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  if (mix->am_registered && MIX_IS_AUDIOCONFIGPARAMS(mix->audioconfigparams) && MIX_IS_AUDIOCONFIGPARAMS(audioconfigparams))
+  {
+    // we have 2 params. let's check
+    if ((MIX_ACP_DECODEMODE(mix->audioconfigparams) != MIX_ACP_DECODEMODE(audioconfigparams)) || 
+       mix_audio_AM_Change(mix->audioconfigparams, audioconfigparams)) //TODO: add checking for SST change
+    {
+      // decode mode change.
+      if (mix->amStreamID > 0) {
+        if (lpe_stream_unregister(mix->amStreamID) != 0) {
+	  return MIX_RESULT_FAIL;
+        }
+        mix->am_registered = FALSE;
+      }
+    }
+  }
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_am_register(MixAudio *mix, MixAudioConfigParams *audioconfigparams)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  gint32 codec_mode = -1;
+
+  if (mix->codecMode == MIX_CODING_DECODE)
+    codec_mode = 0;
+  else if (mix->codecMode == MIX_CODING_ENCODE)
+    codec_mode = 1;
+  else
+    return MIX_RESULT_FAIL;     // TODO: what to do when fail?
+
+#ifdef AUDIO_MANAGER
+  if (audioconfigparams->stream_name == NULL)
+    return MIX_RESULT_FAIL;
+
+// if AM is enable, and not_registered, then register
+  if (mix->useIAM && !mix->am_registered) {
+    gint32 amStreamID = lpe_stream_register(mix->streamID, "music", audioconfigparams->stream_name, codec_mode);
+
+    if (amStreamID == -1){
+      mix->amStreamID = 0;
+        return MIX_RESULT_FAIL;
+    }
+    else if (amStreamID == -2) {	// -2: Direct render not avail, see AM spec
+      mix->amStreamID = 0;
+      return MIX_RESULT_DIRECT_NOTAVAIL;
+    }
+    mix->am_registered = TRUE;
+    mix->amStreamID = amStreamID;
+  }
+#endif
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_capture_encode_default(MixAudio *mix, MixIOVec *iovout, gint iovoutcnt)
+{
+  struct iovec *vec;
+  gint bytes_read;
+
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  // TODO: set count limit
+  if (iovoutcnt < 1) {
+    return MIX_RESULT_INVALID_COUNT;
+  }
+
+  if (iovout == NULL)
+    return MIX_RESULT_NULL_PTR;
+
+  vec = (struct iovec *) g_alloca(sizeof(struct iovec) * iovoutcnt);
+  if (!vec) return MIX_RESULT_NO_MEMORY;
+
+  gint i;
+  for (i=0; i < iovoutcnt; i++)
+  {
+    vec[i].iov_base = iovout[i].data;
+    vec[i].iov_len = iovout[i].size;
+  }
+
+  mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "begin readv()\n");
+  bytes_read = readv(mix->fileDescriptor, vec, iovoutcnt);
+  mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "end readv(), return: %d\n", bytes_read);
+  if (bytes_read < 0) { // TODO: should not be 0, but driver return 0 right now
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_ERROR, "return: %d\n", bytes_read);
+    return MIX_RESULT_FAIL;
+  }
+/* 
+  gint bytes_count=0;
+  for (i=0; i < iovoutcnt; i++)
+  {
+    bytes_count += iovout[i].size;
+  }
+  iovout[i].size = bytes_read - bytes_count;
+*/
+  return MIX_RESULT_SUCCESS;
+}
+
+MIX_RESULT mix_audio_get_max_vol_default(MixAudio *mix, gint *maxvol)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  if (!maxvol) return MIX_RESULT_NULL_PTR;
+
+  _LOCK(&mix->controllock);
+
+  if (!has_FW_INFO)
+  {
+    ret = mix_audio_FW_INFO(mix);
+  }
+
+  if (MIX_SUCCEEDED(ret))
+  {
+    *maxvol = (gint)cur_FW_INFO.pop_info.max_vol;
+  }
+
+  _UNLOCK(&mix->controllock);
+
+  return ret;
+}
+
+
+MIX_RESULT mix_audio_get_min_vol_default(MixAudio *mix, gint *minvol)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  if (!minvol) return MIX_RESULT_NULL_PTR;
+
+  _LOCK(&mix->controllock);
+
+  if (!has_FW_INFO)
+  {
+    ret = mix_audio_FW_INFO(mix);
+  }
+
+  if (MIX_SUCCEEDED(ret))
+  {
+    *minvol = (gint)cur_FW_INFO.pop_info.min_vol;
+  }
+
+  _UNLOCK(&mix->controllock);
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_get_stream_state_default(MixAudio *mix, MixStreamState *streamState)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  if (!streamState) return MIX_RESULT_NULL_PTR;
+
+  _LOCK(&mix->controllock);
+
+  if (mix->state != MIX_STATE_CONFIGURED) _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_NOT_CONFIGURED);
+
+  // PAUSED_DRAINING is internal state.
+  if (mix->streamState == MIX_STREAM_PAUSED_DRAINING)
+    *streamState = MIX_STREAM_PAUSED;
+  else
+    *streamState = mix->streamState;
+
+  _UNLOCK(&mix->controllock);
+
+  return MIX_RESULT_SUCCESS;
+}
+
+
+MIX_RESULT mix_audio_get_volume_default(MixAudio *mix, gint *currvol, MixVolType type)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  struct snd_sst_vol vol = {0};
+
+  if (!currvol) return MIX_RESULT_NULL_PTR;
+  if ((type != MIX_VOL_PERCENT) && (type != MIX_VOL_DECIBELS)) return MIX_RESULT_INVALID_PARAM;
+
+  _LOCK(&mix->controllock);
+
+  if (mix->state != MIX_STATE_CONFIGURED) _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_NOT_CONFIGURED);
+
+  vol.stream_id = mix->streamID;
+
+  int retVal = 0;
+
+#ifdef LPESTUB
+  // Not calling.
+#else
+  g_debug("Calling SNDRV_SST_GET_VOL. fd=%d", mix->fileDescriptor);
+  retVal = ioctl(mix->fileDescriptor, SNDRV_SST_GET_VOL, &vol);
+  g_debug("SNDRV_SST_GET_VOL returned %d. vol=%d", retVal, vol.volume);
+#endif
+
+  if (retVal)
+  {
+    ret = MIX_RESULT_SYSTEM_ERRNO; 
+    g_debug("_GET_VOL failed. Error:0x%08x", errno);
+    mix_audio_debug_dump(mix);
+  }
+  else
+  {
+    gint maxvol = 0;
+    ret = mix_audio_get_max_vol(mix, &maxvol);
+
+    if (MIX_SUCCEEDED(ret))
+    {
+      if (type == MIX_VOL_PERCENT)
+        *currvol = (maxvol!=0)?((vol.volume * 100) / maxvol):0;
+      else
+        *currvol = vol.volume;
+    }
+  }
+
+  _UNLOCK(&mix->controllock);
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_get_mute_default(MixAudio *mix, gboolean* muted)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+  return ret;
+}
+
+MIX_RESULT mix_audio_set_mute_default(MixAudio *mix, gboolean mute)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  struct snd_sst_mute m = { 0 };
+
+  if (mute) m.mute = 1;
+  else m.mute = 0;
+
+  _LOCK(&mix->controllock);
+
+  if (mix->state != MIX_STATE_CONFIGURED) _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_NOT_CONFIGURED);
+
+  m.stream_id = mix->streamID;
+
+  int retVal = 0;
+
+#ifdef LPESTUB
+  // Not calling.
+#else
+  retVal = ioctl(mix->fileDescriptor, SNDRV_SST_MUTE, &m);
+#endif
+
+  if (retVal)
+  {
+    //ret = MIX_RESULT_FAIL;
+    ret = MIX_RESULT_SYSTEM_ERRNO; 
+    g_debug("_MUTE failed. Error:0x%08x", errno);
+    mix_audio_debug_dump(mix);
+  }
+
+  _UNLOCK(&mix->controllock);
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_pause_default(MixAudio *mix)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  _LOCK(&mix->controllock);
+
+  if (mix->state != MIX_STATE_CONFIGURED) _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_NOT_CONFIGURED);
+
+  if (mix->streamState == MIX_STREAM_PAUSED) _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_SUCCESS);
+
+  if ((mix->streamState != MIX_STREAM_PLAYING) && (mix->streamState != MIX_STREAM_DRAINING))
+    _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_WRONG_STATE);
+
+  int retVal = 0;
+
+#ifdef LPESTUB
+  // Not calling
+#else
+  g_debug("Calling SNDRV_SST_STREAM_PAUSE. fd=%d", mix->fileDescriptor);
+  retVal = ioctl(mix->fileDescriptor, SNDRV_SST_STREAM_PAUSE);
+  g_debug("_PAUSE returned %d", retVal);
+#endif
+
+  if (retVal)
+  {
+    if (mix->streamState == MIX_STREAM_DRAINING)
+    {
+      // if stream state has been DRAINING, DRAIN could become successful during the PAUSE call, but not yet have chance to update streamState since we now hold the lock. 
+      // In this case, the mix_streamState becomes out-of-sync with the actual playback state. PAUSE failed due to stream already STOPPED but mix->streamState remains at "DRAINING"
+      // On the other hand, we can't let DRAIN hold the lock the entire time.
+      // We would not know if we fail PAUSE due to DRAINING, or a valid reason.
+      // Need a better mechanism to sync DRAINING.
+      // DRAINING is not likely problem for resume, as long as the PAUSED state is set when stream is really PAUSED.
+      ret = MIX_RESULT_NEED_RETRY;
+      g_warning("PAUSE failed while DRAINING. Draining could be just completed. Retry needed.");
+    }
+    else
+    {
+      ret = MIX_RESULT_SYSTEM_ERRNO; 
+      g_debug("_PAUSE failed. Error:0x%08x", errno);
+      mix_audio_debug_dump(mix);
+    }
+  }
+  else
+  {
+    if (mix->streamState == MIX_STREAM_DRAINING)
+    {
+      mix->streamState = MIX_STREAM_PAUSED_DRAINING;
+    }
+    else
+    {
+      mix->streamState = MIX_STREAM_PAUSED;
+    }
+  }
+
+  _UNLOCK(&mix->controllock);
+
+#ifdef LPESTUB
+  if (MIX_SUCCEEDED(ret))
+  {
+    GTimeVal tval = {0};
+    g_get_current_time(&tval);
+    guint64 ts = 1000ll * tval.tv_sec + tval.tv_usec / 1000;
+    mix->ts_elapsed += ts - mix->ts_last;
+    mix->ts_last = 0;
+  }
+#endif
+  return ret;
+}
+
+MIX_RESULT mix_audio_resume_default(MixAudio *mix)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  _LOCK(&mix->controllock);
+
+  if (mix->state != MIX_STATE_CONFIGURED) _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_NOT_CONFIGURED);
+
+  if ((mix->streamState == MIX_STREAM_PLAYING) || (mix->streamState == MIX_STREAM_DRAINING))
+    _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_SUCCESS);
+  
+  if ((mix->streamState != MIX_STREAM_PAUSED_DRAINING) && (mix->streamState != MIX_STREAM_PAUSED))
+    _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_WRONG_STATE);
+
+  int retVal = 0;
+
+#ifdef LPESTUB
+  // Not calling
+#else
+  g_debug("Calling SNDRV_SST_STREAM_RESUME");
+  retVal = ioctl(mix->fileDescriptor, SNDRV_SST_STREAM_RESUME);
+  g_debug("_STREAM_RESUME returned %d", retVal);
+#endif
+
+  if (retVal)
+  {
+    ret = MIX_RESULT_SYSTEM_ERRNO; 
+    g_debug("_PAUSE failed. Error:0x%08x", errno);
+    mix_audio_debug_dump(mix);
+  }
+  {
+    if (mix->streamState == MIX_STREAM_PAUSED_DRAINING)
+      mix->streamState = MIX_STREAM_DRAINING;
+    else
+      mix->streamState = MIX_STREAM_PLAYING;
+  }
+
+  _UNLOCK(&mix->controllock);
+
+#ifdef LPESTUB
+  if (MIX_SUCCEEDED(ret))
+  {
+    GTimeVal tval = {0};
+    g_get_current_time(&tval);
+    guint64 ts = 1000ll * tval.tv_sec + tval.tv_usec / 1000;
+    mix->ts_last = ts;
+  }
+#endif
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_set_volume_default(MixAudio *mix, gint currvol, MixVolType type, gulong msecs, MixVolRamp ramptype)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  struct snd_sst_vol vol = {0};
+
+  vol.ramp_duration = msecs;
+  vol.ramp_type = ramptype; // TODO: confirm the mappings between Mix and SST.
+
+  if (!mix) return MIX_RESULT_NULL_PTR;
+
+  if ((type != MIX_VOL_PERCENT) && (type != MIX_VOL_DECIBELS)) return MIX_RESULT_INVALID_PARAM;
+
+  _LOCK(&mix->controllock);
+
+  if (mix->state != MIX_STATE_CONFIGURED) _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_NOT_CONFIGURED);
+
+  vol.stream_id = mix->streamID;
+
+  if (type == MIX_VOL_DECIBELS)
+  {
+    vol.volume = currvol;
+  }
+  else
+  {
+    gint maxvol = 0;
+    ret = mix_audio_get_max_vol(mix, &maxvol);
+    
+    if (!maxvol)
+      g_critical("Max Vol is 0!");
+
+    if (MIX_SUCCEEDED(ret))
+    {
+      vol.volume = currvol * maxvol / 100;
+    }
+  }
+
+  int retVal = 0;
+
+#ifdef LPESTUB
+  // Not calling
+#else
+  g_debug("calling SNDRV_SST_SET_VOL vol=%d", vol.volume);
+  retVal = ioctl(mix->fileDescriptor, SNDRV_SST_SET_VOL, &vol);
+  g_debug("SNDRV_SST_SET_VOL returned %d", retVal);
+#endif
+
+  if (retVal)
+  {
+    ret = MIX_RESULT_SYSTEM_ERRNO; 
+    g_debug("_SET_VOL failed. Error:0x%08x", errno);
+    mix_audio_debug_dump(mix);
+  }
+
+  _UNLOCK(&mix->controllock);
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_FW_INFO(MixAudio *mix)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  _LOCK(&mix->controllock);
+
+  // This call always get the fw info.
+  int retVal = 0;
+
+#ifdef LPESTUB
+  // Not calling.
+#else
+  g_debug("calling SNDRV_SST_FW_INFO fd=%d", mix->fileDescriptor);
+  retVal = ioctl(mix->fileDescriptor, SNDRV_SST_FW_INFO, &cur_FW_INFO);
+  g_debug("SNDRV_SST_FW_INFO returned %d", retVal);
+#endif
+
+  if (!retVal)
+  {
+    has_FW_INFO = TRUE;
+  }
+  else
+  {
+    ret = MIX_RESULT_SYSTEM_ERRNO; 
+    g_debug("_FW_INFO failed. Error:0x%08x", errno);
+    mix_audio_debug_dump(mix);
+  }
+
+  _UNLOCK(&mix->controllock);
+
+  return ret;
+}
+
+
+static MIX_RESULT mix_audio_SST_writev(MixAudio *mix, const MixIOVec *iovin, gint iovincnt, guint64 *insize)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+/*
+  definition of "struct iovec" used by writev:
+  struct iovec {
+      void  *iov_base;
+      size_t iov_len;
+  };
+*/
+
+  if (!mix) return MIX_RESULT_NULL_PTR;
+
+  size_t total_bytes = 0;
+  // NOTE: we may want to find a way to avoid this copy.
+  struct iovec *in = (struct iovec*)g_alloca(sizeof(struct iovec) * iovincnt);
+  if (!in) return MIX_RESULT_NO_MEMORY;
+
+  int i;
+  for (i=0;i<iovincnt;i++)
+  {
+    in[i].iov_base = (void*)iovin[i].data;
+    in[i].iov_len = (size_t)iovin[i].size;
+    total_bytes += in[i].iov_len;
+  }
+
+  ssize_t written = 0;
+
+#ifdef LPESTUB
+  gulong wait_time = 0; //wait time in second.
+  if (MIX_ACP_BITRATE(mix->audioconfigparams) > 0)
+  {
+    wait_time = total_bytes*8*1000*1000/MIX_ACP_BITRATE(mix->audioconfigparams);
+    // g_debug("To wait %lu usec for writev() to simulate blocking\n", wait_time);
+  }
+  GTimer *timer = g_timer_new();
+  g_timer_start(timer);
+
+  g_debug("calling writev(fd=%d)", mix->fileDescriptor);
+  written = writev(mix->fileDescriptor, in, iovincnt);
+  if (written >= 0) mix->bytes_written += written;
+  g_debug("writev() returned %d. Total %" G_GUINT64_FORMAT, written, mix->bytes_written);
+  /* Now since writing to file rarely block, we put timestamp there to block.*/
+  g_timer_stop(timer);
+  gulong elapsed = 0;
+  g_timer_elapsed(timer, &elapsed);
+  g_timer_destroy(timer);
+  // g_debug("writev() returned in %lu usec\n", elapsed);
+  if ((MIX_ACP_BITRATE(mix->audioconfigparams) > 0) && (wait_time > elapsed))
+  {
+    wait_time -= elapsed;
+    g_usleep(wait_time);
+  }
+#else
+  g_debug("calling writev(fd=%d) with %d", mix->fileDescriptor, total_bytes);
+  written = writev(mix->fileDescriptor, in, iovincnt);
+  if (written > 0) mix->bytes_written += written;
+  g_debug("writev() returned %d. Total %" G_GUINT64_FORMAT, written, mix->bytes_written);
+#endif
+
+  if (written < 0)
+  {
+    ret = MIX_RESULT_SYSTEM_ERRNO;
+    g_debug("writev() failed. Error:0x%08x", errno);
+  }
+  else
+  {
+    // guranttee written is positive value before sign extending it.
+    if (insize) *insize = (guint64)written;
+    if (written != total_bytes)
+    {
+        g_warning("writev() wrote only %d out of %d", written, total_bytes);
+    }
+  }
+
+  return ret;
+}
+
+static MIX_RESULT mix_audio_SST_STREAM_DECODE(MixAudio *mix, const MixIOVec *iovin, gint iovincnt, guint64 *insize, MixIOVec *iovout, gint iovoutcnt, guint64 *outsize)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+  int retVal = 0;
+
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  if ((iovout == NULL) || (iovoutcnt <= 0))
+  {
+    g_critical("Wrong mode. Please report a bug...");
+    return MIX_RESULT_NULL_PTR;
+  }
+  
+  g_message("Input entries=%d. Output entries=%d", iovincnt, iovoutcnt);
+
+  struct snd_sst_buff_entry *ientries = NULL; 
+  struct snd_sst_buff_entry *oentries = NULL;
+
+  ientries = (struct snd_sst_buff_entry*)g_alloca(sizeof(struct snd_sst_buff_entry) * iovincnt);
+  oentries = (struct snd_sst_buff_entry*)g_alloca(sizeof(struct snd_sst_buff_entry) * iovoutcnt);
+
+  if (!ientries || !oentries) return MIX_RESULT_NO_MEMORY;
+
+  struct snd_sst_dbufs dbufs = {0};
+
+  struct snd_sst_buffs ibuf = {0};
+  struct snd_sst_buffs obuf = {0};
+
+  ibuf.entries = iovincnt;
+  ibuf.type = SST_BUF_USER;
+  ibuf.buff_entry = ientries;
+
+  obuf.entries = iovoutcnt;
+  obuf.type = SST_BUF_USER;
+  obuf.buff_entry = oentries;
+
+  dbufs.ibufs = &ibuf;
+  dbufs.obufs = &obuf;
+
+  int i = 0;
+  for (i=0;i<iovincnt;i++)
+  {
+    ientries[i].size = (unsigned long)iovin[i].size;
+    ientries[i].buffer = (void *)iovin[i].data;
+    g_debug("Creating in entry#%d, size=%u", i, ientries[i].size);
+  }
+
+  for (i=0;i<iovoutcnt;i++)
+  {
+    oentries[i].size = (unsigned long)iovout[i].size;
+    oentries[i].buffer = (void *)iovout[i].data;
+    g_debug("Creating out entry#%d, size=%u", i, oentries[i].size);
+  }
+
+#ifdef LPESTUB
+  size_t total_bytes = 0;
+  // NOTE: we may want to find a way to avoid this copy.
+  struct iovec *in = (struct iovec*)g_alloca(sizeof(struct iovec) * iovincnt);
+  if (iovincnt>1)
+  {
+    for (i=0;i<iovincnt-1;i++)
+    {
+      in[i].iov_base = (void*)iovin[i].data;
+      in[i].iov_len = (size_t)iovin[i].size;
+      total_bytes += in[i].iov_len;
+    }
+    in[i].iov_base = (void*)iovin[i].data;
+    in[i].iov_len = (size_t)iovin[i].size/2;
+    total_bytes += in[i].iov_len;
+  }
+  else
+  {
+    for (i=0;i<iovincnt;i++)
+    {
+      in[i].iov_base = (void*)iovin[i].data;
+      in[i].iov_len = (size_t)iovin[i].size;
+      total_bytes += in[i].iov_len;
+    }
+  }
+  ssize_t written = 0;
+
+  g_debug("calling stub STREAM_DECODE (writev) (fd=%d)", mix->fileDescriptor);
+  written = writev(mix->fileDescriptor, in, iovincnt);
+  if (written >= 0) 
+  { 
+    mix->bytes_written += written;
+    dbufs.output_bytes_produced = written;
+    dbufs.input_bytes_consumed = written;
+  }
+  g_debug("stub STREAM_DECODE (writev) returned %d. Total %" G_GUINT64_FORMAT, written, mix->bytes_written);
+#else
+  g_debug("calling SNDRV_SST_STREAM_DECODE fd=%d", mix->fileDescriptor);
+  retVal = ioctl(mix->fileDescriptor, SNDRV_SST_STREAM_DECODE, &dbufs);
+  g_debug("SNDRV_SST_STREAM_DECODE returned %d", retVal);  
+#endif
+
+  if (retVal)
+  {
+    ret = MIX_RESULT_SYSTEM_ERRNO; 
+    g_debug("_STREAM_DECODE failed. Error:0x%08x", errno);
+    mix_audio_debug_dump(mix);
+  }
+  else
+  {
+    if (insize) *insize = dbufs.input_bytes_consumed;
+    if (outsize) *outsize = dbufs.output_bytes_produced;
+    g_message("consumed=%" G_GUINT64_FORMAT " produced=%" G_GUINT64_FORMAT, dbufs.input_bytes_consumed, dbufs.output_bytes_produced);
+  }
+
+  return ret;
+}
+
+// Starting interface
+//MIX_RESULT mix_audio_get_version(guint* major, guint *minor);
+
+MIX_RESULT mix_audio_initialize(MixAudio *mix, MixCodecMode mode, MixAudioInitParams *aip, MixDrmParams *drminitparams)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_VERBOSE, "mix_audio_initialize\n");
+
+  if (!klass->initialize)
+    return MIX_RESULT_FAIL;     // TODO: add more descriptive error
+
+#ifdef AUDIO_MANAGER
+  if (dbus_init() < 0) {
+    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_ERROR, "Failed to connect to dbus\n");
+// commented out, gracefully exit right now
+//    return MIX_RESULT_FAIL;     // TODO: add more descriptive error
+  }
+#endif
+
+  return klass->initialize(mix, mode, aip, drminitparams);
+}
+
+MIX_RESULT mix_audio_configure(MixAudio *mix, MixAudioConfigParams *audioconfigparams, MixDrmParams *drmparams)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->configure)
+	return MIX_RESULT_FAIL;
+  
+  return klass->configure(mix, audioconfigparams, drmparams);
+}
+
+MIX_RESULT mix_audio_decode(MixAudio *mix, const MixIOVec *iovin, gint iovincnt, guint64 *insize, MixIOVec *iovout, gint iovoutcnt, guint64 *outsize)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->decode)
+    return MIX_RESULT_FAIL;
+
+  return klass->decode(mix, iovin, iovincnt, insize, iovout, iovoutcnt, outsize);
+}
+
+MIX_RESULT mix_audio_capture_encode(MixAudio *mix, MixIOVec *iovout, gint iovoutcnt)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->capture_encode)
+    return MIX_RESULT_FAIL;
+
+  return klass->capture_encode(mix, iovout, iovoutcnt);
+}
+
+MIX_RESULT mix_audio_start(MixAudio *mix)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->start)
+    return MIX_RESULT_FAIL;
+
+  return klass->start(mix);
+}
+
+MIX_RESULT mix_audio_stop_drop(MixAudio *mix)
+{  
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->stop_drop)
+    return MIX_RESULT_FAIL;
+
+  return klass->stop_drop(mix);
+}
+
+MIX_RESULT mix_audio_stop_drain(MixAudio *mix)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->stop_drain)
+    return MIX_RESULT_FAIL;
+
+  return klass->stop_drain(mix);
+}
+
+MIX_RESULT mix_audio_pause(MixAudio *mix)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->pause)
+    return MIX_RESULT_FAIL;
+
+  return klass->pause(mix);
+}
+
+MIX_RESULT mix_audio_resume(MixAudio *mix)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->resume)
+    return MIX_RESULT_FAIL;
+
+  return klass->resume(mix);
+}
+
+MIX_RESULT mix_audio_get_timestamp(MixAudio *mix, guint64 *msecs)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->get_timestamp)
+    return MIX_RESULT_FAIL;
+
+  return klass->get_timestamp(mix, msecs);
+}
+
+MIX_RESULT mix_audio_get_mute(MixAudio *mix, gboolean* muted)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->get_mute)
+    return MIX_RESULT_FAIL;
+
+  return klass->get_mute(mix, muted);
+}
+
+MIX_RESULT mix_audio_set_mute(MixAudio *mix, gboolean mute)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->set_mute)
+    return MIX_RESULT_FAIL;
+
+  return klass->set_mute(mix, mute);
+}
+
+MIX_RESULT mix_audio_get_max_vol(MixAudio *mix, gint *maxvol)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->get_max_vol)
+    return MIX_RESULT_FAIL;
+
+  return klass->get_max_vol(mix, maxvol);
+}
+
+MIX_RESULT mix_audio_get_min_vol(MixAudio *mix, gint *minvol)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->get_min_vol)
+    return MIX_RESULT_FAIL;
+
+  return klass->get_min_vol(mix, minvol);
+}
+
+MIX_RESULT mix_audio_get_volume(MixAudio *mix, gint *currvol, MixVolType type)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->get_volume)
+    return MIX_RESULT_FAIL;
+
+  return klass->get_volume(mix, currvol, type);
+}
+
+MIX_RESULT mix_audio_set_volume(MixAudio *mix, gint currvol, MixVolType type, gulong msecs, MixVolRamp ramptype)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->set_volume)
+    return MIX_RESULT_FAIL;
+
+  return klass->set_volume(mix, currvol, type, msecs, ramptype);
+}
+
+MIX_RESULT mix_audio_deinitialize(MixAudio *mix)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->deinitialize)
+    return MIX_RESULT_FAIL;
+
+  return klass->deinitialize(mix);
+}
+
+MIX_RESULT mix_audio_get_stream_state(MixAudio *mix, MixStreamState *streamState)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->get_stream_state)
+    return MIX_RESULT_FAIL;
+
+  return klass->get_stream_state(mix, streamState);
+}
+
+MIX_RESULT mix_audio_get_state(MixAudio *mix, MixState *state)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->get_state)
+    return MIX_RESULT_FAIL;
+
+  return klass->get_state(mix, state);
+}
+
+MIX_RESULT mix_audio_is_am_available_default(MixAudio *mix, MixAudioManager am, gboolean *avail)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+
+  if (avail)
+    *avail = FALSE;
+  else 
+    ret = MIX_RESULT_NULL_PTR;
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_is_am_available(MixAudio *mix, MixAudioManager am, gboolean *avail)
+{
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->is_am_available)
+    return MIX_RESULT_FAIL;
+
+  return klass->is_am_available(mix, am, avail);
+}
+
+const gchar* dbgstr_UNKNOWN="UNKNOWN";
+
+static const gchar* _mix_stream_state_get_name (MixStreamState s)
+{
+  static const gchar *MixStreamStateNames[] = {
+    "MIX_STREAM_NULL",
+    "MIX_STREAM_STOPPED",
+    "MIX_STREAM_PLAYING",
+    "MIX_STREAM_PAUSED",
+    "MIX_STREAM_DRAINING",
+    "MIX_STREAM_PAUSED_DRAINING",
+    "MIX_STREAM_INTERNAL_LAST"
+  };
+
+  const gchar *ret = dbgstr_UNKNOWN;
+
+  if (s < sizeof(MixStreamStateNames)/sizeof(MixStreamStateNames[0]))
+  {
+    ret = MixStreamStateNames[s];
+  }
+
+  return ret;
+}
+
+static const gchar* _mix_state_get_name(MixState s)
+{
+  static const gchar* MixStateNames[] = {
+    "MIX_STATE_NULL",
+    "MIX_STATE_UNINITIALIZED",
+    "MIX_STATE_INITIALIZED",
+    "MIX_STATE_CONFIGURED",
+    "MIX_STATE_LAST"
+  };
+
+  const gchar *ret = dbgstr_UNKNOWN;
+
+  if (s < sizeof(MixStateNames)/sizeof(MixStateNames[0]))
+  {
+    ret = MixStateNames[s];
+  }
+  
+  return ret;
+}
+
+static const gchar* _mix_codec_mode_get_name(MixCodecMode s)
+{
+  static const gchar* MixCodecModeNames[] = {
+    "MIX_CODING_INVALID",
+    "MIX_CODING_ENCODE",
+    "MIX_CODING_DECODE",
+    "MIX_CODING_LAST"
+  };
+
+  const gchar *ret = dbgstr_UNKNOWN;
+
+  if (s < sizeof(MixCodecModeNames)/sizeof(MixCodecModeNames[0]))
+  {
+    ret = MixCodecModeNames[s];
+  }
+  
+  return ret;
+}
+
+static const gchar* _mix_device_state_get_name(MixDeviceState s)
+{
+  static const gchar* MixDeviceStateNames[] = {
+    "MIX_AUDIO_DEV_CLOSED",
+    "MIX_AUDIO_DEV_OPENED",
+    "MIX_AUDIO_DEV_ALLOCATED"
+  };
+
+  const gchar *ret = dbgstr_UNKNOWN;
+
+  if (s < sizeof(MixDeviceStateNames)/sizeof(MixDeviceStateNames[0]))
+  {
+    ret = MixDeviceStateNames[s];
+  }
+  
+  return ret;
+}
+
+void mix_audio_debug_dump(MixAudio *mix)
+{
+  const gchar* prefix="MixAudio:";
+
+  if (!MIX_IS_AUDIO(mix))
+  {
+    g_debug("%s Not a valid MixAudio object.", prefix);
+    return;
+  }
+
+  g_debug("%s streamState(%s)", prefix, _mix_stream_state_get_name(mix->streamState));
+  g_debug("%s encoding(%s)", prefix, mix->encoding?mix->encoding:dbgstr_UNKNOWN);
+  g_debug("%s fileDescriptor(%d)", prefix, mix->fileDescriptor);
+  g_debug("%s state(%s)", prefix, _mix_state_get_name(mix->state));
+  g_debug("%s codecMode(%s)", prefix, _mix_codec_mode_get_name(mix->codecMode));
+
+  // Private members
+  g_debug("%s streamID(%d)", prefix, mix->streamID);
+  //GStaticRecMutex streamlock; // lock that must be acquired to invoke stream method.
+  //GStaticRecMutex controllock; // lock that must be acquired to call control function.
+  if (MIX_IS_AUDIOCONFIGPARAMS(mix->audioconfigparams))
+  {
+    // TODO: print audioconfigparams
+  }
+  else
+  {
+    g_debug("%s audioconfigparams(NULL)", prefix);
+  }
+  
+  g_debug("%s deviceState(%s)", prefix, _mix_device_state_get_name(mix->deviceState));
+
+  g_debug("%s ts_last(%" G_GUINT64_FORMAT ")", prefix, mix->ts_last);
+  g_debug("%s ts_elapsed(%" G_GUINT64_FORMAT ")", prefix, mix->ts_elapsed);
+  g_debug("%s bytes_written(%" G_GUINT64_FORMAT ")", prefix, mix->bytes_written);
+
+  return;
+}
+
+MIX_RESULT mix_audio_get_output_configuration(MixAudio *mix, MixAudioConfigParams **audioconfigparams)
+{
+  if (G_UNLIKELY(!mix)) return MIX_RESULT_NULL_PTR;
+
+  MixAudioClass *klass = MIX_AUDIO_GET_CLASS(mix);
+
+  if (!klass->get_output_configuration)
+    return MIX_RESULT_FAIL;
+
+  return klass->get_output_configuration(mix, audioconfigparams);
+}
+
+MIX_RESULT mix_audio_get_output_configuration_default(MixAudio *mix, MixAudioConfigParams **audioconfigparams)
+{
+  MIX_RESULT ret = MIX_RESULT_SUCCESS;
+  struct snd_sst_get_stream_params stream_params = {{0}};
+  MixAudioConfigParams *p = NULL;
+  int retVal = 0;
+
+  if (G_UNLIKELY(!mix || !audioconfigparams)) return MIX_RESULT_NULL_PTR;
+
+  _LOCK(&mix->controllock);
+
+  if (mix->state <= MIX_STATE_UNINITIALIZED) _UNLOCK_RETURN(&mix->controllock, MIX_RESULT_NOT_INIT);
+
+#ifdef LPESTUB
+#else
+  // Check only if we are initialized.
+    g_debug("Calling SNDRV_SST_STREAM_GET_PARAMS. fd=%d", mix->fileDescriptor);
+    retVal = ioctl(mix->fileDescriptor, SNDRV_SST_STREAM_GET_PARAMS, &stream_params);
+    g_debug("_GET_PARAMS returned %d", retVal);
+#endif
+
+  _UNLOCK(&mix->controllock);
+
+  if (retVal)
+  {
+      ret = MIX_RESULT_SYSTEM_ERRNO; 
+      g_debug("Failed to GET_PARAMS. errno:0x%08x. %s\n", errno, strerror(errno));
+  }
+  else
+  {
+      p = mix_sst_params_to_acp(&stream_params);
+      *audioconfigparams = p;
+  }
+
+  return ret;
+}
+
+MIX_RESULT mix_audio_get_stream_byte_decoded(MixAudio *mix, guint64 *byte)
+{
+    return MIX_RESULT_NOT_SUPPORTED;
+}
+
diff --git a/mix_audio/src/mixaudio.h b/mix_audio/src/mixaudio.h
new file mode 100644
index 0000000..a3cef5a
--- /dev/null
+++ b/mix_audio/src/mixaudio.h
@@ -0,0 +1,574 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+#ifndef __MIX_AUDIO_H__
+#define __MIX_AUDIO_H__
+
+#include <glib-object.h>
+#include "mixacp.h"
+#include "mixaip.h"
+#include "mixdrmparams.h"
+#include "mixresult.h"
+#include "mixaudiotypes.h"
+
+/*
+ * Type macros.
+ */
+#define MIX_TYPE_AUDIO                  (mix_audio_get_type ())
+#define MIX_AUDIO(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIX_TYPE_AUDIO, MixAudio))
+#define MIX_IS_AUDIO(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIX_TYPE_AUDIO))
+#define MIX_AUDIO_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), MIX_TYPE_AUDIO, MixAudioClass))
+#define MIX_IS_AUDIO_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), MIX_TYPE_AUDIO))
+#define MIX_AUDIO_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), MIX_TYPE_AUDIO, MixAudioClass))
+
+typedef struct _MixAudio        MixAudio;
+typedef struct _MixAudioClass   MixAudioClass;
+
+/**
+ * MixStreamState:
+ * @MIX_STREAM_NULL: Stream is not allocated.
+ * @MIX_STREAM_STOPPED: Stream is at STOP state. This is the only state DNR is allowed.
+ * @MIX_STREAM_PLAYING: Stream is at Playing state.
+ * @MIX_STREAM_PAUSED: Stream is Paused.
+ * @MIX_STREAM_DRAINING: Stream is draining -- remaining of the buffer in the device are playing. This state is special due to the limitation that no other control operations are allowed at this state. Stream will become @MIX_STREAM_STOPPED automatically when this data draining has completed.
+ * @MIX_STREAM_LAST: Last index in the enumeration.
+ *
+ * Stream State during Decode and Render or Encode mode. These states do not apply to Decode and Return mode.
+ */
+typedef enum {
+  MIX_STREAM_NULL=0,
+  MIX_STREAM_STOPPED,
+  MIX_STREAM_PLAYING,
+  MIX_STREAM_PAUSED,
+  MIX_STREAM_DRAINING,
+  MIX_STREAM_LAST
+} MixStreamState;
+
+/**
+ * MixState:
+ * @MIX_STATE_UNINITIALIZED: MIX is not initialized.
+ * @MIX_STATE_INITIALIZED: MIX is initialized.
+ * @MIX_STATE_CONFIGURED: MIX is configured successfully.
+ * @MIX_STATE_LAST: Last index in the enumeration.
+ * 
+ * The varies states the device is in.
+ */
+typedef enum {
+  MIX_STATE_NULL=0,
+  MIX_STATE_UNINITIALIZED,
+  MIX_STATE_INITIALIZED,
+  MIX_STATE_CONFIGURED,
+  MIX_STATE_LAST
+} MixState;
+
+/**
+ * MixCodecMode:
+ * @MIX_CODING_INVALID: Indicates device uninitialied for any mode.
+ * @MIX_CODING_ENCODE: Indicates device is opened for encoding.
+ * @MIX_CODING_DECODE: Indicates device is opened for decoding.
+ * @MIX_CODING_LAST: Last index in the enumeration.
+ * 
+ * Mode where device is operating on. See mix_audio_initialize().
+ */
+typedef enum {
+  MIX_CODING_INVALID=0,
+  MIX_CODING_ENCODE,
+  MIX_CODING_DECODE,
+  MIX_CODING_LAST
+} MixCodecMode;
+
+/**
+ * MixVolType:
+ * @MIX_VOL_PERCENT: volume is expressed in percentage.
+ * @MIX_VOL_DECIBELS: volume is expressed in decibel.
+ * @MIX_VOL_LAST: last entry.
+ * 
+ * See mix_audio_getvolume() and mix_audio_setvolume().
+ */
+typedef enum {
+  MIX_VOL_PERCENT=0,
+  MIX_VOL_DECIBELS,
+  MIX_VOL_LAST
+} MixVolType;
+
+/**
+ * MixVolRamp:
+ * @MIX_RAMP_LINEAR: volume is expressed in percentage.
+ * @MIX_RAMP_EXPONENTIAL: volume is expressed in decibel.
+ * @MIX_RAMP_LAST: last entry.
+ * 
+ * See mix_audio_getvolume() and mix_audio_setvolume().
+ */
+typedef enum 
+{
+  MIX_RAMP_LINEAR = 0,
+  MIX_RAMP_EXPONENTIAL,
+  MIX_RAMP_LAST
+} MixVolRamp;
+
+/**
+ * MixIOVec:
+ * @data: data pointer
+ * @size: size of buffer in @data
+ * 
+ * Scatter-gather style structure. To be used by mix_audio_decode() method for input and output buffer.
+ */
+typedef struct {
+  guchar *data;
+  gint size;
+} MixIOVec;
+
+/**
+ * MixDeviceState:
+ * @MIX_AUDIO_DEV_CLOSED: TBD
+ * @MIX_AUDIO_DEV_OPENED: TBD
+ * @MIX_AUDIO_DEV_ALLOCATED: TBD
+ * 
+ * Device state.
+ */
+typedef enum {
+  MIX_AUDIO_DEV_CLOSED=0,
+  MIX_AUDIO_DEV_OPENED,
+  MIX_AUDIO_DEV_ALLOCATED
+} MixDeviceState;
+
+/**
+ * MixAudioClass:
+ * @parent_class: Parent class;
+ * 
+ * MI-X Audio object class
+ */
+struct _MixAudioClass
+{
+  /*< public >*/
+  GObjectClass parent_class;
+
+  /*< virtual public >*/
+  MIX_RESULT (*initialize) (MixAudio *mix, MixCodecMode mode, MixAudioInitParams *aip, MixDrmParams *drminitparams);
+  MIX_RESULT (*configure) (MixAudio *mix, MixAudioConfigParams *audioconfigparams, MixDrmParams *drmparams);
+  MIX_RESULT (*decode) (MixAudio *mix, const MixIOVec *iovin, gint iovincnt, guint64 *insize, MixIOVec *iovout, gint iovoutcnt, guint64 *outsize);
+  MIX_RESULT (*capture_encode) (MixAudio *mix, MixIOVec *iovout, gint iovoutcnt);
+  MIX_RESULT (*start) (MixAudio *mix);
+  MIX_RESULT (*stop_drop) (MixAudio *mix);
+  MIX_RESULT (*stop_drain) (MixAudio *mix);
+  MIX_RESULT (*pause) (MixAudio *mix);
+  MIX_RESULT (*resume) (MixAudio *mix);
+  MIX_RESULT (*get_timestamp) (MixAudio *mix, guint64 *msecs);
+  MIX_RESULT (*set_mute) (MixAudio *mix, gboolean mute);
+  MIX_RESULT (*get_mute) (MixAudio *mix, gboolean* muted);
+  MIX_RESULT (*get_max_vol) (MixAudio *mix, gint *maxvol);
+  MIX_RESULT (*get_min_vol) (MixAudio *mix, gint *minvol);
+  MIX_RESULT (*get_volume) (MixAudio *mix, gint *currvol, MixVolType type);
+  MIX_RESULT (*set_volume) (MixAudio *mix, gint currvol, MixVolType type, gulong msecs, MixVolRamp ramptype);
+  MIX_RESULT (*deinitialize) (MixAudio *mix);
+  MIX_RESULT (*get_stream_state) (MixAudio *mix, MixStreamState *streamState);
+  MIX_RESULT (*get_state) (MixAudio *mix, MixState *state);
+  MIX_RESULT (*is_am_available) (MixAudio *mix, MixAudioManager am, gboolean *avail);
+  MIX_RESULT (*get_output_configuration) (MixAudio *mix, MixAudioConfigParams **audioconfigparams);
+};
+
+/**
+ * MixAudio:
+ * @parent: Parent object.
+ * @streamState: Current state of the stream
+ * @decodeMode: Current decode mode of the device. This value is valid only when @codingMode equals #MIX_CODING_DECODE.
+ * @fileDescriptor: File Descriptor to the opened device.
+ * @state: State of the current #MixAudio session.
+ * @codecMode: Current codec mode of the session.
+ * @useIAM: Is current stream configured to use Intel Audio Manager.
+ * @encoding: <emphasis>Not Used.</emphasis>
+ *
+ * MI-X Audio object
+ */
+struct _MixAudio
+{
+  /*< public >*/
+  GObject parent;
+
+  /*< public >*/
+
+  /*< private >*/
+  MixStreamState streamState;
+  gchar *encoding;
+  MixState state;
+  MixCodecMode codecMode;
+  gboolean useIAM;
+  int fileDescriptor;
+  gint streamID;
+  guint32 amStreamID;
+  GStaticRecMutex streamlock; // lock that must be acquired to invoke stream method.
+  GStaticRecMutex controllock; // lock that must be acquired to call control function.
+  MixAudioConfigParams *audioconfigparams;
+  gboolean am_registered;
+  MixDeviceState deviceState;
+
+  guint64 ts_last;
+  guint64 ts_elapsed;
+  guint64 bytes_written;
+};
+
+/**
+ * mix_audio_get_type:
+ * @returns: type
+ * 
+ * Get the type of object.
+ */
+GType mix_audio_get_type (void);
+
+/**
+ * mix_audio_new:
+ * @returns: A newly allocated instance of #MixAudio
+ * 
+ * Use this method to create new instance of #MixAudio
+ */
+MixAudio *mix_audio_new(void);
+
+/**
+ * mix_audio_ref:
+ * @mix: object to add reference
+ * @returns: the MixAudio instance where reference count has been increased.
+ * 
+ * Add reference count.
+ */
+MixAudio *mix_audio_ref(MixAudio *mix);
+
+/**
+ * mix_audio_unref:
+ * @obj: object to unref.
+ * 
+ * Decrement reference count of the object.
+ */
+#define mix_audio_unref(obj) g_object_unref (G_OBJECT(obj))
+
+/* Class Methods */
+
+/**
+ * mix_audio_get_version:
+ * @returns: #MIX_RESULT_SUCCESS 
+ * 
+ * Returns the version of the MI-X library.
+ * 
+ */
+MIX_RESULT mix_audio_get_version(guint* major, guint *minor);
+
+/**
+ * mix_audio_initialize:
+ * @mix: #MixAudio object.
+ * @mode: Requested #MixCodecMode.
+ * @aip: Audio initialization parameters.
+ * @drminitparams: <emphasis>Optional.</emphasis> DRM initialization param if applicable.
+ * @returns: #MIX_RESULT_SUCCESS on successful initilaization. #MIX_RESULT_ALREADY_INIT if session is already initialized.
+ * 
+ * This function will initialize an encode or decode session with this #MixAudio instance.  During this call, the device will be opened. If the device is not available, an error is returned to the caller so that an alternative (e.g. software decoding) can be configured instead. Use mix_audio_deinitialize() to close the device.
+ * 
+ * A previous initialized session must be de-initialized using mix_audio_deinitialize() before it can be initialized again.
+ */
+MIX_RESULT mix_audio_initialize(MixAudio *mix, MixCodecMode mode, MixAudioInitParams *aip, MixDrmParams *drminitparams);
+
+/**
+ * mix_audio_configure:
+ * @mix: #MixAudio object.
+ * @audioconfigparams: a #MixAudioConfigParams derived object containing information for the specific stream type.
+ * @drmparams: <emphasis>Optional.</emphasis> DRM initialization param if applicable.
+ * @returns: Result indicates successful or not.
+ * 
+ * This function can be used to configure a stream for the current session.  The caller can use this function to do the following:
+ * 
+ * <itemizedlist>
+ * <listitem>Choose decoding mode (direct-render or decode-return)</listitem>
+ * <listitem>Provide DRM parameters (using DRMparams object)</listitem>
+ * <listitem>Provide stream parameters (using STRMparams objects)</listitem>
+ * <listitem>Provide a stream name for the Intel Smart Sound Technology stream</listitem>
+ * </itemizedlist>
+ * 
+ * SST stream parameters will be set during this call, and stream resources allocated in SST.
+ *
+ * <note>
+ * <title>Intel Audio Manager support:</title>
+ * <para>If Intel Audio Manager support is enabled, and if @mode is specified to #MIX_DECODE_DIRECTRENDER, the SST stream will be registered with Intel Audio Manager in the context of this call, using the stream name provided in @streamname. Application will receive a notification from Intel Audio Manager that the stream has been created during or soon after this call. The application should be ready to handle either possibility.  A stream ID (associated with the stream name) will be provided by Intel Audio Manager which will be used for subsequent notifications from Intel Audio Manager or calls to Intel Audio Manager for muting, pause and resume. See mix_audio_getstreamid()</para>
+ * <para>If a stream is already registered with Intel Audio Manager, application must pass the same @streamname argument to retain the session. Otherwise, the existing stream will be unregistered and a new stream will be registered with the new @streamname.
+ * </para>
+ * </note>
+ * 
+ * If @mode is specified to #MIX_DECODE_DIRECTRENDER but direct-render mode is not available (due to end user use of alternative output device), an error indication will be returned to the caller so that an alternate pipeline configuration can be created (e.g. including a Pulse Audio sink, and support for output buffers).  In this case, the caller will need to call mix_audio_configure() again to with @mode specify as #MIX_DECODE_DECODERETURN to request decode-return mode.
+ * 
+ * This method can be called multiple times if reconfiguration of the stream is needed. However, this method must be called when the stream is in #MIX_STREAM_STOPPED state.
+ * 
+ */
+MIX_RESULT mix_audio_configure(MixAudio *mix, MixAudioConfigParams *audioconfigparams, MixDrmParams *drmparams);
+
+/**
+ * mix_audio_decode:
+ * @mix: #MixAudio object.
+ * @iovin: a pointer to an array of #MixIOVec structure that contains the input buffers
+ * @iovincnt: the number of entry in the @iovin array
+ * @iovout: a pointer to an arrya of #MixIOVec structure that represent the output buffer. During input, each size in the #MixIOVec array represents the available buffer size pointed to by data. Upon return, each size value will be updated to reflect how much data has been filled. This parameter is ignored if stream is configured to #MIX_DECODE_DIRECTRENDER. See mix_audio_configure() for more detail.
+ * @iovoutcnt: in/out parameter which when input, it contains the number of entry available in the @iovout array. Upon return, this value will be updated to reflect how many entry in the @iovout array has been populated with data. This parameter is ignored if stream is configured to #MIX_DECODE_DIRECTRENDER. See mix_audio_configure() for more detail.
+ * @outsize: Total number of bytes returned for the decode session. This parameter is ignored if stream is configured to #MIX_DECODE_DIRECTRENDER.
+ * @returns: #MIX_RESULT
+ * 
+ * This function is used to initiate HW accelerated decoding of encoded data buffers.  This function may be used in two major modes, direct-render or decode-return.  
+ *
+ * With direct-render, input buffers are provided by the caller which hold encoded audio data, and no output buffers are provided.  The encoded data is decoded, and the decoded data is sent directly to the output speaker.  This allows very low power audio rendering and is the best choice of operation for longer battery life.
+ *
+ * <note>
+ * <title>Intel Audio Manager Support</title>
+ * However, if the user has connected a different target output device, such as Bluetooth headphones, this mode cannot be used as the decoded audio must be directed to the Pulse Audio stack where the output to Bluetooth device can be supported, per Intel Audio Manager guidelines.  This mode is called decode-return, and requires the caller to provide output buffers for the decoded data.
+ * </note>
+ * 
+ * Input buffers in both modes are one or more user space buffers using a scatter/gather style vector interface.
+ *
+ * Output buffers for the decode-return mode are one or more user space buffers in a scatter style vector interface.  Buffers will be filled in order and lengths of data filled will be returned.
+ *
+ * This call will block until data has been completely copied or queued to the driver.  All user space buffers may be used or released when this call returns.
+ * 
+ * Note: If the stream is configured as #MIX_DECODE_DIRECTRENDER, and whenever the stream in #MIX_STREAM_STOPPED state, the call to mix_audio_decode() will not start the playback until mix_audio_start() is called. This behavior would allow application to queue up data but delay the playback until appropriate time.
+ * 
+ */
+MIX_RESULT mix_audio_decode(MixAudio *mix, const MixIOVec *iovin, gint iovincnt, guint64 *insize, MixIOVec *iovout, gint iovoutcnt, guint64 *outsize);
+
+/**
+ * mix_audio_capture_encode:
+ * @mix: #MixAudio object.
+ * @iovout: Capture audio samples.
+ * @iovoutcnt: Number of entry in the input vector @iovout.
+ * @returns: #MIX_RESULT
+ * 
+ * To read encoded data from device.
+ * 
+ * <comment>
+ * NOTE: May need to rename to "read_encoded" or other name. Since "encode" seems to mean taking raw audio and convert to compressed audio.
+ * </comment>
+ */
+MIX_RESULT mix_audio_capture_encode(MixAudio *mix, MixIOVec *iovout, gint iovoutcnt);
+
+/**
+ * mix_audio_start:
+ * @mix: #MixAudio object.
+ * @returns: #MIX_RESULT_SUCCESS if the resulting state is either #MIX_STREAM_PLAYING or #MIX_STREAM_PAUSED. Fail code otherwise.
+ * 
+ * If the stream is configured to #MIX_DECODE_DIRECTRENDER, application use this call to change the stream out of the #MIX_STREAM_STOPPED state. If mix_audio_decode() is called and blocking in a seperate thread prior to this call. This method causes the device to start rendering data.
+ * 
+ * In #MIX_DECODE_DECODERETURN, this method is no op.
+ */
+MIX_RESULT mix_audio_start(MixAudio *mix);
+
+/**
+ * mix_audio_stop_drop:
+ * @mix: #MixAudio object.
+ * @returns: #MIX_RESULT_SUCCESS if the resulting state has successfully reached #MIX_STREAM_STOPPED. Fail code otherwise.
+ * 
+ * If the stream is configured to #MIX_DECODE_DIRECTRENDER, application uses this function to stop the processing and playback of audio.
+ * 
+ * All remaining frames to be decoded or rendered will be discarded and playback will stop immediately, unblocks any pending mix_audio_decode().
+ * 
+ * If #MIX_STOP_DRAIN is requested, the call will block with stream state set to #MIX_STREAM_DRAINING, and return only until all remaining frame in previously submitted buffers are decoded and rendered. When #MIX_STOP_DRAIN returns successfully, the stream would have reached #MIX_STREAM_STOPPED successfully.
+ * 
+ * After this call, timestamp retrived by mix_audio_gettimestamp() is reset to zero.
+ * 
+ * Note that this method returns #MIX_RESULT_WRONG_STATE if the stream is in #MIX_STREAM_DRAINING state.
+ * 
+ */
+MIX_RESULT mix_audio_stop_drop(MixAudio *mix);
+
+/**
+ * mix_audio_stop_drain:
+ * @mix: #MixAudio object.
+ * @returns: #MIX_RESULT_SUCCESS if the resulting state has successfully reached #MIX_STREAM_STOPPED. Fail code otherwise.
+ * 
+ * If the stream is configured to #MIX_DECODE_DIRECTRENDER, application uses this function to stop the processing and playback of audio.
+ * 
+ * The call will block with stream state set to #MIX_STREAM_DRAINING, and return only until all remaining frame in previously submitted buffers are decoded and rendered.
+ * 
+ * Note that this method blocks until #MIX_STREAM_STOPPED is reached if it is called when the stream is already in #MIX_STREAM_DRAINING state.
+ * 
+ */
+MIX_RESULT mix_audio_stop_drain(MixAudio *mix);
+
+/**
+ * mix_audio_pause:
+ * @mix: #MixAudio object.
+ * @returns: #MIX_RESULT_SUCCESS if #MIX_STREAM_PAUSED state is reached successfully. #MIX_RESULT_WRONG_STATE if operation is not allowed with the current state.
+ * 
+ * If the stream is configured to #MIX_DECODE_DIRECTRENDER, application uses this call to change the stream state from #MIX_STREAM_PLAYING to #MIX_STREAM_PAUSED. Note that this method returns sucessful only when the resulting state reaches #MIX_STREAM_PAUSED. Meaning it will return fail code if it is called in a state such as #MIX_STREAM_STOPPED, where transitioning to #MIX_STREAM_PAUSED is not possible.
+ * 
+ * In some situation, where there is potential race condition with the DRAINING operation, this method may return MIX_RESULT_NEED_RETRY to indicate last operation result is inclusive and request caller to call again.
+ */
+MIX_RESULT mix_audio_pause(MixAudio *mix);
+
+/**
+ * mix_audio_resume:
+ * @mix: #MixAudio object.
+ * @returns: #MIX_RESULT_SUCCESS if #MIX_STREAM_PLAYING state is reached successfully. #MIX_RESULT_WRONG_STATE if operation is not allowed with the current state.
+ *
+ * If the stream is configured to #MIX_DECODE_DIRECTRENDER, application uses this call to change the stream state to #MIX_STREAM_PLAYING. Note that this method returns sucessful only when the resulting state reaches #MIX_STREAM_PAUSED. Meaning it will return fail code if it is called in a state such as #MIX_STREAM_DRAINING, where transitioning to #MIX_STREAM_PLAYING is not possible.
+ * 
+ */
+MIX_RESULT mix_audio_resume(MixAudio *mix);
+
+
+/**
+ * mix_audio_get_timestamp:
+ * @mix: #MixAudio object.
+ * @msecs: play time in milliseconds.
+ * @returns: #MIX_RESULT_SUCCESS if the timestamp is available. #MIX_RESULT_WRONG_MODE if operation is not allowed with the current mode.
+ * 
+ * This function can be used to retrieve the current timestamp for audio playback in milliseconds.  The timestamp will reflect the amount of audio data rendered since the start of stream, or since the last stop.  Note that the timestamp is always reset to zero when the stream enter #MIX_STREAM_STOPPED state. The timestamp is an unsigned long value, so the value will wrap when the timestamp reaches #ULONG_MAX. This function is only valid in direct-render mode.
+ */
+MIX_RESULT mix_audio_get_timestamp(MixAudio *mix, guint64 *msecs);
+
+/**
+ * mix_audio_set_mute:
+ * @mix: #MixAudio object.
+ * @mute: Turn mute on/off.
+ * @returns: #MIX_RESULT_SUCCESS on success or other fail code.
+ * 
+ * This function is used to mute and unmute audio playback. While muted, playback would continue but silently. This function is only valid when the session is configured to #MIX_DECODE_DIRECTRENDER mode.
+ * 
+ * Note that playback volumn may change due to change of global settings while stream is muted.
+ */
+MIX_RESULT mix_audio_set_mute(MixAudio *mix, gboolean mute);
+
+/**
+ * mix_audio_get_mute:
+ * @mix: #MixAudio object.
+ * @muted: current mute state.
+ * @returns: #MIX_RESULT_SUCCESS on success or other fail code.
+ * 
+ * Get Mute.
+ */
+MIX_RESULT mix_audio_get_mute(MixAudio *mix, gboolean* muted);
+
+/**
+ * mix_audio_get_max_vol:
+ * @mix: #MixAudio object.
+ * @maxvol: pointer to receive max volumn.
+ * @returns: #MIX_RESULT_SUCCESS on success or other fail code.
+ * 
+ * This function can be used if the application will be setting the audio volume using decibels instead of percentage.  The maximum volume in decibels supported by the driver will be returned.  This value can be used to determine the upper bound of the decibel range in calculating volume levels.  This value is a signed integer. This function is only valid if stream is configured to #MIX_DECODE_DIRECTRENDER mode.
+ * 
+ */
+MIX_RESULT mix_audio_get_max_vol(MixAudio *mix, gint *maxvol);
+
+/**
+ * mix_audio_get_min_vol:
+ * @mix: #MixAudio object.
+ * @minvol: pointer to receive max volumn.
+ * @returns: #MIX_RESULT_SUCCESS on success or other fail code.
+ * 
+ * This function can be used if the application will be setting the audio volume using decibels instead of percentage.  The minimum volume in decibels supported by the driver will be returned.  This value can be used to determine the lower bound of the decibel range in calculating volume levels.  This value is a signed integer. This function is only valid if stream is configured to #MIX_DECODE_DIRECTRENDER mode.
+ * 
+ */
+MIX_RESULT mix_audio_get_min_vol(MixAudio *mix, gint *minvol);
+
+/**
+ * mix_audio_get_volume:
+ * @mix: #MixAudio object.
+ * @currvol: Current volume. Note that if @type equals #MIX_VOL_PERCENT, this value will be return within the range of 0 to 100 inclusive.
+ * @type: The type represented by @currvol.
+ * @returns: #MIX_RESULT_SUCCESS on success or other fail code.
+ * 
+ * This function returns the current volume setting in either decibels or percentage. This function is only valid if stream is configured to #MIX_DECODE_DIRECTRENDER mode.
+ * 
+ */
+MIX_RESULT mix_audio_get_volume(MixAudio *mix, gint *currvol, MixVolType type);
+
+/**
+ * mix_audio_set_volume:
+ * @mix: #MixAudio object.
+ * @currvol: Current volume. Note that if @type equals #MIX_VOL_PERCENT, this value will be trucated to within the range of 0 to 100 inclusive.
+ * @type: The type represented by @currvol.
+ * @returns: #MIX_RESULT_SUCCESS on success or other fail code.
+ * 
+ * This function sets the current volume setting in either decibels or percentage.  This function is only valid if the stream is configured to #MIX_DECODE_DIRECTRENDER mode.
+ * 
+ */
+MIX_RESULT mix_audio_set_volume(MixAudio *mix, gint currvol, MixVolType type, gulong msecs, MixVolRamp ramptype);
+
+/**
+ * mix_audio_deinitialize:
+ * @mix: #MixAudio object.
+ * @returns: #MIX_RESULT_SUCCESS on success or other fail code.
+ * 
+ * This function will uninitialize a session with this MI-X instance.  During this call, the SST device will be closed and resources including mmapped buffers would be freed.This function should be called by the application once mix_audio_init() has been called.
+ * 
+ * <note>
+ * <title>Intel Audio Manager Support</title>
+ * The SST stream would be unregistered with Intel Audio Manager if it was registered.  
+ * </note>
+ * 
+ * Note that if this method should not fail normally. If it does return failure, the state of this object and the underlying mechanism is compromised and application should not attempt to reuse this object.
+ */
+MIX_RESULT mix_audio_deinitialize(MixAudio *mix);
+
+/**
+ * mix_audio_get_stream_state:
+ * @mix: #MixAudio object.
+ * @streamState: pointer to receive stream state.
+ * @returns: #MIX_RESULT
+ * 
+ * Get the stream state of the current stream.
+ */
+MIX_RESULT mix_audio_get_stream_state(MixAudio *mix, MixStreamState *streamState);
+
+/**
+ * mix_audio_get_state:
+ * @mix: #MixAudio object.
+ * @state: pointer to receive state
+ * @returns: Current device state.
+ * 
+ * Get the device state of the audio session.
+ */
+MIX_RESULT mix_audio_get_state(MixAudio *mix, MixState *state);
+
+/**
+ * mix_audio_am_is_enabled:
+ * @mix: #MixAudio object.
+ * @returns: boolean indicates if Intel Audio Manager is enabled with the current session.
+ * 
+ * This method checks if the current session is configure to use Intel Audio Manager. Note that Intel Audio Manager is considered disabled if the stream has not be initialized to use the service explicitly.
+ */
+gboolean mix_audio_am_is_enabled(MixAudio *mix);
+
+// Real implementation for Base class
+//MIX_RESULT mix_audio_get_version(guint* major, guint *minor);
+
+/**
+ * mix_audio_is_am_available:
+ * @mix: TBD
+ * @am: TBD
+ * @avail: TBD
+ * @returns: TBD
+ * 
+ * Check if AM is available.
+ */
+MIX_RESULT mix_audio_is_am_available(MixAudio *mix, MixAudioManager am, gboolean *avail);
+
+/**
+ * mix_audio_get_output_configuration:
+ * @mix: #MixAudio object.
+ * @audioconfigparams: double pointer to hold output configuration.
+ * @returns: #MIX_RESULT_SUCCESS on success or other fail code.
+ * 
+ * This method retrieve the current configuration. This can be called after initialization. If a stream has been configured, it returns the corresponding derive object of MixAudioConfigParams.
+ */
+MIX_RESULT mix_audio_get_output_configuration(MixAudio *mix, MixAudioConfigParams **audioconfigparams);
+
+/**
+ * mix_audio_get_stream_byte_decoded:
+ * @mix: #MixAudio object.
+ * @msecs: stream byte decoded..
+ * @returns: #MIX_RESULT_SUCCESS if the value is available. #MIX_RESULT_WRONG_MODE if operation is not allowed with the current mode.
+ * 
+ * Retrive the culmulative byte decoded.
+ * 
+ * <remark>Not Implemented.</remark>
+ */
+MIX_RESULT mix_audio_get_stream_byte_decoded(MixAudio *mix, guint64 *byte);
+
+#endif /* __MIX_AUDIO_H__ */
diff --git a/mix_audio/src/mixaudiotypes.h b/mix_audio/src/mixaudiotypes.h
new file mode 100644
index 0000000..1b4e085
--- /dev/null
+++ b/mix_audio/src/mixaudiotypes.h
@@ -0,0 +1,27 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+#ifndef __MIX_AUDIO_TYPES_H__
+#define __MIX_AUDIO_TYPES_H__
+
+/**
+ * MixAudioManager:
+ * @MIX_AUDIOMANAGER_NONE: No Audio Manager.
+ * @MIX_AUDIOMANAGER_INTELAUDIOMANAGER: Intel Audio Manager.
+ * @MIX_AUDIOMANAGER_LAST: Last index.
+ * 
+ * Audio Manager enumerations.
+ */
+typedef enum {
+  MIX_AUDIOMANAGER_NONE = 0,
+  MIX_AUDIOMANAGER_INTELAUDIOMANAGER,
+  MIX_AUDIOMANAGER_LAST
+} MixAudioManager;
+
+
+#endif
diff --git a/mix_audio/src/pvt.h b/mix_audio/src/pvt.h
new file mode 100644
index 0000000..f4be9e5
--- /dev/null
+++ b/mix_audio/src/pvt.h
@@ -0,0 +1,9 @@
+

+

+typedef unsigned short u16;

+typedef unsigned long u32;

+typedef unsigned char u8;

+typedef signed char s8;

+typedef signed short s16;

+#define __user

+

diff --git a/mix_audio/src/sst_proxy.c b/mix_audio/src/sst_proxy.c
new file mode 100644
index 0000000..438e06e
--- /dev/null
+++ b/mix_audio/src/sst_proxy.c
@@ -0,0 +1,435 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+
+#include <glib.h>
+#include <glib/gprintf.h>
+#include <linux/types.h>
+#include "mixacpmp3.h"
+#include "mixacpwma.h"
+#include "mixacpaac.h"
+#include "intel_sst_ioctl.h"
+#include "mixacp.h"
+#include "sst_proxy.h"
+
+#ifdef G_LOG_DOMAIN
+#undef G_LOG_DOMAIN
+#define G_LOG_DOMAIN    ((gchar*)"mixaudio")
+#endif
+
+gboolean mix_sst_params_convert_mp3(MixAudioConfigParamsMP3 *acp, struct snd_sst_params *s);
+gboolean mix_sst_params_convert_wma(MixAudioConfigParamsWMA *acp, struct snd_sst_params *s);
+gboolean mix_sst_params_convert_aac(MixAudioConfigParamsAAC *acp, struct snd_sst_params *s);
+void mix_sst_params_to_mp3(MixAudioConfigParamsMP3 *acp, struct snd_mp3_params *params);
+void mix_sst_params_to_wma(MixAudioConfigParamsWMA *acp, struct snd_wma_params *params);
+void mix_sst_params_to_aac(MixAudioConfigParamsAAC *acp, struct snd_aac_params *params);
+void mix_sst_set_bps(MixAudioConfigParams *acp, guchar pcm_wd_sz);
+void mix_sst_set_op_align(MixAudioConfigParams *acp, guchar op_align);
+
+/* 
+ * Utilities that convert param object to driver struct.
+ * No Mix Context needed. However, it knows about the driver's param structure.
+ */
+gboolean mix_sst_params_convert(MixAudioConfigParams *acp, struct snd_sst_params *s)
+{
+  gboolean ret = FALSE;
+
+  if (!s) return FALSE;
+
+  if (MIX_IS_AUDIOCONFIGPARAMSMP3(acp))
+    ret = mix_sst_params_convert_mp3(MIX_AUDIOCONFIGPARAMSMP3(acp), s);
+  else if (MIX_IS_AUDIOCONFIGPARAMSWMA(acp))
+    ret = mix_sst_params_convert_wma(MIX_AUDIOCONFIGPARAMSWMA(acp), s);
+  else if (MIX_IS_AUDIOCONFIGPARAMSAAC(acp))
+    ret = mix_sst_params_convert_aac(MIX_AUDIOCONFIGPARAMSAAC(acp), s);
+
+  return ret;
+}
+
+
+gboolean mix_sst_params_convert_mp3(MixAudioConfigParamsMP3 *acp, struct snd_sst_params *s)
+{
+  struct snd_mp3_params *p = &s->sparams.uc.mp3_params;
+
+  s->codec = p->codec = SST_CODEC_TYPE_MP3;
+  p->num_chan = MIX_ACP_NUM_CHANNELS(acp);
+  p->brate = MIX_ACP_BITRATE(acp);
+  p->sfreq = MIX_ACP_SAMPLE_FREQ(acp);
+  p->crc_check = MIX_ACP_MP3_CRC(acp);
+  p->pcm_wd_sz = mix_acp_get_bps(MIX_AUDIOCONFIGPARAMS(acp));
+  if (p->pcm_wd_sz == MIX_ACP_BPS_16)
+    p->op_align = MIX_ACP_OUTPUT_ALIGN_16;
+  else
+    p->op_align = mix_acp_get_op_align(MIX_AUDIOCONFIGPARAMS(acp));
+
+  return TRUE;
+}
+
+gboolean mix_sst_params_convert_wma(MixAudioConfigParamsWMA *acp, struct snd_sst_params *s)
+{
+  struct snd_wma_params *p = &s->sparams.uc.wma_params;
+
+  p->num_chan = MIX_ACP_NUM_CHANNELS(acp);
+  p->brate = MIX_ACP_BITRATE(acp);
+  p->sfreq = MIX_ACP_SAMPLE_FREQ(acp);
+  p->wma_encode_opt = MIX_ACP_WMA_ENCODE_OPT(acp);
+  p->block_align = MIX_ACP_WMA_BLOCK_ALIGN(acp);
+  p->channel_mask = MIX_ACP_WMA_CHANNEL_MASK(acp);
+  p->format_tag = MIX_ACP_WMA_FORMAT_TAG(acp);
+  p->pcm_src = MIX_ACP_WMA_PCM_BIT_WIDTH(acp);
+  p->pcm_wd_sz = mix_acp_get_bps(MIX_AUDIOCONFIGPARAMS(acp));
+  if (p->pcm_wd_sz == MIX_ACP_BPS_16)
+    p->op_align = MIX_ACP_OUTPUT_ALIGN_16;
+  else
+    p->op_align = mix_acp_get_op_align(MIX_AUDIOCONFIGPARAMS(acp));
+
+  switch (mix_acp_wma_get_version(acp))
+  {
+    case MIX_AUDIO_WMA_V9:
+      s->codec = p->codec = SST_CODEC_TYPE_WMA9;
+      break;
+    case MIX_AUDIO_WMA_V10:
+      s->codec = p->codec = SST_CODEC_TYPE_WMA10;
+      break;
+    case MIX_AUDIO_WMA_V10P:
+      s->codec = p->codec = SST_CODEC_TYPE_WMA10P;
+      break;
+    default:
+      break;
+  }
+
+  return TRUE;
+}
+
+#define AAC_DUMP(param) g_message("snd_aac_params.%s=%u", #param, p->param)
+#define AAC_DUMP_I(param, idx) g_message("snd_aac_params.%s[%d]=%x", #param, idx, p->param[idx])
+
+gboolean mix_sst_params_convert_aac(MixAudioConfigParamsAAC *acp, struct snd_sst_params *s)
+{
+    struct snd_aac_params *p = &s->sparams.uc.aac_params;
+
+    // I have only AOT, where tools are usually specified at eAOT.
+    // However, sometimes, AOT could tell us the tool involved. e.g.
+    // AOT==5 --> SBR
+    // AOT==29 --> PS
+    // AOT==2 --> AAC-LC
+
+    // we know SBR present only if it is indicated presence, or AOT says so.
+    guint aot = mix_acp_aac_get_aot(acp);
+    p->sbr_present = ((MIX_ACP_AAC_SBR_FLAG(acp) == 1) ||
+                      (aot == 5) || 
+                      (MIX_ACP_AAC_PS_FLAG(acp) == 1) ||  
+                      (aot == 29))?1:0;
+
+    // As far as we know, we should: 
+    // set sbr_present flag for SST in case of possible implicit signalling of SBR, and
+    // we should use HEAACv2 decoder in case of possible implicit signalling of PS.
+    // Although we should theoretically select HEAACv2 decoder for HEAACv1 and HEAAC,
+    // it is not advisable since HEAACv2 decoder has more overhead as per SST team.
+    // So MixAudio is implicitly selecting codec base on AOT, psPresentFlag and sbrPresentFlag.
+    // Application can override the selection by explicitly setting psPresentFlag and/or sbrPresentFlag.
+    if ((MIX_ACP_AAC_PS_FLAG(acp) == 1) || (aot == 29))
+    {
+        // PS present.
+        s->codec = p->codec = SST_CODEC_TYPE_eAACP;
+    }
+    else if (p->sbr_present == 1)
+    {
+        s->codec = p->codec = SST_CODEC_TYPE_AACP;
+    }
+    else
+    {
+        s->codec = p->codec = SST_CODEC_TYPE_AAC;
+    }
+
+    p->num_chan = MIX_ACP_AAC_CHANNELS(acp); // core/internal channels
+    p->ext_chl = MIX_ACP_NUM_CHANNELS(acp);  // external channels
+    p->aac_srate = MIX_ACP_AAC_SAMPLE_RATE(acp);  // aac decoder internal frequency
+    p->sfreq = MIX_ACP_SAMPLE_FREQ(acp);  // output/external frequency
+    
+    p->brate = MIX_ACP_BITRATE(acp);
+    p->mpg_id = (guint)mix_acp_aac_get_mpeg_id(acp);
+    p->bs_format = mix_acp_aac_get_bit_stream_format(acp);
+    p->aac_profile = mix_acp_aac_get_aac_profile(acp);
+    // AOT defined by MPEG spec is 5 for SBR but SST definition is 4 for SBR.
+    if (aot == 5)
+        p->aot = 4;
+    else if (aot == 2)
+        p->aot = aot;
+    p->crc_check = MIX_ACP_AAC_CRC(acp);
+    p->brate_type = mix_acp_aac_get_bit_rate_type(acp);
+    p->pce_present = MIX_ACP_AAC_PCE_FLAG(acp);
+    p->pcm_wd_sz = mix_acp_get_bps(MIX_AUDIOCONFIGPARAMS(acp));
+    
+    if (p->pcm_wd_sz == MIX_ACP_BPS_16)
+        p->op_align = MIX_ACP_OUTPUT_ALIGN_16;
+    else
+        p->op_align = mix_acp_get_op_align(MIX_AUDIOCONFIGPARAMS(acp));
+    
+    //p->aac_srate = ; // __u32 aac_srate;	/* Plain AAC decoder operating sample rate */
+    //p->ext_chl = ; // __u8 ext_chl; /* No.of external channels */
+    
+    switch (p->bs_format)
+    {
+        case MIX_AAC_BS_ADTS:
+        g_sprintf((gchar*)p->bit_stream_format, "adts");
+        break;
+        case MIX_AAC_BS_ADIF:
+        g_sprintf((gchar*)p->bit_stream_format, "adif");
+        break;
+        case MIX_AAC_BS_RAW:
+        g_sprintf((gchar*)p->bit_stream_format, "raw");
+        p->num_syntc_elems = 0;
+        p->syntc_id[0] = (gint8)-1; /* 0 for ID_SCE(Dula Mono), -1 for raw */
+        p->syntc_id[1] = (gint8)-1;
+        p->syntc_tag[0] = (gint8)-1; /* raw - -1 and 0 -16 for rest of the streams */
+        p->syntc_tag[1] = (gint8)-1;
+        break;
+        default:
+        break;
+    }
+    
+    {
+        AAC_DUMP(codec);
+        AAC_DUMP(num_chan); /* 1=Mono, 2=Stereo*/
+        AAC_DUMP(pcm_wd_sz); /* 16/24 - bit*/
+        AAC_DUMP(brate);
+        AAC_DUMP(sfreq); /* Sampling freq eg. 8000, 441000, 48000 */
+        AAC_DUMP(aac_srate);	/* Plain AAC decoder operating sample rate */
+        AAC_DUMP(mpg_id); /* 0=MPEG-2, 1=MPEG-4 */
+        AAC_DUMP(bs_format); /* input bit stream format adts=0, adif=1, raw=2 */
+        AAC_DUMP(aac_profile); /* 0=Main Profile, 1=LC profile, 3=SSR profile */
+        AAC_DUMP(ext_chl); /* No.of external channels */
+        AAC_DUMP(aot); /* Audio object type. 1=Main , 2=LC , 3=SSR, 4=SBR*/
+        AAC_DUMP(op_align); /* output alignment 0=16 bit , 1=MSB, 2= LSB align */
+        AAC_DUMP(brate_type); /* 0=CBR, 1=VBR */
+        AAC_DUMP(crc_check); /* crc check 0= disable, 1=enable */
+        // AAC_DUMP(bit_stream_format[8]); /* input bit stream format adts/adif/raw */
+        g_message("snd_aac_params.bit_stream_format=%s", p->bit_stream_format);
+        AAC_DUMP(jstereo); /* Joint stereo Flag */
+        AAC_DUMP(sbr_present); /* 1 = SBR Present, 0 = SBR absent, for RAW */
+        AAC_DUMP(downsample);       /* 1 = Downsampling ON, 0 = Downsampling OFF */
+        AAC_DUMP(num_syntc_elems); /* 1- Mono/stereo, 0 - Dual Mono, 0 - for raw */
+        g_message("snd_aac_params.syntc_id[0]=%x", p->syntc_id[0]);
+        g_message("snd_aac_params.syntc_id[1]=%x", p->syntc_id[1]);
+        g_message("snd_aac_params.syntc_tag[0]=%x", p->syntc_tag[0]);
+        g_message("snd_aac_params.syntc_tag[1]=%x", p->syntc_tag[1]);
+        //AAC_DUMP_I(syntc_id, 0); /* 0 for ID_SCE(Dula Mono), -1 for raw */
+        //AAC_DUMP_I(syntc_id, 1); /* 0 for ID_SCE(Dula Mono), -1 for raw */
+        //AAC_DUMP_I(syntc_tag, 0); /* raw - -1 and 0 -16 for rest of the streams */
+        //AAC_DUMP_I(syntc_tag, 1); /* raw - -1 and 0 -16 for rest of the streams */
+        AAC_DUMP(pce_present); /* Flag. 1- present 0 - not present, for RAW */
+        AAC_DUMP(reserved);
+        AAC_DUMP(reserved1);
+    }
+    
+    return TRUE;
+}
+
+MixAudioConfigParams *mix_sst_acp_from_codec(guint codec)
+{
+  MixAudioConfigParams *ret = NULL;
+
+  // need stream specific ACP
+  switch (codec)
+  {
+    case SST_CODEC_TYPE_MP3:
+    case SST_CODEC_TYPE_MP24:
+      ret = (MixAudioConfigParams*)mix_acp_mp3_new();
+      break;
+    case SST_CODEC_TYPE_AAC:
+    case SST_CODEC_TYPE_AACP:
+    case SST_CODEC_TYPE_eAACP:
+      ret = (MixAudioConfigParams*)mix_acp_aac_new();
+      break;
+    case SST_CODEC_TYPE_WMA9:
+    case SST_CODEC_TYPE_WMA10:
+    case SST_CODEC_TYPE_WMA10P:
+      ret = (MixAudioConfigParams*)mix_acp_wma_new();
+      break;
+  }
+
+  return ret;
+}
+
+
+
+MixAudioConfigParams *mix_sst_params_to_acp(struct snd_sst_get_stream_params *stream_params)
+{
+  MixAudioConfigParams *ret = NULL;
+
+  gboolean allocated = FALSE;
+  // Ingoring stream_params.codec_params.result, which seem to return details specific to stream allocation.
+  switch  (stream_params->codec_params.result)
+  {
+      // Please refers to SST API doc for return value definition.
+      case 5:
+        g_debug("last SET_PARAMS succeeded with Stream Parameter Modified.");
+      case 0:
+        allocated = TRUE;
+        break;
+      case 1:
+        // last SET_PARAMS failed STREAM was not available.
+      case 2:
+        // last SET_PARAMS failed CODEC was not available.
+      case 3:
+        // last SET_PARAMS failed CODEC was not supported.
+      case 4:
+        // last SET_PARAMS failed Invalid Stream Parameters.
+      case 6:
+        // last SET_PARAMS failed Invalid Stream ID.
+      default:
+        // last SET_PARAMS failed unexpectedly.
+        break;
+  }
+
+  if (allocated)
+  {
+    switch (stream_params->codec_params.codec)
+    {
+      case SST_CODEC_TYPE_MP3:
+      case SST_CODEC_TYPE_MP24:
+        ret = (MixAudioConfigParams*)mix_acp_mp3_new();
+        mix_sst_params_to_mp3(MIX_AUDIOCONFIGPARAMSMP3(ret), &stream_params->codec_params.sparams.uc.mp3_params);
+        break;
+      case SST_CODEC_TYPE_AAC:
+      case SST_CODEC_TYPE_AACP:
+      case SST_CODEC_TYPE_eAACP:
+        ret = (MixAudioConfigParams*)mix_acp_aac_new();
+        mix_sst_params_to_aac(MIX_AUDIOCONFIGPARAMSAAC(ret), &stream_params->codec_params.sparams.uc.aac_params);
+        break;
+      case SST_CODEC_TYPE_WMA9:
+      case SST_CODEC_TYPE_WMA10:
+      case SST_CODEC_TYPE_WMA10P:
+        ret = (MixAudioConfigParams*)mix_acp_wma_new();
+        mix_sst_params_to_wma(MIX_AUDIOCONFIGPARAMSWMA(ret), &stream_params->codec_params.sparams.uc.wma_params);
+        break;
+    }
+  }
+
+  if (!ret) ret = mix_acp_new();
+
+  if (ret)
+  {
+    // Be sure to update all vars that becomes available since the ACP could set defaults.
+    MIX_ACP_SAMPLE_FREQ(ret) = stream_params->pcm_params.sfreq;
+    MIX_ACP_NUM_CHANNELS(ret) = stream_params->pcm_params.num_chan;
+    mix_sst_set_bps(MIX_AUDIOCONFIGPARAMS(ret), stream_params->pcm_params.pcm_wd_sz);
+  }
+
+  return ret;
+}
+
+
+void mix_sst_params_to_mp3(MixAudioConfigParamsMP3 *acp, struct snd_mp3_params *params)
+{
+  if(!acp || !params) return;
+
+  MIX_ACP_NUM_CHANNELS(MIX_AUDIOCONFIGPARAMS(acp)) = params->num_chan;
+  MIX_ACP_BITRATE(MIX_AUDIOCONFIGPARAMS(acp)) = params->brate;
+  MIX_ACP_SAMPLE_FREQ(MIX_AUDIOCONFIGPARAMS(acp)) = params->sfreq;
+  MIX_ACP_MP3_CRC(acp) = params->crc_check;
+
+  mix_sst_set_bps(MIX_AUDIOCONFIGPARAMS(acp), params->pcm_wd_sz);
+  mix_sst_set_op_align(MIX_AUDIOCONFIGPARAMS(acp), params->op_align);
+}
+
+void mix_sst_params_to_wma(MixAudioConfigParamsWMA *acp, struct snd_wma_params *params)
+{
+  
+  MIX_ACP_BITRATE(acp) = params->brate;
+  MIX_ACP_SAMPLE_FREQ(acp) = params->sfreq;
+  MIX_ACP_WMA_ENCODE_OPT(acp) = params->wma_encode_opt;
+  MIX_ACP_WMA_BLOCK_ALIGN(acp) = params->block_align;
+  MIX_ACP_WMA_CHANNEL_MASK(acp) = params->channel_mask;
+  MIX_ACP_WMA_FORMAT_TAG(acp) = params->format_tag;
+  MIX_ACP_WMA_PCM_BIT_WIDTH(acp) = params->pcm_src;
+
+  mix_sst_set_bps(MIX_AUDIOCONFIGPARAMS(acp), params->pcm_wd_sz);
+  mix_sst_set_op_align(MIX_AUDIOCONFIGPARAMS(acp), params->op_align);
+
+  switch (params->codec)
+  {
+    case SST_CODEC_TYPE_WMA9:
+      mix_acp_wma_set_version(acp, MIX_AUDIO_WMA_V9);
+      break;
+    case SST_CODEC_TYPE_WMA10:
+      mix_acp_wma_set_version(acp, MIX_AUDIO_WMA_V10);
+      break;
+    case SST_CODEC_TYPE_WMA10P:
+      mix_acp_wma_set_version(acp, MIX_AUDIO_WMA_V10P);
+      break;
+  }
+}
+
+
+void mix_sst_params_to_aac(MixAudioConfigParamsAAC *acp, struct snd_aac_params *params)
+{
+  if (params->codec == SST_CODEC_TYPE_eAACP)
+  {
+    MIX_ACP_AAC_PS_FLAG(acp) = TRUE;
+  }
+
+  MIX_ACP_NUM_CHANNELS(acp) = params->num_chan;
+  MIX_ACP_BITRATE(acp) = params->brate;
+  MIX_ACP_SAMPLE_FREQ(acp) = params->sfreq;
+  mix_acp_aac_set_mpeg_id(acp, params->mpg_id);
+  mix_acp_aac_set_bit_stream_format(acp, params->bs_format);
+  mix_acp_aac_set_aac_profile(acp, params->aac_profile);
+
+    // SST API specific 4 for SBR while AOT definition in MPEG 4 spec specific 5.
+    // converting.
+  if (params->aot == 4)
+    mix_acp_aac_set_aot(acp, 5);
+  else if (params->aot == 2)
+    mix_acp_aac_set_aot(acp, params->aot);
+
+  MIX_ACP_AAC_CRC(acp) = params->crc_check;
+  mix_acp_aac_set_bit_rate_type(acp, params->brate_type);
+  MIX_ACP_AAC_SBR_FLAG(acp) = params->sbr_present;
+  MIX_ACP_AAC_PCE_FLAG(acp) = params->pce_present;
+
+  mix_sst_set_bps(MIX_AUDIOCONFIGPARAMS(acp), params->pcm_wd_sz);
+  mix_sst_set_op_align(MIX_AUDIOCONFIGPARAMS(acp), params->op_align);
+
+  acp->num_syntc_elems = params->num_syntc_elems;
+  acp->syntc_id[0] = params->syntc_id[0];
+  acp->syntc_id[1] = params->syntc_id[1];
+  acp->syntc_tag[0] = params->syntc_tag[0];
+  acp->syntc_tag[1] = params->syntc_tag[1];
+}
+
+void mix_sst_set_bps(MixAudioConfigParams *acp, guchar pcm_wd_sz)
+{
+  switch (pcm_wd_sz)
+  {
+    case MIX_ACP_BPS_16:
+    case MIX_ACP_BPS_24:
+      break;
+    default:
+      pcm_wd_sz = MIX_ACP_BPS_UNKNOWN;
+      break;
+  }
+  mix_acp_set_bps(MIX_AUDIOCONFIGPARAMS(acp), pcm_wd_sz);
+}
+
+void mix_sst_set_op_align(MixAudioConfigParams *acp, guchar op_align)
+{
+  switch (op_align)
+  {
+    case MIX_ACP_OUTPUT_ALIGN_16:
+    case MIX_ACP_OUTPUT_ALIGN_MSB:
+    case MIX_ACP_OUTPUT_ALIGN_LSB:
+      break;
+    default:
+      op_align = MIX_ACP_OUTPUT_ALIGN_UNKNOWN;
+      break;
+  }
+  mix_acp_set_op_align(MIX_AUDIOCONFIGPARAMS(acp), op_align);
+}
+
diff --git a/mix_audio/src/sst_proxy.h b/mix_audio/src/sst_proxy.h
new file mode 100644
index 0000000..6ad69fe
--- /dev/null
+++ b/mix_audio/src/sst_proxy.h
@@ -0,0 +1,17 @@
+/* 
+ INTEL CONFIDENTIAL
+ Copyright 2009 Intel Corporation All Rights Reserved. 
+ The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+ No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+*/
+
+#ifndef __SST_PROXY_H__
+#define __SST_PROXY_H__
+
+// renaming the struct for easier update, and reference, in MixAudio code.
+
+gboolean mix_sst_params_convert(MixAudioConfigParams *params, struct snd_sst_params *s);
+MixAudioConfigParams *mix_sst_params_to_acp(struct snd_sst_get_stream_params *stream_params);
+
+#endif
diff --git a/mix_audio/tests/Makefile.am b/mix_audio/tests/Makefile.am
new file mode 100644
index 0000000..372e488
--- /dev/null
+++ b/mix_audio/tests/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = smoke
+
diff --git a/mix_audio/tests/smoke/Makefile.am b/mix_audio/tests/smoke/Makefile.am
new file mode 100644
index 0000000..0a373ec
--- /dev/null
+++ b/mix_audio/tests/smoke/Makefile.am
@@ -0,0 +1,25 @@
+#INTEL CONFIDENTIAL
+#Copyright 2009 Intel Corporation All Rights Reserved. 
+#The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.
+
+#No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
+#
+
+noinst_PROGRAMS = mixaudiosmoke
+
+##############################################################################
+# sources used to compile
+mixaudiosmoke_SOURCES = mixaudiosmoke.c
+
+# flags used to compile this plugin
+# add other _CFLAGS and _LIBS as need