| /* |
| * Copyright (c) 2011 Intel Corporation. All Rights Reserved. |
| * Copyright (c) Imagination Technologies Limited, UK |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a |
| * copy of this software and associated documentation files (the |
| * "Software"), to deal in the Software without restriction, including |
| * without limitation the rights to use, copy, modify, merge, publish, |
| * distribute, sub license, and/or sell copies of the Software, and to |
| * permit persons to whom the Software is furnished to do so, subject to |
| * the following conditions: |
| * |
| * The above copyright notice and this permission notice (including the |
| * next paragraph) shall be included in all copies or substantial portions |
| * of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. |
| * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR |
| * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| * |
| */ |
| |
| #ifndef _PTG_JPEG_H_ |
| #define _PTG_JPEG_H_ |
| |
| #include "img_types.h" |
| #include "tng_hostdefs.h" |
| #include "va/va_enc_jpeg.h" |
| |
| #define QUANT_TABLE_SIZE_BYTES (64) |
| #define MTX_MAX_COMPONENTS (3) |
| #define MAX_NUMBER_OF_MTX_UNITS 4 // Number of MTX units |
| |
| typedef enum { |
| IMG_ERR_OK = 0, //!< OK |
| IMG_ERR_SURFACE_LOCKED = 1, //!< The requested surface was locked |
| IMG_ERR_MEMORY = 2, //!< A memory error occured |
| IMG_ERR_FILE = 3, //!< A file error occured |
| IMG_ERR_NOBUFFERAVAILABLE = 4, //!< No buffer was available |
| IMG_ERR_COMPLETE = 5, //!< Command is complete |
| IMG_ERR_INVALID_CONTEXT = 6, //!< An invalid context was given |
| IMG_ERR_INVALID_SIZE = 7, //!< An invalid size was given |
| IMG_ERR_TIMEOUT = 8, //!< Timeout |
| IMG_ERR_UNDEFINED = -1 |
| |
| } IMG_ERRORCODE; |
| |
| /*****************************************************************************/ |
| /* STREAMTYPEW */ |
| /* Container to store the stream context */ |
| /*****************************************************************************/ |
| typedef struct { |
| IMG_UINT8 *Buffer; /*!< Ptr to the bitstream buffer */ |
| IMG_UINT32 Offset; /*!< Offset in the bitstream buffer */ |
| IMG_UINT32 Limit; |
| } STREAMTYPEW; |
| |
| |
| typedef struct { |
| IMG_UINT8 aui8LumaQuantParams[QUANT_TABLE_SIZE_BYTES]; //!< Luma quant params |
| IMG_UINT8 aui8ChromaQuantParams[QUANT_TABLE_SIZE_BYTES]; //!< Chroma quant params |
| |
| } JPEG_MTX_QUANT_TABLE; |
| |
| typedef struct { |
| IMG_UINT32 ui32MCUPositionOfScanAndPipeNo; //!< Scan start position in MCUs |
| IMG_UINT32 ui32MCUCntAndResetFlag; //!< [32:2] Number of MCU's to encode or decode, [1] Reset predictors (1=Reset, 0=No Reset) |
| |
| } MTX_ISSUE_BUFFERS; |
| |
| |
| typedef struct { |
| IMG_UINT32 ui32PhysAddr; //!< Physical address Component plane in shared memory |
| IMG_UINT32 ui32Stride; //!< Stride of source plane */ |
| IMG_UINT32 ui32Height; //!< Height of avaliable data in plane. shall be a minumum of one MCU high |
| |
| } COMPONENTPLANE; |
| |
| typedef struct { |
| IMG_UINT32 ui32WidthBlocks; //!< Width in pixels, shall be a multiple of 8 |
| IMG_UINT32 ui32HeightBlocks; //!< Height in pixels, shall be a multiple of 8 |
| IMG_UINT32 ui32XLimit; //!< Blocks will not be encoded beyond this |
| IMG_UINT32 ui32YLimit; //!< Blocks will not be encoded beyond this |
| |
| } MCUCOMPONENT; |
| |
| |
| typedef struct { |
| COMPONENTPLANE ComponentPlane[MTX_MAX_COMPONENTS]; //!< Array of component plane source information (detailing physical address, stride and height) |
| MCUCOMPONENT MCUComponent[MTX_MAX_COMPONENTS]; //!< Array of Minimum Coded Unit information for each component plane |
| IMG_UINT32 ui32ComponentsInScan; //!< Number of components |
| IMG_UINT32 ui32TableA; //!< Quantisation table for Luma component |
| IMG_UINT16 ui16DataInterleaveStatus; //!< Source component interleave status (0, C_INTERLEAVE, LC_UVINTERLEAVE or LC_VUINTERLEAVE) |
| IMG_UINT16 ui16MaxPipes; //!< Maximum number of pipes to use in the encode |
| } JPEG_MTX_DMA_SETUP; |
| |
| typedef struct |
| { |
| IMG_UINT32 apWritebackRegions[WB_FIFO_SIZE]; //!< Data section |
| } JPEG_MTX_WRITEBACK_MEMORY; |
| |
| typedef struct { |
| IMG_UINT32 ui32BytesUsed; //!< |
| IMG_UINT32 ui32BytesEncoded; //!< |
| IMG_UINT32 ui32BytesToEncode; //!< |
| IMG_UINT32 ui32Reserved3; //!< |
| |
| } BUFFER_HEADER; |
| |
| typedef enum { |
| BUFFER_FREE = 1, //!< Buffer is not locked |
| HW_LOCK, //!< Buffer is locked by hardware |
| SW_LOCK, //!< Buffer is locked by software |
| NOTDEVICEMEMORY, //!< Buffer is not a device memory buffer |
| |
| } LOCK_STATUS; |
| |
| typedef struct { |
| void* pMemInfo; //!< Pointer to the memory handle for the buffer |
| LOCK_STATUS sLock; //!< Lock status for the buffer |
| IMG_UINT32 ui32Size; //!< Size in bytes of the buffer |
| IMG_UINT32 ui32BytesWritten; //!< Number of bytes written into buffer |
| |
| } IMG_BUFFER, IMG_CODED_BUFFER; |
| |
| typedef struct { |
| void *pMemInfo; |
| IMG_UINT16 ui16ScanNumber; |
| IMG_UINT32 ui32WriteBackVal; |
| IMG_INT8 i8PipeNumber; // Doubles as status indicator ( <0 = Awaiting output to CB, 0 = Idle, >0 = Being filled by MTX) |
| IMG_UINT32 MTXOpNum; // Handle returned from MTX issuebuff command, can be used to check for completion |
| IMG_UINT32 ui32DataBufferSizeBytes; |
| IMG_UINT32 ui32DataBufferUsedBytes; |
| } TOPAZHP_JPEG_BUFFER_INFO; |
| |
| typedef struct { |
| IMG_UINT16 ui16CScan; |
| IMG_UINT16 ui16SScan; |
| IMG_UINT16 ui16ScansInImage; |
| IMG_UINT8 ui8MTXIdleCnt; |
| IMG_UINT8 aui8MTXIdleTable[MAX_NUMBER_OF_MTX_UNITS]; |
| TOPAZHP_JPEG_BUFFER_INFO *aBufferTable; |
| IMG_UINT32 ui32NumberMCUsX; |
| IMG_UINT32 ui32NumberMCUsY; |
| IMG_UINT32 ui32NumberMCUsToEncode; |
| IMG_UINT32 ui32NumberMCUsToEncodePerScan; |
| IMG_UINT8 ui8NumberOfCodedBuffers; |
| } TOPAZHP_SCAN_ENCODE_INFO; |
| |
| typedef struct { |
| IMG_UINT32 eFormat; |
| IMG_UINT16 ui16Quality; |
| IMG_UINT32 ui32OutputWidth; |
| IMG_UINT32 ui32OutputHeight; |
| IMG_UINT32 ui32InitialCBOffset; |
| |
| object_surface_p pSourceSurface; |
| void *pMemInfoMTXSetup; |
| JPEG_MTX_DMA_SETUP* pMTXSetup; |
| |
| void *pMemInfoWritebackMemory; |
| JPEG_MTX_WRITEBACK_MEMORY *pMTXWritebackMemory; |
| |
| void *pMemInfoTableBlock; |
| JPEG_MTX_QUANT_TABLE *psTablesBlock; |
| |
| IMG_UINT32 ui32Offsets[MTX_MAX_COMPONENTS]; |
| |
| TOPAZHP_SCAN_ENCODE_INFO sScan_Encode_Info; |
| |
| /* New added elements after porting */ |
| void *ctx; |
| IMG_INT32 NumCores; |
| IMG_CODED_BUFFER jpeg_coded_buf; |
| IMG_UINT32 ui32SizePerCodedBuffer; |
| MCUCOMPONENT MCUComponent[MTX_MAX_COMPONENTS]; |
| } TOPAZHP_JPEG_ENCODER_CONTEXT; |
| |
| #define PTG_JPEG_MAX_SCAN_NUM 7 |
| extern struct format_vtable_s tng_JPEGES_vtable; |
| extern VAStatus tng_jpeg_AppendMarkers(object_context_p obj_context, void *raw_coded_buf); |
| |
| #endif //_PTG_JPEG_H_ |