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_G729Enc_Utils.h 30 * 31 * This is an header file for an G729 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\g729_enc\inc 36 * 37 * @rev 1.0 38 */ 39 /* --------------------------------------------------------------------------- */ 40 /* ---------------------------------------------------------------------------- 41 *! 42 *! Revision History 43 *! =================================== 44 *! 21-sept-2006 bk: updated review findings for alpha release 45 *! 24-Aug-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests some more 46 *! 18-July-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests validated for few cases 47 *! 21-Jun-2006 bk: Khronos OpenMAX (TM) 1.0 migration done 48 *! 22-May-2006 bk: DASF recording quality improved 49 *! 19-Apr-2006 bk: DASF recording speed issue resloved 50 *! 23-Feb-2006 bk: DASF functionality added 51 *! 18-Jan-2006 bk: Repated recording issue fixed and LCML changes taken care 52 *! 14-Dec-2005 bk: Initial Version 53 *! 16-Nov-2005 bk: Initial Version 54 *! 23-Sept-2005 bk: Initial Version 55 *! 10-Sept-2005 bk: Initial Version 56 *! 10-Sept-2005 bk: 57 *! This is newest file 58 * =========================================================================== */ 59 #ifndef OMX_G729ENC_UTILS__H 60 #define OMX_G729ENC_UTILS__H 61 62 #include <pthread.h> 63 #include "LCML_DspCodec.h" 64 #include <OMX_Component.h> 65 #include <TIDspOmx.h> 66 67 #ifdef RESOURCE_MANAGER_ENABLED 68 #include <ResourceManagerProxyAPI.h> 69 #endif 70 71 #undef __G729_EPRINT__ 72 73 74 #ifndef UNDER_CE 75 /* For printing errors */ 76 #define __OMX_EPRINT__ 77 #undef __G729_EPRINT__ 78 #endif 79 80 #ifdef __PERF_INSTRUMENTATION__ 81 #include "perf.h" 82 #endif 83 84 /* ======================================================================= */ 85 /** 86 * @def G729ENC_DEBUG Turns debug messaging on and off 87 */ 88 /* ======================================================================= */ 89 #undef G729ENC_DEBUG 90 /* ======================================================================= */ 91 /** 92 * @def G729ENC_MEMCHECK Turns memory messaging on and off 93 */ 94 /* ======================================================================= */ 95 #undef G729ENC_MEMCHECK 96 97 #ifndef UNDER_CE 98 /* 99 * ANSI escape sequences for outputing text in various colors 100 */ 101 #ifdef OMX_PRINT_COLOR 102 #define DBG_TEXT_WHITE "\x1b[1;37;40m" 103 #define DBG_TEXT_YELLOW "\x1b[1;33;40m" /* reserved for OMX_G729Enc_Thread.c */ 104 #define DBG_TEXT_MAGENTA "\x1b[1;35;40m" 105 #define DBG_TEXT_GREEN "\x1b[1;32;40m" /* reserved for OMX_G729Encoder.c */ 106 #define DBG_TEXT_CYAN "\x1b[1;36;40m" /* reserved for OMX_G729Enc_Utils.c */ 107 #define DBG_TEXT_RED "\x1b[1;31;40m" /* reserved for test app */ 108 #else 109 #define DBG_TEXT_WHITE "" 110 #define DBG_TEXT_YELLOW "" 111 #define DBG_TEXT_MAGENTA "" 112 #define DBG_TEXT_GREEN "" 113 #define DBG_TEXT_CYAN "" 114 #define DBG_TEXT_RED "" 115 #endif 116 117 void G729ENC_eprint(int iLineNum, const char *szFunctionName, const char *strFormat, ...); 118 void G729ENC_Log(const char *szFileName, int iLineNum, const char *szFunctionName, const char *strFormat, ...); 119 120 /* ======================================================================= */ 121 /** 122 * @def G729ENC_DEBUG Debug print macro 123 */ 124 /* ======================================================================= */ 125 #ifdef G729ENC_DEBUG 126 #define G729ENC_DPRINT(STR, ARG...) G729ENC_Log(__FILE__, __LINE__, __FUNCTION__, STR, ##ARG) 127 #else 128 #define G729ENC_DPRINT(...) 129 #endif 130 /* ======================================================================= */ 131 /** 132 * @def G729ENC_MEMCHECK Memory print macro 133 */ 134 /* ======================================================================= */ 135 #ifdef G729ENC_MEMCHECK 136 #define G729ENC_MEMPRINT(...) fprintf(stderr, __VA_ARGS__) 137 #else 138 #define G729ENC_MEMPRINT(...) 139 #endif 140 /* ======================================================================= */ 141 /** 142 * @def OMX_EPRINT Error print macro 143 */ 144 /* ======================================================================= */ 145 #ifdef __OMX_EPRINT__ 146 #define OMX_EPRINT(STR, ARG...) G729ENC_eprint(__LINE__, __FUNCTION__, STR, ##ARG) 147 #else 148 #define OMX_EPRINT(...) 149 #endif 150 /* ======================================================================= */ 151 /** 152 * @def G729ENC_EPRINT Error print macro 153 */ 154 /* ======================================================================= */ 155 #ifdef __G729_EPRINT__ 156 #define G729ENC_EPRINT(...) fprintf(stderr,__VA_ARGS__) 157 #else 158 #define G729ENC_EPRINT(...) 159 #endif 160 161 162 #else /*UNDER_CE*/ 163 /* ======================================================================= */ 164 /** 165 * @def G729ENC_DEBUG Debug print macro 166 */ 167 /* ======================================================================= */ 168 #ifdef G729ENC_DEBUG 169 #define G729ENC_DPRINT(STR, ARG...) printf() 170 #endif 171 /* ======================================================================= */ 172 /** 173 * @def G729ENC_MEMCHECK Memory print macro 174 */ 175 /* ======================================================================= */ 176 #ifdef G729ENC_MEMCHECK 177 #define G729ENC_MEMPRINT(STR, ARG...) printf() 178 #endif 179 180 #define G729ENC_EPRINT printf 181 #define OMX_EPRINT G729ENC_EPRINT 182 183 #ifdef DEBUG 184 #define G729ENC_DPRINT printf 185 #define G729ENC_MEMPRINT printf 186 #else 187 #define G729ENC_DPRINT 188 #define G729ENC_MEMPRINT 189 #endif 190 191 #endif/*UNDER_CE*/ 192 193 /* ======================================================================= */ 194 /** 195 * M A C R O S FOR MALLOC and MEMORY FREE and CLOSING PIPES 196 */ 197 /* ======================================================================= */ 198 199 #define OMX_G729CONF_INIT_STRUCT(_s_, _name_) \ 200 memset((_s_), 0x0, sizeof(_name_)); \ 201 (_s_)->nSize = sizeof(_name_); \ 202 (_s_)->nVersion.s.nVersionMajor = 0x1; \ 203 (_s_)->nVersion.s.nVersionMinor = 0x1; \ 204 (_s_)->nVersion.s.nRevision = 0x0; \ 205 (_s_)->nVersion.s.nStep = 0x0 206 207 #define OMX_G729MEMFREE_STRUCT(_pStruct_) \ 208 if(_pStruct_ != NULL) \ 209 { \ 210 G729ENC_MEMPRINT("%d :: [FREE] %p\n", __LINE__, _pStruct_); \ 211 free(_pStruct_); \ 212 _pStruct_ = NULL; \ 213 } 214 215 #define OMX_G729CLOSE_PIPE(_pStruct_,err) \ 216 G729ENC_DPRINT("%d :: CLOSING PIPE \n", __LINE__); \ 217 err = close (_pStruct_); \ 218 if(0 != err && OMX_ErrorNone == eError) \ 219 { \ 220 eError = OMX_ErrorHardware; \ 221 printf("%d :: Error while closing pipe\n", __LINE__); \ 222 goto EXIT; \ 223 } 224 225 #define OMX_G729MALLOC_STRUCT(_pStruct_, _sName_) \ 226 _pStruct_ = (_sName_*)malloc(sizeof(_sName_)); \ 227 if(_pStruct_ == NULL) \ 228 { \ 229 printf("***********************************\n"); \ 230 printf("%d :: Malloc Failed\n", __LINE__); \ 231 printf("***********************************\n"); \ 232 eError = OMX_ErrorInsufficientResources; \ 233 goto EXIT; \ 234 } \ 235 memset(_pStruct_, 0x0, sizeof(_sName_)); \ 236 G729ENC_MEMPRINT("%d :: [ALLOC] %p\n", __LINE__, _pStruct_); 237 238 239 /* ======================================================================= */ 240 /** 241 * @def G729ENC_NUM_INPUT_BUFFERS Default number of input buffers 242 */ 243 /* ======================================================================= */ 244 #define G729ENC_NUM_INPUT_BUFFERS 1 245 /* ======================================================================= */ 246 /** 247 * @def G729ENC_NUM_INPUT_BUFFERS_DASF Default No.of input buffers DASF 248 */ 249 /* ======================================================================= */ 250 #define G729ENC_NUM_INPUT_BUFFERS_DASF 2 251 /* ======================================================================= */ 252 /** 253 * @def G729ENC_NUM_OUTPUT_BUFFERS Default number of output buffers 254 */ 255 /* ======================================================================= */ 256 #define G729ENC_NUM_OUTPUT_BUFFERS 1 257 /* ======================================================================= */ 258 /** 259 * @def G729ENC_INPUT_BUFFER_SIZE Default input buffer size 260 * G729ENC_INPUT_BUFFER_SIZE_DASF Default input buffer size DASF 261 * G729ENC_INPUT_FRAME_SIZE Default input Frame Size 262 */ 263 /* ======================================================================= */ 264 #define G729ENC_INPUT_BUFFER_SIZE 160 265 #define G729ENC_INPUT_BUFFER_SIZE_DASF 160 266 #define G729ENC_INPUT_FRAME_SIZE 160 267 /* ======================================================================= */ 268 /** 269 * @def G729ENC_OUTPUT_BUFFER_SIZE Default output buffer size 270 * G729ENC_OUTPUT_FRAME_SIZE Default output frame size 271 */ 272 /* ======================================================================= */ 273 #define G729ENC_OUTPUT_BUFFER_SIZE 12 274 #define G729ENC_OUTPUT_FRAME_SIZE 12 275 #define G729ENC_HEADER_SIZE 2 276 277 /* ======================================================================= */ 278 /** 279 * @def G729ENC_OUTPUT_BUFFER_SIZE_MIME Default input buffer size MIME 280 */ 281 /* ======================================================================= */ 282 #define G729ENC_OUTPUT_BUFFER_SIZE_MIME 10 283 284 /* ======================================================================= */ 285 /* 286 * @def G729ENC_APP_ID App ID Value setting 287 */ 288 /* ======================================================================= */ 289 #define G729ENC_APP_ID 100 290 291 /* ======================================================================= */ 292 /** 293 * @def G729ENC_SAMPLING_FREQUENCY Sampling frequency 294 */ 295 /* ======================================================================= */ 296 #define G729ENC_SAMPLING_FREQUENCY 8000 297 /* ======================================================================= */ 298 /** 299 * @def G729ENC_MAX_NUM_OF_BUFS Maximum number of buffers 300 */ 301 /* ======================================================================= */ 302 #define G729ENC_MAX_NUM_OF_BUFS 10 303 /* ======================================================================= */ 304 /** 305 * @def G729ENC_NUM_OF_PORTS Number of ports 306 */ 307 /* ======================================================================= */ 308 #define G729ENC_NUM_OF_PORTS 2 309 /* ======================================================================= */ 310 /** 311 * @def G729ENC_XXX_VER Component version 312 */ 313 /* ======================================================================= */ 314 #define G729ENC_MAJOR_VER 0x1 315 #define G729ENC_MINOR_VER 0x1 316 /* ======================================================================= */ 317 /** 318 * @def G729ENC_NOT_USED Defines a value for "don't care" parameters 319 */ 320 /* ======================================================================= */ 321 #define G729ENC_NOT_USED 10 322 /* ======================================================================= */ 323 /** 324 * @def G729ENC_NORMAL_BUFFER Defines flag value with all flags off 325 */ 326 /* ======================================================================= */ 327 #define G729ENC_NORMAL_BUFFER 0 328 /* ======================================================================= */ 329 /** 330 * @def OMX_G729ENC_DEFAULT_SEGMENT Default segment ID for the LCML 331 */ 332 /* ======================================================================= */ 333 #define G729ENC_DEFAULT_SEGMENT (0) 334 /* ======================================================================= */ 335 /** 336 * @def OMX_G729ENC_SN_TIMEOUT Timeout value for the socket node 337 */ 338 /* ======================================================================= */ 339 #define G729ENC_SN_TIMEOUT (-1) 340 /* ======================================================================= */ 341 /** 342 * @def OMX_G729ENC_SN_PRIORITY Priority for the socket node 343 */ 344 /* ======================================================================= */ 345 #define G729ENC_SN_PRIORITY (10) 346 /* ======================================================================= */ 347 /** 348 * @def OMX_G729ENC_NUM_DLLS number of DLL's 349 */ 350 /* ======================================================================= */ 351 #define G729ENC_NUM_DLLS (2) 352 353 #define G729ENC_CPU 50 354 /* ======================================================================= */ 355 /** 356 * @def G729ENC_USN_DLL_NAME USN DLL name 357 */ 358 /* ======================================================================= */ 359 #ifdef UNDER_CE 360 #define G729ENC_USN_DLL_NAME "\\windows\\usn.dll64P" 361 #else 362 #define G729ENC_USN_DLL_NAME "usn.dll64P" 363 #endif 364 365 /* ======================================================================= */ 366 /** 367 * @def G729ENC_DLL_NAME G729 Encoder socket node dll name 368 */ 369 /* ======================================================================= */ 370 #ifdef UNDER_CE 371 #define G729ENC_DLL_NAME "\\windows\\g729enc_sn.dll64P" 372 #else 373 #define G729ENC_DLL_NAME "g729enc_sn.dll64P" 374 #endif 375 376 /* ======================================================================= */ 377 /** 378 * @def _ERROR_PROPAGATION__ Allow Logic to Detec&Report Arm Errors 379 */ 380 /* ======================================================================= */ 381 #define _ERROR_PROPAGATION__ 382 383 /* ======================================================================= */ 384 /** G729ENC_StreamType Stream types 385 * 386 * @param G729ENC_DMM DMM 387 * 388 * @param G729ENC_INSTRM Input stream 389 * 390 * @param G729ENC_OUTSTRM Output stream 391 */ 392 /* ======================================================================= */ 393 enum G729ENC_StreamType 394 { 395 G729ENC_DMM = 0, 396 G729ENC_INSTRM, 397 G729ENC_OUTSTRM 398 }; 399 /* ======================================================================= */ 400 /** G729ENC_EncodeType coding types 401 * 402 * @param G729ENC_G729 G729 mode 403 * 404 * @param G729ENC_EFR EFR mode 405 * 406 */ 407 /* ======================================================================= */ 408 enum G729ENC_EncodeType 409 { 410 G729ENC_G729 = 0, 411 G729ENC_EFR 412 }; 413 /* ======================================================================= */ 414 /** G729ENC_MimeMode format types 415 * 416 * @param G729ENC_MIMEMODE MIME 417 * 418 * @param G729ENC_NONMIMEMODE G729 mode 419 * 420 */ 421 /* ======================================================================= */ 422 enum G729ENC_MimeMode 423 { 424 G729ENC_NONMIMEMODE = 0, 425 G729ENC_MIMEMODE 426 }; 427 428 /* ======================================================================= */ 429 /* 430 * Different Frame sizes for different index in MIME Mode 431 */ 432 /* ======================================================================= */ 433 #define G729ENC_FRAME_SIZE_13 13 434 #define G729ENC_FRAME_SIZE_14 14 435 #define G729ENC_FRAME_SIZE_16 16 436 #define G729ENC_FRAME_SIZE_18 18 437 #define G729ENC_FRAME_SIZE_20 20 438 #define G729ENC_FRAME_SIZE_21 21 439 #define G729ENC_FRAME_SIZE_27 27 440 #define G729ENC_FRAME_SIZE_32 32 441 #define G729ENC_FRAME_SIZE_6 6 442 #define G729ENC_FRAME_SIZE_1 1 443 #define G729ENC_FRAME_SIZE_0 0 444 /* ======================================================================= */ 445 /** 446 * @def G729ENC_TIMEOUT Default timeout used to come out of blocking calls 447 */ 448 /* ======================================================================= */ 449 #define G729ENC_TIMEOUT 1000 450 /* ======================================================================= */ 451 /* 452 * @def G729ENC_OMX_MAX_TIMEOUTS Max Time Outs 453 * @def G729ENC_DONT_CARE Dont Care Condition 454 * @def G729ENC_NUM_CHANNELS Number of Channels 455 * @def G729ENC_APP_ID App ID Value setting 456 */ 457 /* ======================================================================= */ 458 #define G729ENC_OMX_MAX_TIMEOUTS 20 459 #define G729ENC_DONT_CARE 0 460 #define G729ENC_NUM_CHANNELS 1 461 /* ======================================================================= */ 462 /** 463 * @def G729ENC_STREAM_COUNT Number of streams 464 * G729ENC_INPUT_STREAM_ID Stream ID for Input Buffer 465 */ 466 /* ======================================================================= */ 467 #define G729ENC_STREAM_COUNT 2 468 #define G729ENC_INPUT_STREAM_ID 0 469 470 /* ======================================================================= */ 471 /** G729ENC_COMP_PORT_TYPE Port types 472 * 473 * @param G729ENC_INPUT_PORT Input port 474 * 475 * @param G729ENC_OUTPUT_PORT Output port 476 */ 477 /* ====================================================================== */ 478 /*This enum must not be changed. */ 479 typedef enum G729ENC_COMP_PORT_TYPE 480 { 481 G729ENC_INPUT_PORT = 0, 482 G729ENC_OUTPUT_PORT 483 } G729ENC_COMP_PORT_TYPE; 484 485 /* ======================================================================= */ 486 /** G729ENC_BUFFER_Dir Buffer Direction 487 * 488 * @param G729ENC_DIRECTION_INPUT Input direction 489 * 490 * @param G729ENC_DIRECTION_OUTPUT Output direction 491 * 492 */ 493 /* ======================================================================= */ 494 typedef enum G729ENC_BUFFER_Dir 495 { 496 G729ENC_DIRECTION_INPUT, 497 G729ENC_DIRECTION_OUTPUT 498 } G729ENC_BUFFER_Dir; 499 500 /* ======================================================================= */ 501 /** G729ENC_BUFFS Buffer details 502 * 503 * @param BufHeader Buffer header 504 * 505 * @param Buffer Buffer 506 * 507 */ 508 /* ======================================================================= */ 509 typedef struct G729ENC_BUFFS 510 { 511 char BufHeader; 512 char Buffer; 513 } G729ENC_BUFFS; 514 515 /* ======================================================================= */ 516 /** G729ENC_BUFFERHEADERTYPE_INFO 517 * 518 * @param pBufHeader 519 * 520 * @param bBufOwner 521 * 522 */ 523 /* ======================================================================= */ 524 typedef struct G729ENC_BUFFERHEADERTYPE_INFO 525 { 526 OMX_BUFFERHEADERTYPE* pBufHeader[G729ENC_MAX_NUM_OF_BUFS]; 527 G729ENC_BUFFS bBufOwner[G729ENC_MAX_NUM_OF_BUFS]; 528 } G729ENC_BUFFERHEADERTYPE_INFO; 529 530 531 typedef OMX_ERRORTYPE (*G729ENC_fpo)(OMX_HANDLETYPE); 532 533 /* =================================================================================== */ 534 /** 535 * Socket node Audio Codec Configuration parameters. 536 */ 537 /* =================================================================================== */ 538 typedef struct G729ENC_AudioCodecParams 539 { 540 unsigned long iSamplingRate; 541 unsigned long iStrmId; 542 unsigned short iAudioFormat; 543 } G729ENC_AudioCodecParams; 544 545 /* =================================================================================== */ 546 /** 547 * G729ENC_TALGCtrl Socket Node Alg Control parameters. 548 * G729ENC_UAlgInBufParamStruct Input Buffer Param Structure 549 * G729ENC_UAlgOutBufParamStruct Output Buffer Param Structure 550 */ 551 /* =================================================================================== */ 552 /* Algorithm specific command parameters */ 553 typedef struct ISPHENC_DynamicParams 554 { 555 int size; /* not used */ 556 int frameSize; /* not used*/ 557 int bitRate; /* not used */ 558 int mode; /* not used */ 559 int vadFlag; /* VAD_On =1, VAD_OFF = 0 */ 560 int noiseSuppressionMode; /* not used */ 561 int ttyTddMode; /* not used */ 562 int dtmfMode; /* not used */ 563 int dataTransmit; /* not used */ 564 } G729ENC_TALGCtrl; 565 566 /* =================================================================================== */ 567 /** 568 * G729ENC_UAlgInBufParamStruct Input Buffer Param Structure 569 * usEndOfFile To Send Last Buffer Flag 570 */ 571 /* =================================================================================== */ 572 typedef struct G729ENC_UAlgInBufParamStruct 573 { 574 unsigned long usEndOfFile; 575 } G729ENC_UAlgInBufParamStruct; 576 577 /* =================================================================================== */ 578 /** 579 * G729ENC_UAlgOutBufParamStruct Output Buffer Param Structure 580 * ulFrameCount No.of Frames Encoded 581 */ 582 /* =================================================================================== */ 583 typedef struct G729ENC_UAlgOutBufParamStruct 584 { 585 unsigned long ulFrameCount; 586 } G729ENC_UAlgOutBufParamStruct; 587 588 /* =================================================================================== */ 589 /** 590 * G729ENC_LCML_BUFHEADERTYPE Buffer Header Type 591 */ 592 /* =================================================================================== */ 593 typedef struct G729ENC_LCML_BUFHEADERTYPE { 594 G729ENC_BUFFER_Dir eDir; 595 G729ENC_UAlgInBufParamStruct *pIpParam; 596 G729ENC_UAlgOutBufParamStruct *pOpParam; 597 OMX_BUFFERHEADERTYPE* buffer; 598 } G729ENC_LCML_BUFHEADERTYPE; 599 600 601 typedef struct _G729ENC_BUFFERLIST G729ENC_BUFFERLIST; 602 603 /* =================================================================================== */ 604 /** 605 * _G729ENC_BUFFERLIST Structure for buffer list 606 */ 607 /* ================================================================================== */ 608 struct _G729ENC_BUFFERLIST 609 { 610 OMX_BUFFERHEADERTYPE sBufHdr; 611 OMX_BUFFERHEADERTYPE *pBufHdr[G729ENC_MAX_NUM_OF_BUFS]; 612 OMX_U32 bufferOwner[G729ENC_MAX_NUM_OF_BUFS]; 613 OMX_U32 bBufferPending[G729ENC_MAX_NUM_OF_BUFS]; 614 OMX_U32 numBuffers; 615 G729ENC_BUFFERLIST *pNextBuf; 616 G729ENC_BUFFERLIST *pPrevBuf; 617 }; 618 619 /* =================================================================================== */ 620 /** 621 * G729ENC_PORT_TYPE Structure for PortFormat details 622 */ 623 /* =================================================================================== */ 624 typedef struct G729ENC_PORT_TYPE 625 { 626 OMX_HANDLETYPE hTunnelComponent; 627 OMX_U32 nTunnelPort; 628 OMX_BUFFERSUPPLIERTYPE eSupplierSetting; 629 OMX_U8 nBufferCnt; 630 OMX_AUDIO_PARAM_PORTFORMATTYPE* pPortFormat; 631 } G729ENC_PORT_TYPE; 632 633 #ifdef UNDER_CE 634 /* =================================================================================== */ 635 /** 636 * OMX_Event Structure for Mutex application under WinCE 637 */ 638 /* =================================================================================== */ 639 typedef struct OMX_Event 640 { 641 HANDLE event; 642 } OMX_Event; 643 644 int OMX_CreateEvent(OMX_Event *event); 645 int OMX_SignalEvent(OMX_Event *event); 646 int OMX_WaitForEvent(OMX_Event *event); 647 int OMX_DestroyEvent(OMX_Event *event); 648 #endif 649 650 /* =================================================================================== */ 651 /** 652 * G729ENC_COMPONENT_PRIVATE Component private data Structure 653 */ 654 /* =================================================================================== */ 655 typedef struct G729ENC_COMPONENT_PRIVATE 656 { 657 /** Array of pointers to BUFFERHEADERTYPE structues 658 This pBufHeader[INPUT_PORT] will point to all the 659 BUFFERHEADERTYPE structures related to input port, 660 not just one structure. Same is the case for output 661 port also. */ 662 OMX_BUFFERHEADERTYPE* pBufHeader[G729ENC_NUM_OF_PORTS]; 663 OMX_CALLBACKTYPE cbInfo; 664 OMX_PORT_PARAM_TYPE* sPortParam; 665 OMX_PRIORITYMGMTTYPE* sPriorityMgmt; 666 OMX_PARAM_PORTDEFINITIONTYPE* pPortDef[G729ENC_NUM_OF_PORTS]; 667 OMX_PORT_PARAM_TYPE* pPortParamType; 668 OMX_AUDIO_PARAM_G729TYPE* g729Params; 669 OMX_AUDIO_PARAM_PCMMODETYPE* pcmParams; 670 G729ENC_BUFFERHEADERTYPE_INFO BufInfo[G729ENC_NUM_OF_PORTS]; 671 G729ENC_PORT_TYPE *pCompPort[G729ENC_NUM_OF_PORTS]; 672 G729ENC_LCML_BUFHEADERTYPE *pLcmlBufHeader[G729ENC_NUM_OF_PORTS]; 673 /** This is component handle */ 674 OMX_COMPONENTTYPE* pHandle; 675 /** Current state of this component */ 676 OMX_STATETYPE curState; 677 /** The component thread handle */ 678 pthread_t ComponentThread; 679 /** The pipes for sending buffers to the thread */ 680 int dataPipe[2]; 681 /** The pipes for sending command to the thread */ 682 int cmdPipe[2]; 683 /** The pipes for sending cmd data to the thread */ 684 int cmdDataPipe[2]; 685 /** The pipes for sending buffers to the thread */ 686 int lcml_Pipe[2]; 687 688 OMX_U32 efrMode; 689 690 OMX_U32 g729Mode; 691 692 OMX_U32 dasfMode; 693 694 OMX_U32 mimeMode; 695 696 OMX_U32 acdnMode; 697 698 OMX_U32 nMultiFrameMode; 699 700 OMX_U32 fdwrite; 701 702 OMX_U32 fdread; 703 704 OMX_U32 bLcmlHandleOpened; 705 706 /** Set to indicate component is stopping */ 707 OMX_U32 bIsStopping; 708 709 OMX_U32 bIsThreadstop; 710 711 OMX_U32 bIsEOFSent; 712 713 /** Count of number of buffers outstanding with bridge */ 714 OMX_U32 lcml_nIpBuf; 715 716 /** Count of number of buffers outstanding with bridge */ 717 OMX_U32 lcml_nOpBuf; 718 719 OMX_U32 app_nBuf; 720 721 OMX_U32 lcml_nCntIp; 722 723 OMX_U32 lcml_nCntOpReceived; 724 725 OMX_U32 lcml_nCntApp; 726 727 OMX_U32 lcml_compID; 728 729 OMX_U32 num_Reclaimed_Op_Buff; 730 731 OMX_U32 num_Sent_Ip_Buff; 732 733 OMX_U32 num_Op_Issued; 734 735 OMX_U32 bIsBufferOwned[G729ENC_NUM_OF_PORTS]; 736 737 OMX_U32 streamID; 738 739 OMX_U32 bPortDefsAllocated; 740 741 OMX_U32 bCompThreadStarted; 742 743 OMX_U32 bBypassDSP; 744 745 OMX_U32 nVersion; 746 747 OMX_U32 bInputBufferHeaderAllocated; 748 749 OMX_U32 bPlayCompleteFlag; 750 751 OMX_U32 g729MimeBytes[16]; 752 753 OMX_U32 iHoldLen; 754 755 OMX_U32 nHoldLength; 756 757 OMX_U32 nFillThisBufferCount; 758 759 OMX_U32 nFillBufferDoneCount; 760 761 OMX_U32 nEmptyThisBufferCount; 762 763 OMX_U32 nEmptyBufferDoneCount; 764 765 OMX_U32 bInitParamsInitialized; 766 767 OMX_U32 bIdleCommandPending; 768 769 OMX_U32 nNumInputBufPending; 770 771 OMX_U32 nNumOutputBufPending; 772 773 OMX_U32 bJustReenabled; 774 775 OMX_U32 nInvalidFrameCount; 776 777 OMX_U32 nDataWritesWhilePaused; 778 779 OMX_U32 bDisableCommandPending; 780 781 OMX_U32 bDisableCommandParam; 782 783 OMX_HANDLETYPE pLcmlHandle; 784 785 OMX_PTR pMarkData; 786 787 OMX_MARKTYPE *pMarkBuf; 788 789 OMX_HANDLETYPE hMarkTargetComponent; 790 791 G729ENC_BUFFERLIST *pInputBufferList; 792 793 G729ENC_BUFFERLIST *pOutputBufferList; 794 795 LCML_STRMATTR *strmAttr; 796 797 G729ENC_TALGCtrl *pAlgParam; 798 799 G729ENC_AudioCodecParams *pParams; 800 801 OMX_STRING cComponentName; 802 803 OMX_VERSIONTYPE ComponentVersion; 804 805 OMX_BUFFERHEADERTYPE *pInputBufHdrPending[G729ENC_MAX_NUM_OF_BUFS]; 806 807 OMX_BUFFERHEADERTYPE *pOutputBufHdrPending[G729ENC_MAX_NUM_OF_BUFS]; 808 809 OMX_BUFFERHEADERTYPE *iMMFDataLastBuffer; 810 811 OMX_U8* pHoldBuffer; 812 813 OMX_U8* iHoldBuffer; 814 815 OMX_U32 nRuntimeInputBuffers; 816 817 OMX_U32 nRuntimeOutputBuffers; 818 819 TI_OMX_DSP_DEFINITION tiOmxDspDefinition; 820 821 /** Flag to set when socket node stop callback should not transition 822 component to OMX_StateIdle */ 823 OMX_U32 bNoIdleOnStop; 824 825 /** Flag set when socket node is stopped */ 826 OMX_U32 bDspStoppedWhileExecuting; 827 828 /** Number of outstanding FillBufferDone() calls */ 829 OMX_U32 nOutStandingFillDones; 830 831 #ifndef UNDER_CE 832 pthread_mutex_t AlloBuf_mutex; 833 pthread_cond_t AlloBuf_threshold; 834 OMX_U8 AlloBuf_waitingsignal; 835 836 pthread_mutex_t InLoaded_mutex; 837 pthread_cond_t InLoaded_threshold; 838 OMX_U8 InLoaded_readytoidle; 839 840 pthread_mutex_t InIdle_mutex; 841 pthread_cond_t InIdle_threshold; 842 OMX_U8 InIdle_goingtoloaded; 843 #else 844 OMX_Event AlloBuf_event; 845 OMX_U8 AlloBuf_waitingsignal; 846 847 OMX_Event InLoaded_event; 848 OMX_U8 InLoaded_readytoidle; 849 850 OMX_Event InIdle_event; 851 OMX_U8 InIdle_goingtoloaded; 852 #endif 853 #ifdef __PERF_INSTRUMENTATION__ 854 PERF_OBJHANDLE pPERF, pPERFcomp; 855 OMX_U32 nLcml_nCntIp; 856 OMX_U32 nLcml_nCntOpReceived; 857 #endif 858 859 /** Holds the value of RT Mixer mode */ 860 OMX_U32 rtmx; 861 862 /** Flags to control port enable command **/ 863 OMX_U32 bEnableCommandPending; 864 OMX_U32 bEnableCommandParam; 865 866 OMX_U8 nUnhandledFillThisBuffers; 867 OMX_U8 nUnhandledEmptyThisBuffers; 868 OMX_BOOL bFlushOutputPortCommandPending; 869 OMX_BOOL bFlushInputPortCommandPending; 870 871 OMX_BOOL bLoadedCommandPending; 872 OMX_PARAM_COMPONENTROLETYPE componentRole; 873 OMX_STRING* sDeviceString; 874 875 /** Keep buffer timestamps **/ 876 OMX_S64 arrTimestamp[G729ENC_MAX_NUM_OF_BUFS]; 877 878 /** Keep buffer timestamps **/ 879 OMX_S64 arrTickCount[G729ENC_MAX_NUM_OF_BUFS]; 880 881 /** Index to arrBufIndex[], used for input buffer timestamps */ 882 OMX_U8 IpBufindex; 883 884 /** Index to arrBufIndex[], used for output buffer timestamps */ 885 OMX_U8 OpBufindex; 886 887 OMX_BOOL bPreempted; 888 889 /** Pointer to RM callback **/ 890 #ifdef RESOURCE_MANAGER_ENABLED 891 RMPROXY_CALLBACKTYPE rmproxyCallback; 892 #endif 893 894 } G729ENC_COMPONENT_PRIVATE; 895 896 897 #ifndef UNDER_CE 898 OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp); 899 #else 900 /* WinCE Implicit Export Syntax */ 901 #define OMX_EXPORT __declspec(dllexport) 902 /* =================================================================================== */ 903 /** 904 * OMX_ComponentInit() Initializes component 905 * 906 * 907 * @param hComp OMX Handle 908 * 909 * @return OMX_ErrorNone = Successful 910 * Other error code = fail 911 * 912 */ 913 /* =================================================================================== */ 914 OMX_EXPORT OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp); 915 #endif 916 /* =================================================================================== */ 917 /** 918 * G729ENC_StartComponentThread() Starts component thread 919 * 920 * 921 * @param hComp OMX Handle 922 * 923 * @return OMX_ErrorNone = Successful 924 * Other error code = fail 925 * 926 */ 927 /* =================================================================================== */ 928 OMX_ERRORTYPE G729ENC_StartComponentThread(OMX_HANDLETYPE pHandle); 929 /* =================================================================================== */ 930 /** 931 * G729ENC_StopComponentThread() Stops component thread 932 * 933 * 934 * @param hComp OMX Handle 935 * 936 * @return OMX_ErrorNone = Successful 937 * Other error code = fail 938 * 939 */ 940 /* =================================================================================== */ 941 OMX_ERRORTYPE G729ENC_StopComponentThread(OMX_HANDLETYPE pHandle); 942 /* =================================================================================== */ 943 /** 944 * G729ENC_FreeCompResources() Frees allocated memory 945 * 946 * 947 * @param hComp OMX Handle 948 * 949 * @return OMX_ErrorNone = Successful 950 * Other error code = fail 951 * 952 */ 953 /* =================================================================================== */ 954 OMX_ERRORTYPE G729ENC_FreeCompResources(OMX_HANDLETYPE pComponent); 955 /* =================================================================================== */ 956 /** 957 * G729ENC_GetCorrespondingLCMLHeader() Returns LCML header 958 * that corresponds to the given buffer 959 * 960 * @param pComponentPrivate Component private data 961 * 962 * @return OMX_ErrorNone = Successful 963 * Other error code = fail 964 */ 965 /* =================================================================================== */ 966 OMX_ERRORTYPE G729ENC_GetCorrespondingLCMLHeader(OMX_U8 *pBuffer, 967 OMX_DIRTYPE eDir, 968 G729ENC_LCML_BUFHEADERTYPE **ppLcmlHdr, 969 G729ENC_COMPONENT_PRIVATE* pComponentPrivate); 970 /* =================================================================================== */ 971 /** 972 * G729ENC_LCMLCallback() Callback from LCML 973 * 974 * @param event Codec Event 975 * 976 * @param args Arguments from LCML 977 * 978 * @return OMX_ErrorNone = Successful 979 * Other error code = fail 980 */ 981 /* =================================================================================== */ 982 OMX_ERRORTYPE G729ENC_LCMLCallback(TUsnCodecEvent event, 983 void * args [10]); 984 /* =================================================================================== */ 985 /** 986 * G729ENC_FillLCMLInitParams() Fills the parameters needed 987 * to initialize the LCML 988 * 989 * @param pHandle OMX Handle 990 * 991 * @param plcml_Init LCML initialization parameters 992 * 993 * @return OMX_ErrorNone = Successful 994 * Other error code = fail 995 * 996 */ 997 /* =================================================================================== */ 998 OMX_ERRORTYPE G729ENC_FillLCMLInitParams(OMX_HANDLETYPE pHandle, 999 LCML_DSP *plcml_Init, 1000 OMX_U16 arr[]); 1001 /* =================================================================================== */ 1002 /** 1003 * G729ENC_GetBufferDirection() Returns direction of pBufHeader 1004 * 1005 * @param pBufHeader Buffer header 1006 * 1007 * @param eDir Buffer direction 1008 * 1009 * @param pComponentPrivate Component private data 1010 * 1011 * @return OMX_ErrorNone = Successful 1012 * Other error code = fail 1013 */ 1014 /* =================================================================================== */ 1015 OMX_ERRORTYPE G729ENC_GetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader, 1016 OMX_DIRTYPE *eDir); 1017 /* =========================================================== */ 1018 /** 1019 * G729ENC_HandleCommand() Handles commands sent via SendCommand() 1020 * 1021 * @param pComponentPrivate Component private data 1022 * 1023 * @return OMX_ErrorNone = Successful 1024 * Other error code = fail 1025 * @return OMX_ErrorNone = Successful 1026 * Other error code = fail 1027 */ 1028 /* =================================================================================== */ 1029 OMX_U32 G729ENC_HandleCommand(G729ENC_COMPONENT_PRIVATE *pComponentPrivate); 1030 /* =================================================================================== */ 1031 /** 1032 * G729ENC_HandleDataBufFromApp() Handles data buffers received 1033 * from the IL Client 1034 * 1035 * @param pComponentPrivate Component private data 1036 * 1037 * @return OMX_ErrorNone = Successful 1038 * Other error code = fail 1039 * @return OMX_ErrorNone = Successful 1040 * Other error code = fail 1041 */ 1042 /* =================================================================================== */ 1043 OMX_ERRORTYPE G729ENC_HandleDataBufFromApp(OMX_BUFFERHEADERTYPE *pBufHeader, 1044 G729ENC_COMPONENT_PRIVATE *pComponentPrivate); 1045 /* =================================================================================== */ 1046 /** 1047 * G729ENC_HandleDataBufFromLCML() Handles data buffers received 1048 * from LCML 1049 * 1050 * @param pComponentPrivate Component private data 1051 * 1052 * @return OMX_ErrorNone = Successful 1053 * Other error code = fail 1054 * @return OMX_ErrorNone = Successful 1055 * Other error code = fail 1056 */ 1057 /* =================================================================================== */ 1058 OMX_ERRORTYPE G729ENC_HandleDataBufFromLCML(G729ENC_COMPONENT_PRIVATE* pComponentPrivate); 1059 1060 /* =================================================================================== */ 1061 /** 1062 * G729ENC_GetLCMLHandle() Get the handle to the LCML 1063 * 1064 * 1065 * @return OMX_ErrorNone = Successful 1066 * Other error code = fail 1067 */ 1068 /* =================================================================================== */ 1069 OMX_HANDLETYPE G729ENC_GetLCMLHandle(G729ENC_COMPONENT_PRIVATE* pComponentPrivate); 1070 /* =================================================================================== */ 1071 /** 1072 * G729ENC_FreeLCMLHandle() Frees the handle to the LCML 1073 * 1074 * 1075 * @return OMX_ErrorNone = Successful 1076 * Other error code = fail 1077 */ 1078 /* =================================================================================== */ 1079 OMX_ERRORTYPE G729ENC_FreeLCMLHandle(G729ENC_COMPONENT_PRIVATE* pComponentPrivate); 1080 /* =================================================================================== */ 1081 /** 1082 * G729ENC_CleanupInitParams() Starts component thread 1083 * 1084 * @param pComponent OMX Handle 1085 * 1086 * @return OMX_ErrorNone = Successful 1087 * Other error code = fail 1088 */ 1089 /* =================================================================================== */ 1090 OMX_ERRORTYPE G729ENC_CleanupInitParams(OMX_HANDLETYPE pHandle); 1091 /* =================================================================================== */ 1092 /** 1093 * G729ENC_SetPending() Called when the component queues a buffer 1094 * to the LCML 1095 * 1096 * @param pComponentPrivate Component private data 1097 * 1098 * @param pBufHdr Buffer header 1099 * 1100 * @param eDir Direction of the buffer 1101 * 1102 * @return None 1103 */ 1104 /* =================================================================================== */ 1105 void G729ENC_SetPending(G729ENC_COMPONENT_PRIVATE *pComponentPrivate, 1106 OMX_BUFFERHEADERTYPE *pBufHdr, 1107 OMX_DIRTYPE eDir, 1108 OMX_U32 lineNumber); 1109 /* =================================================================================== */ 1110 /** 1111 * G729ENC_ClearPending() Called when a buffer is returned 1112 * from the LCML 1113 * 1114 * @param pComponentPrivate Component private data 1115 * 1116 * @param pBufHdr Buffer header 1117 * 1118 * @param eDir Direction of the buffer 1119 * 1120 * @return None 1121 */ 1122 /* =================================================================================== */ 1123 void G729ENC_ClearPending(G729ENC_COMPONENT_PRIVATE *pComponentPrivate, 1124 OMX_BUFFERHEADERTYPE *pBufHdr, 1125 OMX_DIRTYPE eDir, 1126 OMX_U32 lineNumber); 1127 /* =================================================================================== */ 1128 /** 1129 * G729ENC_IsPending() 1130 * 1131 * 1132 * @param pComponentPrivate Component private data 1133 * 1134 * @return OMX_ErrorNone = Successful 1135 * Other error code = fail 1136 */ 1137 /* =================================================================================== */ 1138 OMX_U32 G729ENC_IsPending(G729ENC_COMPONENT_PRIVATE *pComponentPrivate, 1139 OMX_BUFFERHEADERTYPE *pBufHdr, 1140 OMX_DIRTYPE eDir); 1141 /* =================================================================================== */ 1142 /** 1143 * G729ENC_FillLCMLInitParamsEx() Fills the parameters needed 1144 * to initialize the LCML without recreating the socket node 1145 * 1146 * @param pComponent OMX Handle 1147 * 1148 * @return None 1149 */ 1150 /* =================================================================================== */ 1151 OMX_ERRORTYPE G729ENC_FillLCMLInitParamsEx(OMX_HANDLETYPE pComponent); 1152 /* =================================================================================== */ 1153 /** 1154 * G729ENC_IsValid() Returns whether a buffer is valid 1155 * 1156 * 1157 * @param pComponentPrivate Component private data 1158 * 1159 * @param pBuffer Data buffer 1160 * 1161 * @param eDir Buffer direction 1162 * 1163 * @return OMX_True = Valid 1164 * OMX_False= Invalid 1165 */ 1166 /* =================================================================================== */ 1167 OMX_U32 G729ENC_IsValid(G729ENC_COMPONENT_PRIVATE *pComponentPrivate, 1168 OMX_U8 *pBuffer, 1169 OMX_DIRTYPE eDir); 1170 1171 1172 /* ======================================================================= */ 1173 /** OMX_G729ENC_INDEXAUDIOTYPE Defines the custom configuration settings 1174 * for the component 1175 * 1176 * @param OMX_IndexCustomG729ENCModeConfig Sets the DASF mode 1177 * 1178 * 1179 */ 1180 /* ==================================================================== */ 1181 typedef enum OMX_G729ENC_INDEXAUDIOTYPE 1182 { 1183 OMX_IndexCustomG729ENCModeConfig = 0xFF000001, 1184 OMX_IndexCustomG729ENCHeaderInfoConfig, 1185 OMX_IndexCustomG729ENCStreamIDConfig, 1186 OMX_IndexCustomG729ENCDataPath 1187 1188 } OMX_G729ENC_INDEXAUDIOTYPE; 1189 1190 1191 /* =========================================================== */ 1192 /** 1193 * G729ENC_TransitionToIdle() Transitions component to idle 1194 * 1195 * 1196 * @param pComponentPrivate Component private data 1197 * 1198 * @return OMX_ErrorNone = No error 1199 * OMX Error code = Error 1200 */ 1201 /*================================================================== */ 1202 OMX_ERRORTYPE G729ENC_TransitionToIdle(G729ENC_COMPONENT_PRIVATE *pComponentPrivate); 1203 1204 #ifdef RESOURCE_MANAGER_ENABLED 1205 /*********************************** 1206 * Callback to the RM * 1207 ***********************************/ 1208 void G729ENC_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData); 1209 #endif 1210 1211 #endif /* OMX_G729ENC_UTILS__H */ 1212 1213