[LIBDCE] Added codec, xdais and xdctools headers
authorSunita Nadampalli <sunitan@ti.com>
Tue, 3 Sep 2013 16:37:10 +0000 (11:37 -0500)
committerSaurabh Bipin Chandra <a0131926@ti.com>
Thu, 5 Sep 2013 16:09:03 +0000 (21:39 +0530)
This patch adds codec,xdais and xdctools headers for libdce
compilation at HLOS level. Since HLOS code doesn't refer to the
tools directly, this patch provides copy for all the required headers.
Note# These headers need to be updated for every release if the tools
versions are changed.

Version Info of the added Headers:

Tools:
XDC version   : xdctools_3_25_02_70
CE version    : codec_engine_3_24_00_08
XDAIS version : xdais_7_24_00_04

IVAHD_Codecs:
H.264 Dec  : 02.00.13.00
MJPEG Dec  : 01.00.11.01
MPEG-4 Dec : 01.00.13.00
VC-1 Dec   : 01.00.00.11
MPEG-2 Dec : 01.00.12.00
SVC Dec    : 00.06.00.00
H.264 Enc  : 02.00.06.01
MJPEG Enc  : 01.00.02.01
SVC Enc    : 00.02.00.05

Change-Id: Id2307e2376d3ba0c13464c1b21cdba53d8f997f2
Signed-off-by: Sunita Nadampalli <sunitan@ti.com>
30 files changed:
README.txt
packages/codec_engine/ti/sdo/ce/Engine.h [new file with mode: 0644]
packages/codec_engine/ti/sdo/ce/Server.h [new file with mode: 0644]
packages/codec_engine/ti/sdo/ce/ServerDefs.h [new file with mode: 0644]
packages/codec_engine/ti/sdo/ce/ipc/Comm.h [new file with mode: 0644]
packages/codec_engine/ti/sdo/ce/node/node.h [new file with mode: 0644]
packages/codec_engine/ti/sdo/ce/skel.h [new file with mode: 0644]
packages/codec_engine/ti/sdo/ce/video2/videnc2.h [new file with mode: 0644]
packages/codec_engine/ti/sdo/ce/video3/viddec3.h [new file with mode: 0644]
packages/codec_engine/ti/sdo/ce/visa.h [new file with mode: 0644]
packages/ivahd_codecs/ti/sdo/codecs/h264enc/ih264enc.h [new file with mode: 0644]
packages/ivahd_codecs/ti/sdo/codecs/h264svcenc/ih264svcenc.h [new file with mode: 0644]
packages/ivahd_codecs/ti/sdo/codecs/h264svcvdec/ih264svcvdec.h [new file with mode: 0644]
packages/ivahd_codecs/ti/sdo/codecs/h264vdec/ih264vdec.h [new file with mode: 0755]
packages/ivahd_codecs/ti/sdo/codecs/jpegvdec/ijpegvdec.h [new file with mode: 0644]
packages/ivahd_codecs/ti/sdo/codecs/mpeg2vdec/impeg2vdec.h [new file with mode: 0644]
packages/ivahd_codecs/ti/sdo/codecs/mpeg4enc/impeg4enc.h [new file with mode: 0644]
packages/ivahd_codecs/ti/sdo/codecs/mpeg4vdec/impeg4vdec.h [new file with mode: 0755]
packages/ivahd_codecs/ti/sdo/codecs/vc1enc/ivc1enc.h [new file with mode: 0644]
packages/ivahd_codecs/ti/sdo/codecs/vc1vdec/ivc1vdec.h [new file with mode: 0644]
packages/xdais/ti/xdais/dm/ividdec3.h [new file with mode: 0755]
packages/xdais/ti/xdais/dm/ividenc2.h [new file with mode: 0755]
packages/xdais/ti/xdais/dm/ivideo.h [new file with mode: 0755]
packages/xdais/ti/xdais/dm/xdm.h [new file with mode: 0755]
packages/xdais/ti/xdais/ialg.h [new file with mode: 0755]
packages/xdais/ti/xdais/xdas.h [new file with mode: 0755]
packages/xdctools/google/targets/arm/std.h [new file with mode: 0644]
packages/xdctools/google/targets/std.h [new file with mode: 0644]
packages/xdctools/qnx/targets/arm/std.h [new file with mode: 0644]
packages/xdctools/xdc/std.h [new file with mode: 0644]

index 05996e8509dca07b971207416668539857098a43..1979601193b04e25ace5512eaed7d130da2f1d2f 100644 (file)
@@ -1,4 +1,6 @@
-## Building LIBDCE for QNX ##
+************** LIBDCE Build **************
+
+## For QNX ##
 
 Exporting QNX variables:
 export QNX_ROOT=/opt/qnx650
@@ -13,6 +15,7 @@ export QNX_USERNAME=<registered email-id at QNX> //not important
 eval `qconfig -n "QNX Software Development Platform 6.5.0" -e`
 
 If previous eval doesn't work, that is it doesn't output:
+"
 export QNX_HOST="/opt/qnx650/host/linux/x86";
 export QNX_TARGET="/opt/qnx650/target/qnx6";
 export PATH="/opt/qnx650/host/linux/x86/usr/bin:/opt/qnx650/host/linux/x86/bin:/opt/qnx650/host/
@@ -21,16 +24,14 @@ export PATH="/opt/qnx650/host/linux/x86/usr/bin:/opt/qnx650/host/linux/x86/bin:/
              /opt/qnx650:/etc/qnx/bin:/etc/qnx/bin:/etc/qnx/bin:/etc/qnx/bin";
 export LD_LIBRARY_PATH="/opt/qnx650/host/linux/x86/usr/lib";
 export MAKEFLAGS="-I/opt/qnx650/target/qnx6/usr/include";
+"
 
 then try : /opt/qnx650/host/linux/x86/usr/bin/qconfig -n "QNX Software Development Platform 6.5.0" -e
 
 Exporting LIBDCE variables:
-export TITOOLSROOT=<path to XDC, XDAIS>
-export TIVIDEOTOOLSROOT=<path to CE, FC>
 export IPCHEADERS=<path to IPC Headers>
 export INSTALL_ROOT=<path for copying output binaries>
 export QCONF_OVERRIDE=<absolute path to libdce/nto/qconf-override.mk>
-export IVAHDCODECS=<path to ipumm/extrel/ti/ivahd_codecs>
 
 For IPCHEADERS - Headers should be at:
 $(IPCHEADERS)/usr/include/memmgr
@@ -49,3 +50,24 @@ Location of Binaries:
 INSTALL_ROOT/armle-v7/usr/lib/libdce.so
 INSTALL_ROOT/armle-v7/usr/lib/libdce.so.1
 INSTALL_ROOT/armle-v7/bin/dce_test
+INSTALL_ROOT/armle-v7/bin/dce_enc_test
+
+
+**** Version Info of Headers included in packages folder ****
+
+Tools:
+XDC version  : xdctools_3_25_02_70
+CE version   : codec_engine_3_24_00_08
+XDAIS version: xdais_7_24_00_04
+
+IVAHD_Codecs:
+H.264 Dec  : 02.00.13.00
+MJPEG Dec  : 01.00.11.01
+MPEG-4 Dec : 01.00.13.00
+VC-1 Dec   : 01.00.00.11
+MPEG-2 Dec : 01.00.12.00
+SVC Dec    : 00.06.00.00 
+H.264 Enc  : 02.00.06.01
+MJPEG Enc  : 01.00.02.01
+SVC Enc    : 00.02.00.05
+
diff --git a/packages/codec_engine/ti/sdo/ce/Engine.h b/packages/codec_engine/ti/sdo/ce/Engine.h
new file mode 100644 (file)
index 0000000..936c61f
--- /dev/null
@@ -0,0 +1,1584 @@
+/*
+ *  Copyright 2013 by Texas Instruments Incorporated.
+ *
+ */
+
+/*
+ * Copyright (c) 2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+/*
+ *  ======== Engine.h ========
+ */
+
+/**
+ *  @file       ti/sdo/ce/Engine.h
+ *
+ *  @brief      The Codec Engine Runtime.
+ *
+ *  @remarks    Provides the user an interface to
+ *              open and manipulate an Engine which can instantiate
+ *              and communicate with XDAIS algorithms that run either
+ *              on the local CPU or on a "remote" Server.
+ */
+/**
+ *  @addtogroup   CODECENGINE     Codec Engine Runtime
+ */
+
+#ifndef Engine_
+#define Engine_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <ti/sdo/ce/ServerDefs.h>
+#include <ti/sdo/ce/ipc/Comm.h>
+#include <ti/xdais/ialg.h>
+#include <ti/sdo/ce/node/node.h>
+
+#include <stddef.h> /* def of size_t */
+#include <stdio.h>  /* def of FILE * */
+
+/** @ingroup    CODECENGINE */
+/*@{*/
+
+/**
+ * @brief       Name to pass to Diags_setMask() to enable logging for Engine
+ *              functions.
+ *
+ * @par Example Usage:
+ *              The following code turns on all Log statements in the Engine
+ *              module.
+ * @code
+ *     Diags_setMask(Engine_MODNAME "+EX1234567");
+ * @endcode
+ *
+ * @remarks     Using Diags_setMask() to enable Engine Logging must be called
+ *              after CERuntime_init() (which creates and initializes the
+ *              Engine trace mask) to have any effect.
+ */
+#define Engine_MODNAME "ti.sdo.ce.Engine"
+
+/**
+ *  @brief      Opaque handle to an engine.
+ */
+typedef struct Engine_Obj *Engine_Handle;
+
+/**
+ *  @brief      Engine error code
+ */
+typedef Int Engine_Error;
+
+#define Engine_EOK          0   /**< Success. */
+#define Engine_EEXIST       1   /**< Name does not exist. */
+#define Engine_ENOMEM       2   /**< Unable to allocate memory. */
+#define Engine_EDSPLOAD     3   /**< Unable to load the DSP. */
+#define Engine_ENOCOMM      4   /**< Unable to create a comm connection to
+                                 *   the DSP.
+                                 */
+#define Engine_ENOSERVER    5   /**< Unable to locate the server on the DSP. */
+#define Engine_ECOMALLOC    6   /**< Unable to allocate communication buffer. */
+#define Engine_ERUNTIME     7   /**< Internal engine runtime failure. */
+#define Engine_ECODECCREATE 8   /**< Creation of the Codec failed. */
+#define Engine_ECODECSTART  9   /**< Start of the Codec failed.  For codecs
+                                 *   which are implemented as a thread, this
+                                 *   implies that the codec thread of execution
+                                 *   failed to start.
+                                 */
+#define Engine_EINVAL       10  /**< Bad paramater passed to method. */
+#define Engine_EBADSERVER   11  /**< Incompatible server specified. */
+#define Engine_ENOTAVAIL    12  /**< Service not available. */
+#define Engine_EWRONGSTATE  13  /**< Call can not be made at this time. */
+#define Engine_EINUSE       14  /**< Call can't be made at this time because
+                                 *   a required name/resource is in use.
+                                 */
+#define Engine_ENOTFOUND    15  /**< Entity was not found. */
+#define Engine_ETIMEOUT     16  /**< Timeout-based operation timed out. */
+
+/** @cond INTERNAL */
+
+/**
+ *  @brief      Opaque handle to a node.
+ */
+typedef struct Engine_NodeObj *Engine_Node;
+
+/**
+ *  @brief      Special value for timeout parameter of Engine_callWait()
+ */
+#define Engine_FOREVER Comm_FOREVER
+
+/** @endcond */
+
+/**
+ *  @brief      Attributes of an Engine
+ *
+ *  @sa         Engine_initAttrs().
+ *  @sa         Engine_open().
+ */
+typedef struct Engine_Attrs {
+    String procId;  /**< id of the processor that runs the server; only
+                     *   needed in the case that there's more than one
+                     *   processor that can provide the same server.
+                     */
+} Engine_Attrs;
+
+/**
+ *  @brief      Properties of an Engine algorithm
+ *
+ *  @sa         Engine_getAlgInfo()
+ */
+typedef struct Engine_AlgInfo {
+    Int         algInfoSize;    /**< Size of this structure. */
+    String      name;           /**< Name of algorithm. */
+    String      *typeTab;       /**< Inheritance hierarchy. */
+    Bool        isLocal;        /**< If TRUE, run locally. */
+} Engine_AlgInfo;
+
+/**
+ *  @brief      Properties of an Engine algorithm.
+ *
+ *  @remarks    This structure is identical to Engine_AlgInfo except that the
+ *              @c typeTab array of strings is replaced by a single string
+ *              called @c types. The string, @c types, represents a ';'
+ *              separated list of inheritance hierarchies of the algorithm,
+ *              for example,
+ *              "ti.sdo.ce.video.IVIDDEC;ti.sdo.ce.test.xvideo.IVIDE".
+ *
+ *  @sa         Engine_getAlgInfo2()
+ */
+typedef struct Engine_AlgInfo2 {
+    Int         algInfoSize;    /**< Size of this structure. */
+    String      name;           /**< Name of algorithm. */
+    String      types;          /**< Inheritance hierarchy. */
+    Bool        isLocal;        /**< If TRUE, run locally. */
+} Engine_AlgInfo2;
+
+/**
+ *  @brief      Default engine attributes.
+ *
+ *  @deprecated Engine_ATTRS is no longer recommended. Please use
+ *              Engine_initAttrs() instead.
+ *
+ *  @sa Engine_initAttrs()
+ */
+extern Engine_Attrs Engine_ATTRS;    /**< Default attrs. */
+
+/** @cond INTERNAL */
+
+typedef Int Engine_Ctrl;
+
+#define Engine_CEXIT    0
+#define Engine_MAXSEGNAMELENGTH 32
+
+/** @endcond */
+
+/**
+ *  @brief      Engine Cacheable Memory types.
+ *
+ *  @enumWarning
+ */
+typedef enum Engine_CachedMemType {
+    Engine_USECACHEDMEM_DEFAULT = -1,  /**< Use default cache setting */
+    Engine_USECACHEDMEM_NONCACHED = 0, /**< Use non-cached memory */
+    Engine_USECACHEDMEM_CACHED = 1     /**< Use cached memory */
+} Engine_CachedMemType;
+
+
+/*
+ *  ======== Engine_AlgDesc ========
+ */
+/**
+ *  @brief      Descriptor for an alg. This object can be passed to
+ *              @c Engine_addAlg(), to dynamically add an alg to an engine.
+ *
+ *  @sa         Engine_initAlgDesc()
+ *  @sa         Engine_addAlg()
+ */
+typedef struct Engine_AlgDesc {
+    /**
+     *  @brief  The name of the algorithm. This is used by the application
+     *          when instantiating an instance of the algorithm through one
+     *          of the VISA APIs.
+     */
+    String      name;
+
+    NODE_Uuid   uuid;   /**< Id of alg if running on remote target. No need
+                         *   to set this field.
+                         */
+
+    /**
+     *  @brief  The address of the XDAIS alg function table.
+     *          All XDAIS algorithms must define an IALG_Fxns structure that
+     *          contains implementations of the IALG methods.  This field
+     *          is simply the address of this structure.
+     */
+    IALG_Fxns   *fxns;
+
+    /**
+     *  @brief  The address of the IDMA3_Fxns function table, if the algorithm
+     *          uses DMA. If the algorithm does not use DMA, this field should
+     *          set to NULL.
+     *  @idmaDeprecated
+     */
+    Ptr         idmaFxns;
+
+    String      *typeTab;       /**< inheritance hierarchy - Do not modify. */
+
+    /**
+     *  @brief  If true, the algorithm will be instantiated on the
+     *          "local" CPU.  Otherwise the server will create an
+     *           instance of the algorithm.
+     */
+    Bool        isLocal;
+
+    /**
+     *  @brief  This id specifies which resource sharing group that this
+     *          alg will be placed into.  This 'group' concept
+     *          is used by the framework to ensure algorithms in the
+     *          same group don't pre-empt each other and corrupt the
+     *          shared resources.
+     *          This parameter will be ignored if @c isLocal is FALSE.
+     */
+    Int         groupId;
+
+    Int         rpcProtocolVersion; /**< Protocol version. Do not modify */
+
+    /**
+     *  @brief  Address of the XDAIS alg IRES Interface function table
+     *          All XDAIS algorithms that use an IRES resource must define an
+     *          IRES_Fxns structure containing the pointers to functions
+     *          implementatng the IRES interface.
+     *          If the algorithm does not use an IRES resource this field
+     *          should be set to NULL.
+     */
+    Ptr         iresFxns;
+
+    /**
+     *  @brief  Codec class configuration data, if any.
+     */
+    Void        *codecClassConfig;
+
+    /**
+     *  @brief  Indicates the type of memory the alg's memory requests will
+     *          be allocated from.
+     *          The alg's memory will be allocated from cached memory, if
+     *              memType = Engine_USECACHEDMEM_CACHED,
+     *          from non-cached memory, if
+     *              memType = Engine_USECACHEDMEM_NONCACHED,
+     *          Otherwise, if
+     *              memType = Engine_USECACHEDMEM_DEFAULT,
+     *          memory allocations will be determined by the value of
+     *          ti_sdo_ce_alg_Algorithm_useCache (cached, if TRUE, non-cached,
+     *          if FALSE).
+     *
+     *  @sa  Engine_CachedMemType
+     */
+    Engine_CachedMemType memType;  /**< Memory type for alg's mem reqs. */
+
+    /**
+     *  @brief  A string idicating the type(s) of algorithm this is.
+     *          This should be a ';' separated string of inherited types.
+     *          In most cases, @c types will just be set to the VISA type
+     *          defined in the Codec Engine algorithm interface header
+     *          file included by the algorithm, depending on the XDM interface
+     *          the algorithm implements.
+     *
+     *          For example, if the algorithm implements the ISPHDEC1
+     *          interface as defined by XDM, @c types should be set
+     *          to
+     *              @c SPHDEC1_VISATYPE
+     *          (defined as "ti.sdo.ce.speech1.ISPHDEC1" in the header file
+     *          ti/sdo/ce/speech1/sphdec1.h).
+     *
+     *          Another example to illustrate multiple typss specified in
+     *          @c typss, if the algorithm implements the (made-up)
+     *          interface, ti.sdo.ce.test.xvideo.IVIDE, which in turn
+     *          implements the IVIDDEC interface, we could then set @c types
+     *          to
+     *              VIDDEC_VISATYPE";ti.sdo.ce.test.xvideo.IVIDE"
+     *          or
+     *              "ti.sdo.ce.test.xvideo.IVIDE;"VIDDEC_VISATYPE
+     */
+    String      types;
+} Engine_AlgDesc;
+
+
+/**
+ *  @brief      Name of function that a dynamically loaded codec must supply.
+ */
+#define Engine_GETALGDESCFXN  "GetEngineAlgDesc"
+
+/*
+ *  ======== Engine_DllAlgDesc ========
+ *  An alg that will be dynamically loaded must have a descriptor of this type.
+ */
+/**
+ *  @brief      Descriptor for a dynamically loaded alg. A dynamic library
+ *              for a codec must export a function that fills in a structure
+ *              of this type.
+ *
+ *  @sa         Engine_GetAlgDescFxn
+ */
+typedef struct Engine_DllAlgDesc {
+    /**
+     *  @brief  Pointer to codec's IALG_Fxns. This can not be NULL.
+     */
+    IALG_Fxns   *fxns;
+
+    /**
+     *  @brief  Pointer to codec's IDMA3_Fxns table. If the codec does not
+     *          use DMA, this should be NULL.
+     */
+    Ptr         idmaFxns;
+
+    /**
+     *  @brief  Pointer to codec's IRES_Fxns function table. This should be
+     *          NULL if the codec does not implement the IRES_Fxns.
+     */
+    Ptr         iresFxns;
+
+    /**
+     *  @brief  Inheritance hierarchy of codec. This is a ';' separated
+     *          string that lists the interfaces inherited by the code. For
+     *          example:
+     *
+     *              "ti.sdo.ce.speech1.ISPHDEC1"
+     *
+     *          or, in the case where a test IVIDE interface inherits IVIDDEC:
+     *
+     *              "ti.sdo.ce.video.IVIDDEC;ti.sdo.ce.test.xvideo.IVIDE"
+     *
+     */
+    String      types;
+
+    /**
+     *  @brief  codec class config data, if any.
+     *
+     *  @todo   Figure out what this is.
+     */
+    Void        *codecClassConfig;
+} Engine_DllAlgDesc;
+
+
+/*
+ *  ======== Engine_GetAlgDescFxn ========
+ *  A dynamically loaded codec library must supply a function of this type to
+ *  get properties of the library's algorithm.
+ */
+/**
+ *  @brief      Prototype of function that must be supplied by a dynamic
+ *              codec library to fill in a @c Engine_DllAlgDesc structure.
+ *
+ *  @remarks    This function will be called by @c Engine_addAlg() to fill
+ *              in the dynamic codec's descriptor.
+ *
+ *  @sa         Engine_DllAlgDesc
+ */
+typedef Int (*Engine_GetAlgDescFxn)(Engine_DllAlgDesc *dllAlgDesc);
+
+
+/*
+ *  ======== Engine_Desc ========
+ */
+/**
+ *  @brief      This structure is passed to @c Engine_add(), and contains
+ *              parameters to specify an engine.
+ *
+ *  @sa         Engine_add()
+ *  @sa         Engine_open()
+ */
+typedef struct Engine_Desc {
+    String name;            /**< Name of the Engine
+                             *
+                             *   @remarks   This must not be NULL
+                             */
+    Engine_AlgDesc *algTab; /**< No longer used, set to NULL */
+    String remoteName;      /**< Name of Server image, if applicable
+                             *
+                             *   @remarks   If this Engine has no remote
+                             *              algorithms, this can be NULL.
+                             *
+                             *   @remarks   On SysLink-based systems, this
+                             *              is the name of a file, and is
+                             *              passed unchanged to
+                             *              ProcMgr_load().
+                             */
+    String memMap;          /**< Name of a file containing the slave
+                             *   memory map
+                             *
+                             *   @remarks   If this Engine has no remote
+                             *              algorithms, this can be NULL.
+                             *
+                             *   @remarks   If the remote algorithms are
+                             *              on a Server whos MMU is not
+                             *              enabled, this can be NULL.
+                             *
+                             *   @remarks   The format of this file matches
+                             *              the SysLink format described at
+                  * http://processors.wiki.ti.com/index.php/SysLink_MMU_Support
+                             *
+                             *   @remarks   If useExtLoader is FALSE, this
+                             *              field can be NULL.
+                             */
+    Bool useExtLoader;      /**< Indicates whether the Server containing
+                             *   any remote algorithms will be loaded using
+                             *   an external loader (e.g. SysLink's
+                             *   slaveloader)
+                             *
+                             *   @remarks   If @c useExtLoader is TRUE,
+                             *              Engine_open() will not load
+                             *              the slave.
+                             *
+                             *   @remarks   If @c useExtLoader is FALSE,
+                             *              Engine_open() will load the
+                             *              Server with the file specified
+                             *              by @c remoteName.
+                             */
+    Int numAlgs;            /**< No longer used, set to zero */
+    Int heapId;             /**< No longer used, set to zero */
+} Engine_Desc;
+
+
+/** @cond INTERNAL */
+
+/*
+ *  ======== Engine_AlgCreateAttrs ========
+ */
+typedef struct Engine_AlgCreateAttrs {
+    Bool            useExtHeap; /**< Use a single external heap for alg's
+                                 *   memory requests if TRUE, otherwise attempt
+                                 *   to honor the alg's algAlloc() function for
+                                 *   memory heap assignments.
+                                 */
+    Int             priority;   /**< Alg instance priority (-1: use value from
+                                 *   configuration). */
+} Engine_AlgCreateAttrs;
+
+
+/*
+ *  ======== Engine_Config ========
+ */
+typedef struct Engine_Config {
+    Engine_Desc *engineTab;
+    String      localEngine;
+} Engine_Config;
+
+/*
+ *  ======== Engine_MemStat ========
+ *  This structure must match Server_MemStat.
+ */
+typedef struct Engine_MemStat {
+    Char   name[Engine_MAXSEGNAMELENGTH + 1]; /* Name of memory segment */
+    Uint32 base;           /* Base address of memory segment */
+    Uint32 size;           /* Original size of the memory segment. */
+    Uint32 used;           /* Number of bytes used. */
+    Uint32 maxBlockLen;    /* Size of the largest contiguous free block. */
+} Engine_MemStat;
+
+/* Default alg create attributes */
+extern Engine_AlgCreateAttrs Engine_ALGCREATEATTRS;
+
+/*
+ *  ======== Engine_config ========
+ */
+extern Engine_Config Engine_config;
+
+/** @endcond */
+
+
+/*
+ *  ======== Engine_addStubFxns ========
+ */
+/**
+ *  @brief      Register stub functions through which a remote algorithm
+ *              can be called
+ *
+ *  @param[in]  fxnsName    The name of the stub function table (e.g.
+ *                          "UNIVERSAL_STUBS")
+ *  @param[in]  fxns        Address of stub function table
+ *                          (e.g. &UNIVERSAL_STUBS)
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @remarks    This service is not necessary if you configure your Engine
+ *              at build/config time using Engine.createFromServer().
+ *              When using Engine.createFromServer(), the appropriate
+ *              alg-specific stubs are added to the system automatically.
+ *
+ *  @remarks    When on an RTOS (e.g. SYS/BIOS), the stubs registered are
+ *              available to all Engines in the system.  When on a HLOS
+ *              (e.g. Linux, WinCE), the stubs registered are available to
+ *              all Engines in the calling application's process.
+ *
+ *  @remarks    The symbol passed to the @c fxns argument can often be found
+ *              in the class-specific VISA header file (e.g. UNIVERSAL_STUBS
+ *              is declared in ti/sdo/ce/universal/universal.h).
+ *
+ *  @remarks    For example, to register "UNIVERSAL_STUBS" for use by an
+ *              IUNIVERSAL-compliant algorithm at runtime, you can
+ *              do the following:
+ *  @code
+ *      #include <ti/sdo/ce/Engine.h>
+ *      #include <ti/sdo/ce/universal/universal.h>
+ *
+ *      Engine_register("UNIVERSAL_STUBS",
+ *              (IALG_Fxns *)&UNIVERSAL_STUBS);
+ *  @endcode
+ *
+ *  @retval     Engine_EOK     Success.
+ *  @retval     Engine_ENOMEM  Memory allocation failed.
+ *
+ *  @sa         Engine_open()
+ */
+extern Engine_Error Engine_addStubFxns(String fxnsName, IALG_Fxns *fxns);
+
+/*
+ *  ======== Engine_add ========
+ */
+/**
+ *  @brief Add an Engine to the database of engines that can be opened with
+ *         Engine_open()
+ *
+ *  @param[in]  pDesc       The handle of an Engine Descriptor object.
+ *                          Before setting the fields of pDesc, it must
+ *                          first be initialized with @c Engine_initDesc().
+ *
+ *  @retval     Engine_EINVAL   Bad parameter passed, such as @c pDesc = NULL,
+ *                              or @c pDesc->name = NULL.
+ *  @retval     Engine_EINUSE   An engine with the name @c pDesc->name already
+ *                              exists.
+ *  @retval     Engine_ENOMEM   A memory allocation failed.
+ *  @retval     Engine_EOK      Success.
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @post       If the return value is Engine_EOK, Engine_open() can be
+ *              called with @c pDesc->name.
+ *
+ *  @par Example Usage:
+ *  @code
+ *      #include <ti/sdo/ce/Engine.h>
+ *
+ *      Engine_Desc desc;
+ *
+ *      Engine_initDesc(&desc);
+ *
+ *      desc.name = "myEngine";
+ *      desc.remoteName = "myServer.x64P";
+ *      Engine_add(&desc);
+ *  @endcode
+ *
+ *  @sa         Engine_remove()
+ *  @sa         Engine_open()
+ */
+extern Engine_Error Engine_add(Engine_Desc *pDesc);
+
+/*
+ *  ======== Engine_addAlg ========
+ */
+/**
+ *  @brief      Dynamically add an algorithm to an Engine.
+ *
+ *  @remarks    If the Engine has not been opened, the name of the Engine is
+ *              used, otherwise, a handle to the opened Engine. If the Engine
+ *              has been opened, the added alg will only be accessible to the
+ *              caller of this function.  Either one or the other, but not
+ *              both, of @c name and @c engine should be non-NULL.
+ *
+ *  @param[in]  name            The name of the engine.  @c name is
+ *                              specified in the engine configuration, or
+ *                              the name of an engine added with
+ *                              @c Engine_add(). This can only be non-NULL if
+ *                              the engine is not opened, otherwise, use
+ *                              an engine handle and set @c name to NULL.
+ *  @param[in]  engine          The handle of an engine returned by
+ *                              Engine_open(). If @c engine is non-NULL, set
+ *                              @c name to NULL.
+ *  @param[in]  location        String identifying the location of the
+ *                              algorithm.  Often this is a file name, but for
+ *                              systems without a file system, it may be a
+ *                              system-specific string identifier. This may
+ *                              be NULL if the algorithm is built into the
+ *                              executable.
+ *  @param[in]  pAlgDesc        Parameters describing the algorithm being
+ *                              added. Before setting the fields of this
+ *                              structure, it should first be initialized
+ *                              with @c Engine_initAlgDesc(), to set all
+ *                              fields to default values.
+ *                              If location is non-NULL (a dynamic library),
+ *                              then the following fields of pAlgDesc must
+ *                              be specified:
+ *                                  pAlgDesc->name
+ *                                  pAlgDesc->isLocal
+ *                                  pAlgDesc->groupId
+ *                              All other Engine_AlgDesc fields will be
+ *                              from the dynamic library.
+ *                              If location is NULL (not a dynamic library),
+ *                              the user must set the following fields of
+ *                              pAlgDesc:
+ *                                  pAlgDesc->name
+ *                                  pAlgDesc->fxns
+ *                                  pAlgDesc->idmaFxns, if applicable
+ *                                  pAlgDesc->iresFxns, if applicable
+ *                                  pAlgDesc->isLocal
+ *                                  pAlgDesc->groupId
+ *                                  pAlgDesc->types
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @pre        @c engine is a valid (non-NULL) engine handle which is
+ *              in the open state.
+ *
+ *  @remarks    If there is an existing algorithm in the engine already named
+ *              @c name, an error will be returned.
+ *
+ *  @retval     Engine_EOK      Success.
+ *  @retval     Engine_EINUSE   The Engine @c name is non-NULL, and the
+ *                              Engine is open.
+ *  @retval     Engine_EINVAL   @c pAlgDesc or @c pAlgDesc->name is NULL.
+ *  @retval     Engine_EINVAL   Both @c name and @c engine are NULL. Ensure
+ *                              one of these is non-NULL.
+ *  @retval     Engine_EINVAL   Both @c name and @c engine are non-NULL.
+ *                              Ensure that one of these is NULL.
+ *  @retval     Engine_EEXIST   There is no engine with the given name.
+ *  @retval     Engine_EINUSE   The name of the alg in @c pAlgDesc->name is
+ *                              already in use.
+ *  @par Example Usage:
+ *  @code
+ *      #include <ti/sdo/ce/Engine.h>
+ *
+ *      Engine_AlgDesc desc;
+ *
+ *      Engine_initAlgDesc(&desc);
+ *
+ *      desc.groupId = 2;
+ *      desc.isLocal = TRUE;
+ *      desc.fxns = &UNIVERSALCOPY_TI_IUNIVERSALCOPY;
+ *      desc.idmaFxns = NULL;
+ *      desc.iresFxns = NULL;
+ *      desc.memType = Engine_USECACHEDMEM_DEFAULT;
+ *      desc.types = UNIVERSAL_VISATYPE;
+ *
+ *      status = Engine_addAlg("myEngine", NULL, NULL, &desc);
+ *
+ *  @endcode
+ *
+ *  @sa         Engine_initAlgDesc()
+ *  @sa         Engine_open()
+ *  @sa         Engine_removeAlg()
+ */
+extern Engine_Error Engine_addAlg(String name, Engine_Handle engine,
+        String location, Engine_AlgDesc *pAlgDesc);
+
+/*
+ *  ======== Engine_removeAlg ========
+ */
+/**
+ *  @brief      Dynamically remove an algorithm that was added to an Engine
+ *              with Engine_addAlg().
+ *
+ *  @remarks    The same values of the parameters @c name and @c engine that
+ *              were passed to Engine_addAlg() should be used here.  In
+ *              particular, if @c name was used to add the alg, all handles to
+ *              the engine must be closed before calling Engine_removeAlg().
+ *
+ *
+ *  @param[in]  name            The name of the engine or NULL, that was
+ *                              passed to Engine_addAlg().
+ *  @param[in]  engine          The handle to an engine, previously acquired
+ *                              by a call to Engine_open(), or NULL, that was
+ *                              used in Engine_addAlg().
+ *  @param[in]  algName         Name of the algorithm to remove.
+ *
+ *  @retval     Engine_EOK          Success.
+ *  @retval     Engine_EEXIST       The engine @c name does not exist.
+ *  @retval     Engine_ENOTFOUND    @c algName could not be found in @c engine.
+ *  @retval     Engine_EINUSE       The Engine @c name is still open.
+ *
+ *  @sa         Engine_open()
+ *  @sa         Engine_addAlg()
+ */
+extern Engine_Error Engine_removeAlg(String name, Engine_Handle engine,
+        String algName);
+
+/** @cond INTERNAL */
+
+/*
+ *  ======== Engine_call ========
+ */
+extern Int Engine_call(Engine_Node node, Comm_Msg *msg);
+
+/*
+ *  ======== Engine_callAsync ========
+ */
+extern Int Engine_callAsync(Engine_Node node, Comm_Msg *msg);
+
+/*
+ *  ======== Engine_callWait ========
+ */
+extern Int Engine_callWait(Engine_Node node, Comm_Msg *msg, UInt timeout);
+
+/*
+ *  ======== Engine_ctrlNode ========
+ */
+extern Int Engine_ctrlNode(Engine_Node node, Comm_Msg *msg, Engine_Ctrl code);
+
+/** @endcond */
+
+/*
+ *  ======== Engine_close ========
+ */
+/**
+ *  @brief      Close an Engine
+ *
+ *  @param[in]  engine          The handle to an engine, previously acquired
+ *                              by a call to Engine_open().
+ *
+ *  @pre        @c engine must not be referenced by any algorithm instance
+ *              objects; i.e., you must first delete all algorithm instances
+ *              associated with @c engine before closing it.
+ *
+ *  @pre        @c engine is a valid (non-NULL) engine handle which is
+ *              in the open state.
+ *
+ *  @sa         Engine_open()
+ */
+extern Void Engine_close(Engine_Handle engine);
+
+/** @cond INTERNAL */
+/*
+ *  ======== Engine_createNode ========
+ */
+/**
+ *  @brief      Create a remote algorithm
+ *
+ *  @param[in]  engine          The handle to an engine, previously acquired
+ *                              by a call to Engine_open().
+ *  @param[in]  name            Name of the algorithm to create.
+ *  @param[in]  msgSize         Size of the internal message required to
+ *                              communicate with the remote algorithm.
+ *  @param[in]  nodeAttrs       Creation parameters for the remote algorithm.
+ *  @param[in]  attrs           Attributes used by the framework for creating
+ *                              the remote algorithm.
+ *
+ *  @pre        @c engine is a valid (non-NULL) engine handle which is
+ *              in the open state.
+ *
+ *  @remarks    Engine_createNode2() was added after Engine_createNode() to
+ *              support more use cases.  Engine_createNode() is a wrapper
+ *              around Engine_createNode2(), and is maintained for compatibility.
+ *
+ *  @retval     NULL            Failure
+ *  @retval     non-NULL        A handle to the created remote algorithm.
+ *
+ *  @sa         Engine_createNode2()
+ *  @sa         Engine_deleteNode()
+ */
+extern Engine_Node Engine_createNode(Engine_Handle engine, String name,
+    size_t msgSize, IALG_Params *nodeAttrs, Engine_AlgCreateAttrs *attrs);
+
+
+/*
+ *  ======== Engine_createNode2 ========
+ */
+/**
+ *  @brief      Create a remote algorithm
+ *
+ *  @param[in]  engine          The handle to an engine, previously acquired
+ *                              by a call to Engine_open().
+ *  @param[in]  name            Name of the algorithm to create.
+ *  @param[in]  msgSize         Size of the internal message required to
+ *                              communicate with the remote algorithm.
+ *  @param[in]  nodeAttrs       Creation parameters for the remote algorithm.
+ *  @param[in]  nodeAttrsSize   Size of @c nodeAttrs.
+ *  @param[in]  attrs           Attributes used by the framework for creating
+ *                              the remote algorithm.
+ *
+ *  @pre        @c engine is a valid (non-NULL) engine handle which is
+ *              in the open state.
+ *
+ *  @remarks    Engine_createNode() is the preferred method to create remote
+ *              algorithms.  However, some algorithm interfaces incorrectly
+ *              fail to provide a size field of type "Int" as the first field
+ *              in their creation parameters, which the XDAIS spec defines.
+ *              This service allows the creation of remote algorithms where the
+ *              size of the creation params is specified "some other way" than
+ *              the XDAIS spec defines.
+ *
+ *  @retval     NULL            Failure
+ *  @retval     non-NULL        A handle to the created remote algorithm.
+ *
+ *  @sa         Engine_createNode()
+ *  @sa         Engine_deleteNode()
+ */
+extern Engine_Node Engine_createNode2(Engine_Handle engine, String name,
+    size_t msgSize, IALG_Params *nodeAttrs, Int nodeAttrsSize,
+    Engine_AlgCreateAttrs *attrs);
+
+
+/*
+ *  ======== Engine_deleteNode ========
+ */
+extern Void Engine_deleteNode(Engine_Node node);
+
+/*
+ *  ======== Engine_getAlgMemRecs ========
+ */
+/**
+ *  @brief      Get the IALG_MemRecs used by an algorithm
+ *
+ *  @param[in]  node    Handle to an algorithm instance.
+ *  @param[out] memTab  Location to store the IALG_MemRecs.
+ *  @param[in]  size    Maximum number of IALG_MemRecs to put in memTab array.
+ *  @param[out] numRecs Actual number of IALG_MemRecs copied into memTab array.
+ *
+ *  @retval     Engine_EOK       Success.
+ *  @retval     Engine_ERUNTIME  Failure.
+ *
+ *  @sa         Engine_getAlgNumRecs()
+ */
+extern Engine_Error Engine_getAlgMemRecs(Engine_Node node, IALG_MemRec *memTab, Int size,
+        Int *numRecs);
+
+/*
+ *  ======== Engine_getAlgNumRecs ========
+ */
+/**
+ *  @brief      Get the number of IALG_MemRecs used by a remote algorithm
+ *
+ *  @param[in]  node    Handle to an algorithm instance.
+ *  @param[out] numRecs Location to store the number of IALG_MemRecs used.
+ *
+ *  @retval     Engine_EOK       Success.
+ *  @retval     Engine_ERUNTIME  Failure.
+ *
+ *  @sa         Engine_getAlgMemRecs()
+ */
+extern Engine_Error Engine_getAlgNumRecs(Engine_Node node, Int *numRecs);
+
+/*
+ *  ======== Engine_getConstName ========
+ */
+extern String Engine_getConstName(Engine_Handle engine, String name,
+    String type);
+
+/*
+ *  ======== Engine_getFxns ========
+ */
+extern IALG_Fxns *Engine_getFxns(Engine_Handle svr, String name, String type,
+        Bool *isLocal, Ptr *idmaFxns, Ptr *iresFxns, Int *groupId,
+        Engine_CachedMemType *memType);
+
+/*
+ *  ======== Engine_getMemId ========
+ */
+extern Int Engine_getMemId(Engine_Handle engine);
+
+/*
+ *  ======== Engine_getLocalEngine ========
+ */
+extern Engine_Handle Engine_getLocalEngine(Void);
+
+/*
+ *  ======== Engine_getEngine ========
+ */
+extern Engine_Handle Engine_getEngine(Engine_Node node);
+
+/*
+ *  ======== Engine_getMemStat ========
+ */
+extern Engine_Error Engine_getMemStat(Server_Handle server, Int segNum,
+    Engine_MemStat *stat);
+
+/*
+ *  ======== Engine_getNumMemSegs ========
+ */
+extern Engine_Error Engine_getNumMemSegs(Server_Handle server, Int *numSegs);
+
+/*
+ *  ======== Engine_getNumEngines ========
+ */
+extern Int Engine_getNumEngines();
+
+/*
+ *  ======== Engine_getProcId ========
+ */
+extern String Engine_getProcId(Engine_Handle engine);
+
+/*
+ *  ======== Engine_hasServer ========
+ */
+extern Bool Engine_hasServer(Engine_Handle engine);
+
+/*
+ *  ======== Engine_init ========
+ */
+extern Void Engine_init(Void);
+
+
+/** @endcond */
+
+/*
+ *  ======== Engine_initAlgDesc ========
+ */
+/**
+ *  @brief      Initialize an Engine_AlgDesc structure with default values.
+ *
+ *  @param[in]  pAlgDesc  Location of Engine_AlgDesc object to initialize.
+ *                        The fields of pAlgDesc will be set to the following:
+ *
+ *                        pAlgDesc->name = NULL;
+ *                        pAlgDesc->uuid.data = 0;
+ *                        pAlgDesc->fxns = NULL;
+ *                        pAlgDesc->idmaFxns = NULL;
+ *                        pAlgDesc->typeTab = NULL;
+ *                        pAlgDesc->isLocal = TRUE;
+ *                        pAlgDesc->groupId = 0;
+ *                        pAlgDesc->rpcProtocolVersion = 0;
+ *                        pAlgDesc->iresFxns = NULL;
+ *                        pAlgDesc->codecClassConfig = NULL;
+ *                        pAlgDesc->memType = Engine_USECACHEDMEM_DEFAULT;
+ *                        pAlgDesc->types = NULL;
+ *
+ *  @sa         Engine_addAlg()
+ */
+extern Void Engine_initAlgDesc(Engine_AlgDesc *pAlgDesc);
+
+/*
+ *  ======== Engine_initAttrs ========
+ */
+/**
+ *  @brief      Initialize an Engine_Attrs structure with default values.
+ *
+ *  @param[in]  pAttrs Location of Engine_Attrs object to initialize.
+ *
+ *  @sa         Engine_open()
+ */
+extern Void Engine_initAttrs(Engine_Attrs *pAttrs);
+
+/*
+ *  ======== Engine_initDesc ========
+ */
+/**
+ *  @brief      Initialize an Engine_Desc structure with default values.
+ *
+ *  @param[in]  pDesc  Location of Engine_Desc object to initialize.
+ *                     The fields of pDesc will be set to the following:
+ *
+ *                        pDesc->name = NULL;
+ *                        pDesc->remoteName = NULL;
+ *                        pDesc->heapId = 0;
+ *
+ *  @sa         Engine_add()
+ */
+extern Void Engine_initDesc(Engine_Desc *pDesc);
+
+/** @cond INTERNAL */
+
+/*
+ *  ======== Engine_getRemoteVisa ========
+ */
+extern UInt32 Engine_getRemoteVisa(Engine_Node node);
+
+/*
+ *  ======== Engine_getCodecClassConfig ========
+ */
+extern Ptr Engine_getCodecClassConfig(Engine_Handle engine, String name,
+    String type);
+
+/*
+ *  ======== Engine_getNodeQueues ========
+ */
+extern Void Engine_getNodeQueues(Engine_Node node, Comm_Id *stdIn, Comm_Handle *stdOut);
+
+
+/*
+ *  ======== Engine_initFromServer ========
+ */
+extern Engine_Error Engine_initFromServer(Engine_Handle engine);
+
+
+/*
+ *  ======== Engine_redefineHeap ========
+ */
+extern Engine_Error Engine_redefineHeap(Server_Handle server, String name,
+        Uint32 base, Uint32 size);
+
+/*
+ *  ======== Engine_releaseTraceToken ========
+ */
+extern Bool Engine_releaseTraceToken(Server_Handle server);
+
+/*
+ *  ======== Engine_requestTraceToken ========
+ */
+extern Engine_Error Engine_requestTraceToken(Server_Handle server);
+
+/*
+ *  ======== Engine_restoreHeap ========
+ */
+extern Engine_Error Engine_restoreHeap(Server_Handle server, String name);
+
+/** @endcond */
+
+/*
+ *  ======== Engine_open ========
+ */
+/**
+ *  @brief      Open an Engine
+ *
+ *  The handle returned may be used to create one or more instances of an
+ *  algorithm contained in the specified Engine.
+ *
+ *  An Engine may be opened more than once; each open returns a unique
+ *  handle that can be used to create algorithm instances or get status of the
+ *  Engine.
+ *
+ *  Engine handles must not be concurrently accessed by multiple threads; each
+ *  thread must either obtain its own handle (via Engine_open()) or explicitly
+ *  serialize access to a shared handle.
+ *
+ *  @param[in]  name            The name of the engine to open.  @c name is
+ *                              specified in the engine configuration.
+ *  @param[in]  attrs           Attributes for the open engine.
+ *  @param[out] ec              Optional output error code
+ *
+ *  @retval     NULL            An error has occurred.
+ *  @retval     non-NULL        The handle to the opened engine.
+ *
+ *  @pre        @c name is a non-NULL string.
+ *
+ *  @pre        @c name is a valid, pre-configured name of an engine.
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @post       If the return handle is NULL and @c ec is non-NULL, @c *ec
+ *              is set to a non-zero value indicating the cause of the failure.
+ *
+ *  @post       If @c ec is non-NULL, the Engine_Error value is set to one of
+ *              the following values:
+ *                - #Engine_EOK         success
+ *                - #Engine_EEXIST      name does not exist
+ *                - #Engine_ENOMEM      can't allocate memory
+ *                - #Engine_EDSPLOAD    can't load the DSP
+ *                - #Engine_ENOCOMM     can't create a comm connection to DSP
+ *                - #Engine_ENOSERVER   can't locate the server on the DSP
+ *                - #Engine_ECOMALLOC   can't allocate communication buffer
+ *
+ *  @sa         Engine_close()
+ *  @sa         Engine_add()
+ *  @sa         Engine_remove()
+ */
+extern Engine_Handle Engine_open(String name, Engine_Attrs *attrs,
+        Engine_Error *ec);
+
+/*
+ *  ======== Engine_fwriteTrace ========
+ */
+/**
+ *  @brief              Write Server's trace buffer to specifed file stream
+ *
+ *  @param[in]  engine  The handle to the opened engine.
+ *
+ *  @param[in]  prefix  A string to prepend to each line output; this
+ *                      allows one to easily identify trace from the
+ *                      server from the application's trace, for
+ *                      example.
+ *  @param[in]  out     A open FILE stream used to output the
+ *                      Server's trace characters.
+ *
+ *  @retval             Integer number of characters copied to the specified
+ *                      FILE stream.
+ *
+ *  @pre        @c engine is a valid (non-NULL) engine handle and the engine
+ *              is in the open state.
+ *
+ *  @post       In the event a negative value is returned,
+ *              Engine_getLastError() will return one of the following values:
+ *                - #Engine_ERUNTIME    Either an internal runtime error
+ *                                      occured or the underlying server
+ *                                      error occured.
+ *                - #Engine_EINUSE      Server trace resource is already in use.
+ */
+extern Int Engine_fwriteTrace(Engine_Handle engine, String prefix, FILE *out);
+
+/*
+ *  ======== Engine_getAlgInfo ========
+ */
+/**
+ *  @brief      Get details of an algorithm configured into an engine
+ *
+ *  @param[in]  name        The name of the engine.  @c name is
+ *                          specified in the engine configuration.
+ *  @param[out] algInfo     Structure to store algorithm details. The
+ *                          @c algInfoSize field of this structure must
+ *                          be set to @c sizeof(Engine_AlgInfo) by the
+ *                          application.
+ *  @param[out] index       The index of the algorithm to get the information.
+ *
+ *  @retval     Engine_EOK        Success.
+ *  @retval     Engine_EEXIST     There is no engine with the given name.
+ *  @retval     Engine_ENOTFOUND  @c index is greater than or equal to the
+ *                                total number of algorithms configured for
+ *                                the engine, or @c index < 0.
+ *  @retval     Engine_EINVAL     The value of @c algInfoSize passed to this
+ *                                function does not match the CE library's
+ *                                @c sizeof(Engine_AlgInfo).
+ *
+ *  @pre        @c name is a non-NULL string.
+ *
+ *  @pre        @c algInfo is non-NULL.
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @post       If @c name is a valid engine name and 0 <= @c index < the
+ *              total number of algorithms configured for the engine, then
+ *              @c algInfo will contain the information for the engine's
+ *              ith (i = @c index) algorithm.
+ *
+ *  @sa         Engine_getNumAlgs()
+ */
+extern Engine_Error Engine_getAlgInfo(String name, Engine_AlgInfo *algInfo,
+        Int index);
+
+/*
+ *  ======== Engine_getAlgInfo2 ========
+ */
+/**
+ *  @brief      Get details of an algorithm.
+ *
+ *  @param[in]  name        The name of the engine.  @c name is
+ *                          specified in the engine configuration. This
+ *                          may be NULL if @c engine contains a valid
+ *                          engine handle.
+ *  @param[in]  engine      The handle of an engine returned by Engine_open().
+ *                          If this is NULL, only information for a static
+ *                          alg can be obtained.
+ *  @param[out] algInfo2    Structure to store algorithm details. The
+ *                          @c algInfoSize field of this structure must
+ *                          be set to @c sizeof(Engine_AlgInfo2) by the
+ *                          application.
+ *  @param[out] index       The index of the algorithm to get the information.
+ *
+ *  @retval     Engine_EOK        Success.
+ *  @retval     Engine_EEXIST     There is no engine with the given name.
+ *  @retval     Engine_ENOTFOUND  @c index is greater than or equal to the
+ *                                total number of algorithms configured for
+ *                                the engine, or @c index < 0.
+ *  @retval     Engine_EINVAL     The value of @c algInfoSize passed to this
+ *                                function does not match the CE library's
+ *                                @c sizeof(Engine_AlgInfo2).
+ *
+ *  @pre        @c name is a non-NULL string or @c engine is non-NULL.
+ *
+ *  @pre        @c algInfo2 is non-NULL.
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @post       If @c name is a valid engine name and 0 <= @c index < the
+ *              total number of algorithms configured for the engine, then
+ *              @c algInfo2 will contain the information for the engine's
+ *              ith (i = @c index) algorithm.
+ *
+ *  @remarks    This service supports algorithms statically configured into
+ *              an Engine at build/config time, or algorithms that have been
+ *              dynamically added to an opened engine.  If the Engine has not
+ *              been opened yet, the name of the Engine is used to get the
+ *              statically configured alg.  If the Engine has been opened, the
+ *              Engine handle can be used to get either information for a
+ *              statically configured alg, or a remote alg that was added when
+ *              the server was queried during Engine_open().
+ *
+ *  @sa         Engine_getNumAlgs2().
+ */
+extern Engine_Error Engine_getAlgInfo2(String name, Engine_Handle engine,
+        Engine_AlgInfo2 *algInfo2, Int index);
+
+
+/** @cond INTERNAL */
+/*
+ *  ======== Engine_getCpuLoad ========
+ */
+/**
+ *  @brief      Get Server's cpu usage in percent
+ *
+ *  @deprecated This service has been replaced by Server_getCpuLoad()
+ *              to better indicate that this API is not intended for
+ *              obtaining the current processor's CPU load, rather it
+ *              obtains the CPU load of a remote Server.
+ *
+ *  @param[in]  engine  The handle to the opened engine.
+ *
+ *  @retval             integer between 0-100 indicating percentage
+ *                      of time the Server is processing measured
+ *                      over a period of approximately 1 second.  If
+ *                      the load is unavailable, a negative value is
+ *                      returned.
+ *
+ *  @pre        @c engine is a valid (non-NULL) engine handle and the engine
+ *              is in the open state.
+ *
+ *  @post       In the event a negative value is returned,
+ *              Engine_getLastError() will return one of the following values:
+ *                - #Engine_ERUNTIME    Either an internal runtime error
+ *                                      occured or the underlying server
+ *                                      error occured.
+ *                - #Engine_ENOTAVAIL   The CPU load can not be computed.
+ *
+ *  @sa         Server_getCpuLoad()
+ */
+extern Int Engine_getCpuLoad(Engine_Handle engine);
+
+/** @endcond */
+
+
+/*
+ *  ======== Engine_getDesc ========
+ */
+/**
+ *  @brief      Fill in an Engine_Desc structure with the values of the
+ *              Engine descriptor for an Engine.
+ *
+ *  @param[in]  name            The name of the Engine.  @c name is
+ *                              specified in the engine configuration or a
+ *                              a name that was passed to @c Engine_add().
+ *  @param[out] desc            The structure where the descriptor of the
+ *                              Engine specified by @c name will be copied to.
+ *
+ *  @retval     Engine_EOK      Success.
+ *  @retval     Engine_EEXIST   There is no engine with the given name.
+ *
+ *  @pre        @c name is a non-NULL string.
+ *
+ *  @pre        @c desc is non-NULL.
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @post       If @c name is a valid engine name, then desc will contain
+ *              the descriptor of the engine @c name.
+ *
+ *  @sa         Engine_setDesc().
+ */
+extern Engine_Error Engine_getDesc(String name, Engine_Desc *desc);
+
+/*
+ *  ======== Engine_getLastError ========
+ */
+/**
+ *  @brief              Get error code of the last failed operation
+ *
+ *  @param[in]  engine  The handle to the opened engine.
+ *
+ *  @retval             error code (Engine_Error) of the last failed
+ *                      engine operation.
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @pre        @c engine is a valid (non-NULL) engine handle and the engine
+ *              is in the open state.
+ */
+extern Engine_Error Engine_getLastError(Engine_Handle engine);
+
+/*
+ *  ======== Engine_getName ========
+ */
+/**
+ *  @brief      Get the name of an opened engine
+ *
+ *  @param[in]  engine  The handle to the opened engine.
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @retval     NULL            An error has occurred.
+ *  @retval     non-NULL        The name of the opened engine.
+ */
+extern String Engine_getName(Engine_Handle engine);
+
+
+/*
+ *  ======== Engine_getNumAlgs ========
+ */
+/**
+ *  @brief      Get the number of algorithms configured into an Engine
+ *
+ *  @param[in]  name            The name of the Engine.  @c name is
+ *                              specified in the engine configuration.
+ *  @param[out] numAlgs         The number of algorithms that are configured
+ *                              in the given engine.
+ *
+ *  @retval     Engine_EOK      Success.
+ *  @retval     Engine_EEXIST   There is no engine with the given name.
+ *
+ *  @pre        @c name is a non-NULL string.
+ *
+ *  @pre        @c numAlgs is non-NULL.
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @post       If @c name is a valid engine name, then numAlgs will contain
+ *              the number of algorithms configured for the given engine.
+ *
+ *  @sa         Engine_getAlgs().
+ */
+extern Engine_Error Engine_getNumAlgs(String name, Int *numAlgs);
+
+/*
+ *  ======== Engine_getNumAlgs2 ========
+ */
+/**
+ *  @brief Get the number of algorithms statically configured into an engine
+ *         or the total number of algorithms both statically configured and
+ *         dynamically added through server information when the engine was
+ *         opened.
+ *
+ *  @param[in]  name            The name of the engine.  @c name is
+ *                              specified in the engine configuration. @c name
+ *                              can be NULL, if @c engine is a valid
+ *                              Engine_Handle.
+ *  @param[in]  engine          The handle of an engine returned by
+ *                              Engine_open(). If @c engine is NULL, @c name
+ *                              must be non-NULL, and only the number of
+ *                              statically configured algorithms will be
+ *                              returned in @c numAlgs.
+ *                              specified in the engine configuration.
+ *  @param[out] numAlgs         The number of algorithms that are configured
+ *                              in the given engine.
+ *
+ *  @retval     Engine_EOK      Success.
+ *  @retval     Engine_EEXIST   There is no engine with the given name.
+ *
+ *  @pre        @c name is a non-NULL string or @c engine is non-NULL.
+ *
+ *  @pre        @c numAlgs is non-NULL.
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @post       If @c name is a valid engine name, then numAlgs will contain
+ *              the number of algorithms configured for the given engine.
+ *
+ *  @remarks    If the engine has a server, but was not configured with
+ *              Engine.createFromServer() number of remote algorithms (if any)
+ *              that were statically configured into the engine, will be
+ *              counted twice: once for the static alg table, and once for
+ *              the information queried from the server.
+ *
+ *  @sa         Engine_getAlgs().
+ */
+extern Engine_Error Engine_getNumAlgs2(String name, Engine_Handle engine,
+        Int *numAlgs);
+
+/*
+ *  ======== Engine_getServer ========
+ */
+/**
+ *  @brief              Get handle to an Engine's Server
+ *
+ *  This function returns the handle to an Engines server, that can be used
+ *  with Server APIs to obtain information from and control the remote DSP
+ *  server.
+ *
+ *  @param[in]  engine  The handle to the opened engine.
+ *
+ *  @retval             Handle to engine's server.
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @pre        @c engine is a valid (non-NULL) engine handle and the engine
+ *              is in the open state.
+ */
+extern Server_Handle Engine_getServer(Engine_Handle engine);
+
+
+/*
+ *  ======== Engine_getUsedMem ========
+ */
+/**
+ *  @brief      Get Server's total memory usage
+ *
+ *  @deprecated This service has been replaced by Server_getMemStat()
+ *              to better indicate that this API is not intended for
+ *              obtaining the current processor's memory statistics,
+ *              rather it obtains the memory statistics of a remote
+ *              Server.  Also, Server_getMemStat() provides more granularity
+ *              than Engine_getUsedMem().
+ *
+ *  @param[in]  engine  The handle to the opened engine.
+ *
+ *  @retval     Total amount of used memory (in MAUs).  If the amount is not
+ *              available, 0 is returned and the reason can be retrieved via
+ *              Engine_getLastError().
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @pre        @c engine is a valid (non-NULL) engine handle and the engine
+ *              is in the open state.
+ *
+ *  @post       in the event that 0 is returned, Engine_getLastError() will
+ *              return one of the following values:
+ *                - #Engine_ERUNTIME    Either an internal runtime error
+ *                                      occured or the underlying server
+ *                                      error occured.
+ *                - #Engine_ENOTAVAIL   The memory usage can not be computed.
+ */
+extern UInt32 Engine_getUsedMem(Engine_Handle engine);
+
+
+/*
+ *  ======== Engine_remove ========
+ */
+/**
+ *  @brief      Remove an engine from the list of engines that can be opened
+ *
+ *  @param[in]  engineName      The name of the engine to be removed.
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @pre        @c engineName is non-NULL.
+ *
+ *  @retval     Engine_EINUSE      The engine cannot be removed because
+ *                                 an instance of it is still opened.
+ *  @retval     Engine_EEXIST      No engine by this name exists.
+ *  @retval     Engine_EOK         Success.
+ *
+ *  @sa         Engine_add()
+ */
+extern Engine_Error Engine_remove(String engineName);
+
+
+/*
+ *  ======== Engine_setDesc ========
+ */
+/**
+ *  @brief      Set values for an Engine's descriptor.  This function should
+ *              only be called when the Engine has not yet been opened.
+ *
+ *  @param[in]  name            The name of the Engine.  @c name is
+ *                              specified in the engine configuration or a
+ *                              a name that was passed to @c Engine_add().
+ *  @param[in] desc             The structure where descriptor values for the
+ *                              Engine specified by @c name will be copied
+ *                              from.
+ *
+ *  @retval     Engine_EOK      Success.
+ *  @retval     Engine_EEXIST   There is no engine with the given name.
+ *  @retval     Engine_EINUSE   The Engine @c name has already been opened.
+ *
+ *  @pre        @c name is a non-NULL string.
+ *
+ *  @pre        @c desc is non-NULL.
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @post       If @c name is a valid engine name, then the desscriptor for
+ *              the engine @c name will have been updated with values from
+ *              @c desc.
+ *
+ *  @remarks    Use @c Engine_getDesc() to fill in the descriptor, override
+ *              the fields you want to change, and then pass the descriptor
+ *              to Engine_setDesc().
+ *              Only the following fields of the Engine_Desc are allowed to
+ *              be modified:
+ *                  @c memMap
+ *                  @c useExtLoader
+ *                  @c heapId
+ *
+ *  @sa         Engine_getDesc().
+ */
+extern Engine_Error Engine_setDesc(String name, Engine_Desc *desc);
+
+
+/*
+ *  ======== Engine_setTrace ========
+ */
+/**
+ *  @brief      Set Server's trace mask
+ *
+ *  @param[in]  engine  The handle to the opened engine.
+ *  @param[in]  mask    Trace mask, e.g. "*=01234567"
+ *
+ *  @retval     Engine_ENOSERVER   No server for this engine.
+ *  @retval     Engine_EINUSE      Trace resource is already in use.
+ *  @retval     Engine_ERUNTIME    Internal runtime error has occurred.
+ *
+ *  @pre        As with all Codec Engine API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @pre        @c engine is a valid (non-NULL) engine handle and the engine
+ *              is in the open state.
+ *
+ *  @remarks    This only sets the trace for a remote server.  To change
+ *              the trace mask for the application-side of the framework,
+ *              use Diags_setMask(), or Diags_setMaskMeta().
+ *
+ *  @sa         xdc.runtime.Diags
+ */
+extern Int Engine_setTrace(Engine_Handle engine, String mask);
+
+
+/** @cond INTERNAL */
+
+/*
+ *  ======== Engine_getDesc ========
+ *  Internal for testing.
+ */
+extern Engine_Desc *_Engine_getDesc(Int i);
+
+/** @endcond */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*
+ *  @(#) ti.sdo.ce; 1, 0, 6,3; 6-13-2013 00:10:03; /db/atree/library/trees/ce/ce-w08/src/ xlibrary
+
+ */
+
diff --git a/packages/codec_engine/ti/sdo/ce/Server.h b/packages/codec_engine/ti/sdo/ce/Server.h
new file mode 100644 (file)
index 0000000..447c3ef
--- /dev/null
@@ -0,0 +1,761 @@
+/*
+ *  Copyright 2013 by Texas Instruments Incorporated.
+ *
+ */
+
+/*
+ * Copyright (c) 2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+/*
+ *  ======== Server.h ========
+ *  DSP Server module
+ *
+ *  APIs for accessing information from remote server.
+ */
+
+/**
+ *  @file       ti/sdo/ce/Server.h
+ *
+ *  @brief      The Codec Engine Server Interface.  Provides the user an
+ *              inteface to open and manipulate a Server which contains
+ *              remote algorithms.
+ */
+/**
+ *  @addtogroup   ti_sdo_ce_Server     Codec Engine Server Interface
+ */
+#ifndef ti_sdo_ce_Server_
+#define ti_sdo_ce_Server_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <ti/sdo/ce/ServerDefs.h>
+#include <ti/sdo/ce/Engine.h>
+#include <ti/sdo/ce/skel.h>
+
+#include <stdio.h>  /* def of FILE * */
+
+/** @ingroup    ti_sdo_ce_Server */
+/*@{*/
+
+/**
+ * @brief       Name to pass to Diags_setMask() to enable logging for Server
+ *              functions. For example,
+ *                  Diags_setMask(Server_MODNAME"+EX1234567");
+ *              turns on all Log statements in this module.
+ *              Diags_setMask() must be called after initialization to take
+ *              effect.
+ */
+#define Server_MODNAME "ti.sdo.ce.Server"
+
+/**
+ *  @brief      Maximum number of characters used in memory segment names.
+ */
+#define Server_MAXSEGNAMELENGTH 32
+
+/**
+ *  @brief      Server error code
+ */
+typedef enum Server_Status {
+    Server_EOK       = 0,      /**< Success. */
+    Server_ENOSERVER = 1,      /**< Engine has no server. */
+    Server_ENOMEM    = 2,      /**< Unable to allocate memory. */
+    Server_ERUNTIME  = 3,      /**< Internal runtime failure. */
+    Server_EINVAL    = 4,      /**< Bad value passed to function. */
+    Server_EWRONGSTATE =5,     /**< Server is not in the correct state to
+                                *   execute the requested function. */
+    Server_EINUSE    = 6,      /**< Server call did not succeed because a
+                                *   because a required resource is in use. */
+    Server_ENOTFOUND = 7,      /**< An entity was not found */
+    Server_EFAIL     = 8,      /**< Unknown failure */
+    Server_ENOTSUPPORTED = 9   /**< API not supported for given parameters. */
+} Server_Status;
+
+/*
+ *  ======== Server_AlgDesc ========
+ */
+typedef struct Server_AlgDesc {
+    /**
+     *  @brief  The name of the algorithm. This is used by the application
+     *          when instantiating an instance of the algorithm through one
+     *          of the VISA APIs.
+     */
+    String      name;
+
+    /**
+     *  @brief  The address of the XDAIS alg function table.
+     *
+     *  @remarks
+     *          All XDAIS algorithms must define an IALG_Fxns structure that
+     *          contains implementations of the IALG methods.  This field
+     *          is simply the address of this structure.
+     */
+    IALG_Fxns   *fxns;
+
+    /**
+     *  @brief  The address of the IDMA3_Fxns function table, if the algorithm
+     *          uses DMA. If the algorithm does not use DMA, this field should
+     *          set to NULL. Valid for local algorithm only.
+     */
+    Ptr         idmaFxns;
+
+    /**
+     *  @brief  If true, the algorithm will be instantiated on the
+     *          "local" CPU.  Otherwise the server will create an
+     *           instance of the algorithm.
+     */
+    Bool        isLocal;
+
+    /**
+     *  @brief  This id specifies which resource sharing group that this
+     *          alg will be placed into.
+     *
+     *  @remarks
+     *          This 'group' concept is used by the framework for sharing
+     *          resources. Algorithms in the same group share resources, and
+     *          therefore, must not run at the same time. If you assign the
+     *          same groupId to multiple algorithms, these algorithms must
+     *          not pre-empt eachother, or the shared resources may be
+     *          corrupted.
+     *          When server algorithms are configured statically in a .cfg
+     *          file, if the @c groupId parameter for the algorithm has
+     *          not been set, the configuration process assigns the @c groupId
+     *          will be assigned automatically, based on the priority that
+     *          the algorithm will run at.  However, when Server_addAlg() is
+     *          used to dynamically add the algorithm to the server, you must
+     *          ensure that the @c groupId is appropriately. If two algorithms
+     *          will run at the same time, you must assign them different
+     *          group Ids.
+     *
+     *          Algorithms in different groups do not share resources.
+     *
+     *  @sa http://processors.wiki.ti.com/index.php/Codec_Engine_GroupIds
+     */
+    Int         groupId;
+
+    /**
+     *  @brief  Address of the XDAIS alg IRES Interface function table.
+     *
+     *  @remarks
+     *          All XDAIS algorithms that use an IRES resource must define an
+     *          IRES_Fxns structure containing the pointers to functions
+     *          implementatng the IRES interface.
+     *          If the algorithm does not use an IRES resource this field
+     *          should be set to NULL.
+     */
+    Ptr         iresFxns;
+
+    /*
+     *  Currently not used.
+     *           Codec class configuration data for stub side, if any.  We
+     *           generate this structure for both sides, although it is
+     *           currently only used in the skeletons.
+     */
+    Void        *stubsCodecClassConfig;
+
+    /**
+     *  @brief  Codec class configuration data, if any.
+     */
+    Void        *codecClassConfig;
+
+    /*
+     *  Currently not used.
+     *          Indicates the type of memory the alg's memory requests will
+     *          be allocated from.
+     *          The alg's memory will be allocated from cached memory, if
+     *              memType = Engine_USECACHEDMEM_CACHED,
+     *          from non-cached memory, if
+     *              memType = Engine_USECACHEDMEM_NONCACHED,
+     *          Otherwise, if
+     *              memType = Engine_USECACHEDMEM_DEFAULT,
+     *          memory allocations will be determined by the value of
+     *          ti_sdo_ce_alg_Algorithm_useCache (cached, if TRUE, non-cached,
+     *          if FALSE).
+     *
+     *  @sa  Engine_CachedMemType
+     */
+    Engine_CachedMemType memType;  /**< Memory type for alg's mem reqs. */
+
+    /**
+     *  @brief  A string idicating the type(s) of algorithm this is.
+     *          This should be a ';' separated string of inherited types.
+     *
+     *  @remarks
+     *          In most cases, @c types will just be set to the VISA type
+     *          defined in the Codec Engine algorithm interface header
+     *          file included by the algorithm, depending on the XDM interface
+     *          the algorithm implements.
+     *
+     *          For example, if the algorithm implements the ISPHDEC1
+     *          interface as defined by XDM, @c types should be set
+     *          to
+     *              @c SPHDEC1_VISATYPE
+     *          (defined as "ti.sdo.ce.speech1.ISPHDEC1" in the header file
+     *          ti/sdo/ce/speech1/sphdec1.h).
+     *
+     *          Another example to illustrate multiple typss specified in
+     *          @c typss, if the algorithm implements the (made-up)
+     *          interface, ti.sdo.ce.test.xvideo.IVIDE, which in turn
+     *          implements the IVIDDEC interface, we could then set @c types
+     *          to
+     *              VIDDEC_VISATYPE";ti.sdo.ce.test.xvideo.IVIDE"
+     *          or
+     *              "ti.sdo.ce.test.xvideo.IVIDE;"VIDDEC_VISATYPE
+     */
+    String      types;
+
+    /**
+     *  @brief  A string idicating the name of the stub functions.  This is
+     *  needed by remote apps that call Engine_initFromServer().
+     */
+    String      stubFxnsName;
+
+    /**
+     *  @brief  The skel functions needed to invoke the alg remotely
+     */
+    SKEL_Fxns   *skelFxns;
+
+    /**
+     *  @brief  The priority the alg will run at.
+     */
+    Int         priority;
+
+    /**
+     *  @brief  Algorithm stack size.
+     */
+    Int         stackSize;
+
+    /*
+     *  Currently not used.
+     *          Memory heap for algorithm stack.
+     */
+    Int         stackSeg;
+} Server_AlgDesc;
+
+/**
+ *  @brief      Information for a memory heap of a remote DSP server.
+ *
+ *  @remarks    Sizes are given in DSP data MAUs.
+ *  @sa         Server_getMemStat().
+ *
+ */
+typedef struct Server_MemStat {
+    Char   name[Server_MAXSEGNAMELENGTH + 1]; /**< Name of memory heap. */
+    Uint32 base;           /**< Base address of the memory segment. */
+    Uint32 size;           /**< Original size of the memory segment. */
+    Uint32 used;           /**< Number of bytes used. */
+    Uint32 maxBlockLen;    /**< Length of the largest contiguous free block. */
+} Server_MemStat;
+
+
+/*
+ *  ======== Server_addAlg ========
+ */
+/**
+ *  @brief      Dynamically add an algorithm to a Server.
+ *
+ *  @param[in]  server          The handle of a server returned by
+ *                              Engine_getServer().  Set to NULL when adding
+ *                              a local algorithm to the server. In the
+ *                              future, this handle will be used to
+ *                              dynamically add algorithms to a remote server.
+ *  @param[in]  location        String identifying the location of the
+ *                              algorithm.  Often this is a file name, but for
+ *                              systems without a file system, it may be a
+ *                              system-specific string identifier. This may
+ *                              be NULL if the algorithm is built into the
+ *                              executable. Currently not supported - set to
+ *                              NULL.
+ *  @param[in]  pAlgDesc        Parameters describing the algorithm being
+ *                              added. Before setting the fields of this
+ *                              structure, it should first be initialized
+ *                              with @c Server_initAlgDesc(), to set all
+ *                              fields to default values.
+ *
+ *                              The user must set the following fields of
+ *                              pAlgDesc:
+ *                                  pAlgDesc->name
+ *                                  pAlgDesc->fxns
+ *                                  pAlgDesc->idmaFxns, if applicable
+ *                                  pAlgDesc->iresFxns, if applicable
+ *
+ *                                  pAlgDesc->groupId
+ *                                  pAlgDesc->priority
+ *                                  pAlgDesc->stackSize
+ *
+ *                                  pAlgDesc->types
+ *                                  pAlgDesc->stubFxnsName
+ *                                  pAlgDesc->skelFxns
+ *
+ *                              Currently, adding only local algorithms is
+ *                              supported, so the default value of TRUE can
+ *                              be used for:
+ *                                  pAlgDesc->isLocal
+ *
+ *  @pre        As with all Codec Server API's, CERuntime_init() must have
+ *              previously been called.
+ *
+ *  @remarks    If adding a local algorithm to a server that is built with
+ *              BIOS, this function must be called after CERuntime_init()
+ *              has been called, but before BIOS_start(). This is necessary
+ *              to ensure that the algorithm will be visible to the remote
+ *              app that loaded the server.
+ *
+ *  @remarks    If adding a remote algorithm to a remote server, the server
+ *              handle for the opened Engine must be used.  The server handle
+ *              is obtained by calling Engine_getServer() with the handle of
+ *              the opened engine.
+ *              In this case, the added algorithm will only be accessible to
+ *              the caller of this function.
+ *              Adding a remote algorithm is not yet supported.
+ *
+ *  @remarks    If there is an existing algorithm in the server already named
+ *              @c name, an error will be returned.
+ *
+ *  @retval     Server_EOK       Success.
+ *  @retval     Server_EINVAL    @c pAlgDesc or @c pAlgDesc->name is NULL.
+ *  @retval     Server_EINUSE    The name of the alg in @c pAlgDesc->name is
+ *                               already in use.
+ *  @retval     Server_ENOTSUPPORTED  @c pAlgDesc->isLocal = FALSE is currently
+ *                               not supported.
+ *
+ *  @par Example Usage:
+ *  @code
+ *      #include <ti/sdo/ce/Server.h>
+ *
+ *      Server_AlgDesc desc;
+ *
+ *      Server_initAlgDesc(&desc);
+ *
+ *      desc.groupId = 2;
+ *      desc.isLocal = TRUE;
+ *      desc.fxns = &UNIVERSALCOPY_TI_IUNIVERSALCOPY;
+ *      desc.idmaFxns = NULL;
+ *      desc.iresFxns = NULL;
+ *      desc.priority = 2;
+ *      desc.stackSize = 0x2000;
+ *      desc.types = UNIVERSAL_VISATYPE;
+ *      desc.stubFxnsName = "UNIVERSAL_STUBS";
+ *      desc.skelFxns = &UNIVERSAL_SKEL;
+ *
+ *      status = Server_addAlg(NULL, NULL, &desc);
+ *
+ *  @endcode
+ *
+ *  @sa         Server_AlgDesc
+ *  @sa         Server_initAlgDesc()
+ *  @sa         Engine_getServer()
+ */
+extern Server_Status Server_addAlg(Server_Handle server, String location,
+        Server_AlgDesc *pAlgDesc);
+
+
+/*
+ *  ======== Server_connectTrace ========
+ */
+/**
+ *  @brief                      Connect to server for purposes of collecting
+ *                              trace and/or LOG data.
+ *
+ *  @param[in]  server          Server handle obtained from Engine_getServer().
+ *
+ *  @param[in]  token           Address to store connection token.  This token
+ *                              should be specified in the companion call to
+ *                              Server_disconnectTrace().
+ *
+ *  @retval     Server_EOK       Success, trace token was acquired.
+ *  @retval     Server_EINUSE    A connection for server trace is already
+ *                               established.
+ *  @retval     Server_ERUNTIME  An internal runtime error occurred.
+ *
+ *  @pre        @c server is non-NULL.
+ *  @pre        @c token is non-NULL.
+ *
+ *  @sa         Server_disconnectTrace().
+ *
+ */
+extern Server_Status Server_connectTrace(Server_Handle server, Int * token);
+
+/*
+ *  ======== Server_disconnectTrace ========
+ */
+/**
+ *  @brief                      Disconnect from server when finished collecting
+ *                              trace and/or LOG data.
+ *
+ *  @param[in]  server          Server handle obtained from Engine_getServer().
+ *
+ *  @param[in]  token           Connection token (as obtained from earlier,
+ *                              companion call to Server_connectTrace()).
+ *
+ *  @retval     Server_EOK       Success.
+ *  @retval     Server_ERUNTIME  An internal runtime error occurred.
+ *
+ *  @pre        @c server is non-NULL.
+ *
+ *  @sa         Server_connectTrace().
+ *
+ */
+extern Server_Status Server_disconnectTrace(Server_Handle server, Int token);
+
+/*
+ *  ======== Server_fwriteTrace ========
+ */
+/**
+ *  @brief              Write Server's trace buffer to specifed file stream
+ *
+ *  @param[in]  server  Server handle, obtained from Engine_getServer().
+ *
+ *  @param[in]  prefix  A string to prepend to each line output; this
+ *                      allows one to easily identify trace from the
+ *                      server from the application's trace, for
+ *                      example.
+ *  @param[in]  out     An open FILE stream used to output the
+ *                      Server's trace characters.
+ *
+ *  @retval             Integer number of characters copied to the specified
+ *                      FILE stream.
+ *
+ *  @pre             @c server is non-NULL.
+ *  @pre             @c Corresponding engine is in the open state.
+ *
+ *  @post       In the event a negative value is returned,
+ *              Engine_getLastError() will return the value:
+ *                - #Engine_ERUNTIME    Either an internal runtime error
+ *                                      occured or the underlying server
+ *                                      error occured.
+ */
+extern Int Server_fwriteTrace(Server_Handle server, String prefix, FILE *out);
+
+/*
+ *  ======== Server_getCpuLoad ========
+ */
+/**
+ *  @brief                      Get Server's CPU usage in percent.
+ *
+ *  @param[in]  server          Server handle, obtained from Engine_getServer().
+ *
+ *  @retval                     Integer between 0-100 indicating percentage
+ *                              of time the Server is processing measured
+ *                              over a period of approximately 1 second.  If
+ *                              the load is unavailable, a negative value is
+ *                              returned.
+ *
+ *  @pre        @c server is non-NULL.
+ *
+ *  @post       In the event a negative value is returned,
+ *              Engine_getLastError() will return one of the following values:
+ *                - #Engine_ERUNTIME    Either an internal runtime error
+ *                                      occured or an underlying server
+ *                                      error occured.
+ *                - #Engine_EINVAL      The Server handle is not valid.
+ *
+ */
+extern Int Server_getCpuLoad(Server_Handle server);
+
+/*
+ *  ======== Server_getMemStat ========
+ */
+/**
+ *  @brief Get information on a memory heap segment of a remote DSP server.
+ *
+ *  @param[in]  server          Server handle obtained from Engine_getServer().
+ *  @param[in]  segNum          The heap number of a segment on the DSP.
+ *  @param[out] memStat         Structure to store memory segment information.
+ *
+ *  @retval     Server_EOK       Success.
+ *  @retval     Server_ENOTFOUND @c segNum is out of range.
+ *  @retval     Server_ERUNTIME  Internal runtime error occurred.
+ *
+ *  @pre        @c server is non-NULL.
+ *  @pre        @c memStat is non-NULL.
+ *
+ *  @post       On success, memStat will contain information about the memory
+ *              heap @c segNum on the DSP.
+ *
+ *  @sa         Server_getNumMemSegs().
+ *
+ *  @remarks    This API only returns statistics for BIOS HeapMem heaps
+ *              that have been statically configured into the server.
+ */
+extern Server_Status Server_getMemStat(Server_Handle server, Int segNum,
+        Server_MemStat *memStat);
+
+/*
+ *  ======== Server_getNumMemSegs ========
+ */
+/**
+ *  @brief Get the number of memory heap segments of a remote DSP server.
+ *
+ *  @param[in]  server          Server handle obtained from Engine_getServer().
+ *  @param[out] numSegs         The number of heap segments of the DSP server.
+ *
+ *  @retval     Server_EOK        Success.
+ *  @retval     Server_ERUNTIME   Internal runtime error occurred.
+ *  @retval     Server_ENOSERVER  Engine has no server.
+ *
+ *  @pre        @c server is non-NULL.
+ *  @pre        @c numSegs is non-NULL.
+ *
+ *  @post       On success, numSegs will contain the number of memory heaps
+ *              on the DSP.
+ *
+ *  @sa         Server_getMemStat().
+ *
+ *  @remarks    This API returns only the number of BIOS HeapMem heaps that
+ *              have been statically configured into the server.
+ */
+extern Server_Status Server_getNumMemSegs(Server_Handle server, Int *numSegs);
+
+/** @cond INTERNAL */
+/*
+ *  ======== Server_init ========
+ */
+extern Void Server_init(Void);
+/** @endcond */
+
+/*
+ *  ======== Server_initAlgDesc ========
+ */
+/**
+ *  @brief      Initialize an Server_AlgDesc structure with default values.
+ *
+ *  @param[in]  pAlgDesc  Location of Server_AlgDesc object to initialize.
+ *                        The fields of pAlgDesc will be set to the following:
+ *  @code
+ *                        pAlgDesc->name = NULL;
+ *                        pAlgDesc->uuid.data = 0;
+ *                        pAlgDesc->fxns = NULL;
+ *                        pAlgDesc->idmaFxns = NULL;
+ *                        pAlgDesc->typeTab = NULL;
+ *                        pAlgDesc->isLocal = TRUE;
+ *                        pAlgDesc->groupId = 0;
+ *                        pAlgDesc->iresFxns = NULL;
+ *                        pAlgDesc->codecClassConfig = NULL;
+ *                        pAlgDesc->priority = 1;
+ *                        pAlgDesc->stackSize = 1024;
+ *                        pAlgDesc->types = NULL;
+ *                        pAlgDesc->stubFxnsName = NULL;
+ *                        pAlgDesc->skelFxns = NULL;
+ *
+ *                        Unused fields below are initialized to the
+ *                        following:
+ *
+ *                        pAlgDesc->rpcProtocolVersion = 0;
+ *                        pAlgDesc->memType = Engine_USECACHEDMEM_DEFAULT;
+ *                        pAlgDesc->stackSeg = 0;
+ *
+ *  @endcode
+ *
+ *  @sa         Server_addAlg()
+ */
+extern Void Server_initAlgDesc(Server_AlgDesc *pAlgDesc);
+
+/*
+ *  ======== Server_redefineHeap ========
+ */
+/**
+ *  @brief Set the base address and size of a remote DSP server heap.
+ *
+ *  @remarks
+ *  This API is used to move and/or resize a named heap of the remote DSP
+ *  server.  The address passed to this API is a DSP address and the
+ *  memory from @c base to @c base + @c size must be contiguous in physical
+ *  memory. The size of the heap should be given in DSP MADUs (minimum
+ *  addressable data units).
+ *  The name of the heap can be at most #Server_MAXSEGNAMELENGTH
+ *  characters long.
+ *
+ *  For example, in the case of DM644x, suppose that an application wants
+ *  to allocate a block of memory on the GPP to be used by the DSP server
+ *  for the memory segment named "DDRALGHEAP".  A block of physically
+ *  contiguous memory could be obtained by Memory_alloc() and the
+ *  corresponding DSP address obtained with
+ *  Memory_getBufferPhysicalAddress().  This DSP address and the size
+ *  of the block could then be passed to Server_redefineHeap().
+ *  For example:
+ *
+ *  @code
+ *      Server_redefineHeap(server, "DDRALGHEAP", base, size);
+ *  @endcode
+ *
+ *  This function can only be called when there is no memory currently
+ *  allocated in the heap (since the heap cannot be changed if it is being
+ *  used).
+ *
+ *  @param[in]  server          Server handle obtained from Engine_getServer().
+ *  @param[in]  name            Name of heap to be redefined.
+ *  @param[in]  base            Base address for algorithm heap.
+ *  @param[in]  size            Size (DSP MADUs) of new heap.
+ *
+ *  @retval     Server_EOK         Success.
+ *  @retval     Server_ERUNTIME    Internal runtime error occurred.
+ *  @retval     Server_ENOTFOUND   No heap with the specified name was found.
+ *  @retval     Server_EINVAL      Changing to the new base and size would
+ *                                 cause an overlap with another heap.
+ *  @retval     Server_EINUSE      Memory is currently allocated in the heap.
+ *
+ *  @pre        @c server is non-NULL.
+ *  @pre        @c base is a DSP address of a physically contiguous
+ *              block of memory.
+ *  @pre        @c base is aligned on an 8-byte boundary.
+ *
+ *  @post       On success, the server's algorithm heap base will have been
+ *              set to @c base, and the size will have been set to @c size.
+ *
+ *  @sa         Server_restoreHeap().
+ *
+ *  @remarks    This API is not supported in Codec Engine 3.20.
+ */
+extern Server_Status Server_redefineHeap(Server_Handle server, String name,
+        Uint32 base, Uint32 size);
+
+#if 0
+/*
+ *  ======== Server_removeAlg ========
+ */
+/*
+ *  Currently not implemented.
+ *
+ *  @brief      Dynamically remove an algorithm that was added to a Server
+ *              with Server_addAlg().
+ *
+ *  @remarks    The same values of the parameters @c name and @c server that
+ *              were passed to Server_addAlg() should be used here.  In
+ *              particular, if @c name was used to add the alg, all handles to
+ *              the engine named @c name must be closed before calling
+ *              Server_removeAlg().
+ *
+ *
+ *  @param[in]  name            The name of the engine or NULL, that was
+ *                              passed to Server_addAlg(). Set to NULL for now.
+ *                              Currently, only the default "local" engine is
+ *                              supported.
+ *  @param[in]  server          The handle to a server, previously acquired
+ *                              by a call to Engine_getServer(), or NULL.
+ *                              Set to NULL for now.  In the future, this will
+ *                              be used to dynamically remove remote
+ *                              algorithms from a server.
+ *  @param[in]  algName         Name of the algorithm to remove.
+ *
+ *  @retval     Server_EOK          Success.
+ *  @retval     Server_ENOTFOUND    The server's underlying engine, @c name,
+ *                                  does not exist.
+ *  @retval     Server_ENOTFOUND    @c algName could not be found in the
+ *                                  server's underlying engine table.
+ *  @retval     Server_EINUSE       The server's underlying engine, @c name,
+ *                                  is still open.
+ *
+ *  @sa         Server_addAlg()
+ */
+extern Server_Status Server_removeAlg(String name, Server_Handle server,
+        String algName);
+#endif
+
+/*
+ *  ======== Server_restoreHeap ========
+ */
+/**
+ *  @brief Set the base address and size of a remote DSP server heap
+ *         back to their original values.
+ *
+ *  This function resets the base address and size of a named heap of
+ *  the remote server, back to their values before the first call to
+ *  Server_redefineHeap() was made. The name of the heap can be at most
+ *  #Server_MAXSEGNAMELENGTH characters long, otherwise this function
+ *  will return #Server_ENOTFOUND.
+ *
+ *  As with Server_redefineHeap(), this function can only be called when
+ *  no memory is currently allocated from the heap (as the heap cannot be
+ *  changed if it is being used).
+ *
+ *  @param[in]  server      Server handle obtained through Engine_getServer().
+ *  @param[in]  name        Name of the heap to be restored.
+ *
+ *  @retval     Server_EOK         Success.
+ *  @retval     Server_ERUNTIME    Internal runtime error occurred.
+ *  @retval     Server_ENOTFOUND   No heap with the specified name was found.
+ *  @retval     Server_EINVAL      Changing back to the original base and size
+ *                                 would cause an overlap with another heap.
+ *  @retval     Server_EINUSE      Memory is currently allocated in the heap.
+ *
+ *  @pre        @c server is non-NULL.
+ *
+ *  @post       On success, the server's algorithm heap base and size will
+ *              have been reset to their original value.
+ *
+ *  @sa         Server_redefineHeap().
+ *
+ *  @remarks    This API is not supported in Codec Engine 3.20.
+ */
+extern Server_Status Server_restoreHeap(Server_Handle server, String name);
+
+/*
+ *  ======== Server_setTrace ========
+ */
+/**
+ *  @brief              Set Server's trace mask
+ *
+ *  @param[in]  server  Server handle obtained through Engine_getServer().
+ *  @param[in]  mask    Trace mask, e.g. "*=01234567"
+ *
+ *  @retval     Server_EOK         Success.
+ *  @retval     Server_EINUSE      A connection for server trace is already
+ *                                 established.
+ *  @retval     Server_ENOSERVER   No server for the engine.
+ *  @retval     Server_ERUNTIME    Internal runtime error occurred.
+ *
+ *  @pre        @c server is non-NULL.
+ *  @pre        @c Corresponding engine is in the open state.
+ *
+ *  @remarks    This only sets the trace for a remote server.  To change
+ *              the trace mask for the application-side of the framework,
+ *              use Diags_setMask or Diags_setMaskMeta.
+ *
+ *  @sa         xdc.runtime.Diags
+ */
+extern Int Server_setTrace(Server_Handle server, String mask);
+
+/*@}*/  /* ingroup */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*
+ *  @(#) ti.sdo.ce; 1, 0, 6,3; 6-13-2013 00:10:03; /db/atree/library/trees/ce/ce-w08/src/ xlibrary
+
+ */
+
diff --git a/packages/codec_engine/ti/sdo/ce/ServerDefs.h b/packages/codec_engine/ti/sdo/ce/ServerDefs.h
new file mode 100644 (file)
index 0000000..ec773e0
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ *  Copyright 2013 by Texas Instruments Incorporated.
+ *
+ */
+
+/*
+ * Copyright (c) 2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+/*
+ *  ======== ServerDefs.h ========
+ *  Defs for Server module
+ */
+
+/**
+ *  @file       ti/sdo/ce/ServerDefs.h
+ *
+ *  @brief      The Codec Engine Server Definitions.
+ */
+/**
+ *  @addtogroup   ti_sdo_ce_Server     Codec Engine Server Interface
+ */
+#ifndef ti_sdo_ce_ServerDefs_
+#define ti_sdo_ce_ServerDefs_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ *  @brief      Opaque handle to the server for an engine.
+ */
+typedef struct Server_Obj *Server_Handle;
+
+
+/*@}*/  /* ingroup */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*
+ *  @(#) ti.sdo.ce; 1, 0, 6,3; 6-13-2013 00:10:03; /db/atree/library/trees/ce/ce-w08/src/ xlibrary
+
+ */
+
diff --git a/packages/codec_engine/ti/sdo/ce/ipc/Comm.h b/packages/codec_engine/ti/sdo/ce/ipc/Comm.h
new file mode 100644 (file)
index 0000000..2e3877c
--- /dev/null
@@ -0,0 +1,235 @@
+/*
+ *  Copyright 2013 by Texas Instruments Incorporated.
+ *
+ */
+
+/*
+ * Copyright (c) 2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+/*
+ *  ======== Comm.h ========
+ */
+#ifndef ti_sdo_ce_ipc_Comm_
+#define ti_sdo_ce_ipc_Comm_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief       Name to pass to Diags_setMask() to enable logging for Comm
+ *              functions. For example,
+ *                  Diags_setMask(Comm_MODNAME"+EX1234567");
+ *              turns on all Log statements in this module.
+ *              Diags_setMask() must be called after initialization to take
+ *              effect.
+ */
+#define Comm_MODNAME "ti.sdo.ce.ipc.Comm"
+
+#define Comm_GTNAME "OC"
+
+/*
+ *  ======== Comm_MSGSIZE ========
+ *  Maximum size of communication buffers, defined by the configuration
+ *  parameter in Global.xdc.
+ */
+extern UInt32 Comm_MSGSIZE;
+
+typedef UInt32 Comm_Id;
+
+/*
+ *  ======== Comm_Handle ========
+ */
+typedef struct Comm_Obj *Comm_Handle;
+
+/*
+ *  ======== Comm_QType ========
+ */
+typedef enum {
+    Comm_PEND,
+    Comm_CALL
+} Comm_QType;
+
+/*
+ *  ======== Comm_CallFxn ========
+ */
+typedef Void (*Comm_CallFxn)(Ptr callHandle);
+
+/*
+ *  ======== Comm_Attrs ========
+ */
+typedef struct Comm_Attrs {
+    Comm_QType      type;
+    Ptr             callHandle;
+    Comm_CallFxn    callFxn;
+} Comm_Attrs;
+
+extern Comm_Attrs Comm_ATTRS;   /* default attrs */
+
+/*
+ *  ======== Comm_MsgHeader ========
+ * Comm header must be defined, but its fields are irrelevant for the user
+ * Note: this header must be larger than all underlying msgq implementations
+ * (which require a header to maintain message control/transport information)
+ */
+typedef struct Comm_MsgHeader {
+    UInt32 reserved[2]; /* reserved[0] doubles as "next" in the linked list */
+    UInt32 size;        /* UInt32 msgSize; */
+    UInt16 reserved1;   /* UInt16 flags; */
+    UInt16 msgId;       /* UInt16 msgId; */
+    UInt16 reserved3;   /* UInt16 dstId; */
+    UInt16 reserved4;   /* UInt16 dstProc; */
+    UInt16 reserved5;   /* UInt16 replyId; */
+    UInt16 reserved6;   /* UInt16 replyProc; */
+    UInt16 reserved7;   /* UInt16 srcProc; */
+    UInt16 reserved8;   /* UInt16 heapId; */
+    UInt16 reserved9;   /* UInt16 seqNum; */
+    UInt32 reserved10;  /* UInt32 reserved; */
+} Comm_MsgHeader, *Comm_Msg;
+
+/*
+ *  ======== Comm_INVALIDMSGQ ========
+ */
+#define Comm_INVALIDMSGQ    0xFFFF
+#define Comm_INVALIDHANDLE  NULL
+
+/*
+ *  ======== error status codes ========
+ */
+#define Comm_EOK            0
+#define Comm_EFAIL          1
+#define Comm_ETIMEOUT       2
+
+/*
+ *  ======== timeout values ========
+ */
+#define Comm_FOREVER        ((UInt)-1)
+#define Comm_POLL           ((UInt)0)
+
+/*
+ *  ======== Comm_locate ========
+ *  Locate an existing communication queue
+ */
+extern Int Comm_locate(String queueName, Comm_Id *msgqId);
+
+/*
+ *  ======== Comm_alloc ========
+ *  Allocate a message that can be sent to a communication queue
+ */
+extern Int Comm_alloc(UInt16 poolId, Comm_Msg *msg, UInt16 size);
+
+/*
+ *  ======== Comm_free ========
+ *  Free a previously allocated (Comm_alloc) message
+ */
+extern Int Comm_free(Comm_Msg msg);
+
+/*
+ *  ======== Comm_put ========
+ *  Send message to specified communication queue
+ */
+extern Int Comm_put(Comm_Id msgqId, Comm_Msg msg);
+
+/*
+ *  ======== Comm_get ========
+ *  Recieve a message from the specified queue
+ */
+extern Int Comm_get(Comm_Handle comm, Comm_Msg *msg, UInt timeout);
+
+/*
+ *  ======== Comm_getMsgSize ========
+ *  Get size of the specified message
+ */
+extern Int Comm_getMsgSize(Comm_Msg msg);
+
+/*
+ *  ======== Comm_getSrcQueue ========
+ *  Get id of sender queue from message
+ */
+extern Int Comm_getSendersId(Comm_Msg msg, Comm_Id *msgqId);
+
+/*
+ *  ======== Comm_getId ========
+ *  Get MessageQ_QueueId from MessageQ_Handle
+ */
+extern Comm_Id Comm_getId(Comm_Handle comm);
+
+/*
+ *  ======== Comm_staticMsgInit ========
+ *  Initialize fields of a static Comm_Msg.
+ */
+extern Void Comm_staticMsgInit(Comm_Msg msg, UInt32 size);
+
+/*
+ *  ======== Comm_setSrcQueue ========
+ *  Put id of sender queue into message
+ */
+extern Void Comm_setReplyToHandle(Comm_Msg msg, Comm_Handle comm);
+
+/*
+ *  ======== Comm_create ========
+ *  Create a new communication queue
+ */
+extern Comm_Handle Comm_create(String queueName, Comm_Attrs *myAttrs);
+
+/*
+ *  ======== Comm_delete ========
+ *  its evil twin, the delete() function
+ */
+extern Void Comm_delete(Comm_Handle msgq);
+
+/*
+ *  ======== Comm_init ========
+ */
+extern Bool Comm_init(Void);
+
+/*
+ *  ======== Comm_exit ========
+ */
+extern Void Comm_exit(Void);
+
+/*
+ *  ======== Comm_release ========
+ */
+extern Int Comm_release(Comm_Id msgqId);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*
+ *  @(#) ti.sdo.ce.ipc; 2, 0, 1,3; 6-13-2013 00:15:57; /db/atree/library/trees/ce/ce-w08/src/ xlibrary
+
+ */
+
diff --git a/packages/codec_engine/ti/sdo/ce/node/node.h b/packages/codec_engine/ti/sdo/ce/node/node.h
new file mode 100644 (file)
index 0000000..b71b9d1
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+ *  Copyright 2013 by Texas Instruments Incorporated.
+ *
+ */
+
+/*
+ * Copyright (c) 2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+/*
+ *  ======== node.h ========
+ *  NODE module definitions.
+ */
+/**
+ *  @file       ti/sdo/ce/node/node.h
+ *
+ *  @brief      The Codec Engine Internal NODE API.
+ */
+/**
+ *  @addtogroup ti_sdo_ce_NODE      CE NODE API
+ */
+
+#ifndef ti_sdo_ce_node_NODE_
+#define ti_sdo_ce_node_NODE_
+
+#include <ti/sdo/ce/ipc/Comm.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @ingroup    ti_sdo_ce_NODE */
+/*@{*/
+
+/** @cond INTERNAL */
+
+#define NODE_FOREVER    (UInt)-1     /* infinite timeout (Comm_FOREVER) */
+#define NODE_TOGPP 0                /* GPP is the destination for message */
+
+typedef struct NODE_Obj *NODE_EnvPtr;   /* pointer to a node's environment */
+
+typedef struct NODE_Config {
+    Int OBJSEG;         /* allocate node instances from this MEM seg id */
+    Int MSGQPOOLID;     /* Segment to allocate message frames */
+    Int FIXEDMSGSIZE;   /* if >0, size NODE must use with Comm_alloc */
+} NODE_Config;
+
+extern NODE_Config *NODE;
+
+/*
+ *  ======== NODE_Cmd ========
+ */
+typedef struct NODE_Cmd {
+    Int     id;
+    UArg    arg1;
+    UArg    arg2;
+} NODE_Cmd;
+
+#define NODE_CCALL  0   /* "normal" call command id */
+#define NODE_CEXIT  1   /* exit command id */
+
+/*
+ *  ======== NODE_MsgHeader ========
+ */
+typedef struct NODE_MsgHeader {
+    Comm_MsgHeader header;
+    NODE_Cmd       cmd;
+} NODE_MsgHeader;
+
+/*
+ *  ======== NODE_Msg ========
+ */
+typedef struct NODE_MsgHeader *NODE_Msg;
+
+/**
+ *  @brief      NODE error code
+ */
+typedef Int NODE_Status;
+
+#define NODE_EOK            0   /**< Success. */
+#define NODE_EOUTOFMEMORY   1   /**< Unable to allocate memory. */
+#define NODE_ERESOURCE      2   /**< Unable to obtain a necessary resource. */
+#define NODE_ETASK          3   /**< Unable to create a task. */
+#define NODE_EFAIL          4   /**< General error. */
+
+/* The Node UUID structure */
+typedef struct NODE_Uuid {
+    UInt32 data;
+} NODE_Uuid;
+
+/*
+ *  ======== NODE_allocMsgBuf ========
+ *  Allocate a data buffer whose descriptor will be passed to the GPP within
+ *  a message.
+ *
+ *  Parameters:
+ *    node: Node's environment.
+ *    size:     Size of buffer, in DSP MAUs.
+ *    align:    Buffer alignment.
+ *
+ *  Returns:
+ *    On Success: Address of the allocated buffer.
+ *    On Failure: NULL.
+ *
+ */
+extern Ptr NODE_allocMsgBuf(NODE_EnvPtr node, UInt size, UInt align);
+
+
+/*
+ *  ======== NODE_freeMsgBuf ========
+ *  Free a data buffer previously allocated with NODE_allocMsgBuf.
+ *
+ *  Parameters:
+ *    node: Node's environment.
+ *    addr:     Address of the data buffer.
+ *    size:     Size of the allocated buffer, in DSP MAUs.
+ *
+ *  Returns:
+ *    On Success: TRUE.
+ *    On Failure: FALSE.  A failure occurs when the specified address does
+ *                not reside in the memory segment used for allocations by
+ *        NODE_allocMsgBuf().
+ *
+ */
+extern Bool NODE_freeMsgBuf(NODE_EnvPtr node, Ptr addr, UInt size);
+
+
+/*
+ *  ======== NODE_getPri ========
+ *  Retrieve the task priority of a node.
+ *
+ *  Parameters:
+ *    node:     Node's environment.
+ *
+ *  Returns:
+ *    taksPriority: the task priority set for the node
+ *
+ *  Constraints:
+ *    none
+ *
+ *  Requires:
+ *    node != NULL
+ *
+ */
+extern UInt NODE_getPri(NODE_EnvPtr node);
+
+/*
+ *  ======== NODE_init ========
+ */
+extern Void NODE_init(Void);
+
+/*
+ *  ======== NODE_exit ========
+ */
+extern Void NODE_exit(Void);
+
+/*
+ *  ======== NODE_uuidMatch ========
+ *
+ *  Determine whether a uuid matches another.
+ *
+ */
+static inline Bool NODE_uuidMatch(NODE_Uuid *uuid1, NODE_Uuid *uuid2)
+{
+    return (uuid1->data == uuid2->data);
+}
+
+/** @endcond */
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*
+ *  @(#) ti.sdo.ce.node; 1, 0, 0,3; 6-13-2013 00:16:28; /db/atree/library/trees/ce/ce-w08/src/ xlibrary
+
+ */
+
diff --git a/packages/codec_engine/ti/sdo/ce/skel.h b/packages/codec_engine/ti/sdo/ce/skel.h
new file mode 100644 (file)
index 0000000..58cde54
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ *  Copyright 2013 by Texas Instruments Incorporated.
+ *
+ */
+
+/*
+ * Copyright (c) 2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+/*
+ *  ======== skel.h ========
+ */
+/**
+ *  @file       ti/sdo/ce/skel.h
+ *
+ *  @brief      The Codec Engine System Programming Interface (SPI) for
+ *              skeleton developers.
+ */
+/**
+ *  @addtogroup ti_sdo_ce_SKEL      CE Skeleton SPI
+ */
+
+#ifndef ti_sdo_ce_SKEL_
+#define ti_sdo_ce_SKEL_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ti/sdo/ce/visa.h>
+
+/** @ingroup    ti_sdo_ce_SKEL */
+/*@{*/
+
+/**
+ *  @brief  Prototype for a skeleton's call() implementation
+ *
+ *  @param[in]      handle  A handle to the current skeleton.
+ *  @param[in]      msg     A message sent by the algorithm's stub
+ */
+typedef VISA_Status (*SKEL_CALLFXN)(VISA_Handle handle, VISA_Msg msg);
+
+/**
+ *  @brief  Prototype for a skeleton's create() API.
+ *
+ *  @param[in]      reserved    Reserved.
+ *  @param[in]      name        Name of the algorithm to create.
+ *  @param[in]      params      Creation parameters for the algorithm.
+ *
+ *  @retval         NULL        Error, unable to create the algorithm.
+ *  @retval         non-NULL    Handle to the successfully created algorithm.
+ */
+typedef VISA_Handle (*SKEL_CREATEFXN)(Void *reserved, String name,
+    Void *params);
+
+/**
+ *  @brief  Prototype for a skeleton's destroy() API.
+ *
+ *  @param[in]      handle  A handle to the current skeleton.
+ *  @param[in]      msg     A message sent by the algorithm's stub
+ */
+typedef Void (*SKEL_DESTROYFXN)(VISA_Handle handle);
+
+
+/*
+ *  ======== SKEL_Fxns ========
+ */
+/**
+ *  @brief      Table of functions defining the interface of a skeleton.
+ */
+typedef struct SKEL_Fxns {
+    SKEL_CALLFXN    call;       /**< A skeleton's "call" implementation. */
+    SKEL_CREATEFXN  apiCreate;  /**< A skeleton's "create" API. */
+    SKEL_DESTROYFXN apiDestroy; /**< A skeleton's "destroy" API. */
+} SKEL_Fxns;
+
+/** @cond INTERNAL */
+
+/**
+ *  @brief      Cache policies for managing i/o buffers.
+ */
+#define SKEL_LOCALBUFFERINVWB 0
+#define SKEL_WBINVALL         1
+#define SKEL_CACHENONE        2
+
+/**
+ *  @brief    Cache policy that will be used by all skeletons for managing
+ *            i/o buffers. This is auto-generated by Server.xdt.
+ */
+extern Int ti_sdo_ce_Server_skelCachingPolicy;
+
+#define SKEL_cachingPolicy ti_sdo_ce_Server_skelCachingPolicy
+
+
+/** @endcond */
+
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SKEL_ */
+/*
+ *  @(#) ti.sdo.ce; 1, 0, 6,3; 6-13-2013 00:10:04; /db/atree/library/trees/ce/ce-w08/src/ xlibrary
+
+ */
+
diff --git a/packages/codec_engine/ti/sdo/ce/video2/videnc2.h b/packages/codec_engine/ti/sdo/ce/video2/videnc2.h
new file mode 100644 (file)
index 0000000..9f4041c
--- /dev/null
@@ -0,0 +1,401 @@
+/*
+ *  Copyright 2013 by Texas Instruments Incorporated.
+ *
+ */
+
+/*
+ * Copyright (c) 2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+/*
+ *  ======== videnc2.h ========
+ */
+/**
+ *  @file       ti/sdo/ce/video2/videnc2.h
+ *
+ *  @brief      The VIDENC2 video encoder interface.  Provides the user an
+ *              interface to create and interact with XDAIS algorithms that are
+ *              compliant with the XDM-defined IVIDENC2 video encoder
+ *              interface.
+ */
+/**
+ *  @defgroup   ti_sdo_ce_video2_VIDENC2    VIDENC2 - Video Encoder Interface
+ *
+ *  This is the VIDENC2 video encoder interface.  Several of the data
+ *  types in this API are specified by the XDM IVIDENC2 interface; please see
+ *  the XDM documentation for those details.
+ */
+
+#ifndef ti_sdo_ce_video2_VIDENC2_
+#define ti_sdo_ce_video2_VIDENC2_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ti/xdais/dm/xdm.h>
+#include <ti/xdais/dm/ividenc2.h>
+
+#include <ti/sdo/ce/Engine.h>
+#include <ti/sdo/ce/visa.h>
+#include <ti/sdo/ce/skel.h>
+
+/** @ingroup    ti_sdo_ce_video2_VIDENC2 */
+/*@{*/
+
+#define VIDENC2_EOK      IVIDENC2_EOK         /**< @copydoc IVIDENC2_EOK */
+#define VIDENC2_EFAIL    IVIDENC2_EFAIL       /**< @copydoc IVIDENC2_EFAIL */
+
+/** @copydoc IVIDENC2_EUNSUPPORTED */
+#define VIDENC2_EUNSUPPORTED IVIDENC2_EUNSUPPORTED
+
+#define VIDENC2_ETIMEOUT VISA_ETIMEOUT       /**< @copydoc VISA_ETIMEOUT */
+#define VIDENC2_FOREVER  VISA_FOREVER        /**< @copydoc VISA_FOREVER */
+
+
+/**
+ *  @brief      The VISA type
+ */
+#define VIDENC2_VISATYPE "ti.sdo.ce.video2.IVIDENC2"
+
+/**
+ *  @brief      Name of stub functions. Use this name when registering the
+ *              VIDENC2_STUBS functions with Engine_addStubFxns.
+ *
+ *  @sa         Engine_addStubFxns
+ */
+#define VIDENC2_STUBSNAME "VIDENC2_STUBS"
+
+
+/**
+ *  @brief      Opaque handle to a VIDENC2 codec.
+ */
+typedef VISA_Handle VIDENC2_Handle;
+
+/* The following are just wrapper typedefs */
+
+/** @copydoc IVIDENC2_Params */
+typedef struct IVIDENC2_Params VIDENC2_Params;
+
+/** @copydoc IVIDENC2_InArgs */
+typedef IVIDENC2_InArgs VIDENC2_InArgs;
+
+/** @copydoc IVIDENC2_OutArgs */
+typedef IVIDENC2_OutArgs VIDENC2_OutArgs;
+
+/** @copydoc IVIDENC2_Cmd */
+typedef IVIDENC2_Cmd VIDENC2_Cmd;
+
+/** @copydoc IVIDENC2_DynamicParams */
+typedef IVIDENC2_DynamicParams VIDENC2_DynamicParams;
+
+/** @copydoc IVIDENC2_Status */
+typedef IVIDENC2_Status VIDENC2_Status;
+
+/** @cond INTERNAL */
+
+/**
+ *  @brief      An implementation of the skel interface; the skeleton side
+ *              of the stubs.
+ */
+extern SKEL_Fxns VIDENC2_SKEL;
+
+/**
+ *  @brief      Implementation of the IVIDENC interface that is run remotely.
+ */
+extern IVIDENC2_Fxns VIDENC2_STUBS;
+
+/** @endcond */
+
+/**
+ *  @brief      Definition of IVIDENC2 codec class configurable parameters
+ *
+ *  @sa         VISA_getCodecClassConfig()
+ */
+typedef struct IVIDENC2_CodecClassConfig {
+    Bool manageInBufsPlaneDescCache[IVIDEO_MAX_NUM_PLANES];
+    Bool manageInBufsMetaPlaneDescCache[IVIDEO_MAX_NUM_METADATA_PLANES];
+    Bool manageOutBufsCache[XDM_MAX_IO_BUFFERS];
+} IVIDENC2_CodecClassConfig;
+
+
+/*
+ *  ======== VIDENC2_control ========
+ */
+/**
+ *  @brief      Execute the control() method in this instance of a video
+ *              encoder algorithm.
+ *
+ *  @param[in]  handle  Handle to a created video encoder instance.
+ *  @param[in]  id      Command id for XDM control operation.
+ *  @param[in]  params  Runtime control parameters used for encoding.
+ *  @param[out] status  Status info upon completion of encode operation.
+ *
+ *  @pre        @c handle is a valid (non-NULL) video encoder handle
+ *              and the video encoder is in the created state.
+ *
+ *  @retval     #VIDENC2_EOK         Success.
+ *  @retval     #VIDENC2_EFAIL       Failure.
+ *  @retval     #VIDENC2_EUNSUPPORTED    The requested operation
+ *                                       is not supported.
+ *
+ *  @remark     This is a blocking call, and will return after the control
+ *              command has been executed.
+ *
+ *  @remark     If an error is returned, @c status->extendedError may
+ *              indicate further details about the error.  See
+ *              #VIDENC2_Status::extendedError for details.
+ *
+ *  @sa         VIDENC2_create()
+ *  @sa         VIDENC2_delete()
+ *  @sa         IVIDENC2_Fxns::process()
+ */
+extern Int32 VIDENC2_control(VIDENC2_Handle handle, VIDENC2_Cmd id,
+        VIDENC2_DynamicParams *params, VIDENC2_Status *status);
+
+
+/*
+ *  ======== VIDENC2_create ========
+ */
+/**
+ *  @brief      Create an instance of a video encoder algorithm.
+ *
+ *  Instance handles must not be concurrently accessed by multiple threads;
+ *  each thread must either obtain its own handle (via VIDENC2_create()) or
+ *  explicitly serialize access to a shared handle.
+ *
+ *  @param[in]  e       Handle to an opened engine.
+ *  @param[in]  name    String identifier of the type of video encoder
+ *                      to create.
+ *  @param[in]  params  Creation parameters.
+ *
+ *  @retval     NULL            An error has occurred.
+ *  @retval     non-NULL        The handle to the newly created video encoder
+ *                              instance.
+ *
+ *  @remarks    @c params is optional.  If it's not supplied, codec-specific
+ *              default params will be used.
+ *
+ *  @remark     Depending on the configuration of the engine opened, this
+ *              call may create a local or remote instance of the video
+ *              encoder.
+ *
+ *  @codecNameRemark
+ *
+ *  @sa         Engine_open()
+ *  @sa         VIDENC2_delete()
+ */
+extern VIDENC2_Handle VIDENC2_create(Engine_Handle e, String name,
+    VIDENC2_Params *params);
+
+
+/*
+ *  ======== VIDENC2_delete ========
+ */
+/**
+ *  @brief      Delete the instance of a video encoder algorithm.
+ *
+ *  @param[in]  handle  Handle to a created video encoder instance.
+ *
+ *  @remark     Depending on the configuration of the engine opened, this
+ *              call may delete a local or remote instance of the video
+ *              encoder.
+ *
+ *  @pre        @c handle is a valid (non-NULL) handle which is
+ *              in the created state.
+ *
+ *  @post       All resources allocated as part of the VIDENC2_create()
+ *              operation (memory, DMA channels, etc.) are freed.
+ *
+ *  @sa         VIDENC2_create()
+ */
+extern Void VIDENC2_delete(VIDENC2_Handle handle);
+
+
+/*
+ *  ======== VIDENC2_process ========
+ */
+/**
+ *  @brief      Execute the process() method in this instance of a video
+ *              encoder algorithm.
+ *
+ *  @param[in]  handle  Handle to a created video encoder instance.
+ *  @param[in]  inBufs  A buffer descriptor containing input buffers.
+ *  @param[out] outBufs A buffer descriptor containing output buffers.
+ *  @param[in]  inArgs  Input Arguments.
+ *  @param[out] outArgs Output Arguments.
+ *
+ *  @pre        @c handle is a valid (non-NULL) video encoder handle
+ *              and the video encoder is in the created state.
+ *
+ *  @retval     #VIDENC2_EOK         Success.
+ *  @retval     #VIDENC2_EFAIL       Failure.
+ *  @retval     #VIDENC2_EUNSUPPORTED    The requested operation
+ *                                       is not supported.
+ *
+ *  @remark     Since the VIDENC2 decoder contains support for asynchronous
+ *              buffer submission and retrieval, this API becomes known as
+ *              synchronous in nature.
+ *
+ *  @remark     This is a blocking call, and will return after the data
+ *              has been encoded.
+ *
+ *  @remark     The buffers supplied to VIDENC2_process() may have constraints
+ *              put on them.  For example, in dual-processor, shared memory
+ *              architectures, where the codec is running on a remote
+ *              processor, the buffers may need to be physically contiguous.
+ *              Additionally, the remote processor may place restrictions on
+ *              buffer alignment.
+ *
+ *  @remark     If an error is returned, @c outArgs->extendedError may
+ *              indicate further details about the error.  See
+ *              #VIDENC2_OutArgs::extendedError for details.
+ *
+ *  @sa         VIDENC2_create()
+ *  @sa         VIDENC2_delete()
+ *  @sa         VIDENC2_control()
+ *  @sa         VIDENC2_processAsync()
+ *  @sa         VIDENC2_processWait()
+ *  @sa         IVIDENC2_Fxns::process() - the reflected algorithm interface,
+ *                                         which may contain further usage
+ *                                         details.
+ */
+extern Int32 VIDENC2_process(VIDENC2_Handle handle, IVIDEO2_BufDesc *inBufs,
+        XDM2_BufDesc *outBufs, VIDENC2_InArgs *inArgs,
+        VIDENC2_OutArgs *outArgs);
+
+
+/*
+ *  ======== VIDENC2_processAsync ========
+ */
+/**
+ *  @brief      Perform asynchronous submission to this instance of a video
+ *              decoder algorithm.
+ *
+ *  @param[in]  handle  Handle to a created video decoder instance.
+ *  @param[in]  inBufs  A buffer descriptor containing input buffers.
+ *  @param[out] outBufs A buffer descriptor containing output buffers.
+ *  @param[in]  inArgs  Input Arguments.
+ *  @param[out] outArgs Output Arguments.
+ *
+ *  @pre        @c handle is a valid (non-NULL) video decoder handle
+ *              and the video decoder is in the created state.
+ *
+ *  @retval     #VIDENC2_EOK         Success.
+ *  @retval     #VIDENC2_EFAIL       Failure.
+ *  @retval     #VIDENC2_EUNSUPPORTED Unsupported request.
+ *
+ *  @remark     This API is the asynchronous counterpart to the process()
+ *              method.  It allows for buffer and argument submission without
+ *              waiting for retrieval.  A response is retrieved using the
+ *              VIDENC2_processWait() API.
+ *
+ *  @remark     The buffers supplied to VIDENC2_processAsync() may have
+ *              constraints put on them.  For example, in dual-processor,
+ *              shared memory architectures, where the codec is running on a
+ *              remote processor, the buffers may need to be physically
+ *              contiguous.  Additionally, the remote processor may place
+ *              restrictions on buffer alignment.
+ *
+ *  @sa         VIDENC2_create()
+ *  @sa         VIDENC2_delete()
+ *  @sa         VIDENC2_control()
+ *  @sa         VIDENC2_process()
+ *  @sa         VIDENC2_processWait()
+ *  @sa         IVIDENC2_Fxns::process()
+ */
+extern XDAS_Int32 VIDENC2_processAsync(VIDENC2_Handle handle,
+        IVIDEO2_BufDesc *inBufs, XDM2_BufDesc *outBufs,
+        IVIDENC2_InArgs *inArgs, IVIDENC2_OutArgs *outArgs);
+
+
+/*
+ *  ======== VIDENC2_processWait ========
+ */
+/**
+ *  @brief      Wait for a return message from a previous invocation of
+ *              VIDENC2_processAsync() in this instance of an video decoder
+ *              algorithm.
+ *
+ *  @param[in]  handle  Handle to a created video decoder instance.
+ *  @param[in]  inBufs  A buffer descriptor containing input buffers.
+ *  @param[out] outBufs A buffer descriptor containing output buffers.
+ *  @param[in]  inArgs  Input Arguments.
+ *  @param[out] outArgs Output Arguments.
+ *  @param[in]  timeout Amount of "time" to wait (from 0 -> #VIDENC2_FOREVER)
+ *
+ *  @pre        @c handle is a valid (non-NULL) video decoder handle
+ *              and the video decoder is in the created state.
+ *
+ *  @retval     #VIDENC2_EOK         Success.
+ *  @retval     #VIDENC2_EFAIL       Failure.
+ *  @retval     #VIDENC2_EUNSUPPORTED Unsupported request.
+ *  @retval     #VIDENC2_ETIMEOUT    Operation timed out.
+ *
+ *  @remark     This is a blocking call, and will return after the data
+ *              has been decoded.
+ *
+ *  @remark     "Polling" is supported by using a timeout of 0.  Waiting
+ *              forever is supported by using a timeout of #VIDENC2_FOREVER.
+ *
+ *  @remark     There must have previously been an invocation of the
+ *              VIDENC2_processAsync() API.
+ *
+ *  @remark     The buffers supplied to VIDENC2_processAsync() may have
+ *              constraints put on them.  For example, in dual-processor,
+ *              shared memory architectures, where the codec is running on a
+ *              remote processor, the buffers may need to be physically
+ *              contiguous.  Additionally, the remote processor may place
+ *              restrictions on buffer alignment.
+ *
+ *  @sa         VIDENC2_create()
+ *  @sa         VIDENC2_delete()
+ *  @sa         VIDENC2_control()
+ *  @sa         VIDENC2_process()
+ *  @sa         VIDENC2_processAsync()
+ */
+extern XDAS_Int32 VIDENC2_processWait(VIDENC2_Handle handle,
+        IVIDEO2_BufDesc *inBufs, XDM2_BufDesc *outBufs, IVIDENC2_InArgs *inArgs,
+        IVIDENC2_OutArgs *outArgs, UInt timeout);
+
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*
+ *  @(#) ti.sdo.ce.video2; 1, 0, 3,3; 6-13-2013 00:20:38; /db/atree/library/trees/ce/ce-w08/src/ xlibrary
+
+ */
+
diff --git a/packages/codec_engine/ti/sdo/ce/video3/viddec3.h b/packages/codec_engine/ti/sdo/ce/video3/viddec3.h
new file mode 100644 (file)
index 0000000..0272755
--- /dev/null
@@ -0,0 +1,396 @@
+/*
+ *  Copyright 2013 by Texas Instruments Incorporated.
+ *
+ */
+
+/*
+ * Copyright (c) 2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+/*
+ *  ======== viddec3.h ========
+ */
+/**
+ *  @file       ti/sdo/ce/video3/viddec3.h
+ *
+ *  @brief      The VIDDEC3 video decoder interface.  Provides the user an
+ *              interface to create and interact with XDAIS algorithms that are
+ *              compliant with the XDM-defined IVIDDEC3 video decoder
+ *              interface.
+ */
+/**
+ *  @defgroup   ti_sdo_ce_video3_VIDDEC3 VIDDEC3 - Video Decoder Interface
+ *
+ *  This is the VIDDEC3 video decoder interface.  Several of the data
+ *  types in this API are specified by the XDM IVIDDEC3 interface; please see
+ *  the XDM documentation for those details.
+ */
+
+#ifndef ti_sdo_ce_video3_VIDDEC3_
+#define ti_sdo_ce_video3_VIDDEC3_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ti/xdais/dm/xdm.h>
+#include <ti/xdais/dm/ividdec3.h>
+
+#include <ti/sdo/ce/Engine.h>
+#include <ti/sdo/ce/visa.h>
+#include <ti/sdo/ce/skel.h>
+
+/** @ingroup    ti_sdo_ce_video3_VIDDEC3 */
+/*@{*/
+
+#define VIDDEC3_EOK      IVIDDEC3_EOK         /**< @copydoc IVIDDEC3_EOK */
+#define VIDDEC3_EFAIL    IVIDDEC3_EFAIL       /**< @copydoc IVIDDEC3_EFAIL */
+
+/**< @copydoc IVIDDEC3_EUNSUPPORTED */
+#define VIDDEC3_EUNSUPPORTED IVIDDEC3_EUNSUPPORTED
+
+#define VIDDEC3_ETIMEOUT VISA_ETIMEOUT        /**< @copydoc VISA_ETIMEOUT */
+#define VIDDEC3_FOREVER  VISA_FOREVER         /**< @copydoc VISA_FOREVER */
+
+/**
+ *  @brief      The VISA type
+ */
+#define VIDDEC3_VISATYPE "ti.sdo.ce.video3.IVIDDEC3"
+
+/**
+ *  @brief      Name of stub functions. Use this name when registering the
+ *              VIDDEC3_STUBS functions with Engine_addStubFxns.
+ *
+ *  @sa         Engine_addStubFxns
+ */
+#define VIDDEC3_STUBSNAME "VIDDEC3_STUBS"
+
+
+/**
+ *  @brief      Opaque handle to a VIDDEC3 codec.
+ */
+typedef VISA_Handle VIDDEC3_Handle;
+
+/** @copydoc IVIDDEC3_Params */
+typedef struct IVIDDEC3_Params VIDDEC3_Params;
+
+/** @copydoc IVIDDEC3_InArgs */
+typedef IVIDDEC3_InArgs VIDDEC3_InArgs;
+
+/** @copydoc IVIDDEC3_OutArgs */
+typedef IVIDDEC3_OutArgs VIDDEC3_OutArgs;
+
+/** @copydoc IVIDDEC3_Cmd */
+typedef IVIDDEC3_Cmd VIDDEC3_Cmd;
+
+/** @copydoc IVIDDEC3_DynamicParams */
+typedef IVIDDEC3_DynamicParams   VIDDEC3_DynamicParams;
+
+/** @copydoc IVIDDEC3_Status */
+typedef IVIDDEC3_Status VIDDEC3_Status;
+
+
+/** @cond INTERNAL */
+
+/**
+ *  @brief      An implementation of the skel interface; the skeleton side
+ *              of the stubs.
+ */
+extern SKEL_Fxns VIDDEC3_SKEL;
+
+/**
+ *  @brief      Implementation of the IVIDDEC3 interface that is run remotely.
+ */
+extern IVIDDEC3_Fxns VIDDEC3_STUBS;
+
+/** @endcond */
+
+/**
+ *  @brief      Definition of IVIDDEC3 codec class configurable parameters
+ *
+ *  @sa         VISA_getCodecClassConfig()
+ */
+typedef struct IVIDDEC3_CodecClassConfig {
+    Bool manageInBufsCache     [ XDM_MAX_IO_BUFFERS ];
+    Bool manageOutBufsCache    [ XDM_MAX_IO_BUFFERS ];
+} IVIDDEC3_CodecClassConfig;
+
+
+/*
+ *  ======== VIDDEC3_control ========
+ */
+/**
+ *  @brief      Execute the control() method in this instance of a video
+ *              decoder algorithm.
+ *
+ *  @param[in]  handle  Handle to a created video decoder instance.
+ *  @param[in]  id      Command id for XDM control operation.
+ *  @param[in]  params  Runtime control parameters used for decoding.
+ *  @param[out] status  Status info upon completion of decode operation.
+ *
+ *  @pre        @c handle is a valid (non-NULL) video decoder handle
+ *              and the video decoder is in the created state.
+ *
+ *  @retval     #VIDDEC3_EOK         Success.
+ *  @retval     #VIDDEC3_EFAIL       Failure.
+ *  @retval     #VIDDEC3_EUNSUPPORTED Unsupported request.
+ *
+ *  @remark     This is a blocking call, and will return after the control
+ *              command has been executed.
+ *
+ *  @remark     If an error is returned, @c status->extendedError may
+ *              indicate further details about the error.  See #XDM_ErrorBit
+ *              for details.
+ *
+ *  @sa         VIDDEC3_create()
+ *  @sa         VIDDEC3_delete()
+ *  @sa         IVIDDEC3_Fxns::process()
+ */
+extern Int32 VIDDEC3_control(VIDDEC3_Handle handle, VIDDEC3_Cmd id,
+    VIDDEC3_DynamicParams *params, VIDDEC3_Status *status);
+
+
+/*
+ *  ======== VIDDEC3_create ========
+ */
+/**
+ *  @brief      Create an instance of a video decoder algorithm.
+ *
+ *  Instance handles must not be concurrently accessed by multiple threads;
+ *  each thread must either obtain its own handle (via VIDDEC3_create) or
+ *  explicitly serialize access to a shared handle.
+ *
+ *  @param[in]  e       Handle to an opened engine.
+ *  @param[in]  name    String identifier of the type of video decoder
+ *                      to create.
+ *  @param[in]  params  Creation parameters.
+ *
+ *  @retval     NULL            An error has occurred.
+ *  @retval     non-NULL        The handle to the newly created video decoder
+ *                              instance.
+ *
+ *  @remark     @c params is optional.  If it's not supplied, codec-specific
+ *              default params will be used.
+ *
+ *  @remark     Depending on the configuration of the engine opened, this
+ *              call may create a local or remote instance of the video
+ *              decoder.
+ *
+ *  @codecNameRemark
+ *
+ *  @sa         Engine_open()
+ *  @sa         VIDENC3_delete()
+ */
+extern VIDDEC3_Handle VIDDEC3_create(Engine_Handle e, String name,
+    VIDDEC3_Params *params);
+
+
+/*
+ *  ======== VIDDEC3_delete ========
+ */
+/**
+ *  @brief      Delete the instance of a video decoder algorithm.
+ *
+ *  @param[in]  handle  Handle to a created video decoder instance.
+ *
+ *  @remark     Depending on the configuration of the engine opened, this
+ *              call may delete a local or remote instance of the video
+ *              decoder.
+ *
+ *  @pre        @c handle is a valid (non-NULL) handle which is
+ *              in the created state.
+ *
+ *  @post       All resources allocated as part of the VIDDEC3_create()
+ *              operation (memory, DMA channels, etc.) are freed.
+ *
+ *  @sa         VIDDEC3_create()
+ */
+extern Void VIDDEC3_delete(VIDDEC3_Handle handle);
+
+
+/*
+ *  ======== VIDDEC3_process ========
+ */
+/**
+ *  @brief      Execute the process() method in this instance of a video
+ *              decoder algorithm.
+ *
+ *  @param[in]  handle  Handle to a created video decoder instance.
+ *  @param[in]  inBufs  A buffer descriptor containing input buffers.
+ *  @param[out] outBufs A buffer descriptor containing output buffers.
+ *  @param[in]  inArgs  Input Arguments.
+ *  @param[out] outArgs Output Arguments.
+ *
+ *  @pre        @c handle is a valid (non-NULL) video decoder handle
+ *              and the video decoder is in the created state.
+ *
+ *  @retval     #VIDDEC3_EOK         Success.
+ *  @retval     #VIDDEC3_EFAIL       Failure.
+ *  @retval     #VIDDEC3_EUNSUPPORTED Unsupported request.
+ *
+ *  @remark     Since the VIDDEC3 decoder contains support for asynchronous
+ *              buffer submission and retrieval, this API becomes known as
+ *              synchronous in nature.
+ *
+ *  @remark     This is a blocking call, and will return after the data
+ *              has been decoded.
+ *
+ *  @remark     The buffers supplied to VIDDEC3_process() may have constraints
+ *              put on them.  For example, in dual-processor, shared memory
+ *              architectures, where the codec is running on a remote
+ *              processor, the buffers may need to be physically contiguous.
+ *              Additionally, the remote processor may place restrictions on
+ *              buffer alignment.
+ *
+ *  @remark     If an error is returned, @c outArgs->extendedError may
+ *              indicate further details about the error.  See #XDM_ErrorBit
+ *              for details.
+ *
+ *  @sa         VIDDEC3_create()
+ *  @sa         VIDDEC3_delete()
+ *  @sa         VIDDEC3_control()
+ *  @sa         VIDDEC3_processAsync()
+ *  @sa         VIDDEC3_processWait()
+ *  @sa         IVIDDEC3_Fxns::process()
+ */
+extern Int32 VIDDEC3_process(VIDDEC3_Handle handle, XDM2_BufDesc *inBufs,
+    XDM2_BufDesc *outBufs, VIDDEC3_InArgs *inArgs, VIDDEC3_OutArgs *outArgs);
+
+
+#if 0 /* async not yet supported */
+
+/*
+ *  ======== VIDDEC3_processAsync ========
+ */
+/**
+ *  @brief      Perform asynchronous submission to this instance of a video
+ *              decoder algorithm.
+ *
+ *  @param[in]  handle  Handle to a created video decoder instance.
+ *  @param[in]  inBufs  A buffer descriptor containing input buffers.
+ *  @param[out] outBufs A buffer descriptor containing output buffers.
+ *  @param[in]  inArgs  Input Arguments.
+ *  @param[out] outArgs Output Arguments.
+ *
+ *  @pre        @c handle is a valid (non-NULL) video decoder handle
+ *              and the video decoder is in the created state.
+ *
+ *  @retval     #VIDDEC3_EOK         Success.
+ *  @retval     #VIDDEC3_EFAIL       Failure.
+ *  @retval     #VIDDEC3_EUNSUPPORTED Unsupported request.
+ *
+ *  @remark     This API is the asynchronous counterpart to the process()
+ *              method.  It allows for buffer and argument submission without
+ *              waiting for retrieval.  A response is retrieved using the
+ *              VIDDEC3_processWait() API.
+ *
+ *  @remark     The buffers supplied to VIDDEC3_processAsync() may have
+ *              constraints put on them.  For example, in dual-processor,
+ *              shared memory architectures, where the codec is running on a
+ *              remote processor, the buffers may need to be physically
+ *              contiguous.  Additionally, the remote processor may place
+ *              restrictions on buffer alignment.
+ *
+ *  @sa         VIDDEC3_create()
+ *  @sa         VIDDEC3_delete()
+ *  @sa         VIDDEC3_control()
+ *  @sa         VIDDEC3_process()
+ *  @sa         VIDDEC3_processWait()
+ *  @sa         IVIDDEC3_Fxns::process()
+ */
+extern XDAS_Int32 VIDDEC3_processAsync(VIDDEC3_Handle handle,
+    XDM1_BufDesc *inBufs, XDM_BufDesc *outBufs,
+    VIDDEC3_InArgs *inArgs, VIDDEC3_OutArgs *outArgs);
+
+/*
+ *  ======== VIDDEC3_processWait ========
+ */
+/**
+ *  @brief      Wait for a return message from a previous invocation of
+ *              VIDDEC3_processAsync() in this instance of an video decoder
+ *              algorithm.
+ *
+ *  @param[in]  handle  Handle to a created video decoder instance.
+ *  @param[in]  inBufs  A buffer descriptor containing input buffers.
+ *  @param[out] outBufs A buffer descriptor containing output buffers.
+ *  @param[in]  inArgs  Input Arguments.
+ *  @param[out] outArgs Output Arguments.
+ *  @param[in]  timeout Amount of "time" to wait (from 0 -> VIDDEC3_FOREVER)
+ *
+ *  @pre        @c handle is a valid (non-NULL) video decoder handle
+ *              and the video decoder is in the created state.
+ *
+ *  @retval     #VIDDEC3_EOK         Success.
+ *  @retval     #VIDDEC3_EFAIL       Failure.
+ *  @retval     #VIDDEC3_EUNSUPPORTED Unsupported request.
+ *  @retval     #VIDDEC3_ETIMEOUT    Operation timed out.
+ *
+ *  @remark     This is a blocking call, and will return after the data
+ *              has been decoded.
+ *
+ *  @remark     "Polling" is supported by using a timeout of 0.  Waiting
+ *              forever is supported by using a timeout of VIDDEC3_EFOREVER.
+ *
+ *  @remark     There must have previously been an invocation of the
+ *              VIDDEC3_processAsync() API.
+ *
+ *  @remark     The buffers supplied to VIDDEC3_processAsync() may have
+ *              constraints put on them.  For example, in dual-processor,
+ *              shared memory architectures, where the codec is running on a
+ *              remote processor, the buffers may need to be physically
+ *              contiguous.  Additionally, the remote processor may place
+ *              restrictions on buffer alignment.
+ *
+ *  @sa         VIDDEC3_create()
+ *  @sa         VIDDEC3_delete()
+ *  @sa         VIDDEC3_control()
+ *  @sa         VIDDEC3_process()
+ *  @sa         VIDDEC3_processAsync()
+ */
+extern XDAS_Int32 VIDDEC3_processWait(VIDDEC3_Handle handle,
+    XDM1_BufDesc *inBufs, XDM_BufDesc *outBufs,
+    VIDDEC3_InArgs *inArgs, VIDDEC3_OutArgs *outArgs, UInt timeout);
+
+#endif
+
+
+/*@}*/  /* ingroup */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*
+ *  @(#) ti.sdo.ce.video3; 1, 0, 0,3; 6-13-2013 00:21:02; /db/atree/library/trees/ce/ce-w08/src/ xlibrary
+
+ */
+
diff --git a/packages/codec_engine/ti/sdo/ce/visa.h b/packages/codec_engine/ti/sdo/ce/visa.h
new file mode 100644 (file)
index 0000000..820a734
--- /dev/null
@@ -0,0 +1,690 @@
+/*
+ *  Copyright 2013 by Texas Instruments Incorporated.
+ *
+ */
+
+/*
+ * Copyright (c) 2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+/*
+ *  ======== visa.h ========
+ */
+/**
+ *  @file       ti/sdo/ce/visa.h
+ *
+ *  @brief      The Codec Engine System Programming Interface.  Provides
+ *              system developers with services necessary to implement
+ *              stubs and skeletons.
+ */
+/**
+ *  @addtogroup   ti_sdo_ce_VISA_GEN      VISA - Alg-independent user APIs
+ *
+ *  Codec Engine Algorithm-independent shared definitions and services.
+ */
+/**
+ *  @addtogroup   ti_sdo_ce_VISA_STUB     VISA - CE Stub SPIs
+ *
+ *  Codec Engine System Programming Interface (SPI) for stub implementors.
+ */
+/**
+ *  @addtogroup   ti_sdo_ce_VISA_API      VISA - CE interface SPIs
+ *
+ *  Codec Engine System Programming Interface (SPI) for class interface
+ *  implementors.
+ */
+
+#ifndef ti_sdo_ce_VISA_
+#define ti_sdo_ce_VISA_
+
+#include <stddef.h>     /* for size_t */
+
+#include <ti/sdo/ce/node/node.h>
+#include <ti/xdais/ialg.h>
+#include <ti/sdo/ce/Engine.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ *  @brief      VISA result data type
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ */
+typedef Int VISA_Status;
+
+/**
+ *  @brief      Success.
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ */
+#define VISA_EOK        0
+
+/**
+ *  @brief      Internal runtime error.
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ */
+#define VISA_ERUNTIME   -1
+
+/**
+ *  @brief      General system error.
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ */
+#define VISA_EFAIL     -2
+
+/**
+ *  @brief      The API is not suported for the given system configuration.
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ */
+#define VISA_EUNSUPPORTED  -3
+
+/**
+ *  @brief      Timeout occurred.
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ */
+#define VISA_ETIMEOUT  -100
+
+/**
+ *  @brief      Special value for timeout parameter indicating never timeout.
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ */
+#define VISA_FOREVER Engine_FOREVER
+
+/**
+ * @brief       Name to pass to Diags_setMask() to enable logging for VISA
+ *              functions. For example,
+ *                  Diags_setMask(VISA_MODNAME"+EX1234567");
+ *              turns on all Log statements in this module.
+ *              Diags_setMask() must be called after initialization to take
+ *              effect.
+ */
+#define VISA_MODNAME "ti.sdo.ce.VISA"
+
+/**
+ *  @brief      Opaque handle to a node.
+ */
+typedef struct VISA_Obj *VISA_Handle;
+
+/**
+ *  @brief      VISA message header.
+ *
+ *  @ingroup    ti_sdo_ce_VISA_STUB
+ *
+ *  @remarks    This must be the first field in a message
+ */
+typedef struct VISA_MsgHeader {
+    NODE_MsgHeader  header;
+    Int             cmd;        /**< Command id */
+    VISA_Status     status;     /**< Return status */
+} VISA_MsgHeader;
+
+/*
+ *  ======== VISA_Msg ========
+ */
+typedef VISA_MsgHeader *VISA_Msg;
+
+/*
+ *  ======== VISA_allocMsg ========
+ */
+/**
+ *  @brief      Obtain an algorithm instance's message.
+ *
+ *  @ingroup    ti_sdo_ce_VISA_STUB
+ *
+ *  @param[in]  visa        Handle to an algorithm instance.
+ *
+ *  @retval     NULL        General system error
+ *  @retval     non-NULL    The remote algorithm's message.
+ *
+ *  @remarks    This is typically called by an algorithm class' stub.
+ *
+ *  @sa         VISA_allocMsg()
+ */
+extern VISA_Msg VISA_allocMsg(VISA_Handle visa);
+
+/*
+ *  ======== VISA_call ========
+ */
+/**
+ *  @brief      Invoke the operation specified in the message and wait for
+ *              it to complete.
+ *
+ *  @ingroup    ti_sdo_ce_VISA_STUB
+ *
+ *  @param[in]  visa    Handle to an algorithm instance.
+ *  @param[out] msg     The remote algorithm's message,
+ *                          to be sent to the skeleton.
+ *
+ *  @remarks    This is typically called by an algorithm class' stub.
+ *
+ *  @retval         VISA_EOK        Success
+ *  @retval         VISA_ERUNTIME   General system error
+ *
+ *  @sa         VISA_callAsync()
+ */
+extern VISA_Status VISA_call(VISA_Handle visa, VISA_Msg *msg);
+
+/*
+ *  ======== VISA_callAsync ========
+ */
+/**
+ *  @brief      Invoke the operation specified in the message and return
+ *              without waiting for it to complete.
+ *
+ *  @ingroup    ti_sdo_ce_VISA_STUB
+ *
+ *  @param[in]  visa    Handle to an algorithm instance.
+ *  @param[out] msg     The remote algorithm's message,
+ *                          to be sent to the skeleton.
+ *
+ *  @remarks    This is typically called by an algorithm class' stub.
+ *
+ *  @retval         VISA_EOK        Success
+ *  @retval         VISA_ERUNTIME   General system error
+ *
+ *  @sa         VISA_wait()
+ *  @sa         VISA_call()
+ */
+extern VISA_Status VISA_callAsync(VISA_Handle visa, VISA_Msg *msg);
+
+/*
+ *  ======== VISA_wait ========
+ */
+/**
+ *  @brief      Wait for the oldest operation from a command specified with
+ *              VISA_callAsync() to complete.
+ *
+ *  @ingroup    ti_sdo_ce_VISA_STUB
+ *
+ *  @param[in]  visa    Handle to an algorithm instance.
+ *  @param[out] msg     Placeholder for the remote algorithm's return message,
+ *                          retrieved from the skeleton.
+ *  @param[in]  timeout Amount of "time" to wait ("time" depends on underlying
+ *                      mechanism, such as that used with MSGQ_Get()).
+ *
+ *  @remarks    This is typically called by an algorithm class' stub.
+ *
+ *  @retval         VISA_EOK        Success
+ *  @retval         VISA_ERUNTIME   General system error
+ *  @retval         VISA_ETIMEOUT   Operation timed out
+ *
+ *  @sa         VISA_callAsync()
+ */
+extern VISA_Status VISA_wait(VISA_Handle visa, VISA_Msg *msg, UInt timeout);
+
+/*
+ *  ======== VISA_freeMsg ========
+ */
+/**
+ *  @brief      Release an algorithm instance's message.
+ *
+ *  @ingroup    ti_sdo_ce_VISA_STUB
+ *
+ *  @param[in]  visa    Handle to an algorithm instance.
+ *  @param[in]  msg     Message to free, obtained through a call to
+ *                      VISA_allocMsg().
+ *
+ *  @retval     NULL        General system error
+ *  @retval     non-NULL    The remote algorithm's message.
+ *
+ *  @remarks    This is typically called by an algorithm class' stub.
+ *
+ *  @sa         VISA_allocMsg()
+ */
+extern Void VISA_freeMsg(VISA_Handle visa, VISA_Msg msg);
+
+
+/** @ingroup    ti_sdo_ce_VISA_API */
+/*@{*/
+
+/*
+ *  ======== VISA_create ========
+ */
+/**
+ *  @brief      Create a new instance of an algorithm.
+ *
+ *  @param[in]  engine  Handle to an engine in which the algorithm has been
+ *                      configured.
+ *  @param[in]  name    Name of the algorithm to create.  @c name is
+ *                      specified in the engine configuration.
+ *  @param[in]  params  Creation parameters.
+ *  @param[in]  msgSize Size of the message which will be allocated in
+ *                      the event that this algorithm is configured to
+ *                      run remotely.
+ *  @param[in]  type    String name of the "type" of algorithm.
+ *
+ *  @retval     NULL            General failure.
+ *  @retval     non-NULL        Handle to an algorithm instance.
+ *
+ *  @remarks    @c type <b>must</b> match the package/module name of the
+ *              interface which the algorithm implements.  For example, the VISA
+ *              interface shipped with CE to support XDM video
+ *              decoders is named "ti.sdo.ce.video.IVIDDEC".  That is,
+ *              the module IVIDDEC is in the package "ti.sdo.ce.video".
+ *              You will, by definition, find a file named IVIDDEC.xdc in the
+ *              ti.sdo.ce.video package.
+ *
+ *  @remarks    When calling VISA_create(), a string comparison is done
+ *              between the @c type parameter and the actual name of the
+ *              module (described in the previous paragraph).  If these strings
+ *              don't match exactly, VISA_create() will fail.
+ *
+ *  @sa         VISA_delete()
+ */
+extern VISA_Handle VISA_create(Engine_Handle engine, String name,
+    IALG_Params *params, size_t msgSize, String type);
+
+/*
+ *  ======== VISA_delete ========
+ */
+/**
+ *  @brief      Delete an instance of an algorithm.
+ *
+ *  @param[in]  visa    Handle to an algorithm instance to delete.
+ *
+ *  @sa         VISA_create()
+ */
+extern Void VISA_delete(VISA_Handle visa);
+
+
+/*
+ *  ======== VISA_create2 ========
+ */
+/**
+ *  @brief      Create a new instance of an algorithm.
+ *
+ *  @param[in]  engine      Handle to an engine in which the algorithm has been
+ *                          configured.
+ *  @param[in]  name        Name of the algorithm to create.  @c name is
+ *                          specified in the engine configuration.
+ *  @param[in]  params      Creation parameters.
+ *  @param[in]  paramsSize  Size of @c params.
+ *  @param[in]  msgSize     Size of the message which will be allocated in
+ *                          the event that this algorithm is configured to
+ *                          run remotely.
+ *  @param[in]  type        String name of the "type" of algorithm.
+ *
+ *  @retval     NULL            General failure.
+ *  @retval     non-NULL        Handle to an algorithm instance.
+ *
+ *  @remarks    @c type <b>must</b> match the package/module name of the
+ *              interface which the algorithm implements.  For example, the VISA
+ *              interface shipped with CE to support XDM video
+ *              decoders is named "ti.sdo.ce.video.IVIDDEC".  That is,
+ *              the module IVIDDEC is in the package "ti.sdo.ce.video".
+ *              You will, by definition, find a file named IVIDDEC.xdc in the
+ *              ti.sdo.ce.video package.
+ *
+ *  @remarks    When calling VISA_create2(), a string comparison is done
+ *              between the @c type parameter and the actual name of the
+ *              module (described in the previous paragraph).  If these strings
+ *              don't match exactly, VISA_create2() will fail.
+ *
+ *  @remarks    VISA_create() is the preferred method to create algorithms.
+ *              VISA_create2() is provided to enable creation of algorithms
+ *              which violate the XDAIS spec and do <b>not</b> have a @c size
+ *              field of type "Int" as the first field of @c params.
+ *
+ *  @sa         VISA_create()
+ *  @sa         VISA_delete()
+ */
+extern VISA_Handle VISA_create2(Engine_Handle engine, String name,
+    IALG_Params *params, Int paramsSize, size_t msgSize, String type);
+
+
+/*
+ *  ======== VISA_enter ========
+ */
+/**
+ *  @brief      Enter an algorithm's critical section.  This must be called
+ *              before any of the algorithm's IALG_Fxns are invoked.
+ *
+ *  @param[in]  visa    Handle to an algorithm instance.
+ *
+ *  @remarks    This is typically called by an algorithm class' application API.
+ *
+ *  @remarks    This call has the same semantics as IALG's activate fxn.
+ *
+ *  @sa         VISA_exit()
+ */
+extern Void VISA_enter(VISA_Handle visa);
+
+/*
+ *  ======== VISA_exit ========
+ */
+/**
+ *  @brief      Leave an algorithm's critical section.  This must be called
+ *              after the API has completed calling an algorithm's IALG_Fxns.
+ *
+ *  @param[in]  visa    Handle to an algorithm instance.
+ *
+ *  @remarks    This call has the same semantics as IALG's de-activate fxn.
+ *
+ *  @sa         VISA_enter()
+ */
+extern Void VISA_exit(VISA_Handle visa);
+
+/*
+ *  ======== VISA_getAlgHandle ========
+ */
+/**
+ *  @brief      Obtains an algorithm's handle.  This is the handle required
+ *              to be passed to the algorithm's IALG_Fxns.
+ *
+ *  @param[in]  visa        Handle to an algorithm instance.
+ *
+ *  @retval     NULL        General system error
+ *  @retval     non-NULL    The remote algorithm's message.
+ *
+ *  @remarks    This is typically called by an algorithm class' application API.
+ *
+ *  @sa         VISA_getAlgFxns()
+ */
+extern Ptr VISA_getAlgHandle(VISA_Handle visa);
+
+/*
+ *  ======== VISA_getAlgorithmHandle ========
+ */
+/**
+ *  @brief      Obtains an algorithm's handle.  If the algorithm is local, this is the
+ *              handle that can be passed to Algorithm APIs, not to the IALG_Fxns.
+ *
+ *  @param[in]  visa        Handle to an algorithm instance.
+ *
+ *  @retval     NULL        General system error
+ *  @retval     non-NULL    The Algorithm handle.
+ *
+ *  @remarks    This is used internally.
+ *
+ *  @sa         VISA_getAlgHandle()
+ */
+extern Ptr VISA_getAlgorithmHandle(VISA_Handle visa);
+
+/*
+ *  ======== VISA_getAlgFxns ========
+ */
+/**
+ *  @brief      Get implementation functions for this algorithm
+ *
+ *  @param[in]  visa    Handle to an algorithm instance.
+ *
+ *  @retval     NULL        An error has occurred.
+ *  @retval     non-NULL    The algorithm's IALG_Fxns.
+ *
+ *  @remarks    This is typically called by an algorithm class' application API.
+ *
+ *  @remarks    Both local and remote implementations return a non-NULL
+ *              pointer.  However, the IALG_Fxns functions may be NULL.
+ *
+ *  @remarks    In the case of a local algorithm, the algorithm's IALG_Fxns
+ *              returned.  In the case of a remote algorithm, its stubs are
+ *              returned.  In either case, the handle passed as the first arg
+ *              to the IALG_Fxns must be the value returned by
+ *              VISA_getAlgHandle().
+ *
+ *  @sa         VISA_getAlgHandle()
+ */
+extern IALG_Fxns *VISA_getAlgFxns(VISA_Handle visa);
+
+/*@}*/  /* ingroup */
+
+/*
+ *  ======== VISA_getAlgMemRecs ========
+ */
+/**
+ *  @brief      Get the IALG_MemRec memory assigned to an algorithm instance
+ *
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ *
+ *  @param[in]  visa    Handle to an algorithm instance.
+ *  @param[out] memTab  Location to store the IALG_MemRecs.
+ *  @param[in]  size    Maximum number of IALG_MemRecs to put in memTab array.
+ *  @param[out] numRecs Actual number of IALG_MemRecs copied into memTab array.
+ *
+ *  @remarks    Any algorithm instance handle (e.g. VIDDEC2_Handle,
+ *              AUDDEC1_Handle, etc), can be cast to a @c visa handle.
+ *
+ *  @par Example:
+ *
+ *  @code
+ *      AUDDEC1_Handle decoder;
+ *
+ *      decoder = AUDDEC1_create(...);
+ *
+ *      ... likely use VISA_getAlgNumRecs() to alloc enough mem...
+ *
+ *      VISA_getAlgMemRecs((VISA_Handle)decoder, ...);
+ *  @endcode
+ *
+ *  @retval     #VISA_EOK    Success.
+ *  @retval     #VISA_EFAIL  Failure.
+ *
+ *  @sa         VISA_getAlgNumRecs()
+ */
+extern VISA_Status VISA_getAlgMemRecs(VISA_Handle visa, IALG_MemRec *memTab,
+        Int size, Int *numRecs);
+
+/*
+ *  ======== VISA_getAlgNumRecs ========
+ */
+/**
+ *  @brief      Get the number of IALG_MemRecs assigned to an algorithm.
+ *
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ *
+ *  @param[in]  visa    Handle to an algorithm instance.
+ *  @param[out] numRecs Location to store the number of IALG_MemRecs used.
+ *
+ *  @remarks    Any algorithm instance handle (e.g. VIDDEC2_Handle,
+ *              AUDDEC1_Handle, etc), can be cast to a @c visa handle.
+ *
+ *  @par Example:
+ *
+ *  @code
+ *      Int numRecs;
+ *      AUDDEC1_Handle decoder;
+ *
+ *      decoder = AUDDEC1_create(...);
+ *
+ *      VISA_getAlgNumRecs((VISA_Handle)decoder, &numRecs);
+ *  @endcode
+ *
+ *  @retval     #VISA_EOK    Success.
+ *  @retval     #VISA_EFAIL  Failure.
+ *
+ *  @sa         VISA_getAlgMemRecs()
+ */
+extern VISA_Status VISA_getAlgNumRecs(VISA_Handle visa, Int *numRecs);
+
+
+/*
+ *  ======== VISA_getContext ========
+ */
+/**
+ *  @brief      Get optional context parameter.
+ *
+ *  @ingroup    ti_sdo_ce_VISA_STUB
+ *
+ *  @param[in]  visa        Handle to an algorithm instance.
+ *  @param[out] pContext    Location to store context.
+ *
+ *  @pre        @c visa <b>must</b> be a valid algorithm instance handle.
+ *
+ *  @pre        @c pContext <b>must</b> be a valid pointer.
+ *
+ *  @remarks    The VISA_setContext() / VISA_getContext() pair does <b>not</b>
+ *              work across processors.  That is, the context can only be
+ *              stored and retrieved on the local processor.
+ *
+ *  @sa         VISA_setContext()
+ */
+extern Void VISA_getContext(VISA_Handle visa, UInt32 * pContext);
+
+/*
+ *  ======== VISA_getCodecClassConfig ========
+ */
+/**
+ *  @brief      Get codec-specific values for the VISA class-specific
+ *              (or codec-specific if the codec doesn't extend VISA) stub-and/
+ *              or-skeleton configuration data (that some classes have)
+ *
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ *
+ *  @param[in]  visa        Handle to an algorithm instance.
+ *
+ *  @retval     address of the codec class config data structure, or NULL if
+ *              codec class config data not defined for the codec; the format
+ *              of the structure is class-specific, and the data in it is codec-
+ *              specific
+ *
+ *  @pre        @c visa <b>must</b> be a valid algorithm instance handle.
+ */
+extern Ptr VISA_getCodecClassConfig(VISA_Handle visa);
+
+
+/*
+ *  ======== VISA_getMaxMsgSize ========
+ */
+/**
+ *  @brief      Returns max size of messages allocated by VISA_allocMsg()
+ *
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ *
+ *  @retval     maxMsgSize      Max size of messages allocated by
+ *                              VISA_allocMsg()
+ *
+ *  @remarks    This is typically called by an algorithm class' stub.
+ *
+ *  @sa         VISA_allocMsg()
+ */
+extern UInt VISA_getMaxMsgSize(VISA_Handle visa);
+
+/*
+ *  ======== _VISA_init ========
+ */
+/**
+ *  @brief      Ininitilize VISA module.
+ *
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ *
+ *  @remarks    This is typically called by CERuntime_init().
+ *
+ *  @sa         _VISA_exit()
+ */
+extern Void _VISA_init(Void);
+
+/*
+ *  ======== _VISA_exit ========
+ */
+/**
+ *  @brief      Exit VISA module.
+ *
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ *
+ *  @remarks    This is typically called by CERuntime_exit().
+ *
+ *  @sa         _VISA_init()
+ */
+extern Void _VISA_exit(Void);
+
+
+/*
+ * Semi-internal variable generatd by Settings.xdt - used in the following
+ * inline
+ */
+extern Bool VISA_checked;
+
+/*
+ *  ======== VISA_isChecked ========
+ */
+/**
+ *  @brief      Indicates whether VISA libraries were built with
+ *              debug + additional checking enabled
+ *
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ *
+ *  @retval     false       VISA libraries with no debug/checking are used
+ *  @retval     true        VISA libraries with debug/checking are used
+ *
+ *  @remarks    This is typically called by an algorithm class' stub.
+ *
+ *  @sa         VISA_allocMsg()
+ */
+static inline Bool VISA_isChecked(Void)
+{
+    return (VISA_checked);
+}
+
+/*
+ *  ======== VISA_setContext ========
+ */
+/**
+ *  @brief      Set optional context parameter.
+ *
+ *  @ingroup    ti_sdo_ce_VISA_STUB
+ *
+ *  @param[in]  visa        Handle to an algorithm instance.
+ *  @param[in]  context     Context.
+ *
+ *  @pre        @c visa <b>must</b> be a valid algorithm instance handle.
+ *
+ *  @remarks    The VISA_setContext() / VISA_getContext() pair does <b>not</b>
+ *              work across processors.  That is, the context can only be
+ *              stored and retrieved on the local processor.
+ *
+ *  @sa         VISA_getContext()
+ */
+extern Void VISA_setContext(VISA_Handle visa, UInt32 context);
+
+/*
+ *  ======== VISA_isLocal ========
+ */
+/**
+ *  @brief      Indicates whether VISA codecs run on a remote or local CPU.
+ *
+ *  @ingroup    ti_sdo_ce_VISA_GEN
+ *
+ *  @retval     FALSE       VISA codecs run on remote CPU
+ *  @retval     TRUE        VISA codecs run on local CPU
+ *
+ *  @remarks    This is typically called by an algorithm class' stub.
+ */
+extern Bool VISA_isLocal(VISA_Handle visa);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*
+ *  @(#) ti.sdo.ce; 1, 0, 6,3; 6-13-2013 00:10:04; /db/atree/library/trees/ce/ce-w08/src/ xlibrary
+
+ */
+
diff --git a/packages/ivahd_codecs/ti/sdo/codecs/h264enc/ih264enc.h b/packages/ivahd_codecs/ti/sdo/codecs/h264enc/ih264enc.h
new file mode 100644 (file)
index 0000000..979c1df
--- /dev/null
@@ -0,0 +1,3503 @@
+/*
+ *******************************************************************************
+ *
+ * HDVICP2.0 Based H.264 HP Encoder
+ *
+ * "HDVICP2.0 Based H.264 HP Encoder" is software module developed on TI's
+ *  HDVICP2 based SOCs. This module is capable of compressing a 4:2:0 Raw
+ *  video into a high/main/baseline profile bit-stream. Based on ISO/IEC
+ *  14496-10."
+ * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
+ * ALL RIGHTS RESERVED
+ *******************************************************************************
+*/
+
+/**
+  ******************************************************************************
+  *  @file     ih264enc.h
+  *
+  *  @brief    IH264ENC Interface Header
+  *
+  *  @author   Pramod Kumar Swami (pramods@ti.com)
+  *
+  *  @version  0.1 - Nov 30,2008 : Initial Version [Pramod]
+  *
+  *  @version  0.2 - March 16,2009 [Pramod]
+  *    A. Name change of interface file ih264venc.h to ih264enc.h
+  *    B.Change the name of macros/enums
+  *       MAXNUMSLCGPS  --> IH264ENC_MAXNUMSLCGPS
+  *      MAX_NUM_SLICE_START_OFFSET --> IH264ENC_MAX_NUM_SLICE_START_OFFSET
+  *      IH264ENC_GOPSTRUCTURE_OPEN --> IH264ENC_GOPSTRUCTURE_NONUNIFORM
+  *      IH264ENC_GOPSTRUCTURE_CLOSE  --> IH264ENC_GOPSTRUCTURE_UNIFORM
+  *    C. Definition of IH264ENC_BufferLevel changed from buffer to time
+  *    D. mbMetaDataEnable is defined
+  *    E. Following information (fields/definition) is newly added
+  *       IH264ENC_VERSION_LENGTH : For getting the encoder version via Control
+  *       method
+  *       meta data support (IH264ENC_MAX_SEI_METADTA_BUFSIZE)
+  *       Support and definition of Error Codes
+  *       Enum for level 3.0 and 3.1 was missing added
+  *       Poc type 1 enum added
+  *       Support for NALU masks: no change in definition
+  *       Few more enumeration added for IH264ENC_VUICodingPreset,
+  *       IH264ENC_VideoFormat and IH264ENC_AspectRatioIdc
+  *       IH264ENC_VUICodingParams structure parameter added to creation
+  *       time parameters
+  *       New enumeration added to IH264ENC_InterlaceCodingType: MRF, SPF
+  *
+  *  @version  0.3 - November 2009 [Pramod]
+  *    A. Added interface for force SKIP, it is temporarily here and will be
+  *       used from base class of IVIDENC later
+  *    B. Added user defined scaling matrix bit in input meta data
+  *  @version 0.4 - Feb 2010 [Deepak]
+  *       Addition of error bit(IH264ENC_ErrorBit : bit 7) for max bit rate
+  *       voilation scenario in tighter RC scenario
+  *  @version  0.5 - Mar 2010 [Kumar] : Added more enumerations to have all
+  *     levels supported by H264 standard to make it future proof.
+  *  @version  0.6 - Apr 2010 [Kumar] : Added error bit for checking
+  *            hdvicp state IH264ENC_IMPROPER_HDVICP2_STATE
+  *  @version  0.7 - Jun 2010  : [Nirmal, Pramod] Changed default value of
+  *                              BufferLevel since its is not good for
+  *                              low delay applications (IR: SDOCM00071692)
+  *  @version  0.8 - Apr 2010 [Uday] : Modified the definition of initial
+  *     buffer level from taking in descrete values to continuas values
+  *  @version  0.9 - May 2010 [Uday] : converted the reserve parameter for
+  *            enabling GMV in SEI to dedicated parameter
+  *
+  *  @version  0.10 - May 2010 [Uday] : Extended the outArgs to return the
+  *                                    initial buffer level
+  *  @version  0.11 -Jun 2010 [Uday] : Added interface constraint set flags
+  *  @version  0.12 - Aug 2010 [Nirmal] : Added data elements for static MB
+  *                                       count support
+  *  @version  0.13 -Aug 2010 [Girish Murthy] : Added interface for
+  *                                             RCDO profile support
+  * @ version  0.14 -Sep 2010 [Kumar] : Defined a bit for
+  *                          IH264ENC_MAX_BYTES_VOILATION_IN_SLICEMODE_BYTES
+  * @ version  0.15 -Sep 2010 [Kumar] : Added a new extenetd parameter for
+  *                              algorithm creation enableLongTermRefFrame
+  * @version 0.16- Sept 2010[Girish]: Support for PRC and partial frame
+  *                                    skip control
+  * @version 0.17 Sep 2010 : Added flag to control the insertion of
+  *                           HRD parameters in VUI part of bit-stream[Nirmal]
+  * @version 0.18 Sep2010 : Added error bit IH264ENC_DATASYNCH_RUN_TIME_ERROR
+  *                        multiplexed with IH264ENC_UNSUPPORTED_FMOCODINGPARAMS
+  * @version 0.19 Sep2010 : Added IH264ENC_FramePackingParams structure
+  *                         required for encoding the frame packing SEI
+  * @version 0.20 Sep 2010 : [Gajanan] Added IH264ENC_StereoInfoParams
+  *                              Structure for Steroe Video Coding
+  *                              parameters and StereoInfoPreset enums.
+  * @version 0.21 Apr 2011 : [Kumar] Added support for new long-
+  *                            trem frame referencing scheme
+  *                            IH264ENC_LTRP_REFERTOP_PROACTIVE
+  * @version 0.22 June 2011: Inroduction of new preset
+  *                          IH264_INTERCODING_MED_SPEED_HIGH_QUALITY for
+  *                           inter coding preset.
+  * @version 0.23 July 2011: Added discardSavedBits in RateControl structure
+  *                            SDOCM00082533
+  * @version 0.24 July 2011: Added structures and enum for ROI support.[Gajanan]
+  * @version  1.0 Dec 2011: Added parameter for HRD compliance control[Girish]
+  * @version  1.1 Dec 2011: Added frameSkipThMulQ5 & vbvUseLevelThQ5 in
+  *                         RateControl structure for CBR quality improvement
+  *                         [Karthick]
+  * @version  1.2 Jan 2012: Renamed MAX_ROI macro as IH264ENC_MAX_ROI
+  *                         [Harris]
+  * @version  1.3 Mar 2012: Added a parameter enableErrorCheck  in
+  *                         IH264ENC_ProcessParamsList.[Santoshkumar S K]
+  * @version  1.4 May 2012: Changed parameter name. Replaced
+  *                         inArgs->lateAcquireArg by inArgs->processId.
+  *                         [Santoshkumar S K]
+  * @version  1.5 May 2012: SDOCM00091641 : Added temporalId parameter to
+  *                         IH264ENC_OutArgs.This holds the Temporal
+  *                         layer Id of current frame in H-P encoding.
+  *                         (for base layer value is 0)[Santoshkumar S K]
+  * @version  1.6 Aug 2012: Redundant exposure of GDR configuration
+  *                         parameters as a part of Extended Dynamic structure
+  *                         are removed(SDOCM00095027)[Santoshkumar S K]
+  * @version  1.7 Sep 2012: Default value of scalingmatrixPreset is changed
+  *                         from NONE(0) to NORMAL(1)[Santoshkumar S K]
+  * @version  1.8 Feb 2013: Fix for OMAPS00288660: Ducati returns an error
+  *                         when setting a slice size larger than 32768.
+  *                         Fix : sliceUnitSize parameter's data type is changed
+  *                         from XDAS_Int16 to XDAS_Int32 [Santoshkumar S K]
+  * @version  1.9 Mar 2013: a. Added IH264ENC_ExtErrBits enum structure to fix
+  *                         SDOCM00099577(Encoder does not give refined error
+  *                         codes in case of creation fail or run time parameter
+  *                         set fail)
+  *                         b. Parameter extErrorCode[] is added in
+  *                         IH264ENC_Status and IH264ENC_OutArgs structure
+  *                         [Santoshkumar S K]
+ *****************************************************************************
+*/
+
+/**
+ *  @defgroup   HDVICP2H264 IH264ENC_TI (V7M)
+ *  @ingroup    m3
+ *
+ *              The IH264ENC_TI interface enables encoding in H264 format
+ *
+ */
+
+#ifndef _IH264ENC_H_  /* --{                                                  */
+
+#define _IH264ENC_H_
+
+#include <ti/xdais/ialg.h>
+#include <ti/xdais/dm/ividenc2.h>
+
+/** @ingroup    HDVICP2H264 */
+/*@{*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/* Definition of all the macros define by this interafce       */
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/**
+  Maximum number of slice groups supported by H.264 Encoder
+*/
+#define IH264ENC_MAXNUMSLCGPS (2)
+
+/**
+  Maximum Number of slice start points
+*/
+#define IH264ENC_MAX_NUM_SLICE_START_OFFSET  (3)
+
+/** maximum size for SEI_USER_DATA_UNREGISTERED SEI message */
+#define IH264ENC_MAX_SEI_METADTA_BUFSIZE (0x3FF)
+
+/**
+  Length of the version string. The memory to get version
+  number is owned by application
+*/
+#define IH264ENC_VERSION_LENGTH (64)
+
+/**
+  control method commands
+*/
+#define IH264ENC_GETSTATUS      XDM_GETSTATUS
+#define IH264ENC_SETPARAMS      XDM_SETPARAMS
+#define IH264ENC_RESET          XDM_RESET
+#define IH264ENC_FLUSH          XDM_FLUSH
+#define IH264ENC_SETDEFAULT     XDM_SETDEFAULT
+#define IH264ENC_GETBUFINFO     XDM_GETBUFINFO
+
+/**
+  Maximum number of ROIs supported inside the frame.
+*/
+#define IH264ENC_MAX_ROI 36
+
+typedef IVIDENC2_Cmd IH264ENC_Cmd;
+
+/**
+  Macro to set particular NAL bit in the nal unit mask
+*/
+#define IH264ENC_SET_NALU(naluPresentMask, NALU) \
+    { \
+        naluPresentMask = ((naluPresentMask) | (1 << IH264_NALU_TYPE_##NALU));\
+    }
+
+/**
+  Macro to clear particular NAL bit in the nal unit mask
+*/
+#define IH264ENC_CLEAR_NALU(naluPresentMask, NALU) \
+    { \
+        naluPresentMask = ((naluPresentMask) & (~(1 << IH264_NALU_TYPE_##NALU)));\
+    }
+
+/**
+  Macro to get particular NAL bit in the nal unit mask
+*/
+#define IH264ENC_GET_NALU(naluPresentMask, NALU)\
+    ((naluPresentMask) & (1 << IH264_NALU_TYPE_##NALU))
+
+
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/* Definition of all the Enumeration define by this interafce  */
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/**
+ *  @enum       IH264ENC_ErrorBit
+ *  @brief      error informations of IVAHD H264 encoder implementation by TI.
+ *
+ *  @remarks    When an internal error occurs, the algorithm will return
+ *              an error return value (e.g. EFAIL, EUNSUPPORTED)
+ *
+ *  @remarks    The value of each enum is the bit which is set.
+ *
+ *  @remarks    Bits 8-15 are defined by XDM and hence not used by codec
+ *              implementation.
+ *              rest all bits are used. XDM defined error bits are also active.
+ *
+ *  @remarks    The algorithm can set multiple bits to 1 based on conditions.
+ *              e.g. it will set bits #XDM_FATALERROR (fatal) and
+ *              #XDM_UNSUPPORTEDPARAM (unsupported params) in case
+ *              of unsupported run time parameters.
+ *
+ */
+
+typedef enum {
+    IH264ENC_LEVEL_INCOMPLAINT_PARAMETER = 0,
+    /**< Bit 0 - level incomplaint parameters.
+    *   @remarks  This error is applicable when some parameters are set
+    *   which are not meeting the limit defined by H.264 standard
+    *   Table A-1  Level limits. It can be categorized under
+    *   following category :
+    *   IH264ENC_LEVEL_INCOMPLAINT_RESOLUTION : Invalid width/height
+    *   IH264ENC_LEVEL_INCOMPLAINT_HRDBUFSZIE : Invalid HrdBufferSize
+    *   IH264ENC_LEVEL_INCOMPLAINT_BITRATE    : Invalid Bit Rate
+    *   IH264ENC_LEVEL_INCOMPLAINT_MBSPERSECOND : Invalid FrameRate/
+    *                                             resolution
+    *   IH264ENC_LEVEL_INCOMPLAINT_DPBSIZE      : Invalid DPB size
+    *   For above 5 situations, only a signle bit (bit-0) is set as true
+    */
+
+    IH264ENC_PROFILE_INCOMPLAINT_CONTENTTYPE = 1,
+    /**< Bit 1 - Profile incomplaint content type.
+     *   @remarks  This error is applicable when
+     *   IVIDENC2_Params::inputContentType is not set as
+     *   IVIDEO_PROGRESSIVE but IVIDENC2_Params::profile is set
+     *   as IH264_BASELINE_PROFILE
+     */
+
+    IH264ENC_PROFILE_INCOMPLAINT_FMO_SETTING = 2,
+    /**< Bit 2 - Profile incomplaint FMO setting.
+    *   @remarks  This error is applicable when FMO is enabled but
+    *   IVIDENC2_Params::profile is not set as IH264_BASELINE_PROFILE
+    */
+
+    IH264ENC_PROFILE_INCOMPLAINT_TRANSFORMBLOCKSIZE = 3,
+    /**< Bit 3 - Profile incomplaint transform block size.
+    *   @remarks  This error is set when
+    *   IH264ENC_Params::transformBlockSize != IH264_TRANSFORM_4x4 &&
+    *   IVIDENC2_Params::profile != IH264_HIGH_PROFILE
+    */
+
+    IH264ENC_PROFILE_INCOMPLAINT_INTERFRAMEINTERVAL = 4,
+    /**< Bit 4 - Profile incomplaint interframeInterval.
+    *   @remarks  This error is set when B frames are used with
+    *   IH264_BASELINE_PROFILE
+    */
+
+    IH264ENC_PROFILE_INCOMPLAINT_SCALINGMATRIXPRESET = 5,
+    /**< Bit 5 - Profile incomplaint scaling matrix setting.
+    *   @remarks  This error is set when scaling matrix is used
+    *   without IH264_HIGH_PROFILE
+    */
+
+    IH264ENC_PROFILE_INCOMPLAINT_ENTROPYCODINGMODE = 6,
+    /**< Bit 6 - Profile incomplaint entropy coding mode setting.
+    *   @remarks  This error is set when cabac is used
+    *   without IH264_HIGH_PROFILE/MAIN profile
+    */
+
+    IH264ENC_MAX_BYTES_VOILATION_IN_SLICEMODE_BYTES = 6,
+    /**< Bit 6 - If number of bytes encoded in any of the
+    *  slice in the currently encoded picture is crossing
+    *  maximum unbit size then this bit will be set
+    *   @remarks  This error bit is shared between the
+    *   create time parameter entropy coding mode
+    *
+    */
+
+    IH264ENC_MAX_BIT_RATE_VOILATION = 7,
+    /**< Bit 7 - Max bits for one Unit Voilation
+     * @remarks When max bit rate is enabled by user,
+     * than it is possible that codec might not be able
+     * honor max bit rate. This bit is set when bits consumed
+     * in one unit ( 1 sec) is more than the allocated as per the
+     * given max bit rate. If the frame rate is N , and if the
+     * max bit rate is voilated in M th frame than this bit will
+     * get set for frame M to N.
+     */
+    IH264ENC_IMPROPER_HDVICP2_STATE = 16,
+    /**< Bit 16 - Device is not proper state to use.
+    */
+
+    IH264ENC_IMPROPER_STREAMFORMAT = 17,
+    /**< Bit 17 - stream format is not proper
+    *   @remarks  This error is set when streamFormat is set as
+    *   IH264_NALU_STREAM but data synch is not enabled for putdata
+    */
+
+    IH264ENC_IMPROPER_POCTYPE = 18,
+    /**< Bit 18 - poc type is not proper
+    *   @remarks  This error is set when poc type 2 is used in
+    *   presense of non reference frames
+    */
+
+    IH264ENC_IMPROPER_DATASYNC_SETTING = 19,
+    /**< Bit 19 - data synch settings are not proper
+    *   @remarks  This error is set when encoder is asked to operate
+    *   at sub frame level but the call back function pointer is NULL
+    */
+
+    IH264ENC_UNSUPPORTED_VIDENC2PARAMS = 20,
+    /**< Bit 20 - Invalid videnc2 parameters
+    *   @remarks  This error is set when any parameter of struct
+    *   IVIDENC2_Params is not in allowed range
+    */
+
+    IH264ENC_UNSUPPORTED_RATECONTROLPARAMS = 21,
+    /**< Bit 21 - Invalid rate control parameters
+    *   @remarks  This error is set when any parameter of struct
+    *   IH264ENC_RateControlParams is not in allowed range
+    */
+
+    IH264ENC_UNSUPPORTED_INTERCODINGPARAMS = 22,
+    /**< Bit 22 - Invalid inter coding parameters
+    *   @remarks  This error is set when any parameter of struct
+    *   IH264ENC_InterCodingParams is not in allowed range
+    */
+
+    IH264ENC_UNSUPPORTED_INTRACODINGPARAMS = 23,
+    /**< Bit 23 - Invalid Intra coding parameters
+    *   @remarks  This error is set when any parameter of struct
+    *   IH264ENC_IntraCodingParams is not in allowed range
+    */
+
+    IH264ENC_UNSUPPORTED_NALUNITCONTROLPARAMS = 24,
+    /**< Bit 24 - Invalid nal unit coding parameters
+    *   @remarks  This error is set when any parameter of struct
+    *   IH264ENC_NALUControlParams is not in allowed range
+    */
+
+    IH264ENC_UNSUPPORTED_SLICECODINGPARAMS = 25,
+    /**< Bit 25 - Invalid slice coding parameters
+    *   @remarks  This error is set when any parameter of struct
+    *   IH264ENC_SliceCodingParams is not in allowed range
+    */
+
+    IH264ENC_UNSUPPORTED_LOOPFILTERPARAMS = 26,
+    /**< Bit 26 - Invalid loop filter related parameters
+    *   @remarks  This error is set when any parameter of struct
+    *   IH264ENC_LoopFilterParams is not in allowed range
+    */
+    IH264ENC_DATASYNCH_RUN_TIME_ERROR = 27,
+    /**< Bit 27 is muxed with incorrect FMO paramters setting.
+    *  This will be set when codec inside IVAHD encounters
+    *  erroneous situation, like
+    *  a) when number of NALs in 1Kb of data is more than 8
+    *  b) when the blocks provided through getBuf call is not
+    *     sufficient for all the NALs in one oage of SL2 stream.
+    */
+    IH264ENC_UNSUPPORTED_N_FRAME_PROCESSCALL_PARAMS = 27,
+    /**< Bit 27 is also muxed with incorrect paramters setting in
+     * N frame process call scenario
+    */
+    IH264ENC_UNSUPPORTED_FMOCODINGPARAMS = 27,
+    /**< Bit 27 - Invalid fmo parameters
+    *   @remarks  This error is set when any parameter of struct
+    *   IH264ENC_FMOCodingParams is not in allowed range
+    */
+
+    IH264ENC_UNSUPPORTED_VUICODINGPARAMS = 28,
+    /**< Bit 28 - Invalid vui coding parameters
+    *   @remarks  This error is set when any parameter of struct
+    *   IH264ENC_VUICodingParams is not in allowed range
+    */
+
+    IH264ENC_UNSUPPORTED_H264ENCPARAMS = 29,
+    /**< Bit 29 - Invalid Create time extended parameters
+    *   @remarks  This error is set when any parameter of struct
+    *   IH264ENC_Params is not in allowed range
+    */
+
+    IH264ENC_UNSUPPORTED_VIDENC2DYNAMICPARAMS = 30,
+    /**< Bit 30 - Invalid base class dyanmic paaremeters during control
+    *   @remarks  This error is set when any parameter of struct
+    *   IVIDENC2_DynamicParams is not in allowed range
+    */
+
+    IH264ENC_UNSUPPORTED_H264ENCDYNAMICPARAMS = 31
+                                                /**< Bit 31 - Invalid exteded class dyanmic paaremeters during control
+                                                *   @remarks  This error is set when any parameter of struct
+                                                *   IH264ENC_DynamicParams (excluding embedded structures) is not in
+                                                *    allowed range
+                                                */
+
+} IH264ENC_ErrorBit;
+
+/**
+ *  @enum       IH264ENC_ExtErrBits
+ *  @brief      Sub extended error informations of IVAHD H264 encoder
+ *              implementation by TI.
+ *
+ *  @remarks    When an internal error occurs, the algorithm will return
+ *              an error return value (e.g. EFAIL, EUNSUPPORTED). Apart from
+ *              this information, encoder returns extended error codes which
+ *              helps to get  refined error. For eg Error
+ *              IH264ENC_UNSUPPORTED_VIDENC2DYNAMICPARAMS can be returned by
+ *              many sub conditions which is not enough for the user
+ *              to trace his parameter settings. But the sub extended error
+ *              codecs as mentioned in the below enum gives finer and refined
+ *              error information.These error bits are unique for each fail in
+ *              param settings. The algorithm can set multiple bits based on
+ *              conditions.e.g. it will set bits #
+ *              IH264ENC_EXTERROR_CREATE_INTERLACE_TYPE (for  wrong interlace
+ *              coding type) and #IH264ENC_EXTERROR_CREATE_LTRP (for wrong
+ *              LTRP settings) & etc.
+ *              These bits are set in structure IH264ENC_Status::extErrorCode[]
+ *              and/or  structure IH264ENC_OutArgs::extErrorCode[]
+ */
+typedef enum {
+    IH264ENC_EXTERROR_ACTIVEREGION                            = 0,
+    /** Bit 0  Active frame region dimensions are not matching with the
+     *  encoding frame dimensions
+     */
+    IH264ENC_EXTERROR_ANALYTICINFO_BUFFERSIZE                 = 1,
+    /** Bit 1  Analytic Info buffer size provided is less than that of
+     *  requested
+     */
+    IH264ENC_EXTERROR_BITRATE                                 = 2,
+    /* Bit 2 \96 target bit rate set is more than max bit rate  */
+    IH264ENC_EXTERROR_BITSTREAM_BUFFERSIZE                    = 3,
+    /** Bit 3  Output bitstream buffer size provided is less than that of
+     *  requested. And this validation is done only if
+     *  IVIDENC2_DynamicParams::ignoreOutbufSizeFlag is 0. Application has a
+     *  flexibility of the not honoring this size by setting ignoreOutbufSizeFlag
+     *  to 1
+     */
+    IH264ENC_EXTERROR_CAPTUREWIDTH_FORCEFRAME_LTRP_QPEL       = 4,
+    /** Bit 4  This bit is set if any of the below conditions is set
+     *  a. The size of dynamic params structure set is not of base class and
+     *     nor even extended class
+     *  b. Encoding dimensions are out of range
+     *  c. Target bit rate less than minimum bt rate or frame rate is less than 0
+     *  d. Generate header mode other than XDM_ENCODE_AU and XDM_GENERATE_HEADER
+     *  e. User forced frame other than IDR/NA frame
+     *  f. Wrong settings in interframe or intraFrame intervals
+     *  g. Incorrect settings in motion vector accuracy settings
+     *  If this bit is set, correspondingly IH264ENC_EXTERROR_RESOLUTION_BITRATE_
+     *  FRMINTERVAL_GENHEADER is also set
+     */
+    IH264ENC_EXTERROR_CONTROLCALL_CMD                         = 5,
+    /** Bit 5  Encoder control call is made with an incorrect command option
+     */
+    IH264ENC_EXTERROR_CREATE_ENTROPY_PROFILE                  = 6,
+    /** Bit 6  Entropy coding mode set is CABAC for Base line profile which is
+     *  not supported
+     */
+    IH264ENC_EXTERROR_CREATE_GOPSTRUCT_LOG2MAX_INTRAINTERVAL  = 7,
+    /** Bit 7  This bit is set when
+     * a. Parameters transformBlockSize, entropyCodingMode, log2MaxFNumMinus4,
+     *    maxIntraFrameInterval, IDRFrameInterval, gopStructure are out of range.
+     * b. LTRP is enabled for interlaced coding type
+     *  If this bit is set, correspondingly IH264ENC_EXTERROR_CREATE_TXBLKSIZE_
+     *  ENTROPY_POC_LTRP is also set
+     */
+    IH264ENC_EXTERROR_CREATE_HPLAYERS                         = 8,
+    /** Bit 8  Hierarchal layers set is out of range i.e., numTemporalLayer
+     *  set is less tha 0 or more than 4
+     */
+    IH264ENC_EXTERROR_CREATE_HPLAYERS_BFRAME                  = 9,
+    /** Bit 9  Hierarchal coding is enabled for 'B Frames which is not supported
+     */
+    IH264ENC_EXTERROR_CREATE_HPLAYERS_POC                     = 10,
+    /** Bit 10  Picture Order Count(POC) type 1 is enabled for Hierarchal layer
+     *  coding which is not supported
+     */
+    IH264ENC_EXTERROR_CREATE_HPLAYERS_REFPICMRKING            = 11,
+    /** Bit 11 - Longterm Referencing (MMCO commands) is not enabled for
+     *  Hierarchal layer coding i.e., referencePicMarking is other than
+     *  IH264_LONG_TERM_PICTURE for Hierarchal layer coding which is
+     *  not supported
+     */
+    IH264ENC_EXTERROR_CREATE_INTERLACE_TYPE                   = 12,
+    /** Bit 12  In interlaced encoding, interlace coding type set is out
+     *  of supported values
+     */
+    IH264ENC_EXTERROR_CREATE_LTRP                             = 13,
+    /** Bit 13  LTRP option (enableLongTermRefFrame) set is out of allowed ranges
+     */
+    IH264ENC_EXTERROR_CREATE_LTRP_HP                          = 14,
+    /** Bit 14  LTRP option IH264ENC_LTRP_REFERTOP_PROACTIVE is enabled for
+     *  Hierarchal layer coding which is not supported
+     */
+    IH264ENC_EXTERROR_CREATE_LTRP_PERIOD                      = 15,
+    /** Bit 15 - When LTRP is enabled for Hierarchal layer coding (H-P) then
+     *  LTRPPeriod set should be multiple of subGop length
+     */
+    IH264ENC_EXTERROR_CREATE_LVL_DPBSIZE                      = 16,
+    /** Bit 16  Current DPB size set is more than the max DPB size allowed
+     *  in this level. Current DPB size is calculated using formaula
+     *  (maxWidth * maxHeight * 1.5 * max_num_ref_frames)
+     */
+    IH264ENC_EXTERROR_CREATE_POC_BFRAME                       = 17,
+    /** Bit 17  Picture Order Count(POC) type 2 is set for B frames which
+     * is not supported
+     */
+    IH264ENC_EXTERROR_CREATE_RCDO_PROFILE                     = 18,
+    /** Bit 18  RCDO is allowed only for Baseline profile.
+     */
+    IH264ENC_EXTERROR_CREATE_TXBLKSIZE_ENTROPY_POC_LTRP       = 19,
+    /** Bit 19  This bit is set when
+     * a. Parameters transformBlockSize, entropyCodingMode, log2MaxFNumMinus4,
+     *    maxIntraFrameInterval, IDRFrameInterval, gopStructure are out of range.
+     * b. LTRP is enabled for interlaced coding type
+     * If this bit is set, correspondingly IH264ENC_EXTERROR_CREATE_GOPSTRUCT
+     * _LOG2MAX_INTRAINTERVAL is also set
+     */
+    IH264ENC_EXTERROR_CREATE_TXBLKSIZE_PROFILE                = 20,
+    /** Bit 20  Transform Block size IH264_TRANSFORM_8x8 is allowed only in
+     *  High profile.
+     */
+    IH264ENC_EXTERROR_DATASYNC_GETFN_PTRNULL                  = 21,
+    /** Bit 21  getBufferFxn is a function pointer used to get buffer. This
+     *  function gets called in Data synch flow. This error bit is set if
+     *  this function pointer is NULL
+     */
+    IH264ENC_EXTERROR_DATASYNC_MBUNIT_SLICESIZE               = 22,
+    /** Bit 22  This bit is set if
+     *  a. User has enabled call back notification at slice level and
+     *  b. Encoder slice mode selected is IH264_SLICEMODE_MBUNIT and
+     *  c. Slice Unit size(number of MBs per slice) set is less than
+     *     minimum MBs per slices. Minimum MBs per slice is (TotalMbsInPic/63)
+     */
+    IH264ENC_EXTERROR_DATASYNC_MODE_BFRAME                    = 23,
+    /** Bit 23  Data sync, inputDataMode is not set to IVIDEO_ENTIREFRAME in
+     *  presence of B frames. In B cases we allow processing entire frames
+     *  and not any mode
+     */
+    IH264ENC_EXTERROR_DATASYNC_MODE_FNPTRNULL                 = 24,
+    /** Bit 24  This bit is set if
+     *  a. Data sync, outputDataMode is IVIDEO_FIXEDLENGTH or IVIDEO_SLICEMODE
+     *     and putDataFxn is NULL
+     *  OR
+     *  b. Data sync, inputDataMode is IVIDEO_NUMROWS and getDataFxn is NULL
+     */
+    IH264ENC_EXTERROR_DATASYNC_MODE_H241_FNPTRNULL            = 25,
+    /** Bit 25  In H241 flow, if user is interested in call back notification
+     *  at slice level then he has to provide function address in getBufferFxn
+     *  function pointer else this bit is set
+     */
+    IH264ENC_EXTERROR_DATASYNC_MODE_MINBITRATE                = 26,
+    /** Bit 26  minBitRate should be 0 if data sync, outputDataMode is
+     *  VIDEO_FIXEDLENGTH or IVIDEO_SLICEMODE
+     */
+    IH264ENC_EXTERROR_DATASYNC_OUTPUTDATAEXCEED               = 27,
+    /** Bit 27  Encoded output data size has exceeded the available buffer
+     *  size
+     */
+    IH264ENC_EXTERROR_DATASYNC_UNITS                          = 28,
+    /** Bit 28  Data sync, numOutputDataUnits are out of allowed ranges in
+     *  case of outputDataMode not equal to IVIDEO_ENTIREFRAME
+     */
+    IH264ENC_EXTERROR_DYNAMIC_SRCHCENTRE                      = 29,
+    /** Bit 29  GMV, search centre x/y are out of allowed range
+     */
+    IH264ENC_EXTERROR_DYNAMICPARAMS_PTRNULL                   = 30,
+    /** Bit 30  In encoder control call with command option XDM_SETPARAMS,
+     *  IVIDENC2_DynamicParams structure pointer is NULL
+     */
+    IH264ENC_EXTERROR_EARLYEXIT                               = 31,
+    /** Bit 31  Early exit called because Frame processing is not completed
+     *  at IVAHD side
+     */
+    IH264ENC_EXTERROR_FIFO_EMPTY_NOPROCESS                    = 32,
+    /** Bit 32  In Flush process calls, no more buffers are locked and
+     *  hence process call cannot be made further this point
+     */
+    IH264ENC_EXTERROR_FILLERBYTES_NEGATIVE                    = 33,
+    /** Bit 33  This bit set indicates that the filler bytes size to be put
+     *  in bitstream to meet bit stream constraint is negative. Filler data
+     *  negative indiactes that bits consumed in current unit till now has
+     *  crossed the maximum limit.So inform to the user by seeting appropirate bit
+     */
+    IH264ENC_EXTERROR_FMO_PRESET                              = 34,
+    /** Bit 34  FMO coding preset is other than default.
+     *  FMO is not supported in this release
+     */
+    IH264ENC_EXTERROR_FRMPACKING_PRESET                       = 35,
+    /** Bit 35  Frame packing preset is not in allowed range
+     */
+    IH264ENC_EXTERROR_FRMPACKING_TYPE_INPCONTENT              = 36,
+    /** Bit 36  This bit is set if
+     *  a.Frame packing is enabled for interlaced cases
+     *  b.Frame packing preset is user defined and frame packing type is more
+     *    than 4 (IH264_FRAMEPACK_TOP_BOTTOM)
+     */
+    IH264ENC_EXTERROR_FRMRATE_NUMUNITSINTICKS                 = 37,
+    /** Bit 37  Level incompliant MBs per second
+     */
+    IH264ENC_EXTERROR_GENHEADER_BITSTREAM_BUFFERSIZE          = 38,
+    /** Bit 38  In process call with XDM_GENERATE_HEADER mode, output
+     *  buffer size provided should be minimum of 0x100 bytes
+     *  (to hold SPS and PPS)
+     */
+    IH264ENC_EXTERROR_HANDLE_BUFDESCRIPTORS_PTRNULL           = 39,
+    /** Bit 39  Pointer of handle or inBufs or outBufs structure may be NULL
+     */
+    IH264ENC_EXTERROR_HIGHSPEED_BFARME                        = 40,
+    /** Bit 40  High speed encoding feature is not supported for B frames.
+     */
+    IH264ENC_EXTERROR_HIGHSPEED_MEALGO_TXBLKSIZE_PROFILE      = 41,
+    /** Bit 41  This bit is set if, in High speed encoding mode
+     *  a. Transform block size is 4x4 for High profile case
+     *  OR
+     *  b. Transform block size is 8x8 and non High profile cases
+     */
+    IH264ENC_EXTERROR_HIGHSPEED_PARTIALSKIP_INTRAREFRESHMETHOD= 42,
+    /** Bit 42  This bit is set if, in High speed encoding mode
+     *  a. Transform block size is 4x4 for High profile case
+     *  OR
+     *  b. Transform block size is 8x8 and non High profile cases
+     *  OR
+     *  c. Partial Frame skip is enabled
+     *  OR
+     *  d. Intra refresh method is other than default
+     *  If this bit is set, correspondingly IH264ENC_EXTERROR_HIGHSPEED_
+     *  TXBLKSIZE_PROFILE is also set
+     */
+    IH264ENC_EXTERROR_HIGHSPEED_TXBLKSIZE_PROFILE             = 43,
+    /** Bit 43  This bit is set if, in High speed encoding mode
+     *  a. Transform block size is 4x4 for High profile case
+     *  OR
+     *  b. Transform block size is 8x8 and non High profile cases
+     *  OR
+     *  c. Partial Frame skip is enabled
+     *  OR
+     *  d. Intra refresh method is other than default
+     *  If this bit is set, correspondingly IH264ENC_EXTERROR_HIGHSPEED_
+     *  PARTIALSKIP_INTRAREFRESHMETHOD is also set
+     */
+    IH264ENC_EXTERROR_INARGS_BASECLASS_WATERMARKENABLE        = 44,
+    /** Bit 44  Water Marking feature of the encoder is enabled and inArgs
+     *  structure is base class. If inArgs structure is base class we cannot
+     *  access the input key that has to used in water marking algo.
+     *  So please use extended class of inArgs and pass the input key
+     */
+    IH264ENC_EXTERROR_INARGS_CONTROL                          = 45,
+    /** Bit 45  The control parameter passed as part of inArgs structure is
+     *  out of allowed range
+     */
+    IH264ENC_EXTERROR_INARGS_OUTARGS_SIZE                     = 46,
+    /** Bit 46  The size parameter as part of inArgs or outArgs structure does
+     *  not match base class not even extended class
+     */
+    IH264ENC_EXTERROR_INARGS_PTRNULL                          = 47,
+    /** Bit 47  inArgs structure pointer passed in the process call is NULL
+     */
+    IH264ENC_EXTERROR_INPCONTENT_TYPE                         = 48,
+    /** Bit 48  Input data content type value is wrong or input data chroma
+     *  format is not YUV420
+     */
+    IH264ENC_EXTERROR_INPUT_BUFFERID                          = 49,
+    /** Bit 49  inputId as part of inArgs structure is 0
+     */
+    IH264ENC_EXTERROR_INPUTBUF_MEMTYPE                        = 50,
+    /** Bit 50  memType value set in the plane descriptors of inBufs structure
+     *  is falling out of allowed values
+     */
+    IH264ENC_EXTERROR_INPUTBUF_PTR_SIZE_NULL                  = 51,
+    /** Bit 51 - buf value(buffer pointer) or bufSize.bytes set in the plane
+     *  descriptors of inBufs structure is NULL
+     */
+    IH264ENC_EXTERROR_INTER_HIGHSPEED_MVPERMB                 = 52,
+    /** Bit 52  This bit is set if, in High speed encoding mode
+     *  a. B frames are enabled
+     *  OR
+     *  b. Motion vector accuracy is not a Quarter pel (mvAccuracy !=
+     *     IVIDENC2_MOTIONVECTOR_QUARTERPEL)
+     *  OR
+     *  c. Motion vectors per macroblock is not 1
+     *     (minBlockSizeP != IH264_BLOCKSIZE_16x16)
+     *  If this bit is set, correspondingly IH264ENC_EXTERROR_INTER_HIGHSPEED
+     *  _QPEL_FRAMEINTERVAL is also set
+     */
+    IH264ENC_EXTERROR_INTER_HIGHSPEED_QPEL_FRAMEINTERVAL      = 53,
+    /** Bit 53  This bit is set if, in High speed encoding mode
+     *  a. B frames are enabled
+     *  OR
+     *  b. Motion vector accuracy is not a Quarter pel (mvAccuracy !=
+     *     IVIDENC2_MOTIONVECTOR_QUARTERPEL)
+     *  OR
+     *  c. Motion vectors per macroblock is not 1
+     *     (minBlockSizeP != IH264_BLOCKSIZE_16x16)
+     *  If this bit is set, correspondingly IH264ENC_EXTERROR_INTER_HIGHSPEED
+     *  _MVPERMB is also set
+     */
+    IH264ENC_EXTERROR_INTER_MVPERMB                           = 54,
+    /** Bit 54  Motion vectors per MB set is not in allowed range.
+     *  minBlockSizeP/B is not equal to IH264_BLOCKSIZE_16x16 and not even
+     *  IH264_BLOCKSIZE_8x8
+     */
+    IH264ENC_EXTERROR_INTER_PRESET                            = 55,
+    /** Bit 55  interCoding preset value is out of allowed range
+     */
+    IH264ENC_EXTERROR_INTER_SRCHRGN_SKIPMVBIAS                = 56,
+    /** Bit 56  searchRangeHorP/B or searchRangeVerP/B or skipMVCodingBias
+     *  values are out of allowed range
+     */
+    IH264ENC_EXTERROR_INTERLACE_DATALAYOUT                    = 57,
+    /** Bit 57  In interlaced encoding cases, dataLayout value set as part
+     *  of inBufs structure is not IVIDEO_FIELD_INTERLEAVED and not even
+     *  IVIDEO_FIELD_SEPARATED
+     */
+    IH264ENC_EXTERROR_INTRA_CBCR8X8                           = 58,
+    /** Bit 58  This bit is set if,
+     *  a. intraCodingPreset is not a default
+     *  AND
+     *  b. chromaIntra8x8Enable is enabled
+     *  AND
+     *  c. chromaComponentEnable value is falling out of allowed range
+     *  Please refer IH264ENC_ChormaComponent for more details
+     */
+    IH264ENC_EXTERROR_INTRA_GDR_BFRAME_INPCONTENT_RATE        = 59,
+    /** Bit 59  This bit is set if, in GDR enabled cases
+     *  a. Interlaced encoding is enabled
+     *  b. B frames are enabled
+     *  c. GDR overlap rows is less than 0 or more than intraRefresh rate
+     */
+    IH264ENC_EXTERROR_INTRA_GDR_REFRESHRATE                   = 60,
+    /** Bit 60  gdrOverlapRowsBtwFrames is more than intraRefreshRate
+     */
+    IH264ENC_EXTERROR_INTRA_INTER_FRMINTERVAL                 = 61,
+    /** Bit 61  intraFrame interval is not a multiple of interFrame interval
+     */
+    IH264ENC_EXTERROR_INTRA_LEVEL_MODE                        = 62,
+    /** Bit 62 - lumaIntra8x8Enable is enabled for profile other than
+     *  IH264_HIGH_PROFILE
+     */
+    IH264ENC_EXTERROR_INTRA_PRESET                            = 63,
+    /** Bit 63  intraCoding preset is out of allowed range
+     */
+    IH264ENC_EXTERROR_INTRA_REFRESHMETHOD                     = 64,
+    /** Bit 64  intraRefreshMethod value is out of allowed range
+     */
+    IH264ENC_EXTERROR_INTRA_REFRESHMETHOD_RATE                = 65,
+    /** Bit 65  intraRefreshRate is less than or equal to 0 for
+     *  intraRefreshMethod value other than default
+     */
+    IH264ENC_EXTERROR_INTRA_REFRESHRATE                       = 66,
+    /** Bit 66 - intraRefreshRate is less than 0 for GDR enabled cases
+     */
+    IH264ENC_EXTERROR_IVAHD_BADRESET                          = 67,
+    /** Bit 67  HDVICP reset is not proper
+     */
+    IH264ENC_EXTERROR_IVAHD_BADSTATE                          = 68,
+    /** Bit 68  HDVICP is not in standby state
+     */
+    IH264ENC_EXTERROR_IVAHD_RELEASE                           = 69,
+    /** Bit 69  HDVICP release fail. This occurs if HDVICP is not in
+     *  standby state during release time
+     */
+    IH264ENC_EXTERROR_LEVEL_INPCONTENT                        = 70,
+    /** Bit 70  level less than or equal to IH264_LEVEL_20 for interlaced
+     *  encoding
+     */
+    IH264ENC_EXTERROR_LEVELLIMIT_RESOLUTION                   = 71,
+    /** Bit 71  encoding resolutions/frame_dimensions are more than that
+     *  of level allowed range
+     */
+    IH264ENC_EXTERROR_LOOPFILTER_OFFST_LFIDC                  = 72,
+    /** Bit 72  loop filter preset is not a default and loopfilterDisableIDC,
+     *  filterOffsetA/B is/are out of allowed range or filterOffsetA/B is odd
+     *  value
+     */
+    IH264ENC_EXTERROR_LOOPFILTER_PRESET                       = 73,
+    /* Bit 73  loop filter preset is out of allowed range
+    */
+    IH264ENC_EXTERROR_LUMA_INPUTBUF_MEMTYPE                   = 74,
+    /** Bit 74  memType value set in the plane descriptors of inBufs
+     *  structure corresponding to Luma data is XDM_MEMTYPE_TILED32 or
+     *  XDM_MEMTYPE_TILED16. Allowed value is only XDM_MEMTYPE_TILED8 for
+     *  Luma container
+     */
+    IH264ENC_EXTERROR_METADATA_NUMBUFFERS                     = 75,
+    /** Bit 75  Number of meta data planes (corresponding to
+     *  IH264_USER_DEFINED_SCALINGMATRIX and IH264_SEI_USER_DATA_UNREGISTERED)
+     *  provided is not equal to inBufs->numMetaPlanes
+     */
+    IH264ENC_EXTERROR_METADATABUF_MEMTYPE                     = 76,
+    /** Bit 76 - memType value set in the meta data plane descriptors of
+     *  inBufs structure is not equal to XDM_MEMTYPE_ROW or XDM_MEMTYPE_TILEDPAGE
+     */
+    IH264ENC_EXTERROR_METADATAPLANE_WGTTABLESIZE              = 77,
+    /** Bit 77  In case of user defined scaling matrix, payload_size
+     *  (bufSize.bytes) provided as part of meta data plane descriptors of inBufs
+     *  structure is less the size of weightTable
+     *  (inBufs->metadataPlaneDesc[index].bufSize.bytes) <
+     *                                                 (sizeof(sH264WgtTables_t))
+     */
+    IH264ENC_EXTERROR_METADATATYPES                           = 78,
+    /** Bit 78  metadataType[] are other than the supported values
+     */
+    IH264ENC_EXTERROR_MULITCHNL_BFRAME_NOTSUPPORTED           = 79,
+    /** Bit 79  This bit is set if B frames are enabled in multi Frame
+     *  process call
+     */
+    IH264ENC_EXTERROR_MULITCHNL_CHNLNUMEXCEEDED               = 80,
+    /** Bit 80  This bit is set if number of channels to be processed are
+     *  more that of maximum supported in multi Frame process call
+     */
+    IH264ENC_EXTERROR_MULITCHNL_DATASYNC                      = 81,
+    /** Bit 81  This bit is set if data sync is enabled in multi Frame process
+     *  call
+     */
+    IH264ENC_EXTERROR_MULITCHNL_FRMPCK_STEREOIINFO            = 82,
+    /** Bit 82 - This bit is set if framePackingPreset or stereoInfoPreset is
+     *  enabled in multi Frame process call
+     */
+    IH264ENC_EXTERROR_MULITCHNL_GENHEADER_NOTSUPPORTED        = 83,
+    /** Bit 83 - This bit is set if frame process mode is XDM_GENERATE_HEADER
+     *  in multi Frame process call
+     */
+    IH264ENC_EXTERROR_MULITCHNL_MINBITRATE_NOTSUPPORTED       = 84,
+    /** Bit 84 - This bit is set if minBitRate value is more than 0 in multi
+     *  Frame process call
+     */
+    IH264ENC_EXTERROR_MULITCHNL_MVPERMB                       = 85,
+    /** Bit 85  This bit is set if motion vectors per MB (minBlockSizeP)
+     *  is not same for all the channels submitted in multi Frame process call
+     */
+    IH264ENC_EXTERROR_NALU_GOLDENSPS                          = 86,
+    /** Bit 86  In all NALU preset masks, SPS_WITH_VUI bit is to be set or
+     *  has to be reset. Setting of this bit in few masks and resetting in others
+     *  is not allowed
+     */
+    IH264ENC_EXTERROR_NALU_PRESET                             = 87,
+    /** Bit 87  NALU control preset is out of allowed range
+     */
+    IH264ENC_EXTERROR_NALU_SPS_VUI                            = 88,
+    /** Bit 88  SEI NALU bit is set in a mask and SPS_WITH_VUI is not
+     *  set in that particular mask
+     */
+    IH264ENC_EXTERROR_NOCLEANEXIT                             = 89,
+    /** Bit 89  Early return because M3 has done early abort
+     */
+    IH264ENC_EXTERROR_NUM_INPUT_OUTPUT_BUFS                   = 90,
+    /** Bit 90  There has to atleast 2 input buffers (inBufs->numPlanes :
+     *  1 Luma and 1 CbCr) and 1 output buffer (outBufs->numBufs : bit stream).
+     *  This bit is set if this condition is not satisfied
+     */
+    IH264ENC_EXTERROR_OUTPUTBUF_MEMTYPE                       = 91,
+    /** Bit 91  This bit is set if
+     *  a. output bitstream buffers memory type is not XDM_MEMTYPE_ROW or
+     *     not XDM_MEMTYPE_TILEDPAGE
+     *  OR
+     *  b. output buffers memory type is out of allowed range
+     */
+    IH264ENC_EXTERROR_OUTPUTBUF_PTR_SIZE_NULL                 = 92,
+    /** Bit 92  This bit is set if output data sync is not enabled and
+     *  bitstream buffer pointer is NULL or buffer.bytes is 0
+     */
+    IH264ENC_EXTERROR_OUTPUTDATASIZE_EXCEEDED                 = 93,
+    /** Bit 93 - Encoded output data size has exceeded the available buffer size
+     */
+    IH264ENC_EXTERROR_PRESET_ENC_RATECTRL_LVL                 = 94,
+    /** Bit 94  This bit is set if
+     *  a. encodingPreset is out of allowed range
+     *  b. rateControlPreset is out of allowed range
+     *  c. profile and level out of allowed range
+     *  d. data sync mode out of allowed range
+     *  e. inputChromaFormat, inputContentType,operatingMode,
+     *     maxInterFrameInterval, maxHeight, maxWidth and dataEndianness are
+     *     out of allowed range
+     *  If this bit is set, correspondingly IH264ENC_EXTERROR_PROFILE_DATASYNC
+     *  _INPCONTENT_RES is also set
+     */
+    IH264ENC_EXTERROR_PROFILE_BFRAME                          = 95,
+    /** Bit 95  B frames are enabled for baseline profile
+     */
+    IH264ENC_EXTERROR_PROFILE_DATASYNC_INPCONTENT_RES         = 96,
+    /** Bit 96  This bit is set if
+     *  a. encodingPreset is out of allowed range
+     *  b. rateControlPreset is out of allowed range
+     *  c. profile and level out of allowed range
+     *  d. data sync mode out of allowed range
+     *  e. inputChromaFormat, inputContentType,operatingMode,
+     *     maxInterFrameInterval, maxHeight, maxWidth and dataEndianness are
+     *     out of allowed range
+     *  If this bit is set, correspondingly IH264ENC_EXTERROR_PRESET_ENC_RATECTRL
+     *  _LVL is also set
+     */
+    IH264ENC_EXTERROR_PROFILE_INPCONTENT                      = 97,
+    /** Bit 97  interlaced encoding is enabled for baseline profile
+     */
+    IH264ENC_EXTERROR_RATECTRL_BFRAMEPICSIZE                  = 98,
+    /** Bit 98  rate control, minPicSizeRatioB value is out of allowed range
+     */
+    IH264ENC_EXTERROR_RATECTRL_CBCRQPINDEX_INITBUFLVL         = 99,
+    /** Bit 99  rate control,chromaQPIndexOffset initialBufferLevel are out
+     *  of allowed range
+     */
+    IH264ENC_EXTERROR_RATECTRL_HRDBUFFER_LVLEXCEED            = 100,
+    /** Bit 100  rate control, HRDBufferSize is falling out of level decided
+     *  minimum and maximum limit
+     */
+    IH264ENC_EXTERROR_RATECTRL_IFRAME_QP                      = 101,
+    /** Bit 101  rate control, qpI is not falling in the range [qpMinI, qpMaxI]
+     */
+    IH264ENC_EXTERROR_RATECTRL_IFRAMEPICSIZE                  = 102,
+    /** Bit 102  rate control, minPicSizeRatioI value is out of allowed range
+     */
+    IH264ENC_EXTERROR_RATECTRL_IPBFRAME_QP                    = 103,
+    /** Bit 103  rate control, Qp values set for I, P and B frames are
+     *  falling out allowed values
+     */
+    IH264ENC_EXTERROR_SCLMATRIX_METADATA                      = 104,
+    /** Bit 104  Scaling matrix preset is user defined
+     *  (IH264_SCALINGMATRIX_USERDEFINED_SPSLEVEL or IH264_SCALINGMATRIX_
+     *  USERDEFINED_PPSLEVEL) and meta data is not enabled for user defined
+     *  scaling matrix
+     */
+    IH264ENC_EXTERROR_RATECTRL_PARAMSPRESET                   = 105,
+    /** Bit 105  rate control, rateControlParamsPreset is out of allowed range
+     */
+    IH264ENC_EXTERROR_RATECTRL_PBFRAME_QP                     = 106,
+    /** Bit 106  rate control, Qp values for P or B frames are out of
+     *  range[minQp, maxQp]
+     */
+    IH264ENC_EXTERROR_RATECTRL_PFRAMEPICSIZE                  = 107,
+    /** Bit 107  rate control, minPicSizeRatioP value is out of allowed range
+     */
+    IH264ENC_EXTERROR_RATECTRL_PRESET_BFRAME_INPCONTENT       = 108,
+    /** Bit 108 - IVIDEO_LOW_DELAY rateControlPreset is not supported for
+     *  interlaced encoding and for B frame cases
+     */
+    IH264ENC_EXTERROR_RATECTRL_PROFILE_SCALINGMTRX            = 109,
+    /** Bit 109  scaling matrix preset is out of range or scaling matrix preset
+     *  is other than user defined for profile not equal to IH264_HIGH_PROFILE
+     */
+    IH264ENC_EXTERROR_RATECTRL_RCALGO                         = 110,
+    /** Bit 110  rate control, rcAlgo is out of allowed range
+     */
+    IH264ENC_EXTERROR_RATECTRL_RCALGO_INTERLACE_OR_BFRAME     = 111,
+    /** Bit 111 - RATECONTROL_PRC_LOW_DELAY rcAlgo is not supported for
+     *  interlaced encoding and for B frame cases
+     */
+    IH264ENC_EXTERROR_RATECTRL_SKIPDISTWNDW                   = 112,
+    /** Bit 112  This bit is set if
+     *  a. rcAlgo is RATECONTROL_PRC_LOW_DELAY
+     *  AND
+     *  b. skip distribution window length (skipDistributionWindowLength) or
+     *     number of skip frames in distribution window specified are out of
+     *     allowed range
+     */
+    IH264ENC_EXTERROR_RATECTRL_VBR                            = 113,
+    /** Bit 113  rate control, with CVBR settings, VBR duration (VBRDuration)
+     *  or VBR sensitivity (VBRsensitivity) are out of allowed range
+     */
+    IH264ENC_EXTERROR_RESOLUTION_BITRATE_FRMINTERVAL_GENHEADER= 114,
+    /** Bit 114  This bit is set if any of the below conditions is set
+     *  a. The size of dynamic params structure set is not of base class and
+     *     nor even extended class
+     *  b. Encoding dimensions are out of range
+     *  c. Target bit rate less than minimum bt rate or frame rate is less than 0
+     *  d. Generate header mode other than XDM_ENCODE_AU and XDM_GENERATE_HEADER
+     *  e. User forced frame other than IDR/NA frame
+     *  f. Wrong settings in interframe or intraFrame intervals
+     *  g. Incorrect settings in motion vector accuracy settings
+     *  If this bit is set, correspondingly IH264ENC_EXTERROR_CAPTUREWIDTH_
+     *  FORCEFRAME_LTRP_QPEL is also set
+     */
+    IH264ENC_EXTERROR_ROI_COORDINATES                         = 115,
+    /** Bit 115  ROI co-ordinates provided are not proper. x/y may be less
+     *  than 0 or more than frame dimensions. Also please see that Top.x
+     *  should be less than Bottom.x and Top.y should be less than bottom.y
+     *  for all co-ordinates
+     */
+    IH264ENC_EXTERROR_ROI_NUMBERROIS                          = 116,
+    /** Bit 116  Number of ROI regions set are out of allowed range
+     */
+    IH264ENC_EXTERROR_ROI_PRIORITY                            = 117,
+    /** Bit 117  ROI priority (roiPriority) provided are out of allowed range.
+     *  This check is done with rate control enabled cases
+     */
+    IH264ENC_EXTERROR_ROI_QP                                  = 118,
+    /** Bit 118 - ROI priority (roiPriority) provided are out of allowed range.
+     *  This check is done with rate control disabled cases.
+     *  Here roiPriority holds the Qp values of the ROI regions
+     */
+    IH264ENC_EXTERROR_ROI_TYPE                                = 119,
+    /** Bit 119  ROI types (roiType) provided are out of allowed range
+     */
+    IH264ENC_EXTERROR_SLICE_NONE_DATASYNC                     = 120,
+    /** Bit 120  data sync call back notification is enabled for every
+     *  slice (outputDataMode == IVIDEO_SLICEMODE)and slice level encoding
+     *  is disabled (sliceMode == IH264_SLICEMODE_NONE)
+     */
+    IH264ENC_EXTERROR_SLICE_H241_ENTROPY_INTERFRAME_INTERLACE = 121,
+    /** Bit 121  This bit is set if H241 is enabled and
+     *  a. Width provided is less than that being supported in H241 cases
+     *  OR
+     *  b. Interlaced encoding is enabled
+     *  OR
+     *  c. Entropy coding mode is CABAC
+     *  OR
+     *  d. B frames are enabled
+     *  OR
+     *  e. Slice unit size in bytes (sliceUnitSize) provided is loess that being
+     *     supported
+     *  If this bit is set, correspondingly IH264ENC_EXTERROR_SLICE_H241_
+     *  WIDTH_SLICESIZE is also set
+     */
+    IH264ENC_EXTERROR_SLICE_STRMFORMAT_DATASYNC               = 122,
+    /** Bit 122  stream format IH264_NALU_STREAM is supported only with default
+     *  slice mode and datasync option as IVIDEO_SLICEMODE
+     */
+    IH264ENC_EXTERROR_SLICE_H241_WIDTH_SLICESIZE              = 123,
+    /** Bit 123  This bit is set if H241 is enabled and
+     *  a. Width provided is less than that being supported in H241 cases
+     *  OR
+     *  b. Interlaced encoding is enabled
+     *  OR
+     *  c. Entropy coding mode is CABAC
+     *  OR
+     *  d. B frames are enabled
+     *  OR
+     *  e. Slice unit size in bytes (sliceUnitSize) provided is loess that being
+     *     supported
+     */
+    IH264ENC_EXTERROR_SLICE_MODE_SIZE                         = 124,
+    /** Bit 124  This bit is set if
+     *  a. Slice mode is SLICEMODE_MBUNIT and slice size provided is more than
+     *     size of the frame or slice size is less than 6
+     *  OR
+     *  b. Slice mode is SLICEMODE_OFFSET and sliceOffset0 is more than
+     *     sliceOffset1 or sliceOffset1 is more than sliceoffset2
+     */
+    IH264ENC_EXTERROR_SLICE_PRESET                            = 125,
+    /** Bit 125  slice coding preset is out of allowed range
+     */
+    IH264ENC_EXTERROR_SLICE_STRMFORMAT                        = 126,
+    /** Bit 126  stream format provided is out of allowed range
+     */
+    IH264ENC_EXTERROR_STATUS_PTRNULL                          = 127,
+    /** Bit 127  status structure pointer passed in the encoder control call is
+     *  NULL
+     */
+    IH264ENC_EXTERROR_STATUS_SIZE                             = 128,
+    /** Bit 128 - The size of status params structure set is not of base class
+     *  and nor even extended class
+     */
+    IH264ENC_EXTERROR_STEREO_INPCONTENT                       = 129,
+    /** Bit 129  stereo info preset is enabled for progressive encoding which
+     *  is not supported in this version of encoder
+     */
+    IH264ENC_EXTERROR_STEREO_PRESET                           = 130,
+    /** Bit 130  stereo info preset set is out of allowed range
+     */
+    IH264ENC_EXTERROR_VERSION_BUFFER_NULL_OR_SIZE             = 131,
+    /** Bit 131  data buffer pointer as part of status structure is NULL.
+     *  This buffer is used to place the version number of encoder.
+     *  OR
+     *  The data size as part of status structure is less than the size
+     *  required to place an version number
+     */
+    IH264ENC_EXTERROR_VUI_NUMUNITSINTICKS                     = 132,
+    /** Bit 132  VUI coding preset is user defined and the parameter
+     *  numUnitsInTicks as part of vuiCodingParams is less than 0
+     */
+    IH264ENC_EXTERROR_VUI_PRESET                              = 133,
+    /** Bit 133  VUI coding preset set is out of allowed range
+     */
+    IH264ENC_NUM_OUTPUT_BUFS_ANALYTICINFO                     = 134,
+    /** Bit 134  Analytic info is enabled and the buffer to store analytic
+     *  info is not provided i.e., (outBufs->numBufs < 2 AND enableAnalyticinfo)
+     */
+    IH264ENC_EXTERROR_NUM_MAXBITS,
+    /** Maximum number of sub extended error bits
+     */
+    IH264ENC_EXTERROR_NUM_MAXWORDS = ((IH264ENC_EXTERROR_NUM_MAXBITS + 31) / 32)
+                                     /** Each word can hold 32 error bits, so max words are calculated as above
+                                      */
+}IH264ENC_ExtErrBits;
+
+/**
+ *  @enum       IH264ENC_Level
+ *  @brief      Level Identifier for H.264 Encoder
+*/
+typedef enum {
+    IH264_LEVEL_10 = 10, /**<  Level 1.0  */
+    IH264_LEVEL_1b =  9, /**<  Level 1.b  */
+    IH264_LEVEL_11 = 11, /**<  Level 1.1  */
+    IH264_LEVEL_12 = 12, /**<  Level 1.2  */
+    IH264_LEVEL_13 = 13, /**<  Level 1.3  */
+    IH264_LEVEL_20 = 20, /**<  Level 2.0  */
+    IH264_LEVEL_21 = 21, /**<  Level 2.1  */
+    IH264_LEVEL_22 = 22, /**<  Level 2.2  */
+    IH264_LEVEL_30 = 30, /**<  Level 3.0  */
+    IH264_LEVEL_31 = 31, /**<  Level 3.1  */
+    IH264_LEVEL_32 = 32, /**<  Level 3.2  */
+    IH264_LEVEL_40 = 40, /**<  Level 4.0  */
+    IH264_LEVEL_41 = 41, /**<  Level 4.1  */
+    IH264_LEVEL_42 = 42, /**<  Level 4.2  */
+    IH264_LEVEL_50 = 50, /**<  Level 5.0  */
+    IH264_LEVEL_51 = 51 /**<  Level 5.1  */
+
+} IH264ENC_Level;
+
+
+/**
+ *  @enum       IH264ENC_Profile
+ *  @brief      Profile Identifier for H.264 Encoder
+*/
+typedef enum {
+    IH264_BASELINE_PROFILE = 66,                /**< BaseLine Profile   */
+    IH264_MAIN_PROFILE     = 77,                /**< Main Profile       */
+    IH264_EXTENDED_PROFILE = 88,                /**< Extended Profile   */
+    IH264_HIGH_PROFILE     = 100,               /**< High Profile       */
+    IH264_DEFAULT_PROFILE  = IH264_HIGH_PROFILE, /**< Default Profile    */
+    IH264_HIGH10_PROFILE   = 110,               /**< High 10 Profile    */
+    IH264_HIGH422_PROFILE  = 122,               /**< High 4:2:2 Profile */
+    IH264SVC_BASELINE_PROFILE = 83,             /**< SVC Baseline Profile */
+    IH264SVC_HIGH_PROFILE     = 86              /**< SVC High Profile */
+} IH264ENC_Profile;
+
+/**
+ *  @enum       IH264ENC_MetadataType
+ *  @brief      Meta Data for H.264 encoder
+
+   The way to pass meta data to encode is via inBufs to the encoder during
+   process call.
+   The way to get meta data from encode is via outBufs of the encoder during
+   process call.
+
+   When application request the buffer infos via control call with
+   XDM_GETBUFINFO, encoder should count a buffer to have meta data at
+   input/output level for this purpose. If for some metadata size is not known
+   by encoder then it should return size =-1 so that application can
+   allocate as per its knowledge. Same way for some meta-data application
+   might not provide the size to codec via XDM2_SingleBufDesc.bufSize.bytes,
+   in that case application can set it to -1. The meta data which has size
+   field in its format, uses size of buffer from that field only.
+   Example: User want to insert SEI_USER_DATA_UNREGISTERED meta data at each
+   IDR picture, the following steps should be followed
+
+ 1. Create the encoder object with IVIDENC2_Params::metadataType[0] =
+   IH264_SEI_USER_DATA_UNREGISTERED and metadataType[1] and metadataType[2]
+   = IVIDEO_METADATAPLANE_NONE
+
+    Also have IH264ENC_SET_NALU(naluPresentMaskIDRPicture, SEI)
+ 2. Call Control function with XDM_GETBUFINFO. Encoder should return one
+    additional input buffer as required. size of the buffer will be -1 as
+    encoder doesn't know the size
+ 3. Application should have a memory allocated for this meta data and pass on
+    to the encoder via IVIDEO2_BufDesc *inBufs->numMetaPlanes = 1
+                                                          +----------------+
+    inBufs->metadataPlaneDesc[index].buf = pBuffer ; ---> | size | payLoad |
+    inBufs->metadataPlaneDesc[index].bufSize.bytes = -1 ; +----------------+
+    since the meta-data format includes size field, encoder will read size from
+    there and utilize it.
+
+    index of metadataPlaneDesc is the index of metaDataType which is holding
+    the particular meta data type. In this example metadataType[0] is holding
+    IH264_SEI_USER_DATA_UNREGISTERED so index = 0 of metadataPlaneDesc points
+    to IH264_SEI_USER_DATA_UNREGISTERED specific meta data
+*/
+
+typedef enum {
+    IH264_SEI_USER_DATA_UNREGISTERED = XDM_CUSTOMENUMBASE,
+    /**< H.264 allows inserting SEI message for any user data. refer section
+    *    D.1.6 of H.264 standard.
+    *    By setting this value to any if IVIDENC2_Params::metadataType[i]
+    *    user can provide its user data SEI to be inserted
+    *    in H.264 bit-stream
+    *    The format of user data is as below
+    *    typedef struct {
+    *       U32 size;       only lower 10-bits are considered
+    *       U08 payload[];  number of bytes for payload is indicated by first
+    *                       32 bit field size
+    *    }
+    * The picture which uses this metadata will be decided by naluPresentMask::SEI
+    * bit. Example
+    * if SEI bit of only naluPresentMaskStartOfSequence is set to 1 then this meta
+    * data will be used  only during start of sequence
+    * Encoder can accept maximum size of this meta data as 1023 bytes < 1K.
+    * Only lower 10-bits of size field is used by encoder
+    */
+
+    IH264_REGION_OF_INTEREST,
+    /**< Not defined yet the format but this field is to control the encoder to
+    *  accept ROI data as input
+    */
+
+    IH264_USER_DEFINED_SCALINGMATRIX
+    /**< H.264 allows inserting user defined scaling matrices.
+    *  By setting this value to any if IVIDENC2_Params::metadataType[i]
+    *  user can provide its user data SEI to be inserted in H.264 bit-stream
+    * The format of user data is as below
+    * typedef struct {
+    *   U32 size;        only lower 10-bits are considered
+    *   U08 payload[];   number of bytes for payload is indicated by first
+    *                    32 bit field size
+    *  }
+    * format of payload is for scaling matrix is defined in User GUide
+    */
+} IH264ENC_MetadataType;
+
+/**
+ *  @enum       IH264ENC_Control
+ *  @brief      Diffrent types of controls for encoding frame
+ *              Eg: refere long term reference frame
+ */
+
+typedef enum {
+    IH264ENC_CTRL_REFER_LONG_TERM_FRAME = XDM_CUSTOMENUMBASE,
+    /**< Refere long term reference frame (I/IDR frames) when
+     * IH264ENC_LTRPScheme is IH264ENC_LTRP_REFERTOIDR
+     */
+    IH264ENC_CTRL_NOWRITE_NOREFUPDATE,
+    /**< Current frame is a non-referencing P frame and do
+     * not update the reference frame for this frame. Applicable
+     * when IH264ENC_LTRPScheme is IH264ENC_LTRP_REFERTOP_PROACTIVE
+     */
+    IH264ENC_CTRL_WRITE_NOREFUPDATE,
+    /**< Current frame is a referencing P frame and do
+     * not update the reference frame for this frame. Applicable
+     * when IH264ENC_LTRPScheme is IH264ENC_LTRP_REFERTOP_PROACTIVE
+     */
+    IH264ENC_CTRL_NOWRITE_REFUPDATE,
+    /**< Current frame is a non-referencing P frame and
+     * update the reference frame for this frame. Applicable
+     * when IH264ENC_LTRPScheme is IH264ENC_LTRP_REFERTOP_PROACTIVE
+     */
+    IH264ENC_CTRL_WRITE_REFUPDATE,
+    /**< Current frame is a referencing P frame and
+     * update the reference frame for this frame. Applicable
+     * when IH264ENC_LTRPScheme is IH264ENC_LTRP_REFERTOP_PROACTIVE
+     */
+    IH264ENC_CTRL_START_GDR
+    /**< Current frame is a choosen to start the GDR activity. Applicable
+     * when intraRefreshMethod is IH264_INTRAREFRESH_GDR
+     */
+} IH264ENC_Control;
+
+/**
+ *  @enum       IH264ENC_LTRPScheme
+ *  @brief      Diffrent types of long term-frame referencing scheme
+ *              Eg: Mark all the I frames as long term-reference frame
+ */typedef enum {
+    IH264ENC_LTRP_NONE = 0,
+    /**< No longterm refernce frame in the sequnce
+     */
+    IH264ENC_LTRP_REFERTO_PERIODICLTRP = 1,
+    /**< Mark frames as long-term reference frame with the period given
+     * by LTRPPeriod of IH264ENC_Params and
+     * based on the frame control IH264ENC_Control, refer to
+     * the long-term reference frame .
+     */
+    IH264ENC_LTRP_REFERTOP_PROACTIVE =2,
+    /**< Two long term frames are supported in this schme and
+     * long-term index marking and refernce frame update is done based
+     * the IH264ENC_Control values
+     */
+    IH264ENC_LTRP_REFERTOP_REACTIVE = 3
+                                      /**< Mark frames as long-term reference frame with the period given
+                                       * by LTRPPeriod of IH264ENC_Params.
+                                       * At any point of time there will be 2 long-term frames and
+                                       * based on the frame control IH264ENC_Control, refer to
+                                       * the last long-term reference frame .
+                                       */
+}IH264ENC_LTRPScheme;
+
+/**
+ *  @enum       IH264ENC_PicOrderCountType
+ *  @brief      Picture Order Count Type Identifier for H.264 Encoder
+*/
+typedef enum {
+    IH264_POC_TYPE_0 = 0,                     /**< POC type 0   */
+    IH264_POC_TYPE_DEFAULT = IH264_POC_TYPE_0, /**< Default poc type */
+    IH264_POC_TYPE_1 = 1,                     /**< POC type 1   */
+    IH264_POC_TYPE_2 = 2,                     /**< POC type 2   */
+    IH264_POC_TYPE_MAX
+
+} IH264ENC_PicOrderCountType;
+
+
+/**
+
+  @enum   IH264ENC_ScalingMatPreset
+  @brief  These enumerations control the type of scaling matrix picked up
+          by encoder
+
+*/
+typedef enum {
+    IH264_SCALINGMATRIX_NONE        = 0,
+    /**< Default Scaling matrix (No scaling) */
+    IH264_SCALINGMATRIX_NORMAL      = 1,
+    /**< Flat Scaling matrix: part of standard (NO Scaling Matrix) */
+    IH264_SCALINGMATRIX_DEFAULT     = IH264_SCALINGMATRIX_NORMAL,
+    /**< For normal contents */
+    IH264_SCALINGMATRIX_NOISY       = 2,
+    /**< For noisy contents  */
+    IH264_SCALINGMATRIX_STD_DEFAULT = 3,
+    /**< Default Scaling Matrix provided by H.264 standard */
+    IH264_SCALINGMATRIX_USERDEFINED_SPSLEVEL = 4,
+    /**< User defined SM at SPS level*/
+    IH264_SCALINGMATRIX_USERDEFINED_PPSLEVEL = 5,
+    /**< User defined SM at PPS level*/
+    IH264_SCALINGMATRIX_MAX
+
+} IH264ENC_ScalingMatPreset;
+
+
+/**
+
+  @enum   IH264ENC_RateControlAlgo
+  @brief  These enumerations control the type of rateControl algo to be picked
+          up by encoder. Only useful if IVIDENC2::rateControlPreset is set as
+          IVIDEO_USER_DEFINED
+
+*/
+typedef enum {
+    IH264_RATECONTROL_PRC               = 0,       /**< Perceptual Rate Control,
+                                                   * controls the QP @ MB level
+                                                   */
+    IH264_RATECONTROL_PRC_LOW_DELAY     = 1,       /** Low Delay Rate Control */
+    IH264_RATECONTROL_DEFAULT = IH264_RATECONTROL_PRC /** Default rcAlgo is PRC  */
+
+} IH264ENC_RateControlAlgo;
+
+
+/**
+
+  @enum   IH264ENC_FrameQualityFactor
+  @brief  These enumerations control the quality factor b/w two types of frames
+          For example if user want I frame Quality to be given more importance
+          than P frame, one can define it to be higher quality factor
+
+*/
+typedef enum {
+    IH264_QUALITY_FACTOR_1  = 0,  /**< Same Quality factor
+                                  * b/w two types of frame
+                                  */
+    IH264_QUALITY_FACTOR_DEFAULT  = IH264_QUALITY_FACTOR_1,
+    /**< Default Quality factor
+    * to be used by encoder
+    */
+    IH264_QUALITY_FACTOR_2  = 1,  /**< High Quality factor to
+                                  * one frame type b/w two types
+                                  of frame
+                                  */
+    IH264_QUALITY_FACTOR_3  = 2,  /**< Higher Quality factor to
+                                  one frame type b/w two types of frame
+                                  */
+    IH264_QUALITY_FACTOR_MAX
+
+} IH264ENC_FrameQualityFactor;
+
+
+
+/**
+
+  @enum   IH264ENC_RateControlParamsPreset
+  @brief  These enumerations control the RateControl Params
+
+*/
+
+typedef enum {
+    IH264_RATECONTROLPARAMS_DEFAULT     = 0,
+    /**< Default Rate Control params */
+    IH264_RATECONTROLPARAMS_USERDEFINED = 1,
+    /**< User defined Rate Control params */
+    IH264_RATECONTROLPARAMS_EXISTING    = 2,
+    /**< Keep the Rate Control params as existing. This is
+    * useful because during control call if user don't want
+    * to chnage the Rate Control Params
+    */
+    IH264_RATECONTROLPARAMS_MAX
+
+} IH264ENC_RateControlParamsPreset;
+
+/**
+
+  @enum   IH264ENC_InterCodingPreset
+  @brief  These enumerations control the type of inter coding
+
+*/
+
+typedef enum {
+    IH264_INTERCODING_DEFAULT     = 0, /**< Default Inter coding params      */
+    IH264_INTERCODING_USERDEFINED = 1, /**< User defined inter coding params */
+    IH264_INTERCODING_EXISTING    = 2, /**< Keep the inter coding params as
+                                       *  existing. This is useful because
+                                       *  during control call if user don't
+                                       *  want to chnage the inter coding Params
+                                       */
+    IH264_INTERCODING_MED_SPEED_HIGH_QUALITY   = 3, /**< Med Speed High Quality*/
+    IH264_INTERCODING_HIGH_SPEED               = 4, /**< High Speed Preset*/
+    IH264_INTERCODING_MAX
+
+} IH264ENC_InterCodingPreset;
+
+/**
+
+  @enum   IH264ENC_MeAlgoMode
+  @brief  These enumerations control the mealgo selected
+
+*/
+
+typedef enum {
+    IH264ENC_MOTIONESTMODE_NORMAL     = 0,         /**< Normal meAlgo         */
+    IH264ENC_MOTIONESTMODE_HIGH_SPEED  = 1,        /**< meAlgo for HIGH SPEED */
+    IH264ENC_MOTIONESTMODE_DEFAULT    = IH264ENC_MOTIONESTMODE_NORMAL,
+    /**< Default meAlgo        */
+    IH264ENC_MOTIONESTMODE_MAX
+
+} IH264ENC_MeAlgoMode;
+
+/**
+
+  @enum   IH264ENC_IntraCodingBias
+  @brief  These enumerations control the number of intra Mbs to be encoded
+
+*/
+
+typedef enum {
+    IH264ENC_INTRACODINGBIAS_NORMAL      = 0,
+    /**< Normal number of intra Mbs          */
+    IH264ENC_INTRACODINGBIAS_HIGH_SPEED  = 12,
+    /**< intra Mbs restricted for HIGH SPEED */
+    IH264ENC_INTRACODINGBIAS_DEFAULT     = IH264ENC_INTRACODINGBIAS_NORMAL,
+    /**< Default intra codign bias           */
+    IH264ENC_INTRACODINGBIAS_MAX
+
+} IH264ENC_IntraCodingBias;
+
+/**
+
+  @enum   IH264ENC_InterBlockSize
+  @brief  These enumerations are defined for minimum Inter block size
+
+*/
+
+typedef enum {
+    IH264_BLOCKSIZE_16x16     = 0,                   /**< 16x16 Block size    */
+    IH264_BLOCKSIZE_DEFAULT   = IH264_BLOCKSIZE_16x16, /**< Default block size  */
+    IH264_BLOCKSIZE_8x8       = 1,                   /**< 8x8 Block size      */
+    IH264_BLOCKSIZE_4x4       = 2,                   /**< 4x4 Block size      */
+    IH264_BLOCKSIZE_MAX
+
+} IH264ENC_InterBlockSize;
+
+/**
+
+  @enum   IH264ENC_BiasFactor
+  @brief  Encoder uses bias b/w two possible chices for lot of decisions.
+  It is to control the mild/strong ness of the biasing
+
+*/
+typedef enum {
+    IH264_BIASFACTOR_LOW      = 0,
+    /**< Low biasing                */
+    IH264_BIASFACTOR_MEDIUM   = 1,
+    /**< Normal/Med biasing         */
+    IH264_BIASFACTOR_NORMAL   = IH264_BIASFACTOR_MEDIUM,
+    /**< Normal/Med biasing         */
+    IH264_BIASFACTOR_DEFAULT  = IH264_BIASFACTOR_MEDIUM,
+    /**< Default :Normal/Med biasing*/
+    IH264_BIASFACTOR_HIGH     = 2,
+    /**< High biasing               */
+    IH264_BIASFACTOR_MILD       = 4, /**< Mild biasing             */
+    IH264_BIASFACTOR_ADAPTIVE       = 5, /**< Adaptive biasing     */
+    IH264_BIASFACTOR_MAX
+} IH264ENC_BiasFactor;
+
+
+/**
+
+  @enum   IH264ENC_IntraRefreshMethods
+  @brief  Refresh method Type Identifier for H.264 Encoder
+
+*/
+
+typedef enum {
+    IH264_INTRAREFRESH_NONE       = 0, /**< Doesn't insert forcefully intra
+                                            macro blocks */
+    IH264_INTRAREFRESH_DEFAULT    = IH264_INTRAREFRESH_NONE,
+    /**< Default intra refresh is OFF */
+    IH264_INTRAREFRESH_CYCLIC_MBS,     /**< Insters intra macro blocks in a
+                                       * cyclic fashion cyclic interval is
+                                       * equal to intraRefreshRate
+                                       */
+    IH264_INTRAREFRESH_CYCLIC_SLICES,  /**< Insters Intra Slices(Row based) in
+                                       * a cyclic fashion:
+                                       * cyclic interval is equal to
+                                       * intraRefreshRate
+                                       */
+    IH264_INTRAREFRESH_RDOPT_MBS,      /**< position of intra macro blocks is
+                                       * intelligently  chosen by encoder,
+                                       * but the number of forcely coded
+                                       * intra macro blocks in a frame is
+                                       * gaurnteed to be equal to
+                                       * totalMbsInFrame/intraRefreshRate
+                                       */
+    IH264_INTRAREFRESH_GDR,            /**< Instead of a sudden Intra Refresh
+                                       * of entire frame, the frame is refreshed
+                                       * Gradualy over a duration (which is con-
+                                       * figerable) of frames with refresh
+                                       * happening by Intra coded rows scanning
+                                       *from top to bottom of the scene/picture.
+                                       */
+    IH264_INTRAREFRESH_MAX
+
+} IH264ENC_IntraRefreshMethods;
+
+/**
+
+  @enum   IH264ENC_ChormaComponent
+  @brief  These enumerations control the selction of chroma component to perfom
+          chroma intra estimation
+
+*/
+typedef enum {
+    IH264_CHROMA_COMPONENT_CB_CR_BOTH  = 0, /**< BOth Cb and Cr component */
+    IH264_CHROMA_COMPONENT_CR_ONLY     = 1, /**< Only Cr Component        */
+    IH264_CHROMA_COMPONENT_DEFAULT     = IH264_CHROMA_COMPONENT_CR_ONLY,
+    /**< Default is Only Cr Component */
+    IH264_CHROMA_COMPONENT_MAX
+
+} IH264ENC_ChormaComponent;
+
+
+/**
+
+  @enum   IH264ENC_IntraCodingPreset
+  @brief  These enumerations control the type of intra coding
+
+*/
+
+typedef enum {
+    IH264_INTRACODING_DEFAULT     = 0, /**< Default intra coding params      */
+    IH264_INTRACODING_USERDEFINED = 1, /**< User defined intra coding params */
+    IH264_INTRACODING_EXISTING    = 2,
+    IH264_INTRACODING_HIGH_SPEED  = 3, /**< High Speed intra Coding Preset   */
+    IH264_INTRACODING_MAX
+
+} IH264ENC_IntraCodingPreset;
+
+/**
+
+  @enum   IH264ENC_NALUnitType
+  @brief  These enumerations define the NALU type supported by H.264
+
+*/
+typedef enum {
+    IH264_NALU_TYPE_UNSPECIFIED          =  0,
+    /**< Unspecified Slice Type               */
+    IH264_NALU_TYPE_SLICE                =  1,
+    /**< slice of a non-IDR picture           */
+    IH264_NALU_TYPE_SLICE_DP_A           =  2,
+    /**< Coded slice data partition A         */
+    IH264_NALU_TYPE_SLICE_DP_B           =  3,
+    /**< Coded slice data partition B         */
+    IH264_NALU_TYPE_SLICE_DP_C           =  4,
+    /**< Coded slice data partition C         */
+    IH264_NALU_TYPE_IDR_SLICE            =  5,
+    /**< slice of an IDR picture              */
+    IH264_NALU_TYPE_SEI                  =  6,
+    /**< Supplemental enhancement information */
+    IH264_NALU_TYPE_SPS                  =  7,
+    /**< Sequence parameter set               */
+    IH264_NALU_TYPE_PPS                  =  8,
+    /**< Picture parameter set                */
+    IH264_NALU_TYPE_AUD                  =  9,
+    /**< Access unit delimiter                */
+    IH264_NALU_TYPE_EOSEQ                = 10,
+    /**< End of sequence                      */
+    IH264_NALU_TYPE_EOSTREAM             = 11,
+    /**< End of stream                        */
+    IH264_NALU_TYPE_FILLER               = 12,
+    /**< Filler data                          */
+    IH264_NALU_TYPE_SPS_WITH_VUI         = 13,
+    /**< Sequence parameter set with VUI      */
+    IH264_NALU_TYPE_USER_DATA_UNREGD_SEI = 14,
+    /**< User Data unregsitered SEI           */
+    IH264_NALU_TYPE_SSPS                 = 15,
+    /**< Sub-Sequence Parameter Set for SVC   */
+    IH264_NALU_TYPE_CODED_SLICE_IN_SCALABLE_EXTN = 20
+                                                   /**< Coded Slice in Scalable Extn for SVC   */
+
+} IH264ENC_NALUnitType;
+
+
+/**
+
+  @enum   IH264ENC_NALUControlPreset
+  @brief  These enumerations define the control mechanism for insertion of
+          different NALU types at different point in video sequence
+
+*/
+
+typedef enum {
+    IH264_NALU_CONTROL_DEFAULT     = 0, /**< Default NALU insertion      */
+    IH264_NALU_CONTROL_USERDEFINED = 1, /**< User defined NALU insertion */
+    IH264_NALU_CONTROL_MAX
+
+} IH264ENC_NALUControlPreset;
+
+/**
+
+  @enum   IH264ENC_SliceCodingPreset
+  @brief  These enumerations control the type of slice coding
+
+*/
+
+typedef enum {
+    IH264_SLICECODING_DEFAULT     = 0,
+    /**< Default slice coding params                        */
+    IH264_SLICECODING_USERDEFINED = 1,
+    /**< User defined slicecoding params                    */
+    IH264_SLICECODING_EXISTING    = 2,
+    /**< Keep the slice coding params as existing           */
+    /**< This is useful because during control call         */
+    /**< if user don't want to chnage the sliceCodingParams */
+    IH264_SLICECODING_MAX
+
+} IH264ENC_SliceCodingPreset;
+
+/**
+
+  @enum   IH264ENC_SliceMode
+  @brief  These enumerations control the type of slice coding
+
+*/
+
+typedef enum {
+    IH264_SLICEMODE_NONE    = 0,
+    IH264_SLICEMODE_DEFAULT = IH264_SLICEMODE_NONE,
+    /**< Default slice coding mode is MB based */
+    IH264_SLICEMODE_MBUNIT  = 1,
+    /**< Slices are controlled based upon number of Macroblocks   */
+    IH264_SLICEMODE_BYTES   = 2,
+    /**< Slices are controlled based upon number of bytes         */
+    IH264_SLICEMODE_OFFSET  = 3,
+    /**< Slices are controlled based upon user defined offset in
+    * unit of Rows
+    */
+    IH264_SLICEMODE_MAX
+
+} IH264ENC_SliceMode;
+
+/**
+
+  @enum   IH264ENC_StreamFormat
+  @brief  These enumerations control the type stream format
+
+*/
+typedef enum {
+    IH264_BYTE_STREAM = 0,
+    /**< bit-stream contains the start code identifier*/
+    IH264_STREAM_FORMAT_DEFAULT = IH264_BYTE_STREAM,
+    /**< Default slice coding mode is byte-stream     */
+    IH264_NALU_STREAM = 1,
+    /**< bit-stream doesn't contain the start code identifier */
+    IH264_STREAM_FORMAT_MAX
+}IH264ENC_StreamFormat;
+
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/**
+ * @enum   IH264ENC_LoopFilterPreset
+ * @brief  These enumerations control the type of slice coding
+*/
+
+typedef enum {
+    IH264_LOOPFILTER_DEFAULT     = 0, /**< Default loop-filtering params      */
+    IH264_LOOPFILTER_USERDEFINED = 1, /**< User defined loop-filtering params */
+    IH264_LOOPFILTER_MAX
+} IH264ENC_LoopFilterPreset;
+
+/**
+
+  @enum   IH264ENC_LoopFilterDisableIDC
+  @brief  Control Parameter to disable loop filter at different places
+
+*/
+typedef enum {
+    IH264_DISABLE_FILTER_NONE = 0,
+    /**< Enable filtering of all the edges */
+    IH264_DISABLE_FILTER_DEFAULT   = IH264_DISABLE_FILTER_NONE,
+    /**< Default is Loop filter enabled    */
+    IH264_DISABLE_FILTER_ALL_EDGES,
+    /**< Disable filtering of all the edge */
+    IH264_DISABLE_FILTER_SLICE_EDGES,
+    /**< Disable filtering of slice edges  */
+    IH264_DISABLE_FILTER_MAX
+} IH264ENC_LoopFilterDisableIDC;
+
+/**
+
+  @enum   IH264ENC_SliceGroupMapType
+  @brief  Slice group map type defined by H.264 standard
+
+*/
+
+typedef enum {
+    IH264_INTERLEAVED_SLICE_GRP             = 0,
+    /**< 0 : Interleaved Slice Group    */
+    IH264_DISPERSED_SLICE_GRP               = 1,
+    /**< 1 : Dispersed Slice Group      */
+    IH264_FOREGRND_WITH_LEFTOVER_SLICE_GRP  = 2,
+    /**< 2 : ForeGround with Left Over  */
+    IH264_BOX_OUT_SLICE_GRP                 = 3,
+    /**< 3 : Box Out                    */
+    IH264_RASTER_SCAN_SLICE_GRP             = 4,
+    /**< 4 : Raster Scan                */
+    IH264_SLICE_GRP_MAP_DEFAULT             = IH264_RASTER_SCAN_SLICE_GRP,
+    /**< Default*/
+    IH264_WIPE_SLICE_GRP                    = 5,
+    /**< 5 : Wipe slice group           */
+    IH264_EXPLICIT_SLICE_GRP                = 6
+                                              /**< 6 : Explicit Slice gropup map  */
+} IH264ENC_SliceGroupMapType;
+
+/**
+
+  @enum   IH264ENC_SliceGroupChangeDirection
+  @brief  Different Scan /rotation oreder
+
+*/
+
+typedef enum {
+    IH264_RASTER_SCAN             = 0,
+    /**< 0 : Raster scan order                      */
+    IH264_CLOCKWISE               = 0,
+    /**< 0 : Clockwise (used for BOX OUT FMO Params)*/
+    IH264_RIGHT                   = 0,
+    /**< 0 : RIGHT (Used for Wipe FMO type)         */
+    IH264ENC_SLICEGROUP_CHANGE_DIRECTION_DEFAULT = IH264_RASTER_SCAN,
+    /**< Default      */
+    IH264_REVERSE_RASTER_SCAN     = 1,
+    /**< 1 : Reverse Raster Scan Order              */
+    IH264_COUNTER_CLOCKWISE       = 1,
+    /**< 1 : Counter Clockwise (used for BOX OUT
+    * FMO Params)
+    */
+    IH264_LEFT                    = 1
+                                    /**< 1 : LEFT (Used for Wipe FMO type)           */
+} IH264ENC_SliceGroupChangeDirection;
+
+/**
+
+  @enum   IH264ENC_FMOCodingPreset
+  @brief  Preset to define FMO coding type
+
+*/
+
+typedef enum {
+    IH264_FMOCODING_NONE             = 0,                   /**< 0 : NO FMO */
+    IH264_FMOCODING_DEFAULT          = IH264_FMOCODING_NONE, /**< 0 : NO FMO */
+    IH264_FMOCODING_USERDEFINED      = 1 /**< 1 : User defined FMO parameters */
+
+} IH264ENC_FMOCodingPreset;
+
+
+/**
+
+  @enum   IH264ENC_VUICodingPreset
+  @brief  Defines the Preset for VUI coding
+
+*/
+
+typedef enum {
+    IH264_VUICODING_DEFAULT          = 0, /**< Default VUI Parameters. Note that
+                                          * Enable/Disable of VUI is via
+                                          * nalUnitControlParams
+                                          */
+    IH264_VUICODING_USERDEFINED      = 1, /**< 1 : User defined VUI parameters*/
+    IH264_VUICODING_MAX                   /**< Max VUI Coding enum            */
+
+} IH264ENC_VUICodingPreset;
+
+
+/**
+
+  @enum   IH264ENC_VideoFormat
+  @brief  Defines different video formats
+
+*/
+typedef enum {
+    IH264ENC_VIDEOFORMAT_COMPONENT, /**< component video format  */
+    IH264ENC_VIDEOFORMAT_PAL,      /**< PAL video format        */
+    IH264ENC_VIDEOFORMAT_NTSC,     /**< NTSC video format       */
+    IH264ENC_VIDEOFORMAT_SECAM,    /**< SECAM video format      */
+    IH264ENC_VIDEOFORMAT_MAC,      /**< MAC video format        */
+    IH264ENC_VIDEOFORMAT_UNSPECIFIED /**< Unspecified video format*/
+} IH264ENC_VideoFormat;
+
+/**
+
+  @enum   IH264ENC_StereoInfoPreset
+  @brief  Defines the Preset for Stereo Video Info coding*/
+
+typedef enum {
+    IH264_STEREOINFO_DISABLE            = 0, /* StereoVideoCoding is disable */
+    IH264_STEREOINFO_ENABLE_DEFAULT     = 1, /* Default Stereo Video Info
+                                                Parameters enabled.       */
+    IH264_STEREOINFO_ENABLE_USERDEFINED = 2, /* User defined Stereo Video Info
+                                                parameters enabled           */
+    IH264_STEREOINFO_MAX                     /* Max Stereo Video Info enum   */
+
+} IH264ENC_StereoInfoPreset;
+
+/**
+
+  @enum   IH264ENC_FramePackingPreset
+  @brief  Defines the Preset for Frame packing SEI coding*/
+
+typedef enum {
+    IH264_FRAMEPACK_SEI_DISABLE         = 0, /* Frame packing SEI is disable */
+    IH264_FRAMEPACK_SEI_ENABLE_DEFAULT  = 1, /* Default Frame packing SEI
+                                            Parameters enabled.       */
+    IH264_FRAMEPACK_SEI_USERDEFINED     = 2, /* User defined SFrame packing
+                                                SEIparameters enabled        */
+    IH264_FRAMEPACK_SEI_MAX                /* Max Stereo Video Info enum   */
+
+} IH264ENC_FramePackingPreset;
+
+/**
+
+  @enum   IH264ENC_FramePackingType
+  @brief  Defines the type of packing arrangement for
+          Frame packing SEI coding
+*/
+
+typedef enum {
+    IH264_FRAMEPACK_CHECKERBOARD        = 0,
+    IH264_FRAMEPACK_COLUMN_INTERLEAVING = 1,
+    IH264_FRAMEPACK_ROW_INTERLEAVING    = 2,
+    IH264_FRAMEPACK_SIDE_BY_SIDE        = 3,
+    IH264_FRAMEPACK_TOP_BOTTOM          = 4,
+    IH264_FRAMEPACK_TYPE_DEFAULT        = IH264_FRAMEPACK_SIDE_BY_SIDE,
+    IH264_FRAMEPACK_TYPE_MAX
+
+} IH264ENC_FramePackingType;
+
+/**
+
+  @enum   IH264ENC_AspectRatioIdc
+  @brief  Defines aspect ratio IDs
+
+*/
+typedef enum {
+    IH264ENC_ASPECTRATIO_UNSPECIFIED,  /**< Unspecified aspect ratio  */
+    IH264ENC_ASPECTRATIO_SQUARE,       /**< 1:1 (square) aspect ratio */
+    IH264ENC_ASPECTRATIO_12_11,        /**<  12:11  aspect ratio      */
+    IH264ENC_ASPECTRATIO_10_11,        /**<  10:11  aspect ratio      */
+    IH264ENC_ASPECTRATIO_16_11,        /**<  16:11  aspect ratio      */
+    IH264ENC_ASPECTRATIO_40_33,        /**<  40:33  aspect ratio      */
+    IH264ENC_ASPECTRATIO_24_11,        /**<  24:11  aspect ratio      */
+    IH264ENC_ASPECTRATIO_20_11,        /**<  20:11  aspect ratio      */
+    IH264ENC_ASPECTRATIO_32_11,        /**<  32:11  aspect ratio      */
+    IH264ENC_ASPECTRATIO_80_33,        /**<  80:33  aspect ratio      */
+    IH264ENC_ASPECTRATIO_18_11,        /**<  18:11  aspect ratio      */
+    IH264ENC_ASPECTRATIO_15_15,        /**<  15:15  aspect ratio      */
+    IH264ENC_ASPECTRATIO_64_33,        /**<  64:33  aspect ratio      */
+    IH264ENC_ASPECTRATIO_160_99,       /**<  160:99 aspect ratio      */
+    IH264ENC_ASPECTRATIO_4_3,          /**<  4:3    aspect ratio      */
+    IH264ENC_ASPECTRATIO_3_2,          /**<  3:2    aspect ratio      */
+    IH264ENC_ASPECTRATIO_2_1,          /**<  2:1    aspect ratio      */
+    IH264ENC_ASPECTRATIO_EXTENDED = 255 /**<  Extended aspect ratio    */
+
+} IH264ENC_AspectRatioIdc;
+
+/**
+
+  @enum   IH264ENC_EntropyCodingMode
+  @brief  Defines the different entropy code mode
+
+*/
+typedef enum {
+    IH264_ENTROPYCODING_CAVLC = 0,                          /**< CAVLC coding
+                                                              type
+                                                             */
+    IH264_ENTROPYCODING_DEFAULT = IH264_ENTROPYCODING_CAVLC, /**< Default is
+                                                            CAVLC coding type
+                                                            */
+    IH264_ENTROPYCODING_CABAC = 1,                          /**< CABAC coding
+                                                            type
+                                                            */
+    IH264_ENTROPYCODING_MAX
+} IH264ENC_EntropyCodingMode;
+
+/**
+
+  @enum   IH264ENC_TransformBlockSize
+  In H264 Intra macro block's transform size depends upon the Intra mode,
+  so this applies to inter macroblocks only
+
+*/
+typedef enum {
+    IH264_TRANSFORM_4x4      = 0,                       /**< Transform blocks
+                                                             size is 4x4 */
+    IH264_TRANSFORM_8x8      = 1,                       /**< Transform blocks
+                                                        *    size is 8x8 :
+                                                        *    Valid for only
+                                                        *    High Profile
+                                                        */
+    IH264_TRANSFORM_ADAPTIVE = 2,                       /**< Adaptive transform
+                                                        *    block size :
+                                                        *    encoder decides
+                                                        *    as per content
+                                                        */
+    IH264_TRANSFORM_DEFAULT  = IH264_TRANSFORM_ADAPTIVE, /**< Default is adaptive
+                                                        *  based upon content
+                                                        */
+    IH264_TRANSFORM_MAX
+
+} IH264ENC_TransformBlockSize;
+
+
+
+/**
+
+  @enum   IH264ENC_GOPStructure
+  @brief
+  When B frames are used (InterFrameInterval > 1) then the arrangement of
+  frames can be different
+
+  GOP structure in display order as indicated below
+  If contentType = Frame
+  IH264ENC_GOPSTRUCTURE_NONUNIFORM : IBBPBBP. .
+  IH264ENC_GOPSTRUCTURE_UNIFORM : BBIBBPBB. .
+  If contentType = Field
+  IH264ENC_GOPSTRUCTURE_NONUNIFORM : IPBBBBPBBBB
+  IH264ENC_GOPSTRUCTURE_UNIFORM : BBBBIPBBBBPPBBBB
+
+*/
+
+typedef enum {
+    IH264ENC_GOPSTRUCTURE_NONUNIFORM  = 0,
+    /**< Open Gop structure  : IBBPBBP */
+    IH264ENC_GOPSTRUCTURE_DEFAULT  = IH264ENC_GOPSTRUCTURE_NONUNIFORM,
+    /**< Default is open gop structure */
+    IH264ENC_GOPSTRUCTURE_UNIFORM = 1,
+    /**< Close Gop structure : BBIBBPBB*/
+    IH264ENC_GOPSTRUCTURE_MAX
+
+} IH264ENC_GOPStructure;
+
+
+/**
+
+  @enum   IH264ENC_BiasFactor
+  @brief  Encoder uses bias b/w two possible chices for lot of decisions.
+          It is to control the mild/strong ness of the biasing
+
+*/
+typedef enum {
+    IH264_INTERLACE_PICAFF                = 0,
+    /**< PicAFF type of interlace coding    */
+    IH264_INTERLACE_MBAFF                 = 1,
+    /**< MBAFF type of interlace coding     */
+    IH264_INTERLACE_FIELDONLY             = 2,
+    /**< Field only coding with fixed partiy scheme  */
+    IH264_INTERLACE_FIELDONLY_MRF         = IH264_INTERLACE_FIELDONLY,
+    /**< Use Most recent field for refernece*/
+    IH264_INTERLACE_FIELDONLY_ARF         = 3,
+    /**< Field only coding where codec decides the partiy of of the field to
+    *    be used based upon content (adaptive) */
+    IH264_INTERLACE_DEFAULT               = IH264_INTERLACE_FIELDONLY_ARF,
+    /**< Default : adaptive partiy for reference*/
+    IH264_INTERLACE_FIELDONLY_SPF         = 4,
+    /**< Use same parity field for refernece    */
+
+    IH264_INTERLACE_MAX
+} IH264ENC_InterlaceCodingType;
+/**
+  @enum   IH264ENC_NumTemporalLayer
+  @brief  Define different Temporal Layers
+*/
+typedef enum {
+    /* Only Base Layer  */
+    IH264_TEMPORAL_LAYERS_1                = 1,
+
+    /* Base Layer + Temporal Layer     */
+    IH264_TEMPORAL_LAYERS_2                = 2,
+
+    /* Base Layer + 2Temporal Layers   */
+    IH264_TEMPORAL_LAYERS_3                = 3,
+
+    /* Base Layer + 3Temporal Layers   */
+    IH264_TEMPORAL_LAYERS_4                = 4,
+
+    /* Maximum Temporal Layer Supported*/
+    IH264_TEMPORAL_LAYERS_MAX              = IH264_TEMPORAL_LAYERS_4
+
+} IH264ENC_NumTemporalLayer;
+
+/**
+  @enum  IH264ENC_RoiType
+  @brief Defines the different ROI types
+*/
+typedef enum {
+    IH264_FACE_OBJECT       = 0,
+    /**< Face type of ROI object               */
+    IH264_BACKGROUND_OBJECT = 1,
+    /**< Background type of ROI object         */
+    IH264_FOREGROUND_OBJECT = 2,
+    /**< Foreground type of ROI object         */
+    IH264_DEFAULT_OBJECT    = 3,
+    /**< Default type of ROI object            */
+    IH264_PRIVACY_MASK      = 4
+                              /**< Privacy mask type of ROI object       */
+} IH264ENC_RoiType;
+
+/**
+  @enum   IH264ENC_SvcExtensionFlag
+  @brief  Define SVC Extension Flag
+*/
+typedef enum {
+    /*Svc Extension Flag Disabled*/
+    IH264_SVC_EXTENSION_FLAG_DISABLE               = 0,
+    /*Svc Extension Flag Enabled*/
+    IH264_SVC_EXTENSION_FLAG_ENABLE                = 1,
+    /*Svc Extension Flag Enabled with EC Flexibility*/
+    IH264_SVC_EXTENSION_FLAG_ENABLE_WITH_EC_FLEXIBILITY = 2
+
+} IH264ENC_SvcExtensionFlag;
+
+/**
+  @enum   IH264ENC_ReferencePicMarking
+  @brief  Define Reference Picture Marking
+*/
+typedef enum {
+    /* ReferencePicMarking is Short-term picutre(Sliding Window) */
+    IH264_SHORT_TERM_PICTURE               = 0,
+    /* ReferencePicMarking is Long-term picutre(MMCO Commands) */
+    IH264_LONG_TERM_PICTURE                = 1
+
+} IH264ENC_ReferencePicMarking;
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/* Definition of all the structures define by this interafce   */
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/**
+
+  @struct IH264ENC_RateControlParams
+  @brief  This structure contains all the parameters which controls Rate
+          Control behavior
+
+  @param  rateControlParamsPreset :
+          regarded @ IH264ENC_DynamicParams::rateControlParams
+          This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
+          not aware about following fields, it should be set as
+          IH264_RATECONTROLPARAMS_DEFAULT
+  @param  scalingMatrixPreset  :
+          ignored @ IH264ENC_DynamicParams::rateControlParams
+          This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
+          not aware about following fields, it should be set as
+          IH264_SCALINGMATRIX_DEFAULT
+
+  @param  rcAlgo  : ignored @ IH264ENC_DynamicParams::rateControlParams
+          This defines the rate control algorithm to be used. Only useful
+          if IVIDENC2::rateControlPreset is set as IVIDEO_USER_DEFINED
+
+  @param  qpI  : regarded @ IH264ENC_DynamicParams::rateControlParams
+          Initial Quantization Parameter for I/IDR frames.
+          Valid Range is [-1, 51]
+          -1 : Auto Initialization else other wise Initial QP.
+          when rateControlPreset = IVIDEO_NONE, this quantization parameter is
+          used by the whole video frame/field
+
+  @param  qpMaxI  : regarded @ IH264ENC_DynamicParams::rateControlParams
+          Maximum Quantization Parameter for I/IDR frame(s). Range [0 , 51].
+          Useful to control a minimum quality level
+
+  @param  qpMinI  : regarded @ IH264ENC_DynamicParams::rateControlParams
+          Minimum Quantization Parameter for I/IDR frame(s). Range [0 , 51].
+          Useful to control a maximum bit-rate level
+
+  @param  qpP  : regarded @ IH264ENC_DynamicParams::rateControlParams
+          Initial Quantization Parameter for P frames. Valid Range is [-1, 51]
+          -1 : Auto Initialization else other wise Initial QP.
+          when rateControlPreset = IVIDEO_NONE, this quantization parameter is
+          used by the whole video frame/field
+
+  @param  qpMaxP  : regarded @ IH264ENC_DynamicParams::rateControlParams
+          Maximum Quantization Parameter for inter frame(s). Range [0 , 51].
+          Useful to control a minimum quality level
+
+  @param  qpMinP  : regarded @ IH264ENC_DynamicParams::rateControlParams
+          Minimum Quantization Parameter for inter frame(s). Range [0 , 51].
+          Useful to control a maximum bit-rate level
+
+  @param  qpOffsetB  : regarded @ IH264ENC_DynamicParams::rateControlParams
+          Offset of B frames Quantization Parameter from P frames.
+          Valid Range is [-1, 51]
+          -1 : Auto Initialization else other wise user provided offset
+      if after adding the qpOffsetB into qp of P frame it exceeds 51 then
+      it is clipped to 51
+          when rateControlPreset = IVIDEO_NONE, this offset parameter is
+          used by the whole video frame/field
+
+  @param  qpMaxB  : regarded @ IH264ENC_DynamicParams::rateControlParams
+          Maximum Quantization Parameter for B frame(s). Range [0 , 51].
+          Useful to control a minimum quality level
+
+  @param  qpMinB  : regarded @ IH264ENC_DynamicParams::rateControlParams
+          Minimum Quantization Parameter for B frame(s). Range [0 , 51].
+          Useful to control a maximum bit-rate level
+
+  @param  allowFrameSkip  : regarded @ IH264ENC_DynamicParams::rateControlParams
+          Controls Frame Skip.
+          non-zero means frames can be skipped to  achieve target bit-rate
+          zero means frame can never be skipped
+
+  @param  removeExpensiveCoeff :
+          regarded @ IH264ENC_DynamicParams::rateControlParams
+          Flag to Remove high frequency expensive coeffecients
+
+  @param  chromaQPIndexOffset  :
+          ignored @ IH264ENC_DynamicParams::rateControlParams
+          Specifies offset to be added to luma QP for addressing QPC values
+          table for chroma components.
+          Valid value is between -12 and 12, (inclusive)
+
+  @param  IPQualityFactor  : ignored @ IH264ENC_DynamicParams::rateControlParams
+          This provides configurality to control I frame Quality wrt to P frame.
+          Higher Quality factor means I frame quality is given higher
+          improtance compared to P frame.
+          Refer IH264ENC_FrameQualityFactor for possible values
+
+  @param  initialBufferLevel  :
+          ignored @ IH264ENC_DynamicParams::rateControlParams
+          Initial Buffer level for HRD compliance. It informs that Hypothtical
+          decoder can start after how much time. The value taken is the
+          obsolute value of the HRD buffer size  For example if user want
+          Hypothtical decoder to start taking out data from HRD buffer after
+          half second then it should set initialBufferLevel = half of the
+          HRD buffer size that is programmed.
+
+  @param  HRDBufferSize  : regarded @ IH264ENC_DynamicParams::rateControlParams
+          Hypothetical Reference Decoder Buffer Size. This size controls the
+          frame skip  logic of the encoder. for low delay applications this
+          size should be small. Unit of this variable is bits
+
+  @param  minPicSizeRatio : regarded @ IH264ENC_DynamicParams::rateControlParams
+                            This ratio is used to compute minimum picture size
+                            in the following manner,
+                            minPicSize = averagePicSize >> minPicSizeRatio
+                            allowed values 1 to 4, Setting this to 0 will enable
+                            encoder chosen ratio.
+                            Note that this is guided value to rate control to
+                            determine min picture size and encoder may not
+                            strictly follow this
+  @param  maxPicSizeRatio : regarded @ IH264ENC_DynamicParams::rateControlParams
+                            To determines ratio for max picture size
+                            This ratio is used to compute maximum picture size
+                            in the following manner,
+                            maxPicSize = averagePicSize * maxPicSizeRatio
+                            allowed values 2 to 30.Setting this to 0 and 1
+                            will enable encoder chosen ratio.
+                            Note that this is guided value to rate control
+                            to determine max picture size and encoder may not
+                            strictly follow this.
+
+  @param  enablePRC       : regarded @ IH264ENC_DynamicParams::rateControlParams
+                            This flag is used to control allowing PRC in the
+                            frame
+
+  @param  enablePartialFrameSkip : regarded @ IH264ENC_DynamicParams::
+                                 rateControlParams
+                            This flag is used to control allowing partial frame
+                            skip in the frame
+  @param  reserved : 16 bit word, kept to not change the foot print
+  @param  VBRDuration : During over which statistics during interval are
+                        collected to switch bit-rate states.Increasing this
+                        value will make VBR wait for longer time before
+                        switching bit-rate state
+  @param  VBRsensitivity : Specifies the target bitrate used by rate control in
+                           high complexity state.
+  @param  skipDistributionWindowLength : Number of frames over which the skip
+                                         frames can be distributed
+  @param  numSkipInDistributionWindow : Number of skips allowed within the
+                                         distribution window
+  @param  reservedRC
+          Some part is kept reserved to add parameters later without
+          changing the foot print of  interface memory
+
+  @todo  More parameters to be added : delay (VBV), PRC related etc..
+
+
+*/
+
+typedef struct IH264ENC_RateControlParams {
+    XDAS_Int8  rateControlParamsPreset;
+    XDAS_Int8  scalingMatrixPreset;
+    XDAS_Int8  rcAlgo;
+    XDAS_Int8  qpI;
+    XDAS_Int8  qpMaxI;
+    XDAS_Int8  qpMinI;
+    XDAS_Int8  qpP;
+    XDAS_Int8  qpMaxP;
+    XDAS_Int8  qpMinP;
+    XDAS_Int8  qpOffsetB;
+    XDAS_Int8  qpMaxB;
+    XDAS_Int8  qpMinB;
+    XDAS_Int8  allowFrameSkip;
+    XDAS_Int8  removeExpensiveCoeff;
+    XDAS_Int8  chromaQPIndexOffset;
+    XDAS_Int8  IPQualityFactor;
+    XDAS_Int32 initialBufferLevel;
+    XDAS_Int32 HRDBufferSize;
+    XDAS_Int16 minPicSizeRatioI;
+    XDAS_Int16 maxPicSizeRatioI;
+    XDAS_Int16 minPicSizeRatioP;
+    XDAS_Int16 maxPicSizeRatioP;
+    XDAS_Int16 minPicSizeRatioB;
+    XDAS_Int16 maxPicSizeRatioB;
+    XDAS_Int8  enablePRC;
+    XDAS_Int8  enablePartialFrameSkip;
+    XDAS_Int8  discardSavedBits;
+    XDAS_Int8  reserved;
+    XDAS_Int32 VBRDuration;
+    XDAS_Int8  VBRsensitivity;
+    XDAS_Int16 skipDistributionWindowLength;
+    XDAS_Int16 numSkipInDistributionWindow;
+    XDAS_Int8  enableHRDComplianceMode;
+    XDAS_Int32 frameSkipThMulQ5;
+    XDAS_Int32 vbvUseLevelThQ5;
+    XDAS_Int32 reservedRC[3];
+
+} IH264ENC_RateControlParams;
+
+/**
+  @struct   ROI_Interface
+  @brief    This structure defines the ROI input parameters required by Encoder.
+  @param  listROI:
+                  List of ROIs with their x and y co-ordinates
+  @param  roiType:
+                  Type of each ROI
+  @param  numOfROI:
+                  Number of ROIs passed to codec
+  @param roiPriority:
+                  Priority of each ROI
+*/
+typedef struct IH264ENC_RoiInput {
+    XDM_Rect   listROI[IH264ENC_MAX_ROI];
+    XDAS_Int8  roiType[IH264ENC_MAX_ROI];
+    XDAS_Int8  numOfROI;
+    XDAS_Int32 roiPriority[IH264ENC_MAX_ROI];
+}IH264ENC_RoiInput;
+
+/**
+
+  @struct IH264ENC_InterCodingParams
+  @brief  This structure contains all the parameters which controls Inter MBs
+          coding behavior
+  @param  interCodingPreset
+          This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
+          not aware about following fields, it should be set as
+          IH264_INTERCODING_DEFAULT
+  @param  searchRangeHorP :regarded @ IH264ENC_DynamicParams::interCodingParams
+          Horizontal Search Range for P frames
+  @param  searchRangeVerP :regarded @ IH264ENC_DynamicParams::interCodingParams
+          Vertical Search Range for P frames
+  @param  searchRangeHorB :regarded @ IH264ENC_DynamicParams::interCodingParams
+          Horizontal Search Range for B frames
+  @param  searchRangeVerB :regarded @ IH264ENC_DynamicParams::interCodingParams
+          Vertical Search Range for B frames
+  @param  interCodingBias :regarded @ IH264ENC_DynamicParams::interCodingParams
+          Bias Control for having a macro block coded as inter vs Intra
+          Refer IH264ENC_BiasFactor for possible values
+  @param  skipMVCodingBias :regarded @ IH264ENC_DynamicParams::interCodingParams
+          Bias Control for having a macro block use skip MV vs regular MV
+          refer IH264ENC_BiasFactor for possible values
+  @param  minBlockSizeP  : regarded @ IH264ENC_DynamicParams::interCodingParams
+          minimum block size for P frames. Refer IH264ENC_InterBlockSize
+          enumeration to see the valid values
+  @param  minBlockSizeB  : regarded @ IH264ENC_DynamicParams::interCodingParams
+          minimum block size for B frames. Refer IH264ENC_InterBlockSize
+          enumeration to see the valid values
+
+*/
+
+typedef struct IH264ENC_InterCodingParams {
+    XDAS_Int8  interCodingPreset;
+    XDAS_Int16 searchRangeHorP;
+    XDAS_Int16 searchRangeVerP;
+    XDAS_Int16 searchRangeHorB;
+    XDAS_Int16 searchRangeVerB;
+    XDAS_Int8  interCodingBias;
+    XDAS_Int8  skipMVCodingBias;
+    XDAS_Int8  minBlockSizeP;
+    XDAS_Int8  minBlockSizeB;
+    XDAS_Int8  meAlgoMode;
+
+} IH264ENC_InterCodingParams;
+
+/**
+
+  @struct IH264ENC_IntraCodingParams
+  @brief  This structure contains all the parameters which controls Intra
+          encoding
+
+  @param  intraCodingPreset
+          This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
+          not aware about following fields, it should be set as
+          INTRA_CODING_DEFAULT other wise INTRA_CODING_USER_DEFINED
+  @param  lumaIntra4x4Enable
+          This parameter controls the Luma Intra4x4 encoding in video encoder. A
+          bit-field is given for each Luma intra4x4 mode as shown below. This
+          field is H.264 specific HOR_UP|VERT_LEFT|HOR_DOWN|
+          VERT_RIGHT|DIAG_DOWN_RIGHT|DIAG_DOWN_LEFT|DC|HOR|VER
+          Set/ reset particular bit to enable/disable that mode
+          (0=disable, 1=enable). DC (bit-2)is don't care
+  @param  lumaIntra8x8Enable
+          This parameter controls the Luma Intra8x8 encoding in video encoder. A
+          bit-field is given for each Luma intra8x8 mode as shown below.
+          HOR_UP|VERT_LEFT|HOR_DOWN|VERT_RIGHT|DIAG_DOWN_RIGHT|DIAG_DOWN_LEFT|
+          DC|HOR|VER Set/ reset particular bit to enable/disable that
+          mode (0=disable, 1=enable) DC (bit-2)is don't care
+          Example : 139(decimal) ==> 0x8B =>> 010001011 (bits) ==>
+          HOR, VER, VERT_LEFT
+          are enabled and DC is always enabled
+  @param  lumaIntra16x16Enable
+          This parameter controls the Luma Intra16x16 encoding in video encoder.
+          A bit-field is given for each Luma intra16x16 mode as shown below.
+          PLANE|DC|HOR|VER
+          Set/ reset particular bit to enable/disable that
+          mode (0=disable, 1=enable). DC (bit-2)is don't care
+  @param  chromaIntra8x8Enable
+          This parameter controls the chroma Intra8x8 encoding in video encoder.
+          A bit-field is given for each chroma intra8x8 mode as shown below.
+          PLANE|VER|HOR|DC
+          Set/ reset particular bit to enable/disable
+          that mode (0=disable, 1=enable) DC (bit-0)is don't care
+  @param  chromaComponentEnable
+          This parameter controls the chroma Intra prediction search. User
+          can choose to perfom chroma intra estimation for both Cb and Cr
+          samples or only on Cr samples. For more details
+          refer IH264ENC_ChormaComponent
+  @param  intraRefreshMethod
+          Mechanism to do intra Refresh, see IH264ENC_IntraRefreshMethods
+          for valid values
+  @param  intraRefreshRate
+          Rate at which intra Refresh is done, This rate is specified as
+          One IntraMB per # MBs. For example if rate is 20 it means that
+          there has to be  one intra MB(s) per 20 Mbs.
+          When intraRefreshMethod == IH264_INTRAREFRESH_GDR, this parameter
+          is treated/interpreted number of rows to be intra refreshed per
+          frame.
+
+  @param  gdrOverlapRowsBtwFrames
+          Defines the Overlap of the Intra Refresh Region between successive
+          frame in case the intraRefreshMethod == IH264_INTRAREFRESH_GDR or
+          else treated to be don't care.
+          Again gdrOverlapRowsBtwFrames should be less than intraRefreshRate.
+
+  @param  constrainedIntraPredEnable
+          Controls the intra macroblock coding in P slices.
+          Valid values are [0,non-zero]
+
+*/
+
+typedef struct IH264ENC_IntraCodingParams {
+    XDAS_Int8  intraCodingPreset;
+    XDAS_Int16 lumaIntra4x4Enable;
+    XDAS_Int16 lumaIntra8x8Enable;
+    XDAS_Int8  lumaIntra16x16Enable;
+    XDAS_Int8  chromaIntra8x8Enable;
+    XDAS_Int8  chromaComponentEnable;
+    XDAS_Int8  intraRefreshMethod;
+    XDAS_Int16 intraRefreshRate;
+    XDAS_Int16 gdrOverlapRowsBtwFrames;
+    XDAS_Int16 constrainedIntraPredEnable;
+    XDAS_Int8  intraCodingBias;
+} IH264ENC_IntraCodingParams;
+
+
+/**
+
+  @struct IH264ENC_NALUControlParams
+  @brief  This structure contains all the parameters which define the
+          control mechanism for insertion of different NALU types at
+          different point in video sequence
+
+  @param  naluControlPreset
+          This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
+          not aware about following fields, it should be set as
+          IH264_NALU_CONTROL_DEFAULT other wise IH264_NALU_CONTROL_USERDEFINED
+  @param  naluPresentMaskStartOfSequence
+          This parameter controls the insertion of different NALU at Start of
+          Sequence
+          A bit-field is given for each NALU type as shown below. This field is
+\n ---------------------------------------------------------------------\n
+\n   7|  6|        5|         4|         3|         2|    1|          0 \n
+\n SPS|SEI|IDR_SLICE|SLICE_DP_C|SLICE_DP_B|SLICE_DP_A|SLICE|UNSPECIFIED \n
+\n ---------------------------------------------------------------------\n
+\n----------------------------------------------
+\n     14|     13|    12|      11|   10|  9|  8|
+\n UD_SEI|SPS_VUI|FILLER|EOSTREAM|EOSEQ|AUD|PPS|
+\n----------------------------------------------
+          Set/ reset particular bit to enable/disable that insertion of that
+          NALU (0=disable, 1=enable)
+          UNSPECIFIED (bit-0), SLICE_DP_A(bit-2), SLICE_DP_B(bit-3),
+          SLICE_DP_C(bit-4), IDR_SLICE(bit-5), EOSEQ (bit-10) and
+          EOSTREAM (bit-11) are don't care and assumed to be <b> zero </b>.
+          SPS (bit-7), PPS(bit-8) are don't care and assumed to be <b> one </b>.
+  @param  naluPresentMaskIDRPicture
+          This parameter controls the insertion of different NALU at IDR picture
+          A bit-field is given for each NALU type as shown below. This field is
+\n ---------------------------------------------------------------------\n
+\n   7|  6|        5|         4|         3|         2|    1|          0 \n
+\n SPS|SEI|IDR_SLICE|SLICE_DP_C|SLICE_DP_B|SLICE_DP_A|SLICE|UNSPECIFIED \n
+\n ---------------------------------------------------------------------\n
+\n----------------------------------------------
+\n     14|     13|    12|      11|   10|  9|  8|
+\n UD_SEI|SPS_VUI|FILLER|EOSTREAM|EOSEQ|AUD|PPS|
+\n----------------------------------------------
+          Set/ reset particular bit to enable/disable that insertion of that
+          NALU (0=disable, 1=enable)
+          UNSPECIFIED (bit-0), SLICE_DP_A(bit-2), SLICE_DP_B(bit-3),
+          SLICE_DP_C(bit-4), IDR_SLICE(bit-5), EOSEQ (bit-10) and
+          EOSTREAM (bit-11) are don't care and assumed to be <b> zero </b>.
+  @param  naluPresentMaskIntraPicture
+          This parameter controls the insertion of different NALU at I picture
+          A bit-field is given for each NALU type as shown below. This field is
+\n ---------------------------------------------------------------------\n
+\n   7|  6|        5|         4|         3|         2|    1|          0 \n
+\n SPS|SEI|IDR_SLICE|SLICE_DP_C|SLICE_DP_B|SLICE_DP_A|SLICE|UNSPECIFIED \n
+\n ---------------------------------------------------------------------\n
+\n----------------------------------------------
+\n     14|     13|    12|      11|   10|  9|  8|
+\n UD_SEI|SPS_VUI|FILLER|EOSTREAM|EOSEQ|AUD|PPS|
+\n----------------------------------------------
+          Set/ reset particular bit to enable/disable that insertion of that
+          NALU (0=disable, 1=enable)
+          UNSPECIFIED (bit-0), SLICE_DP_A(bit-2), SLICE_DP_B(bit-3),
+          SLICE_DP_C(bit-4), IDR_SLICE(bit-5), EOSEQ (bit-10) and
+          EOSTREAM (bit-11) are don't care and assumed to be <b> zero </b>.
+  @param  naluPresentMaskNonIntraPicture
+          This parameter controls the insertion of different
+          NALU at NON intra picture
+          A bit-field is given for each NALU type as shown below. This field is
+\n ---------------------------------------------------------------------\n
+\n   7|  6|        5|         4|         3|         2|    1|          0 \n
+\n SPS|SEI|IDR_SLICE|SLICE_DP_C|SLICE_DP_B|SLICE_DP_A|SLICE|UNSPECIFIED \n
+\n ---------------------------------------------------------------------\n
+\n----------------------------------------------
+\n     14|     13|    12|      11|   10|  9|  8|
+\n UD_SEI|SPS_VUI|FILLER|EOSTREAM|EOSEQ|AUD|PPS|
+\n----------------------------------------------
+          Set/ reset particular bit to enable/disable that insertion of that
+          NALU (0=disable, 1=enable)
+          UNSPECIFIED (bit-0), SLICE_DP_A(bit-2), SLICE_DP_B(bit-3),
+          SLICE_DP_C(bit-4), IDR_SLICE(bit-5), EOSEQ (bit-10) and
+          EOSTREAM (bit-11) are don't care and assumed to be <b> zero </b>.
+  @param  naluPresentMaskEndOfSequence
+          This parameter controls the insertion of different NALU at End of Seq
+          A bit-field is given for each NALU type as shown below. This field is
+\n ---------------------------------------------------------------------\n
+\n   7|  6|        5|         4|         3|         2|    1|          0 \n
+\n SPS|SEI|IDR_SLICE|SLICE_DP_C|SLICE_DP_B|SLICE_DP_A|SLICE|UNSPECIFIED \n
+\n ---------------------------------------------------------------------\n
+\n----------------------------------------------
+\n     14|     13|    12|      11|   10|  9|  8|
+\n UD_SEI|SPS_VUI|FILLER|EOSTREAM|EOSEQ|AUD|PPS|
+\n----------------------------------------------
+          Set/ reset particular bit to enable/disable that insertion of that
+          NALU (0=disable, 1=enable)
+          UNSPECIFIED (bit-0), SLICE_DP_A(bit-2), SLICE_DP_B(bit-3),
+          SLICE_DP_C(bit-4), SPS_VUI (bit-13), FILLER (bit-12), AUD(bit-9),
+          PPS(bit-8), SPS(bit-7), SEI(bit-6), IDR_SLICE(bit-5), SLICE (bit-1)
+          are don't care and assumed to be <b> zero </b>.
+
+*/
+
+typedef struct IH264ENC_NALUControlParams {
+    XDAS_Int16 naluControlPreset;
+    XDAS_Int16 naluPresentMaskStartOfSequence;
+    XDAS_Int16 naluPresentMaskIDRPicture;
+    XDAS_Int16 naluPresentMaskIntraPicture;
+    XDAS_Int16 naluPresentMaskNonIntraPicture;
+    XDAS_Int16 naluPresentMaskEndOfSequence;
+
+} IH264ENC_NALUControlParams;
+
+/**
+
+  @struct IH264ENC_SliceCodingParams
+  @brief  This structure contains all the parameters which controls Slice
+          encoding
+
+  @param  sliceCodingPreset
+          This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
+          not aware about following fields, it should be set as
+          IH264_SLICECODING_DEFAULT
+
+  @param  sliceMode  : regarded @ IH264ENC_DynamicParams::sliceCodingParams
+          This defines the control mechanism to split a picture in slices.
+          It can be either MB based or bytes based
+
+  @param  sliceUnitSize  : regarded @ IH264ENC_DynamicParams::sliceCodingParams
+          The meaning of this parameter depends upon sliceMode.
+          sliceMode == IH264_SLICEMODE_MBUNIT then this
+          parameter informs the number of Macroblocks in one slice
+          sliceMode == IH264_SLICEMODE_BYTES then this
+          parameter informs the number of bytes in one slice
+          sliceMode == IH264_SLICEMODE_OFFSET then this
+          parameter informs the number of offset information provided by user.
+          Actual offset are provided with sliceStartOffset
+
+  @param  sliceStartOffset[IH264ENC_MAX_NUM_SLICE_START_OFFSET]  : regarded @
+          IH264ENC_DynamicParams::sliceCodingParams row numbering is assumed to
+           start from 0. Enteris in this array must have numbers in ascending
+           order. first slice of the picture is always starting from 0th row
+           of the picture so  0th entry is the offset of second slice in picture
+          Ex 1 : sliceStartRowNum[0] = 25 ,
+                 sliceStartRowNum[1] = 30, sliceStartRowNum[2] = 40
+                 will result into 4 slices starting from row# 0, 25, 30 and 40
+          Ex 2 : sliceStartRowNum[0] = 25 , sliceStartRowNum[1] = 70,
+                 sliceStartRowNum[2] = 60  is invalid
+          Ex 3 : sliceStartRowNum[0] = 25 , sliceStartRowNum[1] = 50,
+                 sliceStartRowNum[2] = 100
+                 will result into 3 slices starting from row# 0, 25 and 50
+                 {if number of rows in picture < (100 + 1) }
+
+
+  @param  streamFormat  : ignored @ IH264ENC_DynamicParams::sliceCodingParams
+          Controls the type of stream : byte stream format or NALU format
+          refer IH264ENC_StreamFormat for possible values
+
+*/
+
+typedef struct IH264ENC_SliceCodingParams {
+    XDAS_Int8  sliceCodingPreset;
+    XDAS_Int16 sliceMode;
+    XDAS_Int32 sliceUnitSize;
+    XDAS_Int8  sliceStartOffset[IH264ENC_MAX_NUM_SLICE_START_OFFSET];
+    XDAS_Int8  streamFormat;
+
+} IH264ENC_SliceCodingParams;
+
+
+/**
+
+  @struct IH264ENC_LoopFilterParams
+  @brief  This structure contains all the parameters which controls loop
+          filtering operations
+
+  @param  loopfilterPreset
+          This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
+          not aware about following fields, it should be set as
+          IH264_SLICECODING_DEFAULT
+  @param  loopfilterDisableIDC
+          Controls H.264 loop filter disabling options
+  @param  filterOffsetA
+          alpha offset for loop filter [-12, 12] even number
+  @param  filterOffsetB
+          beta offset for loop filter [-12, 12] even number
+
+
+*/
+typedef struct IH264ENC_LoopFilterParams {
+    XDAS_Int8 loopfilterPreset;
+    XDAS_Int8 loopfilterDisableIDC;
+    XDAS_Int8 filterOffsetA;
+    XDAS_Int8 filterOffsetB;
+
+} IH264ENC_LoopFilterParams;
+
+/**
+
+  @struct IH264ENC_FMOCodingParams
+  @brief  This structure contains all the parameters which controls FMO behavior
+
+  @param  fmoCodingPreset
+          This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
+          not aware about following fields, it should be set as
+          IH264_FMOCODING_DEFAULT
+  @param  numSliceGroups
+          Total Number of slice groups, valid enteries are [0,8]
+  @param  sliceGroupMapType
+          For Valid enteries see IH264ENC_SliceGroupMapType
+  @param  sliceGroupChangeDirectionFlag
+          Only valid when sliceGroupMapType is equal to
+          IH264_RASTER_SCAN_SLICE_GRP,
+          IH264_WIPE_SLICE_GRP or IH264_WIPE_SLICE_GRP.
+          For valid values refer IH264ENC_SliceGroupChangeDirection
+  @param  sliceGroupChangeRate
+          Only valid when sliceGroupMapType is equal to
+          IH264_RASTER_SCAN_SLICE_GRP,
+          IH264_WIPE_SLICE_GRP or IH264_WIPE_SLICE_GRP
+          valid values are : [0, factor of number of Mbs in a row]
+  @param  sliceGroupChangeCycle
+          Only valid when sliceGroupMapType is equal to
+          IH264_RASTER_SCAN_SLICE_GRP,
+          IH264_WIPE_SLICE_GRP or IH264_WIPE_SLICE_GRP
+          Valid values can be 0 to numMbsRowsInPicture, also constrained by
+          sliceGroupChangeRate*sliceGroupChangeCycle < totalMbsInFrameOnly valid
+          when sliceGroupMapType is equal to IH264_RASTER_SCAN_SLICE_GRP.
+          valid values are : [0, factor of number of Mbs in a row]
+  @param  sliceGroupParams[IH264ENC_MAXNUMSLCGPS]
+          This field is useful in case of sliceGroupMapType equal to either
+          IH264_INTERLEAVED_SLICE_GRP or IH264_FOREGRND_WITH_LEFTOVER_SLICE_GRP
+          In both cases it has different meaning:
+          In case of IH264_INTERLEAVED_SLICE_GRP:
+          The i-th entery in this array is used to specify the number of
+          consecutive  slice group macroblocks to be assigned to the i-th slice
+          group in raster scan order of slice group macroblock units.
+          Valid values are 0 to totalMbsInFrame again constrained by sum of
+          all the elements shouldn't exceed totalMbsInFrame
+          In case of IH264_FOREGRND_WITH_LEFTOVER_SLICE_GRP:
+          First entry in the array specify the start position of foreground
+          region in terms of macroblock number, valid values are
+          [0, totalMbsInFrame-1]
+          Second entry in the array specify the end position of foreground
+          region in terms  of macroblock number, valid values are
+          [0, totalMbsInFrame-1] with following constrains:
+          endPos > startPos && endPos%mbsInOneRow > startPos%mbsInOneRow
+
+  @todo   Review this structure and see all the fields are sufficient enough
+
+
+*/
+
+typedef struct IH264ENC_FMOCodingParams {
+    XDAS_Int8  fmoCodingPreset;
+    XDAS_Int8  numSliceGroups;
+    XDAS_Int8  sliceGroupMapType;
+    XDAS_Int8  sliceGroupChangeDirectionFlag;
+    XDAS_Int8  sliceGroupChangeRate;
+    XDAS_Int16 sliceGroupChangeCycle;
+    XDAS_Int16 sliceGroupParams[IH264ENC_MAXNUMSLCGPS];
+} IH264ENC_FMOCodingParams;
+
+
+/**
+
+  @struct IH264ENC_VUICodingParams
+  @brief  This structure contains all the parameters which controls VUI
+          parameters. Refer Annex E of the H.264 standard for more details
+          of VUI and parameters
+  @param  vuiCodingPreset
+          This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
+          not aware about following fields, it should be set as
+          IH264_VUICODING_DEFAULT
+  @param aspectRatioInfoPresentFlag
+          This controls the insertion of aspect ratio information in VUI part
+          of bit-stream
+      zero : No aspect ratio related information is transmitted
+      non-zero : aspect ratio related information is transmitted
+  @param aspectRatioIdc
+          Encoder inserts aspectRatioIdc as it is in the bit-stream. It is
+          user's responsibility to feed appropriate value of this.
+          Refer Table E-1 of H264 standard  (or enum IH264ENC_AspectRatioIdc)
+          for valid values of this.
+          when aspectRatioIdc == IH264ENC_ASPECTRATIO_EXTENDED(255), encoder
+          will look at IVIDENC2_DynamicParams::sampleAspectRatioHeightand
+          IVIDENC2_DynamicParams::sampleAspectRatioWidth and use them as
+          sar_height and sar_width respectively. aspectRatioIdc is left to
+          user to provide correct value.
+      <b> if aspectRatioInfoPresentFlag ==0 then encoder ignores
+          this parameter </b>
+  @param videoSignalTypePresentFlag
+          This controls the insertion of video signal type in VUI part of
+          bit-stream
+      zero : No video signal related information is transmitted
+      non-zero : video signal related information is transmitted
+  @param videoFormat
+          Encoder inserts videoFormat(lower 3 bits) as it is in the bit-stream.
+          It is user's responsibility to feed appropriate value of this.
+          Refer Table E-2 H264 standard (or enum IH264ENC_VideoFormat)
+          for valid values of this.
+  @param videoFullRangeFlag
+         zero: video range is not full{0, 255} ; non-zero: video range is full
+  @param timingInfoPresentFlag
+          This controls the insertion of timing info related parameters in
+          VUI part of bit-stream
+  @param hrdParamsPresentFlag
+          This controls the insertion of HRD parameters in
+          VUI part of bit-stream
+  @param numUnitsInTicks
+          This controls the insertion of numUnitsInTicks parameter in
+          VUI part of bit-stream.
+          Valid values are [1, targetFrameRate]
+          If this parameter is set by user then the targetFrameRate
+          has multiplication factor of numUnitInTicks instead of 1000
+*/
+
+typedef struct IH264ENC_VUICodingParams {
+    XDAS_Int8   vuiCodingPreset;
+    XDAS_UInt8  aspectRatioInfoPresentFlag;
+    XDAS_UInt8  aspectRatioIdc;
+    XDAS_UInt8  videoSignalTypePresentFlag;
+    XDAS_UInt8  videoFormat;
+    XDAS_UInt8  videoFullRangeFlag;
+    XDAS_UInt8  timingInfoPresentFlag;
+    XDAS_UInt8  hrdParamsPresentFlag;
+    XDAS_UInt32 numUnitsInTicks;
+
+
+} IH264ENC_VUICodingParams;
+
+/**
+
+  @struct IH264ENC_StereoInfoParams
+  @brief  This structure contains all the parameters which have Stereo
+          Video info for SEI message.
+  @param stereoInfoPreset
+          This Preset controls the Enable/Disable of stereo video coding &
+          if its enable then controls the USER_DEFINED vs DEFAULT mode.
+          If User is not aware about following fields, it should be set
+          as IH264_STEREOINFO_ENABLE_DEFAULT.
+          0  :Stereo Video Coding is Disabled.
+          1  :Default stereo video information parameters .
+          2  :User defined steroe video information pamameters.
+      @remarks - When stereo video coding is enabled then input content type
+                    (coding type) should be Interlaced coding.
+  @param topFieldIsLeftViewFlag
+          This indicates the top & bottom field in video coded sequence
+          as a left view or right view
+    non-zero :top fields in the coded video sequence represent a left view & the
+               bottom fields in the coded video sequence represent a right view.
+        zero :vice-versa.
+  @param viewSelfContainedFlag
+          This controls the Left/Right view should Refer/NotRefer to
+          Left/Right view.
+     zero :Leftview can refer to Rightview or Leftview & Rightview can refer to
+           Leftview or Rightview.
+           i.e.Possible values for left_view_self_contained_flag = 0 &&
+               right_view_self_contained_flag = 0 in  bit-stream.
+  non-zero:Leftview cannot refer to Rightview & Rightview cannot refer to
+           Leftview.
+           i.e Possible values for left_view_self_contained_flag = 1 &&
+           right_view_self_contained_flag = 1 in  bit-stream.
+     @remarks - This viewSelfContainedFlag overrides the interlaceCodingType.
+          viewSelfContainedFlag == 0 forces interlaceCodingType = ARF
+          viewSelfContainedFlag == 1 forces interlaceCodingType = SPF
+*/
+typedef struct IH264ENC_StereoInfoParams {
+    XDAS_UInt8 stereoInfoPreset;
+    XDAS_UInt8 topFieldIsLeftViewFlag;
+    XDAS_UInt8 viewSelfContainedFlag;
+}IH264ENC_StereoInfoParams;
+
+/**
+
+  @struct IH264ENC_FramePackingSEIParams
+  @brief  This structure contains all the parameters for Frame packing
+           SEI message.
+  @param framePackingPreset
+          This Preset controls the Enable/Disable of Frame packing
+          SEI message encoding.If its enable then controls
+          the USER_DEFINED vs DEFAULT mode.
+          If User is not aware about following fields, it should be set
+          as IH264_FRAMEPACK_SEI_ENABLE_DEFAULT.
+          0  :Frame packing SEI is Disabled.
+          1  :Default Frame packing SEI parameters .
+          2  :User defined Frame packing SEI information pamameters.
+      @remarks - When Frame packing SEI coding is enabled then input content
+                     type (coding type) should be Progressive coding.
+  @param framePackingType
+          indicates the type of packing arrangement of the frames as
+          specified standard. Refer IH264ENC_FramePackingType
+  @param frame0PositionX
+          location of the upper left sample of frame 0 (Left view) in
+          horizontal direction. Allowed values are [0,15]. Only lower
+          4 bits of this parameter are significant.
+  @param frame0PositionY
+          location of the upper left sample of frame 0 (Left view) in
+          vertical direction. Allowed values are [0,15]. Only lower
+          4 bits of this parameter are significant.
+  @param frame1PositionX
+          location of the upper left sample of frame 1 (Right view) in
+          horizontal direction. Allowed values are [0,15]. Only lower
+          4 bits of this parameter are significant.
+  @param frame1PositionY
+          location of the upper left sample of frame 1 (Right view) in
+          vertical direction. Allowed values are [0,15]. Only lower
+          4 bits of this parameter are significant.
+  @param reservedByte
+          reserved byte that needs to be encoded as part of SEI message
+          "frame_packing_arrangement_reserved_byte"
+          User should set it to 0 as current standard (March 2010) allows
+          only 0 of this value. This is kept for future provisions.
+
+*/
+typedef struct IH264ENC_FramePackingSEIParams {
+    XDAS_UInt8 framePackingPreset;
+    XDAS_UInt8 framePackingType;
+    XDAS_UInt8 frame0PositionX;
+    XDAS_UInt8 frame0PositionY;
+    XDAS_UInt8 frame1PositionX;
+    XDAS_UInt8 frame1PositionY;
+    XDAS_UInt8 reservedByte;
+}IH264ENC_FramePackingSEIParams;
+
+/**
+
+  @struct IH264ENC_SVCCodingParams
+  @brief  This structure contains all the parameters which controls SVC
+          parameters. Refer Annex G of the H.264 standard for more details
+          of SVC and parameters
+
+  @param  svcExtensionFlag
+          This parameter configures the codec put SVC extensions in the
+          bit-stream. For normal H.264 operation this Flag needs to be ZERO
+          (default value). For Encoder instance to encode SSPS, Prefix-NALU,
+           Coded Slice in the bit-stream, this flag needs to be set.
+
+      Allowed Values are [0,1,2]
+
+      0 - Disables all SVC features/syntaxes and rest of the structure
+          is not read/respected.
+      1 - Encodes the required SVC related syntaxes of the layer for
+          which H.264 Codec has been instantiated.
+      2 - Encoder the required SVC related syntaxes of the layer for
+          which H.264 Codec has been instantiated
+        Only in this mode, the JSVM error concealment will work on
+        encoded bitstreams as in this mode even Spatial/CGS is also
+        coded the MGS way (i.e. by setting
+        adaptive_xxx_prediction_flag and
+        default_xxxx_prediction_flag to zero).
+
+  @param  dependencyID
+          This parameter tell whether the current instance is for Base layer
+          or for enhancement layer and also conveys Layer ID Info. This field
+          is respected only when svcExtensionFlag is set. For configuring the
+          encoder instance for BL then this parameter should be ZERO. For
+          configuring the encoder instance for EL, this parameter should hold
+          the value of the layer ID.
+
+  @param  qualityID
+          This parameter tells Quality ID of the layer that the current instance
+          of encoder is going to encode.
+          This field is respected only when svcExtensionFlag is set. For
+          configuring the encoder instance for BL then this parameter should be
+          ZERO.
+
+  @param  enhancementProfileID
+          This parameter conveys the enhancement encoder instance like what
+          should be the profile ID to be encoded in the Sub-Sequence Parameter
+          Set (SSPS).This parameter is dont care when, the svcExtensionFlag is
+          not set.Possible values are IH264SVC_BASELINE_PROFILE (83) or
+          IH264SVC_HIGH_PROFILE (86)
+  @param  layerIndex
+          This parameter conveys the enhancement encoder instance like what
+          should be the pic_parameter_set_id and seq_parameter_set_id to be
+          encoded in the Picture Parameter Set (PPS) and Sub-Sequence Parameter
+          Set (SSPS). layerIndex is dont care or treated to be ZERO when
+          svcExtensionFlag is not enabled.
+  @param  refLayerDQId
+          This parameter conveys the the DQ Id of the ReferenceLayer.
+
+*/
+
+typedef struct IH264ENC_SVCCodingParams {
+    XDAS_UInt8 svcExtensionFlag;
+    XDAS_UInt8 dependencyID;
+    XDAS_UInt8 qualityID;
+    XDAS_UInt8 enhancementProfileID;
+    XDAS_UInt8 layerIndex;
+    XDAS_Int8  refLayerDQId;
+
+} IH264ENC_SVCCodingParams;
+
+/**<
+
+  @struct IH264ENC_Params
+  @brief This structure defines the Create time parameters for all
+         H264ENC objects
+
+  @param  videnc2Params        must be followed for all video encoders.
+                               Base class create params
+  @param  rateControlParams    Controls all Rate Control related parameters
+  @param  interCodingParams    Controls all Inter coding related parameters
+  @param  intraCodingParams    Controls all Intra coding related parameters
+
+  @param  nalUnitControlParams Controls the insertion of different NALUs at
+                               different access points in video sequence
+  @param  sliceCodingParams    Controls all Slice coding related parameters
+  @param  loopFilterParams     Controls the in-loop filtering process
+  @param  fmoCodingParams      Controls the FMO behavior
+  @param  vuiCodingParams      Controls the VUI (Video Usability Information)
+                               parameters. Refer Annex E for more details of
+  @param  stereoInfoParams     Controls the Stereo Video Information for SEI
+                               NAL Unit.
+  @param  framePackingSEIParams This structure contains all the parameters
+                                for Frame packing SEI message.
+  @param  svcCodingParams      Controls the SVC coding parameters
+
+  @param  interlaceCodingType  Controls the type of interlaced coding, refer
+                               IH264ENC_InterlaceCodingType for more details
+  @param  bottomFieldIntra     This field is valid only for interlaced sequences
+          0        = Bottom field of the first I frame in the GOP encoded as
+                     P field.
+          non-zero = Bottom field of the first I frame in the GOP encoded as I
+                     field.
+
+  @param  IDRFrameInterval     Interval b/w two IDR frames, unit of this
+                                parameter is intraFrameInterval
+  Ex: 0 : Only first I frame as IDR
+      1 : All I frames are IDR.
+      2 : 1 out of 2 I frames are IDR starting from first I frame
+      -ve values are not allowed.
+
+  @param  gopStructure         Defines the gop structure type:
+                               uniform/non-uniform. For more information refer
+                               IH264ENC_GOPStructure
+  @param  entropyCodingMode    Controls the entropy coding type, see
+                               IH264ENC_EntropyCodingMode for allowed values
+  @param  transformBlockSize   Tranform Block size. Refer
+                               IH264ENC_TransformBlockSize
+
+  @param  log2MaxFNumMinus4    Limits the maximum frame number in the bit-stream
+                               to (1<< (log2MaxFNumMinus4 + 4)) Range[0,12]
+  @param  picOrderCountType    Picture Order count type Valid values refer
+                               IH264ENC_PicOrderCountType
+  @param  enableWatermark      This Parameter Enables or disables Water Mark
+                               SEI message in the bit stream
+                               0  Disable, Non-Zero - Enable
+  @param  pConstantMemory
+          This pointer points to the the memory area where constants are
+          located. It has to be in DDR addressable space by vDMA. This is
+          use ful to allow relocatable constants for the applications which
+          doesn't use M3 as host. Actual memory controller/allocator
+          is on another master processor. If this is set to NULL then
+          encoder assumes that all constants are pointed by symbol
+          H264ENC_TI_ConstData
+
+
+  @param  maxIntraFrameInterval
+          This parameter contains the maximum Intra Frame interval. It is used
+          to reduce the memory requirement of refernce Buffers. Because for all
+          I frame/field configuration the reference frame buffers are not
+          required
+          @remarks  For example, this field will be:
+         - 0 - Only first frame to be intra
+           coded.  e.g. IPPPPPP...
+         - 1 - No inter frames (all intra
+           frames).
+         - 2 - Consecutive IPIPIP... sequence (if
+           no B frames).
+         - 3 - IPPIPP... or IPBIPBI... and so on.
+
+  @param  debugTraceLevel
+          This parameter configures the codec to dump a debug trace log
+
+  @param  lastNFramesToLog
+          This parameter configures the codec to maintain a history of last
+          N frames/pictures
+
+  @param  enableAnalyticinfo
+          This parameter configures the codec to expose analytic info like
+          MVs and SAD parameters
+  @param  enableGMVSei
+          This Parameter Enable or disable the TI specific GMV SEI message
+          in the bit stream
+          0  Disable, Non-Zero - Enable
+
+  @param  constraintSetFlags
+          Used to modify the values of constraint set flags that
+          are coded in te bit stream. The syntax of of this
+          flag is as follows
+           RESVD|RESVD|RESVD|PRESET|CST_0|CST_1|CST_2|CST_3
+          if preset is set to zero then, CST flags are set by the
+          encoder internally. if preset is 1 then encoder takes the
+          preset values given by the user and encodes themin the
+          bit stream. Note that there are no error checks are placed
+          on the user defined values.
+  @param  enableRCDO
+          This paramter is used to enable encoding a bit stream compliant to
+          Reduced Complexity Decoding Operations (RCDO) profile
+
+  @param  enableLongTermRefFrame
+          This paramter is used to enable support of long term reference frame.
+          Enabling this bit will instruct encoder to keep the recently marked
+          long-term frame in its refernce buffer list. So it increases the DDR
+          foot print by one or two frame buffers depends on the LTRPScheme used.
+
+  @param  LTRPPeriod
+          This parameter is used to specify the long-term reference frame
+          marking interval. This parameter is in use when
+          enableLongTermRefFrame = IH264ENC_LTRP_REFERTOP_REACTIVE or
+          IH264ENC_LTRP_REFERTO_PERIODICLTRP.
+
+  @param  numTemporalLayer
+          This parameter controls the temporal Levels in bit-stream.
+           1 - Only Base Layer available in bit-stream.
+           2 - Maximum Temporal Level 1 in bit-stream
+           3 - Maximum Temporal Level 2 in bit-stream
+           4 - Maximum Temporal Level 3 in bit-stream
+       @remarks - numTemporalLayer = 0 is not supported & its erroneous case.
+
+  @param  referencePicMarking
+          This parameter used to control the Reference Picture Marking
+          For any non-zero value means Long-term Picture (MMCO Commands)
+            0 - Short-term Picture (Sliding Window)
+            1 - Long-term Picture (  MMCO Commands)
+  @param  reservedParams
+          Some part is kept reserved to add parameters later without
+          changing the foot print of interface object memory
+
+  @todo
+  More parameters need to be added for Hieririchal frames,
+  error resilience options, SEI/VUI parameter options, Analytic exposure
+  from encoder like MVs and SAD parameters
+
+
+*/
+
+typedef struct {
+    IVIDENC2_Params                videnc2Params;
+    IH264ENC_RateControlParams     rateControlParams;
+    IH264ENC_InterCodingParams     interCodingParams;
+    IH264ENC_IntraCodingParams     intraCodingParams;
+    IH264ENC_NALUControlParams     nalUnitControlParams;
+    IH264ENC_SliceCodingParams     sliceCodingParams;
+    IH264ENC_LoopFilterParams      loopFilterParams;
+    IH264ENC_FMOCodingParams       fmoCodingParams;
+    IH264ENC_VUICodingParams       vuiCodingParams;
+    IH264ENC_StereoInfoParams      stereoInfoParams;
+    IH264ENC_FramePackingSEIParams framePackingSEIParams;
+    IH264ENC_SVCCodingParams       svcCodingParams;
+    XDAS_Int8                      interlaceCodingType;
+    XDAS_Int8                      bottomFieldIntra;
+    XDAS_Int8                      gopStructure;
+    XDAS_Int8                      entropyCodingMode;
+    XDAS_Int8                      transformBlockSize;
+    XDAS_Int8                      log2MaxFNumMinus4;
+    XDAS_Int8                      picOrderCountType;
+    /*   XDAS_Int8                        mbMetaDataEnable ;                      */
+    XDAS_Int8   enableWatermark;
+    XDAS_Int32  IDRFrameInterval;
+    XDAS_Int32  pConstantMemory;
+    XDAS_Int32  maxIntraFrameInterval;
+    XDAS_UInt32 debugTraceLevel;
+    XDAS_UInt32 lastNFramesToLog;
+    XDAS_Int8   enableAnalyticinfo;
+    XDAS_Int8   enableGMVSei;
+    XDAS_Int8   constraintSetFlags;
+    XDAS_Int8   enableRCDO;
+    XDAS_Int32  enableLongTermRefFrame;
+    XDAS_Int32  LTRPPeriod;
+    XDAS_Int8   numTemporalLayer;
+    XDAS_Int8   referencePicMarking;
+    XDAS_Int32  reservedParams[3];
+} IH264ENC_Params;
+
+
+/**<
+
+  @struct IH264ENC_Status
+  @brief This structure informs back the status of H264 encoder and tells the
+         value of each control parameter
+
+  @param  videnc2Status        must be followed for all video encoders.
+                               Base class status
+
+  @param  rateControlParams    Controls all Rate Control related parameters
+  @param  interCodingParams    Controls all Inter coding related parameters
+  @param  intraCodingParams    Controls all Intra coding related parameters
+
+  @param  nalUnitControlParams Controls the insertion of different NALUs at
+                               different access points in video sequence
+  @param  sliceCodingParams    Controls all Slice coding related parameters
+  @param  loopFilterParams     Controls the in-loop filtering process
+  @param  fmoCodingParams      Controls the FMO behavior
+  @param  vuiCodingParams      Controls the VUI (Video Usability Information)
+                               parameters. Refer Annex E for more details
+                               of VUI and parameters
+  @param  stereoInfoParams     Controls the Stereo Video Information for SEI
+                               NAL Unit.
+  @param  framePackingSEIParams This structure contains all the parameters
+                                for Frame packing SEI message.
+  @param  svcCodingParams      Controls the SVC behavior
+  @param  interlaceCodingType  Controls the type of interlaced coding, refer
+                               IH264ENC_InterlaceCodingType for more details
+  @param  bottomFieldIntra     This field is valid only for interlaced sequences
+                               0 = Bottom field of the first I frame in the GOP
+                               encoded as P field.
+                               non-zero = Bottom field of the first I frame in
+                               the GOP encoded as I field.
+  @param  gopStructure         Defines the gop structure type: Open/Close.
+                               For more information refer IH264ENC_GOPStructure
+  @param  entropyCodingMode    Controls the entropy coding type, see
+                               IH264ENC_EntropyCodingMode for allowed values
+  @param  transformBlockSize   Tranform Block size. Refer
+                               IH264ENC_TransformBlockSize
+
+  @param  log2MaxFNumMinus4    Limits the maximum frame number in the bit-stream
+                                to (1<< (log2MaxFNumMinus4 + 4)) Range[0,12]
+  @param  picOrderCountType    Picture Order count type Valid values refer
+                               IH264ENC_PicOrderCountType
+  @param  enableWatermark      This Parameter Enables or disables Water Mark
+                               SEI message in the bit stream
+                               0  Disable, Non-Zero - Enable
+  @param  IDRFrameInterval     Interval b/w two IDR frames, it should be and
+                               integer multiple of intraFrameInterval
+
+  @param  maxIntraFrameInterval
+          This parameter contains the maximum Intra Frame interval. It is used
+          to reduce the memory requirement of refernce Buffers. Because for all
+          I frame/field configuration the reference frame buffers are not
+          required
+          @remarks  For example, this field will be:
+         - 0 - Only first frame to be intra
+           coded.  e.g. IPPPPPP...
+         - 1 - No inter frames (all intra
+           frames).
+         - 2 - Consecutive IPIPIP... sequence (if
+           no B frames).
+         - 3 - IPPIPP... or IPBIPBI... and so on.
+
+  @param  debugTraceLevel
+          This parameter configures the codec to dump a debug trace log
+
+  @param  lastNFramesToLog
+          This parameter configures the codec to maintain a history of last
+          N frames/pictures
+
+  @param  enableAnalyticinfo
+          This parameter configures the codec to expose analytic info like
+          MVs and SAD parameters
+
+  @param  enableGMVSei
+          This Parameter Enable or disable the TI specific GMV SEI message
+          in the bit stream
+          0  Disable, Non-Zero - Enable
+
+  @param  constraintSetFlags
+          Used to modify the values of constraint set flags that
+          are coded in te bit stream. The syntax of of this
+          flag is as follows
+           RESVD|RESVD|RESVD|PRESET|CST_0|CST_1|CST_2|CST_3
+          if preset is set to zero then, CST flags are set by the
+          encoder internally. if preset is 1 then encoder takes the
+          preset values given by the user and encodes themin the
+          bit stream. Note that there are no error checks are placed
+          on the user defined values.
+
+  @param  enableRCDO
+          This paramter is used to enable encoding a bit stream compliant to
+          Reduced Complexity Decoding Operations (RCDO) profile
+
+  @param  enableLongTermRefFrame
+          This paramter is used to enable support of long term reference frame.
+          Enabling this bit will instruct encoder to keep the recently marked
+          long-term frame in its refernce buffer list. So it increases the DDR
+          foot print by one or two frame buffers depends on the LTRPScheme used.
+
+  @param  LTRPPeriod
+          This parameter is used to specify the long-term reference frame
+          marking interval. This parameter is in use when
+          enableLongTermRefFrame = IH264ENC_LTRP_REFERTOP_REACTIVE or
+          IH264ENC_LTRP_REFERTO_PERIODICLTRP.
+
+  @param  searchCenter         seacrh Center for motion estimation
+  @param  enableStaticMBCount  Flag to indicate enable/disable Static MB count
+                               support
+  @param  extMemoryDebugTraceAddr  This parameter reports the external
+                               memory address (as seen by M3) where debug trace
+                               information is being dumped
+  @param  extMemoryDebugTraceSize  This parameter reports the external
+                               memory buffer size (in bytes) where debug trace
+                               information is being dumped
+  @param  numTemporalLayer     This parameter controls the temporal Levels in
+                               bit-stream.
+  @param  referencePicMarking  This parameter used to control the Reference
+                               Picture Marking.
+  @param  extErrorCode        This parameter carries the sub extended error bits
+                              set by encoder. Application/user can look into
+                              these bits to correct his configuration.
+*/
+
+typedef struct {
+    IVIDENC2_Status videnc2Status;
+
+    IH264ENC_RateControlParams     rateControlParams;
+    IH264ENC_InterCodingParams     interCodingParams;
+    IH264ENC_IntraCodingParams     intraCodingParams;
+    IH264ENC_NALUControlParams     nalUnitControlParams;
+    IH264ENC_SliceCodingParams     sliceCodingParams;
+    IH264ENC_LoopFilterParams      loopFilterParams;
+    IH264ENC_FMOCodingParams       fmoCodingParams;
+    IH264ENC_VUICodingParams       vuiCodingParams;
+    IH264ENC_StereoInfoParams      stereoInfoParams;
+    IH264ENC_FramePackingSEIParams framePackingSEIParams;
+    IH264ENC_SVCCodingParams       svcCodingParams;
+
+    XDAS_Int8    interlaceCodingType;
+    XDAS_Int8    bottomFieldIntra;
+    XDAS_Int8    gopStructure;
+    XDAS_Int8    entropyCodingMode;
+    XDAS_Int8    transformBlockSize;
+    XDAS_Int8    log2MaxFNumMinus4;
+    XDAS_Int8    picOrderCountType;
+    XDAS_Int8    enableWatermark;
+    XDAS_Int32   IDRFrameInterval;
+    XDAS_Int32   maxIntraFrameInterval;
+    XDAS_UInt32  debugTraceLevel;
+    XDAS_UInt32  lastNFramesToLog;
+    XDAS_Int8    enableAnalyticinfo;
+    XDAS_Int8    enableGMVSei;
+    XDAS_Int8    constraintSetFlags;
+    XDAS_Int8    enableRCDO;
+    XDAS_Int32   enableLongTermRefFrame;
+    XDAS_Int32   LTRPPeriod;
+    XDM_Point    searchCenter;
+    XDAS_Int8    enableStaticMBCount;
+    XDAS_UInt32 *extMemoryDebugTraceAddr;
+    XDAS_Int8    numTemporalLayer;
+    XDAS_Int8    referencePicMarking;
+    XDAS_UInt32  extMemoryDebugTraceSize;
+    XDAS_Int8    enableROI;
+    XDAS_UInt32  extErrorCode[IH264ENC_EXTERROR_NUM_MAXWORDS];
+} IH264ENC_Status;
+
+/**< This structure must be the first field of all H264ENC instance objects */
+typedef struct IH264ENC_Obj {
+    struct IH264ENC_Fxns *fxns;
+} IH264ENC_Obj;
+
+/**< This handle is used to reference all H264ENC instance objects */
+typedef struct IH264ENC_Obj *IH264ENC_Handle;
+
+/**<Default parameter values for H264ENC instance objects */
+extern const IH264ENC_Params    H264ENC_TI_PARAMS;
+
+
+/**<
+
+  @struct IH264ENC_DynamicParams
+  @brief This structure defines the run time parameters for all H264ENC objects
+
+  @param  videnc2DynamicParams must be followed for all video encoders
+  @param  rateControlParams    Controls all Rate Control related parameters.
+                               only few are supported to be changed as
+                               part @ Control call. Refer
+                               IH264ENC_RateControlParams to find out
+  @param  interCodingParams    Controls all iner MB coding related parameters.
+                               only few are supported to be changed as
+                               part @ Control call. Refer interCodingParams to
+                               find out
+  @param  sliceCodingParams    Controls all Slice coding related parameters.
+                               only few are supported to be changed as
+                               part @ Control call.
+                               Refer sliceCodingParams to find out
+  @param  sliceGroupChangeCycle
+          Only valid when sliceGroupMapType is equal to
+          IH264_RASTER_SCAN_SLICE_GRP,
+          IH264_WIPE_SLICE_GRP or IH264_WIPE_SLICE_GRP
+          Valid values can be 0 to numMbsRowsInPicture, also constrained by
+          sliceGroupChangeRate*sliceGroupChangeCycle < totalMbsInFrameOnly valid
+          when sliceGroupMapType is equal to IH264_RASTER_SCAN_SLICE_GRP.
+          valid values are : [0, factor of number of Mbs in a row]
+  @param  searchCenter         seacrh Center for motion estimation.
+                               XDM_Point.x == 0xFFFF means ignore searchCenter
+
+  @param  enableStaticMBCount  Flag to indicate enable/disable Static MB count
+                               support
+
+  @param  enableROI
+          Enable/Disable the ROI algorithm
+
+  @param  reservedDynParams
+          Some part is kept reserved to add parameters later without changing
+          the foot print of interface memory
+
+*/
+
+typedef struct IH264ENC_DynamicParams {
+    IVIDENC2_DynamicParams     videnc2DynamicParams;
+    IH264ENC_RateControlParams rateControlParams;
+    IH264ENC_InterCodingParams interCodingParams;
+    IH264ENC_IntraCodingParams intraCodingParams;
+    IH264ENC_SliceCodingParams sliceCodingParams;
+    XDAS_Int32                 sliceGroupChangeCycle;
+    XDM_Point                  searchCenter;
+    XDAS_Int8                  enableStaticMBCount;
+    XDAS_Int32                 enableROI;
+    XDAS_Int32                 reservedDynParams[3];
+} IH264ENC_DynamicParams;
+
+extern const IH264ENC_DynamicParams    H264ENC_TI_DYNAMICPARAMS;
+
+/**<
+
+  @struct IH264ENC_InArgs
+  @brief  This structure defines the input argument being passed to
+          H.264 encoder
+
+  @params videnc2InArgs : It is instance of base class. It cntains all
+          the necessary  info required run time parameters for all H264ENC
+          objects
+  @param  processId      : processId in InArgs was kept to ease the
+                           implementation of acquire time optimization
+                           in application code. In N channel case,
+                           acquire is happening for last channel and
+                           this (processId ) as argument is passed into
+                           acquire call.This will make application to
+                           understand that for which process call, acquire
+                           has been made. With this information application
+                           can optimize the time spent in acquire. Like, it
+                           might have happened that from last call of acquire,
+                           IVAHd became unavailable to any further process
+                           call(s). In this scenario application will get to
+                           know that IVAHD was not given to somebody else from
+                           last process call, and hence it can do some
+                           optimization in acquire routine
+  @params roiInputParams : Input parameters related to ROI algorithm
+  @params inputKey       : This parameter along with the few important
+                           properties of a frame are used to generate the
+                           Encrypted key. If watermarking is enabled then this
+                           Encrypted key would be inserted in the form of user
+                           data unregistered SEI message in the encoded stream.
+  */
+typedef struct IH264ENC_InArgs {
+
+    IVIDENC2_InArgs   videnc2InArgs;
+    XDAS_Int32        processId;
+    IH264ENC_RoiInput roiInputParams;
+    XDAS_UInt32       inputKey;
+} IH264ENC_InArgs;
+
+
+/**<
+
+  @struct IH264ENC_MetaDataFormatUserDefinedSEI
+  @brief This structure defines the format of meta data used to provide
+         information about user defined SEI
+
+  @param  size size of the payload
+  @param  payload buffer
+
+*/
+typedef struct IH264ENC_MetaDataFormatUserDefinedSEI {
+    XDAS_Int32 size;
+    XDAS_Int8  payload[IH264ENC_MAX_SEI_METADTA_BUFSIZE];
+}IH264ENC_MetaDataFormatUserDefinedSEI;
+
+/**<
+
+  @struct IH264ENC_MetaDataFormatNaluInfo
+  @brief This structure defines the format of meta data used to provide
+         information about slice
+
+  @param  naluSize size of each NAL Unit
+
+*/
+typedef struct IH264ENC_MetaDataFormatNaluInfo {
+    XDAS_Int32 naluSize;
+}IH264ENC_MetaDataFormatNaluInfo;
+
+/**<
+
+  @struct IH264ENC_OutArgs
+  @brief  This structure defines the output argument being generated from H.264
+          encoder
+
+  @params videnc2OutArgs : It is instance of base class. It cntains all
+          the necessary info encoder should produce
+  @params bytesGeneratedBotField: Number of bytes generated for bottom field
+          during the IVIDENC2_Fxns::process() call. This field is updated only
+          in case of contentType = Interlaced and both the fields are provided
+          to codec in single process call
+  @param  vbvBufferLevel: This varible tells the buffer level at the end of
+          every picture from decoder perspective.the value populated
+          in this variable is latest for every process call
+  @param  numStaticMBs: Number of static MBs (defined by H241) in the encoded
+          picture. This field is updated only in case of
+          dynamicParams.enableStaticMBCount is set.
+  @param  temporalId:Temporal ID for temporal scalability.Temporal layer Id
+          of current frame in H-P encoding(for base layer value is 0).
+  @param  control: Encoder control operations. Most of the times it is
+          IVIDENC2_InArgs::control. But there are certain cases when it is
+          not same as IVIDENC2_InArgs::control, hence it is advisable to look
+          at this output information
+          @sa IVIDENC2_Control
+          @sa IH264ENC_Control
+  @param  extErrorCode : This parameter carries the sub extended error bits
+          set by encoder. Application/user can look into these
+          bits to understand encoder's run time failure.
+*/
+typedef struct IH264ENC_OutArgs {
+
+    IVIDENC2_OutArgs videnc2OutArgs;
+    XDAS_Int32       bytesGeneratedBotField;
+    XDAS_Int32       vbvBufferLevel;
+    XDAS_Int32       numStaticMBs;
+    XDAS_Int32       temporalId;
+    XDAS_Int32       control;
+    XDAS_UInt32      extErrorCode[IH264ENC_EXTERROR_NUM_MAXWORDS];
+} IH264ENC_OutArgs;
+
+#define IH264ENC_MAX_LENGTH_PROCESS_LIST (24)
+
+/**<
+  @struct IH264ENC_ProcessParams
+  @brief  This structure defines the channel specific parameters passed in
+          a process call
+  @params handle  : Handle to an algorithm instance
+  @params inBufs  : pointer to detailed buffer descriptor for video buffers
+  @params outBufs : pointer to the Buffer descriptors
+  @params inArgs  : pointer to the input argument being passed to H.264
+                    encoder
+  @params outArgs : pointer to the output argument being generated from H.264
+                    encoder
+  */
+typedef struct {
+    IVIDENC2_Handle   handle;
+    IVIDEO2_BufDesc  *inBufs;
+    XDM2_BufDesc     *outBufs;
+    IVIDENC2_InArgs  *inArgs;
+    IVIDENC2_OutArgs *outArgs;
+
+} IH264ENC_ProcessParams;
+
+/**<
+
+  @struct IH264ENC_ProcessParamsList
+  @brief  This structure carries the information of all the channels to be
+          processed .
+  @params numEntries        : Number of channels to be encoded in the process
+                              call.
+  @params enableErrorCheck  : This parameter controls(enable/disable)
+            the check of the non supported features in N channel scenario.
+           Note:
+           1.Effect of flag is as of now only if (processList->numEntries > 1).
+           2.Suggested value for this flag is 0 to have better performance
+  @params processParams     : An array holding the process parameters viz.,
+             handle,InArgs,outArgs etc of the channel(s) to be processed.
+
+  */
+
+typedef struct {
+    XDAS_Int32             numEntries;
+    XDAS_Int32             enableErrorCheck;
+    IH264ENC_ProcessParams processParams[IH264ENC_MAX_LENGTH_PROCESS_LIST];
+} IH264ENC_ProcessParamsList;
+
+/**<
+
+  @struct IH264ENC_Fxns
+  @brief  This structure defines of the operations on H264ENC objects
+
+    @params IVIDENC2_Fxns : It is instance of base class. It contains all
+                            function table
+    @params processMulti   : pointer to the Function H264ENC_TI_encodemulti
+
+*/
+typedef struct IH264ENC_Fxns {
+    IVIDENC2_Fxns ividenc;
+    XDAS_Int32 (*processMulti)(IH264ENC_ProcessParamsList *processList);
+
+} IH264ENC_Fxns;
+
+#ifdef __cplusplus
+}
+#endif
+
+/*@}*/ /* ingroup HDVICP2H264 */
+
+#endif  /* _IH264ENC_H_  --}                                                  */
+
+/* ========================================================================*/
+/* End of file : ih264enc.h                                                */
+/*-------------------------------------------------------------------------*/
+/*            Copyright (c) 2009 Texas Instruments, Incorporated.          */
+/*                           All Rights Reserved.                          */
+/* ========================================================================*/
+
diff --git a/packages/ivahd_codecs/ti/sdo/codecs/h264svcenc/ih264svcenc.h b/packages/ivahd_codecs/ti/sdo/codecs/h264svcenc/ih264svcenc.h
new file mode 100644 (file)
index 0000000..ac4702a
--- /dev/null
@@ -0,0 +1,295 @@
+/*
+********************************************************************************
+ * HDVICP2.0 Based SVC Baseline Encoder
+ *
+ * "HDVICP2.0 Based SVC Baseline Encoder" is software module developed on TI's
+ *  HDVICP2 based SOCs. This module is capable of compressing a 4:2:0 Raw
+ *  video into a SVC baseline profile bit-stream. Based on ISO/IEC
+ *  14496-10."
+ * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
+ * ALL RIGHTS RESERVED
+********************************************************************************
+*/
+/**
+  ******************************************************************************
+  *  @file     ih264svcenc.h
+  *
+  *  @brief    IH264SVCENC Interface Header
+  *
+  *  @author: Venugopala Krishna (venugopala@ti.com)
+  *
+  *  @version 0.0 (Apr 2010) : Initial version created
+  *****************************************************************************
+*/
+
+/**
+ *  @defgroup   HDVICP2SVC IH264SVCENC_TI (V7M)
+ *  @ingroup    m3
+ *
+ *              The ISVCENC_TI interface enables encoding in SVC format
+ *
+ */
+
+#ifndef _IH264SVCENC_H_  //--{
+
+#define _IH264SVCENC_H_
+
+#include <ti/xdais/ialg.h>
+#include <ti/xdais/dm/ividenc2.h>
+
+#include "ih264enc.h"
+
+/** @ingroup    HDVICP2SVC */
+/*@{*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/* Definition of all the macros define by this interafce       */
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/**
+ * Maximum number of instances of H.264 embedded inside SVC
+*/
+#define   IH264SVCENC_MAX_NUM_MULTI_INSTANCE   (9)
+
+/**
+  Length of the version string. The memory to get version
+  number is owned by application
+*/
+#define IH264SVCENC_VERSION_LENGTH (64)
+
+
+/**
+  control method commands
+*/
+#define IH264SVCENC_GETSTATUS      XDM_GETSTATUS
+#define IH264SVCENC_SETPARAMS      XDM_SETPARAMS
+#define IH264SVCENC_RESET          XDM_RESET
+#define IH264SVCENC_FLUSH          XDM_FLUSH
+#define IH264SVCENC_SETDEFAULT     XDM_SETDEFAULT
+#define IH264SVCENC_GETBUFINFO     XDM_GETBUFINFO
+
+typedef IVIDENC2_Cmd IH264SVCENC_Cmd;
+
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/* Definition of all the Enumeration define by this interafce  */
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/**
+ *  @enum       IH264SVCENC_ErrorBit
+ *  @brief      error informations of IVAHD SVC encoder implementation by TI.
+ *
+ *  @remarks    When an internal error occurs, the algorithm will return
+ *              an error return value (e.g. EFAIL, EUNSUPPORTED)
+ *
+ *  @remarks    The value of each enum is the bit which is set.
+ *
+ *  @remarks    Bits 8-15 are defined by XDM and hence not used by codec
+ *              implementation.
+ *              rest all bits are used. XDM defined error bits are also active.
+ *
+ *  @remarks    The algorithm can set multiple bits to 1 based on conditions.
+ *              e.g. it will set bits #XDM_FATALERROR (fatal) and
+ *              #XDM_UNSUPPORTEDPARAM (unsupported params) in case
+ *              of unsupported run time parameters.
+ *
+ */
+
+typedef enum {
+    IH264SVCENC_LEVEL_INCOMPLAINT_PARAMETER = 0
+                                              /**< Bit 0 - level incomplaint parameters.
+                                              *   @remarks  This error is applicable when some parameters are set
+                                              *   which are not meeting the limit defined by H.264 standard
+                                              *   Table A-1  Level limits. It can be categorized under
+                                              *   following category :
+                                              *   IH264ENC_LEVEL_INCOMPLAINT_RESOLUTION : Invalid width/height
+                                              *   IH264ENC_LEVEL_INCOMPLAINT_HRDBUFSZIE : Invalid HrdBufferSize
+                                              *   IH264ENC_LEVEL_INCOMPLAINT_BITRATE    : Invalid Bit Rate
+                                              *   IH264ENC_LEVEL_INCOMPLAINT_MBSPERSECOND : Invalid FrameRate/
+                                              *                                             resolution
+                                              *   IH264ENC_LEVEL_INCOMPLAINT_DPBSIZE      : Invalid DPB size
+                                              *   For above 5 situations, only a signle bit (bit-0) is set as true
+                                              */
+
+} IH264SVCENC_ErrorBit;
+
+/**
+ *  @enum       ISVCENC_Level
+ *  @brief      Level Identifier for H.264 Encoder
+*/
+typedef enum {
+    IH264SVC_LEVEL_10 = 10 /**<  Level 1.0  */
+
+} IH264SVCENC_Level;
+
+
+
+/**<
+ *  @struct IH264SVCENC_Params
+ *  @brief This structure defines the Create time parameters for all
+ *         H264SVCENC objects
+ *  @param  h264Params           Create Parameters (Extended Class) of the H264 Encoder.
+ *                               As defined in the interface file (ih264enc.h) of H264 Encoder.
+ *
+ *  @param  inBufIndex           Conveys how inBufs passed in the process is mapped to
+ *                               different layers/instances of Encoder.
+ *
+ *  @param  numberOfLayers       Conveys number of layers to be encoded. This field is used
+ *                               in reading the number of entries of h264Params, inBufIndex etc.
+ *
+ *  @param  avcMode              If numberOfLayers is set to be ONE, this flag determines whether
+ *                               generated Bitstream be SVC or AVC. Non-Zero means AVC or if ZERO its
+ *                               SVC. NOTE: This field is don't care if numberOfLayers is greater than ONE.
+ *
+*/
+
+typedef struct {
+    IH264ENC_Params h264Params[IH264SVCENC_MAX_NUM_MULTI_INSTANCE];
+    XDAS_Int8       inBufIndex[IH264SVCENC_MAX_NUM_MULTI_INSTANCE];
+    XDAS_UInt8      numberOfLayers;
+    XDAS_UInt8      avcMode;
+
+} IH264SVCENC_Params;
+
+
+/**<
+ *
+ *  @struct IH264SVCENC_Status
+ *  @brief This structure informs back the status of SVC encoder and tells the
+ *         value of each control parameter
+ *  @param  h264Status           Status Parameters (Extended Class) of the H264 Encoder.
+ *                               As defined in the interface file (ih264enc.h) of H264 Encoder.
+ *
+ *  @param  videnc2Status        IVIDENC2 Class Status Parameter given out by SVC Encoder after collating,
+ *                               information from different encoding layers/instances.
+ *
+ *  @param  numberOfLayers       Conveys the information for how many number of layers encoding the SVC
+ *                               Encoder is configured. This field is used in reading the number of
+ *                               entries of h264Status etc.
+ *
+ *  @param  avcMode              If numberOfLayers is set to be ONE, this flag determines whether
+ *                               generated Bitstream be SVC or AVC. Non-Zero means AVC or if ZERO its
+ *                               SVC. NOTE: This field is don't care if numberOfLayers is greater than ONE.
+ *
+*/
+
+typedef struct {
+    IVIDENC2_Status videnc2Status;
+    IH264ENC_Status h264Status[IH264SVCENC_MAX_NUM_MULTI_INSTANCE];
+
+    XDAS_UInt8 numberOfLayers;
+    XDAS_UInt8 avcMode;
+
+} IH264SVCENC_Status;
+
+/**< This structure must be the first field of all SVCENC instance objects */
+typedef struct IH264SVCENC_Obj {
+    struct IH264SVCENC_Fxns *fxns;
+} IH264SVCENC_Obj;
+
+/**< This handle is used to reference all SVCENC instance objects */
+typedef struct IH264SVCENC_Obj *IH264SVCENC_Handle;
+
+/**<Default parameter values for SVCENC instance objects */
+extern const IH264SVCENC_Params    H264SVCENC_TI_PARAMS;
+
+
+/**<
+ *
+ *  @struct IH264SVCENC_DynamicParams
+ *  @brief This structure defines the run time parameters for all SVCENC objects
+ *  @param  h264DynamicParams    Dynamic Parameters (Extended Class) of the H264 Encoder.
+ *                               As defined in the interface file (ih264enc.h) of H264 Encoder.
+ *  @param  numberOfLayers       Conveys the information for how many number of layers encoding the SVC
+ *                               Encoder is configured. This field is used in reading the number of
+ *                               entries of h264DynamicParams etc.
+ *
+ *
+
+*/
+
+typedef struct IH264SVCENC_DynamicParams {
+    IH264ENC_DynamicParams h264DynamicParams[IH264SVCENC_MAX_NUM_MULTI_INSTANCE];
+    XDAS_UInt8             numberOfLayers;
+} IH264SVCENC_DynamicParams;
+
+extern const IH264SVCENC_DynamicParams    IH264SVCENC_DYNAMICPARAMS;
+
+/**<
+
+  @struct ISVCENC_InArgs
+  @brief  This structure defines the input argument being passed to
+          SVC encoder
+
+  @params videnc2InArgs : It is instance of base class. It cntains all
+          the necessary  info required run time parameters for all H264ENC
+          objects
+
+*/
+typedef struct IH264SVCENC_InArgs {
+
+    IVIDENC2_InArgs   videnc2InArgs;
+    XDAS_Int32        processId;
+    IH264ENC_RoiInput roiInputParams;
+    XDAS_UInt32       inputKey;
+
+} IH264SVCENC_InArgs;
+
+
+
+/**<
+
+  @struct IH264SVCENC_OutArgs
+  @brief  This structure defines the outpur argument being generated from SVC
+          encoder
+
+  @params h264OutArgs : Thsi captures the outArgs of the each of the layer encoded.
+  @params videnc2OutArgs : It is instance of base class which captures the outArgs
+          as a consolidated whole for all the layers.
+  @params numberOfLayers: Number of layers that the encoder has been configured to
+           encode.This field is used in reading the number of entries of h264OutArgs etc.
+
+*/
+typedef struct IH264SVCENC_OutArgs {
+
+    IVIDENC2_OutArgs videnc2OutArgs;
+    IH264ENC_OutArgs h264OutArgs[IH264SVCENC_MAX_NUM_MULTI_INSTANCE];
+    XDAS_UInt8       numberOfLayers;
+
+} IH264SVCENC_OutArgs;
+
+/**<
+
+  @struct IH264SVCENC_Fxns
+  @brief  This structure defines of the operations on SVCENC objects
+
+    @params IVIDENC2_Fxns : It is instance of base class. It contains all
+            function table
+
+*/
+typedef struct IH264SVCENC_Fxns {
+    IVIDENC2_Fxns ividenc;
+
+} IH264SVCENC_Fxns;
+
+#ifdef __cplusplus
+}
+#endif
+
+/*@}*/ /* ingroup HDVICP2SVC */
+
+#endif  //_IH264SVCENC_H_ //--}
+
+/* ========================================================================*/
+/* End of file : ih264svcenc.h                                             */
+/*-------------------------------------------------------------------------*/
+/*            Copyright (c) 2009 Texas Instruments, Incorporated.          */
+/*                           All Rights Reserved.                          */
+/* ========================================================================*/
+
diff --git a/packages/ivahd_codecs/ti/sdo/codecs/h264svcvdec/ih264svcvdec.h