1/* 2* Copyright (c) 2011 Intel Corporation. All Rights Reserved. 3* Copyright (c) Imagination Technologies Limited, UK 4* 5* Permission is hereby granted, free of charge, to any person obtaining a 6* copy of this software and associated documentation files (the 7* "Software"), to deal in the Software without restriction, including 8* without limitation the rights to use, copy, modify, merge, publish, 9* distribute, sub license, and/or sell copies of the Software, and to 10* permit persons to whom the Software is furnished to do so, subject to 11* the following conditions: 12* 13* The above copyright notice and this permission notice (including the 14* next paragraph) shall be included in all copies or substantial portions 15* of the Software. 16* 17* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 20* IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 21* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24* 25*/ 26 27#ifndef _PTG_JPEG_H_ 28#define _PTG_JPEG_H_ 29 30#include "img_types.h" 31#include "tng_hostdefs.h" 32#include "va/va_enc_jpeg.h" 33 34#define QUANT_TABLE_SIZE_BYTES (64) 35#define MTX_MAX_COMPONENTS (3) 36#define MAX_NUMBER_OF_MTX_UNITS 4 // Number of MTX units 37 38typedef enum { 39 IMG_ERR_OK = 0, //!< OK 40 IMG_ERR_SURFACE_LOCKED = 1, //!< The requested surface was locked 41 IMG_ERR_MEMORY = 2, //!< A memory error occured 42 IMG_ERR_FILE = 3, //!< A file error occured 43 IMG_ERR_NOBUFFERAVAILABLE = 4, //!< No buffer was available 44 IMG_ERR_COMPLETE = 5, //!< Command is complete 45 IMG_ERR_INVALID_CONTEXT = 6, //!< An invalid context was given 46 IMG_ERR_INVALID_SIZE = 7, //!< An invalid size was given 47 IMG_ERR_TIMEOUT = 8, //!< Timeout 48 IMG_ERR_UNDEFINED = -1 49 50} IMG_ERRORCODE; 51 52/*****************************************************************************/ 53/* STREAMTYPEW */ 54/* Container to store the stream context */ 55/*****************************************************************************/ 56typedef struct { 57 IMG_UINT8 *Buffer; /*!< Ptr to the bitstream buffer */ 58 IMG_UINT32 Offset; /*!< Offset in the bitstream buffer */ 59 IMG_UINT32 Limit; 60} STREAMTYPEW; 61 62 63typedef struct { 64 IMG_UINT8 aui8LumaQuantParams[QUANT_TABLE_SIZE_BYTES]; //!< Luma quant params 65 IMG_UINT8 aui8ChromaQuantParams[QUANT_TABLE_SIZE_BYTES]; //!< Chroma quant params 66 67} JPEG_MTX_QUANT_TABLE; 68 69typedef struct { 70 IMG_UINT32 ui32MCUPositionOfScanAndPipeNo; //!< Scan start position in MCUs 71 IMG_UINT32 ui32MCUCntAndResetFlag; //!< [32:2] Number of MCU's to encode or decode, [1] Reset predictors (1=Reset, 0=No Reset) 72 73} MTX_ISSUE_BUFFERS; 74 75 76typedef struct { 77 IMG_UINT32 ui32PhysAddr; //!< Physical address Component plane in shared memory 78 IMG_UINT32 ui32Stride; //!< Stride of source plane */ 79 IMG_UINT32 ui32Height; //!< Height of avaliable data in plane. shall be a minumum of one MCU high 80 81} COMPONENTPLANE; 82 83typedef struct { 84 IMG_UINT32 ui32WidthBlocks; //!< Width in pixels, shall be a multiple of 8 85 IMG_UINT32 ui32HeightBlocks; //!< Height in pixels, shall be a multiple of 8 86 IMG_UINT32 ui32XLimit; //!< Blocks will not be encoded beyond this 87 IMG_UINT32 ui32YLimit; //!< Blocks will not be encoded beyond this 88 89} MCUCOMPONENT; 90 91 92typedef struct { 93 COMPONENTPLANE ComponentPlane[MTX_MAX_COMPONENTS]; //!< Array of component plane source information (detailing physical address, stride and height) 94 MCUCOMPONENT MCUComponent[MTX_MAX_COMPONENTS]; //!< Array of Minimum Coded Unit information for each component plane 95 IMG_UINT32 ui32ComponentsInScan; //!< Number of components 96 IMG_UINT32 ui32TableA; //!< Quantisation table for Luma component 97 IMG_UINT16 ui16DataInterleaveStatus; //!< Source component interleave status (0, C_INTERLEAVE, LC_UVINTERLEAVE or LC_VUINTERLEAVE) 98 IMG_UINT16 ui16MaxPipes; //!< Maximum number of pipes to use in the encode 99} JPEG_MTX_DMA_SETUP; 100 101typedef struct 102{ 103 IMG_UINT32 apWritebackRegions[WB_FIFO_SIZE]; //!< Data section 104} JPEG_MTX_WRITEBACK_MEMORY; 105 106typedef struct { 107 IMG_UINT32 ui32BytesUsed; //!< 108 IMG_UINT32 ui32BytesEncoded; //!< 109 IMG_UINT32 ui32BytesToEncode; //!< 110 IMG_UINT32 ui32Reserved3; //!< 111 112} BUFFER_HEADER; 113 114typedef enum { 115 BUFFER_FREE = 1, //!< Buffer is not locked 116 HW_LOCK, //!< Buffer is locked by hardware 117 SW_LOCK, //!< Buffer is locked by software 118 NOTDEVICEMEMORY, //!< Buffer is not a device memory buffer 119 120} LOCK_STATUS; 121 122typedef struct { 123 void* pMemInfo; //!< Pointer to the memory handle for the buffer 124 LOCK_STATUS sLock; //!< Lock status for the buffer 125 IMG_UINT32 ui32Size; //!< Size in bytes of the buffer 126 IMG_UINT32 ui32BytesWritten; //!< Number of bytes written into buffer 127 128} IMG_BUFFER, IMG_CODED_BUFFER; 129 130typedef struct { 131 void *pMemInfo; 132 IMG_UINT16 ui16ScanNumber; 133 IMG_UINT32 ui32WriteBackVal; 134 IMG_INT8 i8PipeNumber; // Doubles as status indicator ( <0 = Awaiting output to CB, 0 = Idle, >0 = Being filled by MTX) 135 IMG_UINT32 MTXOpNum; // Handle returned from MTX issuebuff command, can be used to check for completion 136 IMG_UINT32 ui32DataBufferSizeBytes; 137 IMG_UINT32 ui32DataBufferUsedBytes; 138} TOPAZHP_JPEG_BUFFER_INFO; 139 140typedef struct { 141 IMG_UINT16 ui16CScan; 142 IMG_UINT16 ui16SScan; 143 IMG_UINT16 ui16ScansInImage; 144 IMG_UINT8 ui8MTXIdleCnt; 145 IMG_UINT8 aui8MTXIdleTable[MAX_NUMBER_OF_MTX_UNITS]; 146 TOPAZHP_JPEG_BUFFER_INFO *aBufferTable; 147 IMG_UINT32 ui32NumberMCUsX; 148 IMG_UINT32 ui32NumberMCUsY; 149 IMG_UINT32 ui32NumberMCUsToEncode; 150 IMG_UINT32 ui32NumberMCUsToEncodePerScan; 151 IMG_UINT8 ui8NumberOfCodedBuffers; 152} TOPAZHP_SCAN_ENCODE_INFO; 153 154typedef struct { 155 IMG_UINT32 eFormat; 156 IMG_UINT16 ui16Quality; 157 IMG_UINT32 ui32OutputWidth; 158 IMG_UINT32 ui32OutputHeight; 159 IMG_UINT32 ui32InitialCBOffset; 160 161 object_surface_p pSourceSurface; 162 void *pMemInfoMTXSetup; 163 JPEG_MTX_DMA_SETUP* pMTXSetup; 164 165 void *pMemInfoWritebackMemory; 166 JPEG_MTX_WRITEBACK_MEMORY *pMTXWritebackMemory; 167 168 void *pMemInfoTableBlock; 169 JPEG_MTX_QUANT_TABLE *psTablesBlock; 170 171 IMG_UINT32 ui32Offsets[MTX_MAX_COMPONENTS]; 172 173 TOPAZHP_SCAN_ENCODE_INFO sScan_Encode_Info; 174 175 /* New added elements after porting */ 176 void *ctx; 177 IMG_INT32 NumCores; 178 IMG_CODED_BUFFER jpeg_coded_buf; 179 IMG_UINT32 ui32SizePerCodedBuffer; 180 MCUCOMPONENT MCUComponent[MTX_MAX_COMPONENTS]; 181} TOPAZHP_JPEG_ENCODER_CONTEXT; 182 183#define PTG_JPEG_MAX_SCAN_NUM 7 184extern struct format_vtable_s tng_JPEGES_vtable; 185extern VAStatus tng_jpeg_AppendMarkers(object_context_p obj_context, void *raw_coded_buf); 186 187#endif //_PTG_JPEG_H_ 188