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