Home | History | Annotate | Download | only in inc
      1 
      2 /*
      3  * Copyright (C) Texas Instruments - http://www.ti.com/
      4  *
      5  * This library is free software; you can redistribute it and/or
      6  * modify it under the terms of the GNU Lesser General Public
      7  * License as published by the Free Software Foundation; either
      8  * version 2.1 of the License, or (at your option) any later version.
      9  *
     10  *
     11  * This library is distributed in the hope that it will be useful,
     12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14  * Lesser General Public License for more details.
     15  *
     16  *
     17  * You should have received a copy of the GNU Lesser General Public
     18  * License along with this library; if not, write to the Free Software
     19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
     20  */
     21 /* =============================================================================
     22  *             Texas Instruments OMAP(TM) Platform Software
     23  *  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
     24  *
     25  *  Use of this software is controlled by the terms and conditions found
     26  *  in the license agreement under which this software has been supplied.
     27  * ============================================================================ */
     28 /**
     29  * @file OMX_G711Enc_Utils.h
     30  *
     31  * This is an header file for an G711 Encoder that is fully
     32  * compliant with the OMX Audio specification 1.5.
     33  * This the file that the application that uses OMX would include in its code.
     34  *
     35  * @path $(CSLPATH)\OMAPSW_MPU\linux\audio\src\openmax_il\g711_enc\inc
     36  *
     37  * @rev 1.0
     38  */
     39 /* --------------------------------------------------------------------------- */
     40 /* ----------------------------------------------------------------------------
     41  *!
     42  *! Revision History
     43  *! ===================================
     44  *! 12-Dec-2006: Initial Version
     45  *! This is newest file
     46  * =========================================================================== */
     47 #ifndef OMX_G711ENC_UTILS__H
     48 #define OMX_G711ENC_UTILS__H
     49 #include <OMX_Component.h>
     50 #include <pthread.h>
     51 #include "LCML_DspCodec.h"
     52 #include <TIDspOmx.h>
     53 
     54 #ifdef DSP_RENDERING_ON
     55 #include <AudioManagerAPI.h>
     56 #endif
     57 
     58 #ifdef RESOURCE_MANAGER_ENABLED
     59 #include <ResourceManagerProxyAPI.h>
     60 #endif
     61 
     62 #ifdef UNDER_CE
     63 #define sleep Sleep
     64 #endif
     65 /* ======================================================================= */
     66 /**
     67  * @def    G711ENC_DEBUG   Turns debug messaging on and off
     68  */
     69 /* ======================================================================= */
     70 #undef G711ENC_DEBUG
     71 /* ======================================================================= */
     72 /**
     73  * @def    G711ENC_MEMCHECK   Turns memory messaging on and off
     74  */
     75 /* ======================================================================= */
     76 #undef G711ENC_MEMCHECK
     77 /* ======================================================================= */
     78 /**
     79  * @def    G711ENC_PRINTS   Turns normal prints messaging on and off
     80  *implementation for substituing the normal printf
     81  */
     82 /* ======================================================================= */
     83 #undef G711ENC_PRINT
     84 /*========================================================================*/
     85 
     86 #ifndef UNDER_CE
     87 /* ======================================================================= */
     88 /**
     89  * @def    G711ENC_DEBUG   Debug print macro
     90  */
     91 /* ======================================================================= */
     92 #ifdef  G711ENC_DEBUG
     93 #define G711ENC_DPRINT(...)    fprintf(stderr,__VA_ARGS__)
     94 #else
     95 #define G711ENC_DPRINT(...)
     96 #endif
     97 /* ======================================================================= */
     98 /**
     99  * @def    G711ENC_PRINTS  print macro
    100  */
    101 /* ======================================================================= */
    102 #ifdef  G711ENC_PRINT
    103 #define G711ENC_PRINT(...)    fprintf(stderr,__VA_ARGS__)
    104 #else
    105 #define G711ENC_PRINT(...)
    106 #endif
    107 
    108 /* ======================================================================= */
    109 /**
    110  * @def    G711ENC_MEMCHECK   Memory print macro
    111  */
    112 /* ======================================================================= */
    113 #ifdef  G711ENC_MEMCHECK
    114 #define G711ENC_MEMPRINT(...)    fprintf(stderr,__VA_ARGS__)
    115 #else
    116 #define G711ENC_MEMPRINT(...)
    117 #endif
    118 
    119 #else   /*UNDER_CE*/
    120 /* ======================================================================= */
    121 /**
    122  * @def    G711ENC_DEBUG   Debug print macro
    123  */
    124 /* ======================================================================= */
    125 #ifdef  G711ENC_DEBUG
    126 #define G711ENC_DPRINT(STR, ARG...) printf()
    127 #else
    128 
    129 #endif
    130 /* ======================================================================= */
    131 /**
    132  * @def    G711ENC_MEMCHECK   Memory print macro
    133  */
    134 /* ======================================================================= */
    135 #ifdef  G711ENC_MEMCHECK
    136 #define G711ENC_MEMPRINT(STR, ARG...) printf()
    137 #else
    138 
    139 #endif
    140 
    141 #ifdef UNDER_CE
    142 
    143 #ifdef DEBUG
    144 #define G711ENC_DPRINT     printf
    145 #define G711ENC_MEMPRINT   printf
    146 #else
    147 #define G711ENC_DPRINT
    148 #define G711ENC_MEMPRINT
    149 #endif
    150 
    151 #endif  /*UNDER_CE*/
    152 
    153 #endif
    154 
    155 /* ======================================================================= */
    156 /**
    157  *  M A C R O S FOR MALLOC and MEMORY FREE and CLOSING PIPES
    158  */
    159 /* ======================================================================= */
    160 
    161 #define OMX_G711ENC_INIT_STRUCT(_s_, _name_)    \
    162     memset((_s_), 0x0, sizeof(_name_));         \
    163     (_s_)->nSize = sizeof(_name_);              \
    164     (_s_)->nVersion.s.nVersionMajor = 0x1;      \
    165     (_s_)->nVersion.s.nVersionMinor = 0x0;      \
    166     (_s_)->nVersion.s.nRevision = 0x0;          \
    167     (_s_)->nVersion.s.nStep = 0x0
    168 
    169 #define OMX_G711ENC_MEMFREE_STRUCT(_pStruct_)                   \
    170     if(_pStruct_ != NULL){                                      \
    171     G711ENC_MEMPRINT("%d :: [FREE] %p\n",__LINE__,_pStruct_);   \
    172         free(_pStruct_);                                        \
    173         _pStruct_ = NULL;                                       \
    174     }
    175 
    176 #define OMX_G711ENC_CLOSE_PIPE(_pStruct_,err)                   \
    177     G711ENC_DPRINT("%d :: CLOSING PIPE \n",__LINE__);           \
    178     err = close (_pStruct_);                                    \
    179     if(0 != err && OMX_ErrorNone == eError){                    \
    180         eError = OMX_ErrorHardware;                             \
    181         printf("%d :: Error while closing pipe\n",__LINE__);    \
    182         goto EXIT;                                              \
    183     }
    184 
    185 #define G711ENC_OMX_MALLOC_STRUCT(_pStruct_, _sName_)           \
    186     _pStruct_ = (_sName_*)malloc(sizeof(_sName_));              \
    187     if(_pStruct_ == NULL){                                      \
    188         printf("***********************************\n");        \
    189         printf("%d :: Malloc Failed\n",__LINE__);               \
    190         printf("***********************************\n");        \
    191         eError = OMX_ErrorInsufficientResources;                \
    192         goto EXIT;                                              \
    193     }                                                           \
    194     memset(_pStruct_,0,sizeof(_sName_));                        \
    195     G711ENC_MEMPRINT("%d :: [ALLOC] %p\n",__LINE__,_pStruct_);
    196 
    197 #define G711ENC_OMX_MALLOC_SIZE(_ptr_, _size_,_name_)           \
    198     _ptr_ = (_name_ *)malloc(_size_);                           \
    199     if(_ptr_ == NULL){                                          \
    200         printf("***********************************\n");        \
    201         printf("%d :: Malloc Failed\n",__LINE__);               \
    202         printf("***********************************\n");        \
    203         eError = OMX_ErrorInsufficientResources;                \
    204         goto EXIT;                                              \
    205     }                                                           \
    206     memset(_ptr_,0,_size_);                                     \
    207     G711ENC_MEMPRINT("%d :: Malloced = %p\n",__LINE__,_ptr_);
    208 
    209 /* ======================================================================= */
    210 /**
    211  * @def G711ENC_NUM_INPUT_BUFFERS   Default number of input buffers
    212  */
    213 /* ======================================================================= */
    214 #define G711ENC_NUM_INPUT_BUFFERS 1
    215 /* ======================================================================= */
    216 /**
    217  * @def G711ENC_NUM_INPUT_BUFFERS_DASF  Default No.of input buffers DASF
    218  */
    219 /* ======================================================================= */
    220 #define G711ENC_NUM_INPUT_BUFFERS_DASF 2
    221 /* ======================================================================= */
    222 /**
    223  * @def G711ENC_NUM_OUTPUT_BUFFERS   Default number of output buffers
    224  */
    225 /* ======================================================================= */
    226 #define G711ENC_NUM_OUTPUT_BUFFERS 1
    227 /* ======================================================================= */
    228 /**
    229  * @def G711ENC_INPUT_BUFFER_SIZE_DASF  Default input buffer size DASF
    230  */
    231 /* ======================================================================= */
    232 #define G711ENC_INPUT_BUFFER_SIZE_DASF 160 /*80*/
    233 /* ======================================================================= */
    234 /**
    235  * @def G711ENC_OUTPUT_BUFFER_SIZE   Default output buffer size
    236  */
    237 /* ======================================================================= */
    238 #define G711ENC_OUTPUT_BUFFER_SIZE 80
    239 /* ======================================================================= */
    240 /**
    241  * @def G711ENC_INPUT_FRAME_SIZE   Default input buffer size
    242  */
    243 /* ======================================================================= */
    244 #define G711ENC_INPUT_FRAME_SIZE 160
    245 #define G711ENC_INPUT_FRAME_SIZE_20MS 320
    246 #define G711ENC_INPUT_FRAME_SIZE_30MS 480
    247 /* ======================================================================= */
    248 /**
    249  * @def G711ENC_OUTPUT_FRAME_SIZE   Default output buffer size
    250  */
    251 /* ======================================================================= */
    252 #define G711ENC_OUTPUT_FRAME_SIZE 80
    253 #define G711ENC_OUTPUT_FRAME_SIZE_20MS 160
    254 #define G711ENC_OUTPUT_FRAME_SIZE_30MS 240
    255 /* ======================================================================= */
    256 /**
    257  * @def G711ENC_APP_ID  App ID Value setting
    258  */
    259 /* ======================================================================= */
    260 #define G711ENC_APP_ID 100
    261 
    262 /* ======================================================================= */
    263 /**
    264  * @def    G711ENC_SAMPLING_FREQUENCY   Sampling frequency
    265  */
    266 /* ======================================================================= */
    267 #define G711ENC_SAMPLING_FREQUENCY 8000
    268 /* ======================================================================= */
    269 /**
    270  * @def    G711ENC_MAX_NUM_OF_BUFS   Maximum number of buffers
    271  */
    272 /* ======================================================================= */
    273 #define G711ENC_MAX_NUM_OF_BUFS 10
    274 /* ======================================================================= */
    275 /**
    276  * @def    G711ENC_NUM_OF_PORTS   Number of ports
    277  */
    278 /* ======================================================================= */
    279 #define G711ENC_NUM_OF_PORTS 2
    280 /* ======================================================================= */
    281 /**
    282  * @def    G711ENC_XXX_VER    Component version
    283  */
    284 /* ======================================================================= */
    285 #define G711ENC_MAJOR_VER 0xF1
    286 #define G711ENC_MINOR_VER 0xF2
    287 /* ======================================================================= */
    288 /**
    289  * @def    G711ENC_NOT_USED    Defines a value for "don't care" parameters
    290  */
    291 /* ======================================================================= */
    292 #define G711ENC_NOT_USED 10
    293 /* ======================================================================= */
    294 /**
    295  * @def    G711ENC_NORMAL_BUFFER  Defines flag value with all flags off
    296  */
    297 /* ======================================================================= */
    298 #define G711ENC_NORMAL_BUFFER 0
    299 /* ======================================================================= */
    300 /**
    301  * @def    OMX_G711ENC_DEFAULT_SEGMENT    Default segment ID for the LCML
    302  */
    303 /* ======================================================================= */
    304 #define G711ENC_DEFAULT_SEGMENT (0)
    305 /* ======================================================================= */
    306 /**
    307  * @def    OMX_G711ENC_SN_TIMEOUT    Timeout value for the socket node
    308  */
    309 /* ======================================================================= */
    310 #define G711ENC_SN_TIMEOUT (-1)
    311 /* ======================================================================= */
    312 /**
    313  * @def    OMX_G711ENC_SN_PRIORITY   Priority for the socket node
    314  */
    315 /* ======================================================================= */
    316 #define G711ENC_SN_PRIORITY (10)
    317 /* ======================================================================= */
    318 /**
    319  * @def    G711ENC_CPU   TBD, 50MHz for the moment
    320  */
    321 /* ======================================================================= */
    322 #define G711ENC_CPU (50)
    323 /* ======================================================================= */
    324 /**
    325  * @def    OMX_G711ENC_NUM_DLLS   number of DLL's
    326  */
    327 /* ======================================================================= */
    328 #define G711ENC_NUM_DLLS (2)
    329 /* ======================================================================= */
    330 /**
    331  * @def    OMX_G711ENC_NUM_DLLS   number of DLL's
    332  */
    333 /* ======================================================================= */
    334 #define G711ENC_EXIT_COMPONENT_THRD  10
    335 /* ======================================================================= */
    336 /**
    337  * @def    DSP cache alignment number of bytes
    338  */
    339 /* ======================================================================= */
    340 #define DSP_CACHE_ALIGNMENT  256
    341 /* ======================================================================= */
    342 /**
    343  * @def    Extra buffer bytes used for DSP alignment
    344  */
    345 /* ======================================================================= */
    346 #define EXTRA_BYTES  128
    347 /* ======================================================================= */
    348 /**
    349  * @def    G711ENC_USN_DLL_NAME   USN DLL name
    350  */
    351 /* ======================================================================= */
    352 #ifdef UNDER_CE
    353 #define G711ENC_USN_DLL_NAME "\\windows\\usn.dll64P"
    354 #else
    355 #define G711ENC_USN_DLL_NAME "usn.dll64P"
    356 #endif
    357 
    358 /* ======================================================================= */
    359 /**
    360  * @def    G711ENC_DLL_NAME   G711 Encoder socket node dll name
    361  */
    362 /* ======================================================================= */
    363 #ifdef UNDER_CE
    364 #define G711ENC_DLL_NAME "\\windows\\g711enc_sn.dll64P"
    365 #else
    366 #define G711ENC_DLL_NAME "g711enc_sn.dll64P"
    367 #endif
    368 
    369 /* ======================================================================= */
    370 /** G711ENC_StreamType  Stream types
    371  *
    372  *  @param  G711ENC_DMM         DMM
    373  *
    374  *  @param  G711ENC_INSTRM        Input stream
    375  *
    376  *  @param  G711ENC_OUTSTRM       Output stream
    377  */
    378 /* ======================================================================= */
    379 enum G711ENC_StreamType {
    380     G711ENC_DMM = 0,
    381     G711ENC_INSTRM,
    382     G711ENC_OUTSTRM
    383 };
    384 
    385 /* ======================================================================= */
    386 /**
    387  * @def G711ENC_TIMEOUTS Default timeout used to come out of blocking calls
    388  *@G711ENC_TIMEOUTS refered to time out in seconds
    389  *@G711ENC_TIMEOUTNS refered to time out in nano-seconds
    390  */
    391 /* ======================================================================= */
    392 #define G711ENC_TIMEOUTS 1
    393 #define G711ENC_TIMEOUTNS 0
    394 /* ======================================================================= */
    395 /*
    396  * @def G711ENC_OMX_MAX_TIMEOUTS   Max Time Outs
    397  * @def G711ENC_DONT_CARE       Dont Care Condition
    398  * @def G711ENC_NUM_CHANNELS    Number of Channels
    399  * @def G711ENC_APP_ID      App ID Value setting
    400  */
    401 /* ======================================================================= */
    402 #define G711ENC_OMX_MAX_TIMEOUTS 20
    403 #define G711ENC_DONT_CARE 0
    404 #define G711ENC_NUM_CHANNELS 1
    405 /* ======================================================================= */
    406 /**
    407  * @def    G711ENC_STREAM_COUNT    Number of streams
    408  *       G711ENC_INPUT_STREAM_ID Stream ID for Input Buffer
    409  */
    410 /* ======================================================================= */
    411 #define G711ENC_STREAM_COUNT 2
    412 #define G711ENC_INPUT_STREAM_ID 0
    413 
    414 #define G711ENC_EXIT_COMPONENT_THRD  10
    415 
    416 /* =================================================================================== */
    417 /**
    418  *
    419  */
    420 /* ================================================================================== */
    421 typedef struct G711ENC_FTYPES{
    422     OMX_S16   FrameSizeType;
    423     OMX_S16   VAUMode;
    424     OMX_S16   VAUThresOffset;
    425     OMX_S16   VAUNum;
    426     OMX_S16   NMUNoise;
    427     OMX_S16   LPOrder;
    428 }G711ENC_FTYPES;
    429 
    430 /* ======================================================================= */
    431 /** G711ENC_COMP_PORT_TYPE  Port types
    432  *
    433  *  @param  G711ENC_INPUT_PORT        Input port
    434  *
    435  *  @param  G711ENC_OUTPUT_PORT     Output port
    436  */
    437 /*  ====================================================================== */
    438 /*This enum must not be changed. */
    439 typedef enum G711ENC_COMP_PORT_TYPE {
    440     G711ENC_INPUT_PORT = 0,
    441     G711ENC_OUTPUT_PORT
    442 }G711ENC_COMP_PORT_TYPE;
    443 
    444 /* ======================================================================= */
    445 /** G711ENC_BUFFER_Dir  Buffer Direction
    446  *
    447  *  @param  G711ENC_DIRECTION_INPUT   Input direction
    448  *
    449  *  @param  G711ENC_DIRECTION_OUTPUT  Output direction
    450  *
    451  */
    452 /* ======================================================================= */
    453 typedef enum {
    454     G711ENC_DIRECTION_INPUT,
    455     G711ENC_DIRECTION_OUTPUT
    456 }G711ENC_BUFFER_Dir;
    457 
    458 /* ======================================================================= */
    459 /** G711ENC_BUFFS  Buffer details
    460  *
    461  *  @param  BufHeader Buffer header
    462  *
    463  *  @param  Buffer  Buffer
    464  *
    465  */
    466 /* ======================================================================= */
    467 typedef struct G711ENC_BUFFS {
    468     char BufHeader;
    469     char Buffer;
    470 }G711ENC_BUFFS;
    471 
    472 /* ======================================================================= */
    473 /** G711ENC_BUFFERHEADERTYPE_INFO
    474  *
    475  *  @param  pBufHeader
    476  *
    477  *  @param  bBufOwner
    478  *
    479  */
    480 /* ======================================================================= */
    481 typedef struct G711ENC_BUFFERHEADERTYPE_INFO {
    482     OMX_BUFFERHEADERTYPE* pBufHeader[G711ENC_MAX_NUM_OF_BUFS];
    483     G711ENC_BUFFS bBufOwner[G711ENC_MAX_NUM_OF_BUFS];
    484 }G711ENC_BUFFERHEADERTYPE_INFO;
    485 
    486 
    487 typedef OMX_ERRORTYPE (*G711ENC_fpo)(OMX_HANDLETYPE);
    488 
    489 /* =================================================================================== */
    490 /**
    491  * Socket node Audio Codec Configuration parameters.
    492  */
    493 /* =================================================================================== */
    494 typedef struct G711ENC_AudioCodecParams {
    495     unsigned long  iSamplingRate;
    496     unsigned long  iStrmId;
    497     unsigned short iAudioFormat;
    498 }G711ENC_AudioCodecParams;
    499 
    500 /* =================================================================================== */
    501 /**
    502  * G711ENC_TALGCtrl         Socket Node Alg Control parameters.
    503  * G711ENC_UAlgInBufParamStruct   Input Buffer Param Structure
    504  * G711ENC_UAlgOutBufParamStruct  Output Buffer Param Structure
    505  */
    506 /* =================================================================================== */
    507 /* Algorithm specific command parameters */
    508 typedef struct {
    509     unsigned int iSize;
    510     unsigned int iBitrate;
    511     unsigned int iDTX;
    512     unsigned int iMode;
    513     unsigned int iFrameSize;
    514     unsigned int iNoiseSuppressionMode;
    515     unsigned int ittyTddMode;
    516     unsigned int idtmfMode;
    517     unsigned int idataTransmit;
    518 }G711ENC_TALGCtrl;
    519 
    520 /* =================================================================================== */
    521 /**
    522  * G711ENC_FrameStruct          Input Frame Structure
    523  * bLastBuffer            To Send Last Buufer Flag
    524  *frameType             Tio save the frame type
    525  */
    526 /* =================================================================================== */
    527 typedef struct G711ENC_FrameStruct{
    528     unsigned long   usLastFrame;
    529     unsigned long frameType; /* 0: voice frame (80 bytes), 1: SID frame (22 bytes), 2: No Data (0 bytes), 3: Frame lost */
    530 } G711ENC_FrameStruct;
    531 /* =================================================================================== */
    532 /**
    533  * G711ENC_ParamStruct    Input Buffer Param Structure
    534  * usEndOfFile        To Send Last Buufer Flag
    535  */
    536 /* =================================================================================== */
    537 typedef struct G711ENC_ParamStruct
    538 {
    539     /*unsigned long usEndOfFile;*/
    540     unsigned long int usNbFrames;
    541     G711ENC_FrameStruct *pParamElem;
    542 } G711ENC_ParamStruct;
    543 /* =================================================================================== */
    544 /**
    545  * G711ENC_UAlgOutBufParamStruct  Output Buffer Param Structure
    546  * ulFrameCount No.of Frames Encoded
    547  */
    548 /* =================================================================================== */
    549 typedef struct {
    550     unsigned long ulFrameCount;
    551 }G711ENC_UAlgOutBufParamStruct;
    552 
    553 /* =================================================================================== */
    554 /**
    555  * G711ENC_LCML_BUFHEADERTYPE Buffer Header Type
    556  */
    557 /* =================================================================================== */
    558 typedef struct G711ENC_LCML_BUFHEADERTYPE {
    559     G711ENC_BUFFER_Dir eDir;
    560     G711ENC_ParamStruct *pIpParam;
    561     G711ENC_UAlgOutBufParamStruct *pOpParam;
    562     OMX_BUFFERHEADERTYPE* buffer;
    563     G711ENC_FrameStruct *pFrameParam;
    564     G711ENC_ParamStruct *pBufferParam;
    565     DMM_BUFFER_OBJ* pDmmBuf;
    566 }G711ENC_LCML_BUFHEADERTYPE;
    567 
    568 typedef struct _G711ENC_BUFFERLIST G711ENC_BUFFERLIST;
    569 
    570 /* =================================================================================== */
    571 /**
    572  * _G711ENC_BUFFERLIST Structure for buffer list
    573  */
    574 /* ================================================================================== */
    575 struct _G711ENC_BUFFERLIST{
    576     OMX_BUFFERHEADERTYPE sBufHdr;
    577     OMX_BUFFERHEADERTYPE *pBufHdr[G711ENC_MAX_NUM_OF_BUFS];
    578     OMX_U32 bufferOwner[G711ENC_MAX_NUM_OF_BUFS];
    579     OMX_U32 bBufferPending[G711ENC_MAX_NUM_OF_BUFS];
    580     OMX_U32 numBuffers;
    581     G711ENC_BUFFERLIST *pNextBuf;
    582     G711ENC_BUFFERLIST *pPrevBuf;
    583 };
    584 /* =================================================================================== */
    585 /**
    586  * G711ENC_BUFDATA
    587  */
    588 /* =================================================================================== */
    589 typedef struct G711ENC_BUFDATA {
    590     OMX_U8 nFrames;
    591 }G711ENC_BUFDATA;
    592 
    593 /* =================================================================================== */
    594 /**
    595  * G711ENC_PORT_TYPE Structure for PortFormat details
    596  */
    597 /* =================================================================================== */
    598 typedef struct G711ENC_PORT_TYPE {
    599     OMX_HANDLETYPE hTunnelComponent;
    600     OMX_U32 nTunnelPort;
    601     OMX_BUFFERSUPPLIERTYPE eSupplierSetting;
    602     OMX_U8 nBufferCnt;
    603     OMX_AUDIO_PARAM_PORTFORMATTYPE* pPortFormat;
    604 } G711ENC_PORT_TYPE;
    605 
    606 OMX_ERRORTYPE OMX_DmmMap(DSP_HPROCESSOR ProcHandle, int size,
    607                          void* pArmPtr, DMM_BUFFER_OBJ* pDmmBuf);
    608 OMX_ERRORTYPE OMX_DmmUnMap(DSP_HPROCESSOR ProcHandle, void* pMapPtr, void* pResPtr);
    609 /* =================================================================================== */
    610 /**
    611  * G711ENC_COMPONENT_PRIVATE Component private data Structure
    612  */
    613 /* =================================================================================== */
    614 typedef struct G711ENC_COMPONENT_PRIVATE
    615 {
    616     /** Array of pointers to BUFFERHEADERTYPE structues
    617         This pBufHeader[INPUT_PORT] will point to all the
    618         BUFFERHEADERTYPE structures related to input port,
    619         not just one structure. Same is the case for output
    620         port also. */
    621     OMX_BUFFERHEADERTYPE* pBufHeader[G711ENC_NUM_OF_PORTS];
    622     OMX_CALLBACKTYPE cbInfo;
    623     OMX_PORT_PARAM_TYPE* sPortParam;
    624     OMX_PRIORITYMGMTTYPE* sPriorityMgmt;
    625     OMX_PARAM_PORTDEFINITIONTYPE* pPortDef[G711ENC_NUM_OF_PORTS];
    626     OMX_PORT_PARAM_TYPE* pPortParamType;
    627     OMX_AUDIO_PARAM_PCMMODETYPE* G711Params[G711ENC_NUM_OF_PORTS];
    628     G711ENC_BUFFERHEADERTYPE_INFO BufInfo[G711ENC_NUM_OF_PORTS];
    629     G711ENC_PORT_TYPE *pCompPort[G711ENC_NUM_OF_PORTS];
    630     G711ENC_LCML_BUFHEADERTYPE *pLcmlBufHeader[G711ENC_NUM_OF_PORTS];
    631     /** This is component handle */
    632     OMX_COMPONENTTYPE* pHandle;
    633     /** Current state of this component */
    634     OMX_STATETYPE curState;
    635     /** The component thread handle */
    636     pthread_t ComponentThread;
    637     /** The pipes for sending buffers to the thread */
    638     int dataPipe[2];
    639     /** The pipes for sending command to the thread */
    640     int cmdPipe[2];
    641     /** The pipes for sending cmd data to the thread */
    642     int cmdDataPipe[2];
    643 
    644     OMX_U32 dasfMode;
    645 
    646     OMX_U32 acdnMode;
    647 
    648     OMX_U32 fdwrite;
    649 
    650     OMX_U32 fdread;
    651 
    652     OMX_U32 bLcmlHandleOpened;
    653 
    654     /** Set to indicate component is stopping */
    655     OMX_U32 bIsEOFSent;
    656 
    657     /** Count of number of buffers outstanding with bridge */
    658     OMX_U32 lcml_nIpBuf;
    659 
    660     /** Count of number of buffers outstanding with bridge */
    661     OMX_U32 lcml_nOpBuf;
    662 
    663     OMX_U32 app_nBuf;
    664 
    665     OMX_U32 lcml_nCntIp;
    666 
    667     OMX_U32 lcml_nCntOpReceived;
    668 
    669     OMX_U32 lcml_nCntApp;
    670 
    671     OMX_U32 lcml_compID;
    672 
    673     OMX_U32 num_Reclaimed_Op_Buff;
    674 
    675     OMX_U32 num_Sent_Ip_Buff;
    676 
    677     OMX_U32 num_Op_Issued;
    678 
    679     OMX_U32 streamID;
    680 
    681     OMX_U32 bPortDefsAllocated;
    682 
    683     OMX_U32 bCompThreadStarted;
    684 
    685     OMX_U32 bBypassDSP;
    686 
    687     OMX_U32 nVersion;
    688 
    689     OMX_U32 nFillThisBufferCount;
    690 
    691     OMX_U32 nFillBufferDoneCount;
    692 
    693     OMX_U32 nEmptyThisBufferCount;
    694 
    695     OMX_U32 nEmptyBufferDoneCount;
    696 
    697     OMX_U32 bInitParamsInitialized;
    698 
    699     OMX_U32 bIdleCommandPending;
    700 
    701     OMX_U32 nNumInputBufPending;
    702 
    703     OMX_U32 nNumOutputBufPending;
    704 
    705     OMX_U32 nInvalidFrameCount;
    706 
    707     OMX_U32 bDisableCommandPending;
    708 
    709     OMX_U32 bDisableCommandParam;
    710 
    711     OMX_U32 bEnableCommandParam;
    712 
    713     /** Flag for frame size type mode */
    714     OMX_S16 fsizemode;
    715     /** Flag for frame type  */
    716     OMX_S16 frametype;
    717     /** Flag for VAU mode */
    718     OMX_S16 vaumode;
    719     /** Flag for VAU Threshold offset */
    720     OMX_S16 vauthreshold;
    721     /** Flag for VAU number of ms   */
    722     OMX_S16 vaunumber;
    723     /** Flag for NMU TX Noise Mode */
    724     OMX_S16 nmunoise;
    725     /** Flag for Linear Prediction order*/
    726     OMX_S16 lporder;
    727 
    728     /**number of frames that has been sent*/
    729     OMX_U8 nNumOfFramesSent;
    730 
    731     /** Buffers unhandled during fill this buffer call*/
    732     OMX_S8 nUnhandledFillThisBuffers;
    733     OMX_S8 nUnhandledEmptyThisBuffers;
    734     OMX_BOOL bFlushInputPortCommandPending;
    735     OMX_BOOL bFlushOutputPortCommandPending;
    736 
    737     /** Set to indicate component is stopping */
    738     OMX_U32 bIsStopping;
    739     OMX_S8 ProcessingInputBuf;
    740     OMX_S8 ProcessingOutputBuf;
    741 
    742     /** Flag set when a disable command is pending */
    743     OMX_U32 bEnableCommandPending;
    744 
    745     /** Parameter for pending disable command */
    746     OMX_U32 nEnableCommandParam;
    747 
    748     OMX_HANDLETYPE pLcmlHandle;
    749 
    750     OMX_PTR pMarkData;
    751 
    752     OMX_MARKTYPE *pMarkBuf;
    753 
    754     OMX_HANDLETYPE hMarkTargetComponent;
    755 
    756     G711ENC_BUFFERLIST *pInputBufferList;
    757 
    758     G711ENC_BUFFERLIST *pOutputBufferList;
    759 
    760     LCML_STRMATTR *strmAttr;
    761 
    762     G711ENC_TALGCtrl *pAlgParam;
    763 
    764     G711ENC_AudioCodecParams *pParams;
    765 
    766     OMX_STRING cComponentName;
    767 
    768     OMX_VERSIONTYPE ComponentVersion;
    769 
    770     OMX_BUFFERHEADERTYPE *pInputBufHdrPending[G711ENC_MAX_NUM_OF_BUFS];
    771 
    772     OMX_BUFFERHEADERTYPE *pOutputBufHdrPending[G711ENC_MAX_NUM_OF_BUFS];
    773 
    774     TI_OMX_DSP_DEFINITION tiOmxDspDefinition;
    775 
    776     /** Flag to set when socket node stop callback should not transition
    777         component to OMX_StateIdle */
    778     OMX_U32 bNoIdleOnStop;
    779 
    780     /** Flag set when socket node is stopped */
    781     OMX_U32 bDspStoppedWhileExecuting;
    782 
    783     /** Number of outstanding FillBufferDone() calls */
    784     OMX_U32 nOutStandingFillDones;
    785 
    786     OMX_BOOL bLoadedCommandPending;
    787 
    788     OMX_PARAM_COMPONENTROLETYPE componentRole;
    789 
    790     OMX_STRING* sDeviceString;
    791 
    792     /* backup pointer for LCML */
    793     void* ptrLibLCML;
    794 
    795     OMX_U32 bIsThreadstop;
    796 
    797     /**Keep buffer tickcount*/
    798     OMX_U32 arrBufIndexTick[G711ENC_MAX_NUM_OF_BUFS];
    799 
    800     /** Keep buffer timestamps **/
    801     OMX_S64 arrBufIndex[G711ENC_MAX_NUM_OF_BUFS];
    802 
    803     /** Index to arrBufIndex[], used for input buffer timestamps */
    804     OMX_U8 IpBufindex;
    805 
    806     /** Index to arrBufIndex[], used for output buffer timestamps */
    807     OMX_U8 OpBufindex;
    808 
    809     /** Number of input buffers at runtime **/
    810     OMX_U32 nRuntimeInputBuffers;
    811 
    812     /** Number of output buffers at runtime **/
    813     OMX_U32 nRuntimeOutputBuffers;
    814 
    815 
    816 
    817 #ifndef UNDER_CE
    818     pthread_mutex_t AlloBuf_mutex;
    819     pthread_cond_t AlloBuf_threshold;
    820     OMX_U8 AlloBuf_waitingsignal;
    821 
    822     pthread_mutex_t InIdle_mutex;
    823     pthread_cond_t InIdle_threshold;
    824     OMX_U8 InIdle_goingtoloaded;
    825 
    826     pthread_mutex_t InLoaded_mutex;
    827     pthread_cond_t InLoaded_threshold;
    828     OMX_U8 InLoaded_readytoidle;
    829 #endif
    830 
    831     OMX_BOOL bPreempted;
    832 
    833     /** Pointer to RM callback **/
    834 #ifdef RESOURCE_MANAGER_ENABLED
    835     RMPROXY_CALLBACKTYPE rmproxyCallback;
    836 #endif
    837 
    838 } G711ENC_COMPONENT_PRIVATE;
    839 
    840 
    841 #ifndef UNDER_CE
    842 OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
    843 #else
    844 /*  WinCE Implicit Export Syntax */
    845 #define OMX_EXPORT __declspec(dllexport)
    846 /* =================================================================================== */
    847 /**
    848  *  OMX_ComponentInit()  Initializes component
    849  *
    850  *
    851  *  @param hComp      OMX Handle
    852  *
    853  *  @return OMX_ErrorNone = Successful
    854  *          Other error code = fail
    855  *
    856  */
    857 /* =================================================================================== */
    858 OMX_EXPORT OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
    859 #endif
    860 /* =================================================================================== */
    861 /**
    862  *  G711ENC_StartComponentThread()  Starts component thread
    863  *
    864  *
    865  *  @param hComp      OMX Handle
    866  *
    867  *  @return OMX_ErrorNone = Successful
    868  *          Other error code = fail
    869  *
    870  */
    871 /* =================================================================================== */
    872 OMX_ERRORTYPE G711ENC_StartComponentThread(OMX_HANDLETYPE pHandle);
    873 /* =================================================================================== */
    874 /**
    875  *  G711ENC_StopComponentThread()  Stops component thread
    876  *
    877  *
    878  *  @param hComp      OMX Handle
    879  *
    880  *  @return OMX_ErrorNone = Successful
    881  *          Other error code = fail
    882  *
    883  */
    884 /* =================================================================================== */
    885 OMX_ERRORTYPE G711ENC_StopComponentThread(OMX_HANDLETYPE pHandle);
    886 /* =================================================================================== */
    887 /**
    888  *  G711ENC_FreeCompResources()  Frees allocated memory
    889  *
    890  *
    891  *  @param hComp      OMX Handle
    892  *
    893  *  @return OMX_ErrorNone = Successful
    894  *          Other error code = fail
    895  *
    896  */
    897 /* =================================================================================== */
    898 OMX_ERRORTYPE G711ENC_FreeCompResources(OMX_HANDLETYPE pComponent);
    899 /* =================================================================================== */
    900 /**
    901  *  G711ENC_GetCorrespondingLCMLHeader()  Returns LCML header
    902  * that corresponds to the given buffer
    903  *
    904  *  @param pComponentPrivate  Component private data
    905  *
    906  *  @return OMX_ErrorNone = Successful
    907  *          Other error code = fail
    908  */
    909 /* =================================================================================== */
    910 OMX_ERRORTYPE G711ENC_GetCorrespondingLCMLHeader(G711ENC_COMPONENT_PRIVATE *pComponentPrivate,
    911                                                  OMX_U8 *pBuffer,
    912                                                  OMX_DIRTYPE eDir,
    913                                                  G711ENC_LCML_BUFHEADERTYPE **ppLcmlHdr);
    914 /* =================================================================================== */
    915 /**
    916  *  G711ENC_LCMLCallback() Callback from LCML
    917  *
    918  *  @param event    Codec Event
    919  *
    920  *  @param args   Arguments from LCML
    921  *
    922  *  @return OMX_ErrorNone = Successful
    923  *          Other error code = fail
    924  */
    925 /* =================================================================================== */
    926 OMX_ERRORTYPE G711ENC_LCMLCallback(TUsnCodecEvent event,
    927                                    void * args [10]);
    928 /* =================================================================================== */
    929 /**
    930  *  G711ENC_FillLCMLInitParams() Fills the parameters needed
    931  * to initialize the LCML
    932  *
    933  *  @param pHandle OMX Handle
    934  *
    935  *  @param plcml_Init LCML initialization parameters
    936  *
    937  *  @return OMX_ErrorNone = Successful
    938  *          Other error code = fail
    939  *
    940  */
    941 /* =================================================================================== */
    942 OMX_ERRORTYPE G711ENC_FillLCMLInitParams(OMX_HANDLETYPE pHandle,
    943                                          LCML_DSP *plcml_Init,
    944                                          OMX_U16 arr[]);
    945 /* =================================================================================== */
    946 /**
    947  *  G711ENC_GetBufferDirection() Returns direction of pBufHeader
    948  *
    949  *  @param pBufHeader   Buffer header
    950  *
    951  *  @param eDir       Buffer direction
    952  *
    953  *  @param pComponentPrivate  Component private data
    954  *
    955  *  @return OMX_ErrorNone = Successful
    956  *          Other error code = fail
    957  */
    958 /* =================================================================================== */
    959 OMX_ERRORTYPE G711ENC_GetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader,
    960                                          OMX_DIRTYPE *eDir);
    961 /* ===========================================================  */
    962 /**
    963  *  G711ENC_HandleCommand()  Handles commands sent via SendCommand()
    964  *
    965  *  @param pComponentPrivate  Component private data
    966  *
    967  *  @return OMX_ErrorNone = Successful
    968  *          Other error code = fail
    969  *  @return OMX_ErrorNone = Successful
    970  *          Other error code = fail
    971  */
    972 /* =================================================================================== */
    973 OMX_U32 G711ENC_HandleCommand(G711ENC_COMPONENT_PRIVATE *pComponentPrivate);
    974 /* =================================================================================== */
    975 /**
    976  *  G711ENC_HandleDataBufFromApp()  Handles data buffers received
    977  * from the IL Client
    978  *
    979  *  @param pComponentPrivate  Component private data
    980  *
    981  *  @return OMX_ErrorNone = Successful
    982  *          Other error code = fail
    983  *  @return OMX_ErrorNone = Successful
    984  *          Other error code = fail
    985  */
    986 /* =================================================================================== */
    987 OMX_ERRORTYPE G711ENC_HandleDataBufFromApp(OMX_BUFFERHEADERTYPE *pBufHeader,
    988                                            G711ENC_COMPONENT_PRIVATE *pComponentPrivate);
    989 /* =================================================================================== */
    990 /**
    991  *  G711ENC_HandleDataBufFromLCML()  Handles data buffers received
    992  *  from LCML
    993  *
    994  *  @param pComponentPrivate  Component private data
    995  *
    996  *  @return OMX_ErrorNone = Successful
    997  *          Other error code = fail
    998  *  @return OMX_ErrorNone = Successful
    999  *          Other error code = fail
   1000  */
   1001 /* =================================================================================== */
   1002 OMX_ERRORTYPE G711ENC_HandleDataBufFromLCML(G711ENC_COMPONENT_PRIVATE* pComponentPrivate, G711ENC_LCML_BUFHEADERTYPE* msgBuffer);
   1003 
   1004 /* =================================================================================== */
   1005 /**
   1006  *  G711ENC_GetLCMLHandle()  Get the handle to the LCML
   1007  *
   1008  *
   1009  *  @return OMX_ErrorNone = Successful
   1010  *          Other error code = fail
   1011  */
   1012 /* =================================================================================== */
   1013 OMX_HANDLETYPE G711ENC_GetLCMLHandle(G711ENC_COMPONENT_PRIVATE *pComponentPrivate);
   1014 /* =================================================================================== */
   1015 /**
   1016  *  G711ENC_FreeLCMLHandle()  Frees the handle to the LCML
   1017  *
   1018  *
   1019  *  @return OMX_ErrorNone = Successful
   1020  *          Other error code = fail
   1021  */
   1022 /* =================================================================================== */
   1023 OMX_ERRORTYPE G711ENC_FreeLCMLHandle();
   1024 /* =================================================================================== */
   1025 /**
   1026  *  G711ENC_CleanupInitParams()  Starts component thread
   1027  *
   1028  *  @param pComponent   OMX Handle
   1029  *
   1030  *  @return OMX_ErrorNone = Successful
   1031  *          Other error code = fail
   1032  */
   1033 /* =================================================================================== */
   1034 OMX_ERRORTYPE G711ENC_CleanupInitParams(OMX_HANDLETYPE pHandle);
   1035 /* =================================================================================== */
   1036 /**
   1037  *  G711ENC_SetPending()  Called when the component queues a buffer
   1038  * to the LCML
   1039  *
   1040  *  @param pComponentPrivate    Component private data
   1041  *
   1042  *  @param pBufHdr        Buffer header
   1043  *
   1044  *  @param eDir         Direction of the buffer
   1045  *
   1046  *  @return None
   1047  */
   1048 /* =================================================================================== */
   1049 void G711ENC_SetPending(G711ENC_COMPONENT_PRIVATE *pComponentPrivate,
   1050                         OMX_BUFFERHEADERTYPE *pBufHdr,
   1051                         OMX_DIRTYPE eDir,
   1052                         OMX_U32 lineNumber);
   1053 /* =================================================================================== */
   1054 /**
   1055  *  G711ENC_ClearPending()  Called when a buffer is returned
   1056  * from the LCML
   1057  *
   1058  *  @param pComponentPrivate    Component private data
   1059  *
   1060  *  @param pBufHdr        Buffer header
   1061  *
   1062  *  @param eDir         Direction of the buffer
   1063  *
   1064  *  @return None
   1065  */
   1066 /* =================================================================================== */
   1067 void G711ENC_ClearPending(G711ENC_COMPONENT_PRIVATE *pComponentPrivate,
   1068                           OMX_BUFFERHEADERTYPE *pBufHdr,
   1069                           OMX_DIRTYPE eDir,
   1070                           OMX_U32 lineNumber);
   1071 /* =================================================================================== */
   1072 /**
   1073  *  G711ENC_IsPending()
   1074  *
   1075  *
   1076  *  @param pComponentPrivate    Component private data
   1077  *
   1078  *  @return OMX_ErrorNone = Successful
   1079  *          Other error code = fail
   1080  */
   1081 /* =================================================================================== */
   1082 OMX_U32 G711ENC_IsPending(G711ENC_COMPONENT_PRIVATE *pComponentPrivate,
   1083                           OMX_BUFFERHEADERTYPE *pBufHdr,
   1084                           OMX_DIRTYPE eDir);
   1085 /* =================================================================================== */
   1086 /**
   1087  *  G711ENC_FillLCMLInitParamsEx()  Fills the parameters needed
   1088  * to initialize the LCML without recreating the socket node
   1089  *
   1090  *  @param pComponent     OMX Handle
   1091  *
   1092  *  @return None
   1093  */
   1094 /* =================================================================================== */
   1095 OMX_ERRORTYPE G711ENC_FillLCMLInitParamsEx(OMX_HANDLETYPE pComponent);
   1096 /* =================================================================================== */
   1097 /**
   1098  *  G711ENC_IsValid() Returns whether a buffer is valid
   1099  *
   1100  *
   1101  *  @param pComponentPrivate    Component private data
   1102  *
   1103  *  @param pBuffer        Data buffer
   1104  *
   1105  *  @param eDir         Buffer direction
   1106  *
   1107  *  @return OMX_True = Valid
   1108  *          OMX_False= Invalid
   1109  */
   1110 /* =================================================================================== */
   1111 OMX_U32 G711ENC_IsValid(G711ENC_COMPONENT_PRIVATE *pComponentPrivate,
   1112                         OMX_U8 *pBuffer,
   1113                         OMX_DIRTYPE eDir);
   1114 
   1115 
   1116 /* ======================================================================= */
   1117 /** OMX_G711ENC_INDEXAUDIOTYPE  Defines the custom configuration settings
   1118  *                              for the component
   1119  *
   1120  *  @param  OMX_IndexCustomG711ENCModeConfig      Sets the DASF mode
   1121  *
   1122  *
   1123  */
   1124 /*  ==================================================================== */
   1125 typedef enum OMX_G711ENC_INDEXAUDIOTYPE {
   1126     OMX_IndexCustomG711ENCModeConfig = 0xFF000001,
   1127     OMX_IndexCustomG711EncFrameParams,
   1128     OMX_IndexCustomG711EncDataPath
   1129 }OMX_G711ENC_INDEXAUDIOTYPE;
   1130 
   1131 /* ===========================================================  */
   1132 /**
   1133  *  G711ENC_CompThread() Component Thread call
   1134  *
   1135  *
   1136  *  @param pComponentPrivate     Component private data
   1137  *
   1138  *  @return void
   1139  */
   1140 /*================================================================== */
   1141 void* G711ENC_CompThread(void* pThreadData);
   1142 
   1143 #ifdef RESOURCE_MANAGER_ENABLED
   1144 /***********************************
   1145  *  Callback to the RM                                       *
   1146  ***********************************/
   1147 void G711ENC_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData);
   1148 #endif
   1149 
   1150 #endif  /* OMX_G711ENC_UTILS__H */
   1151