MAX_CARLINK_A270S/MXC_A27-PCB4.5-270T/lib/hx170dec/include/jpegdeccontainer.h

336 lines
8.6 KiB
C
Raw Normal View History

2025-01-21 16:49:37 +08:00
/*------------------------------------------------------------------------------
-- --
-- This software is confidential and proprietary and may be used --
-- only as expressly authorized by a licensing agreement from --
-- --
-- Hantro Products Oy. --
-- --
-- (C) COPYRIGHT 2006 HANTRO PRODUCTS OY --
-- ALL RIGHTS RESERVED --
-- --
-- The entire notice above must be reproduced --
-- on all copies and should not be removed. --
-- --
--------------------------------------------------------------------------------
--
-- Description : Jpeg Decoder Container
--
--------------------------------------------------------------------------------
--
-- Version control information, please leave untouched.
--
-- $RCSfile: jpegdeccontainer.h,v $
-- $Revision: 1.22 $
-- $Date: 2009/02/16 08:51:06 $
--
------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------
Table of contents
1. Include headers
2. Module defines
3. Data types
4. Function prototypes
------------------------------------------------------------------------------*/
#ifndef JPEGDECCONT_H
#define JPEGDECCONT_H
/*------------------------------------------------------------------------------
1. Include headers
------------------------------------------------------------------------------*/
#include "basetype.h"
#include "jpegdecapi.h"
#include "dwl.h"
#include "deccfg.h"
#include "decppif.h"
/*------------------------------------------------------------------------------
2. Module defines
------------------------------------------------------------------------------*/
#ifdef _ASSERT_USED
#include <assert.h>
#endif
/* macro for assertion, used only if compiler flag _ASSERT_USED is defined */
#ifdef _ASSERT_USED
#define ASSERT(expr) assert(expr)
#else
#define ASSERT(expr)
#endif
#define MIN_NUMBER_OF_COMPONENTS 1
#define MAX_NUMBER_OF_COMPONENTS 3
#define JPEGDEC_X170_MIN_BUFFER 5120
#define JPEGDEC_X170_MAX_BUFFER 16776960
#define JPEGDEC_MAX_SLICE_SIZE 4096
#define JPEGDEC_TABLE_SIZE 544
#define JPEGDEC_MIN_WIDTH 48
#define JPEGDEC_MIN_HEIGHT 48
#define JPEGDEC_MAX_WIDTH 4672
#define JPEGDEC_MAX_HEIGHT 4672
#define JPEGDEC_MAX_PIXEL_AMOUNT 16370688
#define JPEGDEC_MAX_WIDTH_8190 8176
#define JPEGDEC_MAX_HEIGHT_8190 8176
#define JPEGDEC_MAX_PIXEL_AMOUNT_8190 66846976
#define JPEGDEC_MAX_SLICE_SIZE_8190 8100
#define JPEGDEC_MAX_WIDTH_TN 256
#define JPEGDEC_MAX_HEIGHT_TN 256
#define JPEGDEC_YUV400 0
#define JPEGDEC_YUV420 2
#define JPEGDEC_YUV422 3
#define JPEGDEC_YUV444 4
#define JPEGDEC_YUV440 5
#define JPEGDEC_YUV411 6
#define JPEGDEC_BASELINE_TABLE_SIZE 544
#define JPEGDEC_PROGRESSIVE_TABLE_SIZE 576
#define JPEGDEC_QP_BASE 32
#define JPEGDEC_AC1_BASE 48
#define JPEGDEC_AC2_BASE 88
#define JPEGDEC_DC1_BASE 129
#define JPEGDEC_DC2_BASE 132
#define JPEGDEC_DC3_BASE 135
/* progressive */
#define JPEGDEC_COEFF_SIZE 96
/*------------------------------------------------------------------------------
3. Data types
------------------------------------------------------------------------------*/
typedef struct
{
u32 C; /* Component id */
u32 H; /* Horizontal sampling factor */
u32 V; /* Vertical sampling factor */
u32 Tq; /* Quantization table destination selector */
} Components;
typedef struct
{
u8 *pStartOfStream;
u8 *pCurrPos;
u32 streamBus;
u32 bitPosInByte;
u32 streamLength;
u32 readBits;
u32 appnFlag;
u32 thumbnail;
u32 returnSosMarker;
} StreamStorage;
typedef struct
{
u8 *pStartOfImage;
u8 *pLum;
u8 *pCr;
u8 *pCb;
u32 imageReady;
u32 headerReady;
u32 size;
u32 sizeLuma;
u32 sizeChroma;
u32 ready;
u32 columns[MAX_NUMBER_OF_COMPONENTS];
u32 pixelsPerRow[MAX_NUMBER_OF_COMPONENTS];
} ImageData;
typedef struct
{
u32 Lf;
u32 P;
u32 Y;
u32 hwY;
u32 X;
u32 hwX;
u32 Nf; /* Number of components in frame */
u32 codingType;
u32 numMcuInFrame;
u32 numMcuInRow;
u32 mcuNumber;
u32 nextRstNumber;
u32 Ri;
u32 driPeriod;
u32 block;
u32 row;
u32 col;
u32 cIndex;
u32 *pBuffer;
u32 bufferBus;
i32 *pBufferCb;
i32 *pBufferCr;
DWLLinearMem_t pTableBase;
u32 numBlocks[MAX_NUMBER_OF_COMPONENTS];
u32 blocksPerRow[MAX_NUMBER_OF_COMPONENTS];
u32 useAcOffset[MAX_NUMBER_OF_COMPONENTS];
Components component[MAX_NUMBER_OF_COMPONENTS];
} FrameInfo;
typedef struct
{
u32 Ls;
u32 Ns;
u32 Cs[MAX_NUMBER_OF_COMPONENTS]; /* Scan component selector */
u32 Td[MAX_NUMBER_OF_COMPONENTS]; /* Selects table for DC */
u32 Ta[MAX_NUMBER_OF_COMPONENTS]; /* Selects table for AC */
u32 Ss;
u32 Se;
u32 Ah;
u32 Al;
u32 index;
i32 numIdctRows;
i32 pred[MAX_NUMBER_OF_COMPONENTS];
} ScanInfo;
typedef struct
{
u32 sliceHeight;
u32 amountOfQTables;
u32 yCbCrMode;
u32 yCbCr422;
u32 column;
u32 X;
u32 Y;
u32 memSize;
u32 SliceCount;
u32 SliceReadyForPause;
u32 SliceMBCutValue;
u32 pipeline;
u32 userAllocMem;
u32 sliceMbSetValue;
u32 timeout;
u32 rlcMode;
u32 lumaPos;
u32 chromaPos;
u32 sliceStartCount;
u32 amountOfSlices;
u32 noSliceIrqForUser;
u32 sliceLimitReached;
u32 inputBufferEmpty;
u32 fillRight;
u32 fillBottom;
u32 streamEnd;
u32 streamEndFlag;
u32 inputBufferLen;
u32 inputStreaming;
u32 decodedStreamLen;
u32 init;
u32 initThumb;
u32 initBufferSize;
i32 dcRes[MAX_NUMBER_OF_COMPONENTS];
DWLLinearMem_t outLuma;
DWLLinearMem_t outChroma;
DWLLinearMem_t outChroma2;
DWLLinearMem_t givenOutLuma;
DWLLinearMem_t givenOutChroma;
DWLLinearMem_t givenOutChroma2;
i32 pred[MAX_NUMBER_OF_COMPONENTS];
/* progressive parameters */
u32 nonInterleaved;
u32 componentId;
u32 operationType;
u32 operationTypeThumb;
u32 progressiveScanReady;
u32 nonInterleavedScanReady;
u32 allocated;
u32 yCbCrModeOrig;
u32 getInfoYCbCrMode;
u32 components[MAX_NUMBER_OF_COMPONENTS];
DWLLinearMem_t pCoeffBase;
u32 fillX;
u32 fillY;
u32 progressiveFinish;
u32 pfCompId;
u32 pfNeeded[MAX_NUMBER_OF_COMPONENTS];
DWLLinearMem_t tmpStrm;
} DecInfo;
typedef struct
{
DWLLinearMem_t outLumaBuffer;
DWLLinearMem_t outChromaBuffer;
DWLLinearMem_t outChromaBuffer2;
} JpegAsicBuffers;
typedef struct
{
u32 bits[16];
u32 *vals;
u32 tableLength;
u32 start;
u32 last;
} VlcTable;
typedef struct
{
u32 Lh;
VlcTable acTable0;
VlcTable acTable1;
VlcTable acTable2;
VlcTable acTable3;
VlcTable dcTable0;
VlcTable dcTable1;
VlcTable dcTable2;
VlcTable dcTable3;
VlcTable *table;
} HuffmanTables;
typedef struct
{
u32 Lq; /* Quantization table definition length */
u32 table0[64];
u32 table1[64];
u32 table2[64];
u32 table3[64];
u32 *table;
} QuantTables;
typedef struct
{
u32 jpegRegs[DEC_X170_REGISTERS];
u32 asicRunning;
StreamStorage stream;
FrameInfo frame;
ImageData image;
ScanInfo scan;
DecInfo info;
HuffmanTables vlc;
QuantTables quant;
u32 tmpData[64];
u32 is8190;
u32 fuseBurned;
u32 minSupportedWidth;
u32 minSupportedHeight;
u32 maxSupportedWidth;
u32 maxSupportedHeight;
u32 maxSupportedPixelAmount;
u32 maxSupportedSliceSize;
u32 extensionsSupported;
JpegAsicBuffers asicBuff;
DecPpInterface ppControl;
DecPpQuery ppConfigQuery; /* Decoder asks pp info about setup, info stored here */
u32 ppStatus;
const void *dwl; /* DWL instance */
const void *ppInstance;
void (*PPRun) (const void *, DecPpInterface *);
void (*PPEndCallback) (const void *);
void (*PPConfigQuery) (const void *, DecPpQuery *);
} JpegDecContainer;
/*------------------------------------------------------------------------------
4. Function prototypes
------------------------------------------------------------------------------*/
#endif /* #endif JPEGDECDATA_H */