1 /* 2 * Copyright (C) Texas Instruments - http://www.ti.com/ 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 /* ============================================================================= 21 * Done Texas Instruments OMAP(TM) Platform Software 22 * (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. 23 * 24 * Use of this software is controlled by the terms and conditions found 25 * in the license agreement under which this software has been supplied. 26 * ============================================================================ */ 27 /** 28 * @file OMX_JpegEnc_Utils.h 29 * 30 * This is a header file for a JPEG encoder that is fully 31 * compliant with the OMX Image specification. 32 * This the file that the application that uses OMX would include 33 * in its code. 34 * 35 * @path $(CSLPATH)\inc 36 * 37 * @rev 0.1 38 */ 39 /* -------------------------------------------------------------------------------- */ 40 /* ================================================================================ 41 *! 42 *! Revision History 43 *! =================================== 44 *! 45 *! 22-May-2006 mf: Revisions appear in reverse chronological order; 46 *! that is, newest first. The date format is dd-Mon-yyyy. 47 * ================================================================================= */ 48 49 #ifndef OMX_JPEGENC_UTILS__H 50 #define OMX_JPEGENC_UTILS__H 51 #include <OMX_Component.h> 52 #include <OMX_IVCommon.h> 53 54 55 #ifndef UNDER_CE 56 #include <dlfcn.h> 57 #endif 58 #include "LCML_DspCodec.h" 59 #include "LCML_Types.h" 60 #include "LCML_CodecInterface.h" 61 #include <pthread.h> 62 #include <stdarg.h> 63 #include <OMX_Core.h> 64 #include <OMX_Types.h> 65 #include <OMX_Image.h> 66 #include<OMX_TI_Common.h> 67 #include <OMX_TI_Debug.h> 68 #ifdef RESOURCE_MANAGER_ENABLED 69 #include <ResourceManagerProxyAPI.h> 70 #endif 71 #include "OMX_JpegEnc_CustomCmd.h" 72 73 #include <utils/Log.h> 74 #define LOG_TAG "OMX_JPGENC" 75 76 #ifdef __PERF_INSTRUMENTATION__ 77 #include "perf.h" 78 #endif 79 80 #define OMX_JPEGENC_NonMIME 1 81 #define OMX_NOPORT 0xFFFFFFFE 82 #define JPEGE_TIMEOUT (100000) 83 #define NUM_OF_PORTS 2 84 #define NUM_OF_BUFFERSJPEG 4 85 86 #define MAX_INPARAM_SIZE 1024 87 88 #define COMP_MAX_NAMESIZE 127 89 90 #define OMX_CustomCommandStopThread (OMX_CommandMax - 1) 91 92 #define PADDING_128_BYTE 128 93 #define PADDING_256_BYTE 256 94 #define JPEGENC_THUMBNAIL_ABSENT_WARNING 4 95 96 #ifdef UNDER_CE 97 #include <oaf_debug.h> 98 #endif 99 100 #define KHRONOS_1_1 101 102 #ifndef FUNC 103 #define FUNC 1 104 #endif 105 106 #ifdef RESOURCE_MANAGER_ENABLED 107 #define JPEGENC1MPImage 1000000 108 #define JPEGENC2MPImage 2000000 109 #endif 110 111 #define DSP_MMU_FAULT_HANDLING 112 113 //JPEG Encoder Specific DSP Err Codes 114 #define IUALG_ERR_INSUFF_BUFFER 0x8401 115 116 /*Linked List */ 117 118 typedef struct Node { 119 struct Node *pNextNode; 120 void *pValue; 121 } Node; 122 123 typedef struct LinkedList { 124 Node *pRoot; 125 pthread_mutex_t lock; 126 } LinkedList; 127 128 LinkedList AllocList; 129 130 void LinkedList_Create(LinkedList *LinkedList); 131 void LinkedList_AddElement(LinkedList *LinkedList, void *pValue); 132 void LinkedList_FreeElement(LinkedList *LinkedList, void *pValue); 133 void LinkedList_FreeAll(LinkedList *LinkedList); 134 void LinkedList_DisplayAll(LinkedList *LinkedList); 135 void LinkedList_Destroy(LinkedList *LinkedList); 136 137 /* 138 * M A C R O S 139 */ 140 141 #define OMX_CONF_INIT_STRUCT(_s_, _name_) \ 142 memset((_s_), 0x0, sizeof(_name_)); \ 143 (_s_)->nSize = sizeof(_name_); \ 144 (_s_)->nVersion.s.nVersionMajor = 0x1; \ 145 (_s_)->nVersion.s.nVersionMinor = 0x0; \ 146 (_s_)->nVersion.s.nRevision = 0x0; \ 147 (_s_)->nVersion.s.nStep = 0x0 148 149 #define OMX_CHECK_PARAM(_ptr_) \ 150 { \ 151 if(!_ptr_) { \ 152 eError = OMX_ErrorBadParameter; \ 153 goto EXIT; \ 154 } \ 155 } 156 157 #define OMX_CONF_SET_ERROR_BAIL(_eError, _eCode)\ 158 { \ 159 _eError = _eCode; \ 160 goto OMX_CONF_CMD_BAIL; \ 161 } 162 163 #define OMX_MALLOC(_pStruct_, _size_) \ 164 _pStruct_ = malloc(_size_); \ 165 if(_pStruct_ == NULL){ \ 166 eError = OMX_ErrorInsufficientResources; \ 167 goto EXIT; \ 168 } \ 169 memset(_pStruct_, 0, _size_);\ 170 LinkedList_AddElement(&AllocList, _pStruct_); 171 172 #define OMX_FREE(_ptr) \ 173 { \ 174 if (_ptr != NULL) { \ 175 LinkedList_FreeElement(&AllocList, _ptr);\ 176 _ptr = NULL; \ 177 } \ 178 } 179 180 #define OMX_FREEALL() \ 181 { \ 182 LinkedList_FreeAll(&AllocList);\ 183 } 184 185 #define OMX_MEMCPY_CHECK(_p_)\ 186 {\ 187 if (_p_ == NULL) { \ 188 eError = OMX_ErrorInsufficientResources; \ 189 goto EXIT; \ 190 } \ 191 } 192 193 194 #ifdef RESOURCE_MANAGER_ENABLED 195 #define OMX_GET_RM_VALUE(_Res_, _RM_, _dbg_) \ 196 { \ 197 if ((_Res_) <= JPEGENC1MPImage){ \ 198 (_RM_) = 30; \ 199 } \ 200 else { \ 201 (_RM_) = 60; \ 202 } \ 203 \ 204 \ 205 OMX_PRMGR2((_dbg_), "Value in MHz requested to RM = %d\n", (_RM_)); \ 206 } 207 #endif 208 209 typedef struct IDMJPGE_TIGEM_Comment { 210 OMX_U8 comment[256]; 211 OMX_U16 commentLen; 212 } IDMJPGE_TIGEM_Comment; 213 214 215 typedef struct IIMGENC_DynamicParams { 216 OMX_U32 nSize; /* nSize of this structure */ 217 OMX_U32 nNumAU; /* Number of Access unit to encode, 218 * set to XDM_DEFAULT in case of entire frame 219 */ 220 OMX_U32 nInputChromaFormat;/* Input chroma format, Refer above comments regarding chroma */ 221 OMX_U32 nInputHeight; /* Input nHeight*/ 222 OMX_U32 nInputWidth; /* Input nWidth*/ 223 OMX_U32 nCaptureWidth; /* 0: use imagewidth as pitch, otherwise: 224 * use given display nWidth (if > imagewidth) 225 * for pitch. 226 */ 227 OMX_U32 nGenerateHeader; /* XDM_ENCODE_AU or XDM_GENERATE_HEADER */ 228 OMX_U32 qValue; /* Q value compression factor for encoder */ 229 } IIMGENC_DynamicParams; 230 231 232 typedef struct IDMJPGE_TIGEM_CustomQuantTables 233 { 234 /* The array "lum_quant_tab" defines the quantization table for the luma component. */ 235 OMX_U16 lum_quant_tab[64]; 236 /* The array "chm_quant_tab" defines the quantization table for the chroma component. */ 237 OMX_U16 chm_quant_tab[64]; 238 } IDMJPGE_TIGEM_CustomQuantTables; 239 240 241 typedef struct IDMJPGE_TIGEM_DynamicParams { 242 IIMGENC_DynamicParams params; 243 OMX_U32 captureHeight; /* if set to 0 use image height 244 else should set to actual Image height */ 245 OMX_U32 DRI_Interval ; 246 JPEGENC_CUSTOM_HUFFMAN_TABLE *huffmanTable; 247 IDMJPGE_TIGEM_CustomQuantTables *quantTable; 248 } IDMJPGE_TIGEM_DynamicParams; 249 250 /* PPLIB not needed if the the input to jpeg encoder is yuv. Uncomment the next line if PPLIB is needed */ 251 /* #define __JPEG_OMX_PPLIB_ENABLED__ */ 252 253 #ifdef __JPEG_OMX_PPLIB_ENABLED__ 254 #define OMX_JPEGENC_NUM_DLLS (5) 255 #else 256 #define OMX_JPEGENC_NUM_DLLS (4) 257 #endif 258 259 260 #ifdef UNDER_CE 261 #define JPEG_ENC_NODE_DLL "/windows/jpegenc_sn.dll64P" 262 #define JPEG_COMMON_DLL "/windows/usn.dll64P" 263 #define USN_DLL "/windows/usn.dll64P" 264 #define CONVERSIONS_DLL "/windows/conversions.dll64P" 265 #ifdef __JPEG_OMX_PPLIB_ENABLED__ 266 #define PPLIB_DLL "/windows/postprocessor_dualout.dll64P" 267 #endif 268 #else 269 #define JPEG_ENC_NODE_DLL "jpegenc_sn.dll64P" 270 #define JPEG_COMMON_DLL "usn.dll64P" 271 #define USN_DLL "usn.dll64P" 272 #define CONVERSIONS_DLL "conversions.dll64P" 273 #ifdef __JPEG_OMX_PPLIB_ENABLED__ 274 #define PPLIB_DLL "postprocessor_dualout.dll64P" 275 #endif 276 #endif 277 278 #define JPGENC_SNTEST_STRMCNT 2 279 #define JPGENC_SNTEST_INSTRMID 0 280 #define JPGENC_SNTEST_OUTSTRMID 1 281 #define JPGENC_SNTEST_ARGLENGTH 20 282 #define JPGENC_SNTEST_INBUFCNT 4 283 #define JPGENC_SNTEST_OUTBUFCNT 4 284 #define JPGENC_SNTEST_MAX_HEIGHT 4096 285 #define JPGENC_SNTEST_MAX_WIDTH 4096 286 #define JPGENC_SNTEST_PROG_FLAG 1 287 #define M_COM 0xFE /* COMment */ 288 289 #define JPEGE_DSPSTOP 0x01 290 #define JPEGE_BUFFERBACK 0x02 291 #define JPEGE_IDLEREADY ( JPEGE_DSPSTOP | JPEGE_BUFFERBACK ) 292 293 typedef enum Content_Type 294 { 295 APP0_BUFFER = 0, 296 APP1_BUFFER, 297 APP13_BUFFER, 298 COMMENT_BUFFER, 299 APP0_NUMBUF, 300 APP1_NUMBUF, 301 APP13_NUMBUF, 302 COMMENT_NUMBUF, 303 APP0_THUMB_H, 304 APP0_THUMB_W, 305 APP1_THUMB_H, 306 APP1_THUMB_W, 307 APP13_THUMB_H, 308 APP13_THUMB_W, 309 APP0_THUMB_INDEX, 310 APP1_THUMB_INDEX, 311 APP13_THUMB_INDEX, 312 DYNPARAMS_HUFFMANTABLE, 313 DYNPARAMS_QUANTTABLE, 314 APP5_BUFFER, 315 APP5_NUMBUF, 316 APP5_THUMB_H, 317 APP5_THUMB_W, 318 APP5_THUMB_INDEX 319 } Content_Type; 320 321 /*This enum must not be changed. */ 322 typedef enum JPEG_PORT_TYPE_INDEX 323 { 324 JPEGENC_INP_PORT, 325 JPEGENC_OUT_PORT 326 }JPEG_PORT_TYPE_INDEX; 327 328 typedef enum JPEGENC_BUFFER_OWNER { 329 JPEGENC_BUFFER_CLIENT = 0x0, 330 JPEGENC_BUFFER_COMPONENT_IN, 331 JPEGENC_BUFFER_COMPONENT_OUT, 332 JPEGENC_BUFFER_DSP, 333 JPEGENC_BUFFER_TUNNEL_COMPONENT 334 } JPEGENC_BUFFER_OWNER; 335 336 typedef struct _JPEGENC_BUFFERFLAG_TRACK { 337 OMX_U32 flag; 338 OMX_U32 buffer_id; 339 OMX_HANDLETYPE hMarkTargetComponent; 340 OMX_PTR pMarkData; 341 } JPEGENC_BUFFERFLAG_TRACK; 342 343 typedef struct _JPEGENC_BUFFERMARK_TRACK { 344 OMX_U32 buffer_id; 345 OMX_HANDLETYPE hMarkTargetComponent; 346 OMX_PTR pMarkData; 347 } JPEGENC_BUFFERMARK_TRACK; 348 349 typedef struct JPEGENC_BUFFER_PRIVATE { 350 OMX_BUFFERHEADERTYPE* pBufferHdr; 351 JPEGENC_BUFFER_OWNER eBufferOwner; 352 OMX_BOOL bAllocByComponent; 353 OMX_BOOL bReadFromPipe; 354 } JPEGENC_BUFFER_PRIVATE; 355 356 typedef struct JPEG_PORT_TYPE { 357 OMX_HANDLETYPE hTunnelComponent; 358 OMX_U32 nTunnelPort; 359 JPEGENC_BUFFER_PRIVATE* pBufferPrivate[NUM_OF_BUFFERSJPEG]; 360 JPEGENC_BUFFERFLAG_TRACK sBufferFlagTrack[NUM_OF_BUFFERSJPEG]; 361 JPEGENC_BUFFERMARK_TRACK sBufferMarkTrack[NUM_OF_BUFFERSJPEG]; 362 OMX_PARAM_PORTDEFINITIONTYPE* pPortDef; 363 OMX_BUFFERSUPPLIERTYPE pBufSupplier; 364 OMX_PARAM_BUFFERSUPPLIERTYPE* pParamBufSupplier; 365 OMX_IMAGE_PARAM_PORTFORMATTYPE* pPortFormat; 366 OMX_U8 nBuffCount; 367 }JPEG_PORT_TYPE; 368 369 typedef struct JPEGE_INPUT_PARAMS { 370 OMX_U32 *pInParams; 371 OMX_U32 size; 372 } JPEGE_INPUT_PARAMS; 373 374 typedef struct _JPEGENC_CUSTOM_PARAM_DEFINITION { 375 OMX_U8 cCustomParamName[128]; 376 OMX_INDEXTYPE nCustomParamIndex; 377 } JPEGENC_CUSTOM_PARAM_DEFINITION; 378 379 typedef struct JPEGENC_COMPONENT_PRIVATE 380 { 381 JPEG_PORT_TYPE* pCompPort[NUM_OF_PORTS]; 382 OMX_PORT_PARAM_TYPE* pPortParamType; 383 OMX_PORT_PARAM_TYPE* pPortParamTypeAudio; 384 OMX_PORT_PARAM_TYPE* pPortParamTypeVideo; 385 OMX_PORT_PARAM_TYPE* pPortParamTypeOthers; 386 OMX_PRIORITYMGMTTYPE* pPriorityMgmt; 387 OMX_CALLBACKTYPE cbInfo; 388 OMX_IMAGE_PARAM_QFACTORTYPE* pQualityfactor; 389 OMX_CONFIG_RECTTYPE *pCrop; 390 /** This is component handle */ 391 OMX_COMPONENTTYPE* pHandle; 392 /*Comonent Name& Version*/ 393 OMX_STRING cComponentName; 394 OMX_VERSIONTYPE ComponentVersion; 395 OMX_VERSIONTYPE SpecVersion; 396 397 /** Current state of this component */ 398 OMX_STATETYPE nCurState; 399 OMX_STATETYPE nToState; 400 OMX_U8 ExeToIdleFlag; /* StateCheck */ 401 402 OMX_U32 nInPortIn; 403 OMX_U32 nInPortOut; 404 OMX_U32 nOutPortIn; 405 OMX_U32 nOutPortOut; 406 OMX_BOOL bInportDisableIncomplete; 407 OMX_BOOL bOutportDisableIncomplete; 408 OMX_BOOL bSetLumaQuantizationTable; 409 OMX_BOOL bSetChromaQuantizationTable; 410 OMX_BOOL bSetHuffmanTable; 411 OMX_BOOL bConvert420pTo422i; 412 OMX_BOOL bPPLibEnable; 413 OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE *pCustomLumaQuantTable; 414 OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE *pCustomChromaQuantTable; 415 JPEGENC_CUSTOM_HUFFMANTTABLETYPE *pHuffmanTable; 416 417 418 /** The component thread handle */ 419 pthread_t ComponentThread; 420 /** The pipes to maintain free buffers */ 421 int free_outBuf_Q[2]; 422 /** The pipes to maintain input buffers sent from app*/ 423 int filled_inpBuf_Q[2]; 424 /** The pipes for sending buffers to the thread */ 425 int nCmdPipe[2]; 426 int nCmdDataPipe[2]; 427 OMX_U32 nApp_nBuf; 428 short int nNum_dspBuf; 429 int nCommentFlag; 430 OMX_U8 *pString_Comment; 431 JPEG_APPTHUMB_MARKER sAPP0; 432 JPEG_APPTHUMB_MARKER sAPP1; 433 JPEG_APPTHUMB_MARKER sAPP5; 434 JPEG_APP13_MARKER sAPP13; 435 JPEGE_INPUT_PARAMS InParams; 436 #ifdef __JPEG_OMX_PPLIB_ENABLED__ 437 OMX_U32 *pOutParams; 438 #endif 439 #ifdef RESOURCE_MANAGER_ENABLED 440 RMPROXY_CALLBACKTYPE rmproxyCallback; 441 #endif 442 OMX_BOOL bPreempted; 443 int nFlags; 444 int nMarkPort; 445 OMX_PTR pMarkData; 446 OMX_HANDLETYPE hMarkTargetComponent; 447 OMX_BOOL bDSPStopAck; 448 OMX_BOOL bFlushComplete; 449 OMX_BOOL bAckFromSetStatus; 450 void* pLcmlHandle; /* Review Utils.c */ 451 int isLCMLActive; 452 LCML_DSP_INTERFACE* pLCML; 453 void * pDllHandle; 454 OMX_U8 nDRI_Interval; 455 #ifdef KHRONOS_1_1 456 OMX_PARAM_COMPONENTROLETYPE componentRole; 457 #endif 458 IDMJPGE_TIGEM_DynamicParams *pDynParams; 459 460 pthread_mutex_t jpege_mutex; 461 pthread_cond_t stop_cond; 462 pthread_cond_t flush_cond; 463 /* pthread_cond_t control_cond; */ 464 pthread_mutex_t jpege_mutex_app; 465 pthread_cond_t populate_cond; 466 pthread_cond_t unpopulate_cond; 467 468 469 #ifdef __PERF_INSTRUMENTATION__ 470 PERF_OBJHANDLE pPERF, pPERFcomp; 471 #endif 472 struct OMX_TI_Debug dbg; 473 474 /* Reference count for pending state change requests */ 475 OMX_U32 nPendingStateChangeRequests; 476 pthread_mutex_t mutexStateChangeRequest; 477 pthread_cond_t StateChangeCondition; 478 479 } JPEGENC_COMPONENT_PRIVATE; 480 481 482 OMX_ERRORTYPE HandleJpegEncCommand (JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1); 483 OMX_ERRORTYPE JpegEncDisablePort(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1); 484 OMX_ERRORTYPE JpegEncEnablePort(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1); 485 OMX_ERRORTYPE HandleJpegEncCommandFlush(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1); 486 OMX_ERRORTYPE JPEGEnc_Start_ComponentThread(OMX_HANDLETYPE pHandle); 487 OMX_ERRORTYPE HandleJpegEncDataBuf_FromApp(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate ); 488 OMX_ERRORTYPE HandleJpegEncDataBuf_FromDsp( JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE* pBuffHead ); 489 OMX_ERRORTYPE HandleJpegEncFreeDataBuf( JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE* pBuffHead ); 490 OMX_ERRORTYPE HandleJpegEncFreeOutputBufferFromApp( JPEGENC_COMPONENT_PRIVATE *pComponentPrivate ); 491 OMX_ERRORTYPE AllocJpegEncResources( JPEGENC_COMPONENT_PRIVATE *pComponentPrivate ); 492 OMX_ERRORTYPE JPEGEnc_Free_ComponentResources(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate); 493 OMX_ERRORTYPE Fill_JpegEncLCMLInitParams(LCML_DSP *lcml_dsp, OMX_U16 arr[], OMX_HANDLETYPE pComponent); 494 OMX_ERRORTYPE GetJpegEncLCMLHandle(OMX_HANDLETYPE pComponent); 495 OMX_ERRORTYPE SetJpegEncInParams(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate); 496 OMX_ERRORTYPE SendDynamicParam(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate); 497 OMX_BOOL IsTIOMXComponent(OMX_HANDLETYPE hComp); 498 499 #ifdef __JPEG_OMX_PPLIB_ENABLED__ 500 #define JPEGENC_PPLIB_CREATEPARAM_SIZE 28 501 #define JPEGENC_PPLIB_DYNPARM_SIZE 252 502 OMX_ERRORTYPE SendDynamicPPLibParam(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate,OMX_U32 *ptInputParam); 503 504 505 506 typedef struct _PPLIB_UALGRunTimeParam_t 507 { 508 OMX_U32 size; /**< Size of the structure in bytes. */ 509 OMX_U32 ulInWidth; /**< Input picture buffer width. This value should be the same as the original decoded output width of the WMV9/VC1 stream. */ 510 OMX_U32 ulInHeight; /**< Input picture buffer height. This value should be the same as the original decoded output height of the WMV9/VC1 stream. */ 511 OMX_U32 ulFrameEnabled[2]; /**< It is possible to run the VGPOP twice with two separate sets of configuration parameters using PPLIB. This parameter specifies whether each set of configuration parameters is to be used when running PPLIB for this particular frame. */ 512 OMX_U32 ulEnableYUVOutput[2]; /**< Flag to enable YUV output */ 513 OMX_U32 ulEnableRGBOutput[2]; /**< Flag to enable RGB output. */ 514 OMX_U32 ulFrameInputStartYOffset[2]; /**< Offset from the start of the input buffer where the input Y data is located. You can specify a different offset for each set of VGPOP parameters. In most cases, this will be 0. */ 515 OMX_U32 ulFrameInputStartCOffset[2]; /**< Offset from the start of the input buffer where the input CrCb data is located. You can specify a different offset for each set of VGPOP parameters. In most cases, this will be the same as (input width * input height) + Y offset. */ 516 OMX_U32 ulFrameOutputStartYOffset[2]; /**< Offset from the start of the output buffer where the output Y data should be placed. You can specify a different offset for each set of VGPOP parameters. */ 517 OMX_U32 ulFrameOutputStartCOffset[2]; /**< Offset from the start of the output buffer where the output CrCb data should be placed. You can specify a different offset for each set of VGPOP parameters. In most cases, this will be the same as (output width * output height) + Y offset. */ 518 OMX_U32 ulFrameOutputRGBOffset[2]; /**< Offset from the start of the output buffer where the output RGB data is located. You can specify a different offset for each set of VGPOP parameters. In most cases, this will be 0. */ 519 OMX_U32 ulFrameOutputHeight[2]; /**< Output picture buffer height for each VGPOP parameter set.*/ 520 OMX_U32 ulFrameOutputWidth[2]; /**< Output picture buffer width for each VGPOP parameter set. */ 521 OMX_U32 ulFrameContrast[2]; /**< Contrast Method for each VGPOP parameter set */ 522 OMX_U32 ulFrameInXStart[2]; /**< Horizontal cropping start position in the input buffer. Set to 0 if no cropping is desired. */ 523 OMX_U32 ulFrameInYStart[2]; /**< Vertical cropping start position in the input buffer. Set to 0 if no cropping is desired.*/ 524 OMX_U32 ulFrameInXSize[2]; /**< Horizontal cropping width. Set to 0 if no cropping is desired */ 525 OMX_U32 ulFrameInYSize[2]; /**< Vertical cropping height. Set to 0 if no cropping is desired.*/ 526 OMX_U32 ulFrameZoomFactor[2]; /**< Zooming ratio value, where ulZoomFactor = (Desired Zoom Ratio * 1024). Set to 1024 if no zooming is desired. Set above 1024 to enable zooming. */ 527 OMX_U32 ulFrameZoomLimit[2]; /**< Zooming ratio limit, where ulZoomLimit=(Desired Zoom Limit * 1024).*/ 528 OMX_U32 ulFrameZoomSpeed[2]; /**< Speed of ratio change. Set to 0 to disable zoom variation. The variation speed is proportional to the value while the direction (in/out) is given by the sign.*/ 529 OMX_U32 ulFrameEnableLightChroma[2]; /**< Light chrominance process. */ 530 OMX_U32 ulFrameEnableAspectRatioLock[2]; /**< Locked H/V ratio */ 531 OMX_U32 ulFrameEnableMirroring[2]; /**< To mirror the picture: */ 532 OMX_U32 ulFrameRGBRotation[2]; /**< Rotation to apply to RGB Output. May be set to 0, 90, 180 or 270.*/ 533 OMX_U32 ulFrameYUVRotation[2]; /**< Rotation to apply to YUV Output. May be set to 0, 90, 180, or 270*/ 534 OMX_U32 ulFrameIORange[2]; /**< IO Video Range. */ 535 OMX_U32 ulFrameEnableDithering[2]; /**< Dithering Enable */ 536 OMX_U32 ulFrameOutputPitch[2]; /**< Enable an output pitch */ 537 OMX_U32 ulAlphaRGB[2]; /**< This is the default alpha values for ARGB32 or RGBA32. */ 538 OMX_U32 ulIsFrameGenerated[2]; /**< Flag to notify the user if a frame has been generated */ 539 OMX_U32 ulYUVFrameSize[2]; /**< YUV output size in bytes */ 540 OMX_U32 ulRGBFrameSize[2]; /**< RGB output size in bytes. */ 541 } PPLIB_UALGRunTimeParam_t; 542 543 544 545 #endif 546 547 typedef OMX_ERRORTYPE (*fpo)(OMX_HANDLETYPE); 548 549 static const struct DSP_UUID JPEGESOCKET_TI_UUID = { 550 0xCB70C0C1, 0x4C85, 0x11D6, 0xB1, 0x05, { 551 0x00, 0xC0, 0x4F, 0x32, 0x90, 0x31 552 } 553 }; 554 555 556 static const struct DSP_UUID USN_UUID = { 557 0x79A3C8B3, 0x95F2, 0x403F, 0x9A, 0x4B, { 558 0xCF, 0x80, 0x57, 0x73, 0x05, 0x41 559 } 560 }; 561 562 static const struct DSP_UUID CONVERSIONS_UUID = { 563 0x722DD0DA, 0xF532, 0x4238, 0xB8, 0x46, { 564 0xAB, 0xFF, 0x5D, 0xA4, 0xBA, 0x02 565 } 566 }; 567 568 #ifdef __JPEG_OMX_PPLIB_ENABLED__ 569 static const struct DSP_UUID PPLIB_UUID = { 570 0xFC8CF948, 0xD3E9, 0x4B65, 0xBC, 0xA7, { 571 0x08, 0x2E, 0xA0, 0xAD, 0x86, 0xF0 572 } 573 }; 574 #endif 575 void* OMX_JpegEnc_Thread (void* pThreadData); 576 577 typedef enum ThrCmdType 578 { 579 SetState, 580 Flush, 581 StopPort, 582 RestartPort, 583 MarkBuf, 584 Start, 585 Stop, 586 FillBuf, 587 EmptyBuf 588 } ThrCmdType; 589 590 typedef enum OMX_JPEGE_INDEXTYPE { 591 592 OMX_IndexCustomCommentFlag = 0xFF000001, 593 OMX_IndexCustomCommentString = 0xFF000002, 594 OMX_IndexCustomInputFrameWidth, 595 OMX_IndexCustomInputFrameHeight, 596 OMX_IndexCustomAPP0, 597 OMX_IndexCustomAPP1, 598 OMX_IndexCustomAPP5, 599 OMX_IndexCustomAPP13, 600 OMX_IndexCustomQFactor, 601 OMX_IndexCustomDRI, 602 OMX_IndexCustomHuffmanTable, 603 OMX_IndexCustomDebug, 604 OMX_IndexCustomColorFormatConvertion_420pTo422i, 605 OMX_IndexCustomPPLibEnable 606 }OMX_INDEXIMAGETYPE; 607 608 typedef struct IUALG_Buf { 609 OMX_PTR pBufAddr; 610 unsigned long ulBufSize; 611 OMX_PTR pParamAddr; 612 unsigned long ulParamSize; 613 unsigned long ulBufSizeUsed; 614 //IUALG_BufState tBufState; 615 OMX_BOOL bBufActive; 616 OMX_U32 unBufID; 617 unsigned long ulReserved; 618 } IUALG_Buf; 619 620 typedef enum { 621 IUALG_CMD_STOP = 0, 622 IUALG_CMD_PAUSE = 1, 623 IUALG_CMD_GETSTATUS = 2, 624 IUALG_CMD_SETSTATUS = 3, 625 IUALG_CMD_USERSETCMDSTART = 100, 626 IUALG_CMD_USERGETCMDSTART = 150, 627 IUALG_CMD_FLUSH = 0x100 628 }IUALG_Cmd; 629 630 OMX_ERRORTYPE AddStateTransition(JPEGENC_COMPONENT_PRIVATE* pComponentPrivate); 631 OMX_ERRORTYPE RemoveStateTransition(JPEGENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BOOL bEnableSignal); 632 633 #endif /*OMX_JPEGENC_UTILS__H*/ 634