blob: af2020a33441ebfe9759d0a41dc0abc85816d6e5 [file] [log] [blame]
/*------------------------------------------------------------------------------
-- --
-- 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. --
-- --
--------------------------------------------------------------------------------
*/
#ifndef _ENC_ASIC_CONTROLLER_H_
#define _ENC_ASIC_CONTROLLER_H_
#include <stdint.h>
#include "enccfg.h"
#include "vpu_mem.h"
#include "encswhwregisters.h"
/* HW status register bits */
#define ASIC_STATUS_ALL 0x1FD
#define ASIC_STATUS_SLICE_READY 0x100
#define ASIC_STATUS_HW_TIMEOUT 0x040
#define ASIC_STATUS_BUFF_FULL 0x020
#define ASIC_STATUS_HW_RESET 0x010
#define ASIC_STATUS_ERROR 0x008
#define ASIC_STATUS_FRAME_READY 0x004
#define ASIC_IRQ_LINE 0x001
#define ASIC_STATUS_ENABLE 0x001
#define ASIC_H264_BYTE_STREAM 0x00
#define ASIC_H264_NAL_UNIT 0x01
#define ASIC_INPUT_YUV420PLANAR 0x00
#define ASIC_INPUT_YUV420SEMIPLANAR 0x01
#define ASIC_INPUT_YUYV422INTERLEAVED 0x02
#define ASIC_INPUT_UYVY422INTERLEAVED 0x03
#define ASIC_INPUT_RGB565 0x04
#define ASIC_INPUT_RGB555 0x05
#define ASIC_INPUT_RGB444 0x06
#define ASIC_INPUT_RGB888 0x07
#define ASIC_INPUT_RGB101010 0x08
#define ASIC_INPUT_YUYV422TILED 0x09
#define ASIC_PENALTY_UNDEFINED -1
#define ASIC_PENALTY_TABLE_SIZE 128
typedef enum
{
ASIC_VP8 = 1,
ASIC_JPEG = 2,
ASIC_H264 = 3
} asicCodingType_e;
typedef enum
{
ASIC_P_16x16 = 0,
ASIC_P_16x8 = 1,
ASIC_P_8x16 = 2,
ASIC_P_8x8 = 3,
ASIC_I_4x4 = 4,
ASIC_I_16x16 = 5
} asicMbType_e;
typedef enum
{
ASIC_INTER = 0,
ASIC_INTRA = 1,
ASIC_MVC = 2,
ASIC_MVC_REF_MOD = 3
} asicFrameCodingType_e;
typedef struct
{
uint32_t socket;
uint32_t irqDisable;
uint32_t irqInterval;
uint32_t mbsInCol;
uint32_t mbsInRow;
uint32_t qp;
uint32_t qpMin;
uint32_t qpMax;
uint32_t constrainedIntraPrediction;
uint32_t roundingCtrl;
uint32_t frameCodingType;
uint32_t codingType;
uint32_t pixelsOnRow;
uint32_t xFill;
uint32_t yFill;
uint32_t ppsId;
uint32_t idrPicId;
uint32_t frameNum;
uint32_t picInitQp;
int32_t sliceAlphaOffset;
int32_t sliceBetaOffset;
uint32_t filterDisable;
uint32_t transform8x8Mode;
uint32_t enableCabac;
uint32_t cabacInitIdc;
int32_t chromaQpIndexOffset;
uint32_t sliceSizeMbRows;
uint32_t inputImageFormat;
uint32_t inputImageRotation;
uint32_t outputStrmFrmTagOffset;
uint32_t outputStrmBase;
uint32_t outputStrmSize;
uint32_t firstFreeBit;
uint32_t strmStartMSB;
uint32_t strmStartLSB;
uint32_t rlcBase;
uint32_t rlcLimitSpace;
uint32_t sizeTblBase;
uint32_t sliceReadyInterrupt;
uint32_t recWriteDisable;
uint32_t reconImageId;
uint32_t internalImageLumBaseW;
uint32_t internalImageChrBaseW;
uint32_t internalImageLumBaseR[2];
uint32_t internalImageChrBaseR[2];
uint32_t cpDistanceMbs;
uint32_t* cpTargetResults;
const uint32_t* cpTarget;
const int32_t* targetError;
const int32_t* deltaQp;
uint32_t rlcCount;
uint32_t qpSum;
uint32_t h264StrmMode; /* 0 - byte stream, 1 - NAL units */
uint8_t quantTable[8 * 8 * 2];
uint8_t dmvPenalty[ASIC_PENALTY_TABLE_SIZE];
uint8_t dmvQpelPenalty[ASIC_PENALTY_TABLE_SIZE];
uint32_t jpegMode;
uint32_t jpegSliceEnable;
uint32_t jpegRestartInterval;
uint32_t jpegRestartMarker;
uint32_t regMirror[ASIC_SWREG_AMOUNT];
uint32_t inputLumaBaseOffsetVert;
uint32_t h264Inter4x4Disabled;
uint32_t disableQuarterPixelMv;
uint32_t vsNextLumaBase;
uint32_t vsMode;
uint32_t asicCfgReg;
int32_t intra16Favor;
int32_t prevModeFavor;
int32_t interFavor;
int32_t skipPenalty;
int32_t goldenPenalty;
int32_t diffMvPenalty[3];
int32_t madQpDelta;
uint32_t madThreshold;
uint32_t madCount;
uint32_t mvcAnchorPicFlag;
uint32_t mvcPriorityId;
uint32_t mvcViewId;
uint32_t mvcTemporalId;
uint32_t mvcInterViewFlag;
uint32_t cirStart;
uint32_t cirInterval;
uint32_t intraSliceMap1;
uint32_t intraSliceMap2;
uint32_t intraSliceMap3;
uint32_t intraAreaTop;
uint32_t intraAreaLeft;
uint32_t intraAreaBottom;
uint32_t intraAreaRight;
uint32_t roi1Top;
uint32_t roi1Left;
uint32_t roi1Bottom;
uint32_t roi1Right;
uint32_t roi2Top;
uint32_t roi2Left;
uint32_t roi2Bottom;
uint32_t roi2Right;
int32_t roi1DeltaQp;
int32_t roi2DeltaQp;
uint32_t mvOutputBase;
uint32_t cabacCtxBase;
uint32_t probCountBase;
uint32_t segmentMapBase;
uint32_t colorConversionCoeffA;
uint32_t colorConversionCoeffB;
uint32_t colorConversionCoeffC;
uint32_t colorConversionCoeffE;
uint32_t colorConversionCoeffF;
uint32_t rMaskMsb;
uint32_t gMaskMsb;
uint32_t bMaskMsb;
uint32_t partitionOffset[8];
uint32_t partitionBase[8];
uint32_t qpY1QuantDc[4];
uint32_t qpY1QuantAc[4];
uint32_t qpY2QuantDc[4];
uint32_t qpY2QuantAc[4];
uint32_t qpChQuantDc[4];
uint32_t qpChQuantAc[4];
uint32_t qpY1ZbinDc[4];
uint32_t qpY1ZbinAc[4];
uint32_t qpY2ZbinDc[4];
uint32_t qpY2ZbinAc[4];
uint32_t qpChZbinDc[4];
uint32_t qpChZbinAc[4];
uint32_t qpY1RoundDc[4];
uint32_t qpY1RoundAc[4];
uint32_t qpY2RoundDc[4];
uint32_t qpY2RoundAc[4];
uint32_t qpChRoundDc[4];
uint32_t qpChRoundAc[4];
uint32_t qpY1DequantDc[4];
uint32_t qpY1DequantAc[4];
uint32_t qpY2DequantDc[4];
uint32_t qpY2DequantAc[4];
uint32_t qpChDequantDc[4];
uint32_t qpChDequantAc[4];
uint32_t segmentEnable;
uint32_t segmentMapUpdate;
uint32_t mvRefIdx[2];
uint32_t ref2Enable;
uint32_t boolEncValue;
uint32_t boolEncValueBits;
uint32_t boolEncRange;
uint32_t dctPartitions;
uint32_t filterLevel[4];
uint32_t filterSharpness;
uint32_t intraModePenalty[4];
uint32_t intraBmodePenalty[10];
uint32_t zeroMvFavorDiv2;
uint32_t splitMvMode;
uint32_t splitPenalty[4];
int32_t lfRefDelta[4];
int32_t lfModeDelta[4];
} regValues_s;
#define FRAME_HEADER_SIZE 1280
typedef struct
{
regValues_s regs;
VPUMemLinear_t internalImageLuma[3];
VPUMemLinear_t internalImageChroma[4];
VPUMemLinear_t cabacCtx;
VPUMemLinear_t probCount;
VPUMemLinear_t segmentMap;
uint32_t sizeTblSize;
uint32_t traceRecon;
uint8_t frmhdr[FRAME_HEADER_SIZE];
uint32_t frmHdrBufLen;
} asicData_s;
int32_t VP8_EncAsicControllerInit(asicData_s* asic);
int32_t VP8_EncAsicMemAlloc_V2(
asicData_s* asic, uint32_t width, uint32_t height, uint32_t encodingType,
uint32_t numRefBuffsLum, uint32_t numRefBuffsChr);
void VP8_EncAsicMemFree_V2(asicData_s* asic);
void VP8_EncAsicFrameStart(regValues_s* val);
#endif