/*------------------------------------------------------------------------------
|
-- --
|
-- This software is confidential and proprietary and may be used --
|
-- only as expressly authorized by a licensing agreement from --
|
-- --
|
-- Rockchip Products . --
|
-- --
|
-- (C) COPYRIGHT 2014 ROCKCHIP PRODUCTS --
|
-- ALL RIGHTS RESERVED --
|
-- --
|
-- The entire notice above must be reproduced --
|
-- on all copies and should not be removed. --
|
-- --
|
--------------------------------------------------------------------------------
|
--
|
-- Description : The video post processor API
|
--
|
--------------------------------------------------------------------------------
|
--
|
--
|
--
|
------------------------------------------------------------------------------*/
|
|
#ifndef __PPAPI_H__
|
#define __PPAPI_H__
|
|
#ifdef __cplusplus
|
extern "C"
|
{
|
#endif
|
|
#include "vpu_type.h"
|
#include "decapicommon.h"
|
|
#define PP_PIPELINE_DISABLED 0U
|
#define PP_PIPELINED_DEC_TYPE_H264 1U
|
#define PP_PIPELINED_DEC_TYPE_MPEG4 2U
|
#define PP_PIPELINED_DEC_TYPE_JPEG 3U
|
#define PP_PIPELINED_DEC_TYPE_VC1 4U
|
#define PP_PIPELINED_DEC_TYPE_MPEG2 5U
|
#define PP_PIPELINED_DEC_TYPE_VP6 6U
|
#define PP_PIPELINED_DEC_TYPE_AVS 7U /* not supported yet */
|
#define PP_PIPELINED_DEC_TYPE_RV 8U
|
#define PP_PIPELINED_DEC_TYPE_VP8 9U
|
|
#define PP_PIX_FMT_YCBCR_4_0_0 0x080000U
|
|
#define PP_PIX_FMT_YCBCR_4_2_2_INTERLEAVED 0x010001U
|
#define PP_PIX_FMT_YCRYCB_4_2_2_INTERLEAVED 0x010005U
|
#define PP_PIX_FMT_CBYCRY_4_2_2_INTERLEAVED 0x010006U
|
#define PP_PIX_FMT_CRYCBY_4_2_2_INTERLEAVED 0x010007U
|
#define PP_PIX_FMT_YCBCR_4_2_2_SEMIPLANAR 0x010002U
|
|
#define PP_PIX_FMT_YCBCR_4_4_0 0x010004U
|
|
#define PP_PIX_FMT_YCBCR_4_2_0_PLANAR 0x020000U
|
#define PP_PIX_FMT_YCBCR_4_2_0_SEMIPLANAR 0x020001U
|
#define PP_PIX_FMT_YCBCR_4_2_0_TILED 0x020002U
|
|
#define PP_PIX_FMT_YCBCR_4_1_1_SEMIPLANAR 0x100001U
|
#define PP_PIX_FMT_YCBCR_4_4_4_SEMIPLANAR 0x200001U
|
|
#define PP_PIX_FMT_RGB16_CUSTOM 0x040000U
|
#define PP_PIX_FMT_RGB16_5_5_5 0x040001U
|
#define PP_PIX_FMT_RGB16_5_6_5 0x040002U
|
#define PP_PIX_FMT_BGR16_5_5_5 0x040003U
|
#define PP_PIX_FMT_BGR16_5_6_5 0x040004U
|
|
#define PP_PIX_FMT_RGB32_CUSTOM 0x041000U
|
#define PP_PIX_FMT_RGB32 0x041001U
|
#define PP_PIX_FMT_BGR32 0x041002U
|
|
#define PP_YCBCR2RGB_TRANSFORM_CUSTOM 0U
|
#define PP_YCBCR2RGB_TRANSFORM_BT_601 1U
|
#define PP_YCBCR2RGB_TRANSFORM_BT_709 2U
|
|
#define PP_ROTATION_NONE 0U
|
#define PP_ROTATION_RIGHT_90 1U
|
#define PP_ROTATION_LEFT_90 2U
|
#define PP_ROTATION_HOR_FLIP 3U
|
#define PP_ROTATION_VER_FLIP 4U
|
#define PP_ROTATION_180 5U
|
|
#define PP_PIC_FRAME_OR_TOP_FIELD 0U
|
#define PP_PIC_BOT_FIELD 1U
|
#define PP_PIC_TOP_AND_BOT_FIELD 2U
|
#define PP_PIC_TOP_AND_BOT_FIELD_FRAME 3U
|
#define PP_PIC_TOP_FIELD_FRAME 4U
|
#define PP_PIC_BOT_FIELD_FRAME 5U
|
|
#define PP_MAX_MULTIBUFFER 17
|
|
typedef const void *PPInst;
|
|
typedef enum PPResult_ {
|
PP_OK = 0,
|
PP_PARAM_ERROR = -1,
|
PP_MEMFAIL = -4,
|
|
PP_SET_IN_SIZE_INVALID = -64,
|
PP_SET_IN_ADDRESS_INVALID = -65,
|
PP_SET_IN_FORMAT_INVALID = -66,
|
PP_SET_CROP_INVALID = -67,
|
PP_SET_ROTATION_INVALID = -68,
|
PP_SET_OUT_SIZE_INVALID = -69,
|
PP_SET_OUT_ADDRESS_INVALID = -70,
|
PP_SET_OUT_FORMAT_INVALID = -71,
|
PP_SET_VIDEO_ADJUST_INVALID = -72,
|
PP_SET_RGB_BITMASK_INVALID = -73,
|
PP_SET_FRAMEBUFFER_INVALID = -74,
|
PP_SET_MASK1_INVALID = -75,
|
PP_SET_MASK2_INVALID = -76,
|
PP_SET_DEINTERLACE_INVALID = -77,
|
PP_SET_IN_STRUCT_INVALID = -78,
|
PP_SET_IN_RANGE_MAP_INVALID = -79,
|
PP_SET_ABLEND_UNSUPPORTED = -80,
|
PP_SET_DEINTERLACING_UNSUPPORTED = -81,
|
PP_SET_DITHERING_UNSUPPORTED = -82,
|
PP_SET_SCALING_UNSUPPORTED = -83,
|
|
PP_BUSY = -128,
|
PP_HW_BUS_ERROR = -256,
|
PP_HW_TIMEOUT = -257,
|
PP_DWL_ERROR = -258,
|
PP_SYSTEM_ERROR = -259,
|
PP_DEC_COMBINED_MODE_ERROR = -512,
|
PP_DEC_RUNTIME_ERROR = -513
|
} PPResult;
|
|
typedef struct PPInImage_ {
|
RK_U32 pixFormat;
|
RK_U32 picStruct;
|
RK_U32 videoRange;
|
RK_U32 width;
|
RK_U32 height;
|
RK_U32 bufferBusAddr;
|
RK_U32 bufferCbBusAddr;
|
RK_U32 bufferCrBusAddr;
|
RK_U32 bufferBusAddrBot;
|
RK_U32 bufferBusAddrChBot;
|
RK_U32 vc1MultiResEnable;
|
RK_U32 vc1RangeRedFrm;
|
RK_U32 vc1RangeMapYEnable;
|
RK_U32 vc1RangeMapYCoeff;
|
RK_U32 vc1RangeMapCEnable;
|
RK_U32 vc1RangeMapCCoeff;
|
} PPInImage;
|
|
typedef struct PPOutImage_ {
|
RK_U32 pixFormat;
|
RK_U32 width;
|
RK_U32 height;
|
RK_U32 bufferBusAddr;
|
RK_U32 bufferChromaBusAddr;
|
} PPOutImage;
|
|
typedef struct PPRgbTransform_ {
|
RK_U32 a;
|
RK_U32 b;
|
RK_U32 c;
|
RK_U32 d;
|
RK_U32 e;
|
} PPRgbTransform;
|
|
typedef struct PPRgbBitmask_ {
|
RK_U32 maskR;
|
RK_U32 maskG;
|
RK_U32 maskB;
|
RK_U32 maskAlpha;
|
} PPRgbBitmask;
|
|
typedef struct PPOutRgb_ {
|
RK_U32 rgbTransform;
|
RK_S32 contrast;
|
RK_S32 brightness;
|
RK_S32 saturation;
|
RK_U32 alpha;
|
RK_U32 transparency;
|
PPRgbTransform rgbTransformCoeffs;
|
PPRgbBitmask rgbBitmask;
|
RK_U32 ditheringEnable;
|
} PPOutRgb;
|
|
typedef struct PPInCropping_ {
|
RK_U32 enable;
|
/* NOTE: these are coordinates relative to the input picture */
|
RK_U32 originX;
|
RK_U32 originY;
|
RK_U32 height;
|
RK_U32 width;
|
} PPInCropping;
|
|
typedef struct PPOutMask1_ {
|
RK_U32 enable;
|
/* NOTE: these are coordinates relative to the output image */
|
RK_S32 originX;
|
RK_S32 originY;
|
RK_U32 height;
|
RK_U32 width;
|
RK_U32 alphaBlendEna;
|
RK_U32 blendComponentBase;
|
} PPOutMask1;
|
|
typedef struct PPOutMask2_ {
|
RK_U32 enable;
|
/* NOTE: these are coordinates relative to the output image */
|
RK_S32 originX;
|
RK_S32 originY;
|
RK_U32 height;
|
RK_U32 width;
|
RK_U32 alphaBlendEna;
|
RK_U32 blendComponentBase;
|
} PPOutMask2;
|
|
typedef struct PPOutFrameBuffer_ {
|
RK_U32 enable;
|
/* NOTE: these are coordinates relative to the framebuffer */
|
RK_S32 writeOriginX;
|
RK_S32 writeOriginY;
|
RK_U32 frameBufferWidth;
|
RK_U32 frameBufferHeight;
|
} PPOutFrameBuffer;
|
|
typedef struct PPInRotation_ {
|
RK_U32 rotation;
|
} PPInRotation;
|
|
typedef struct PPOutDeinterlace_ {
|
RK_U32 enable;
|
} PPOutDeinterlace;
|
|
typedef struct PPConfig_ {
|
PPInImage ppInImg;
|
PPInCropping ppInCrop;
|
PPInRotation ppInRotation;
|
PPOutImage ppOutImg;
|
PPOutRgb ppOutRgb;
|
PPOutMask1 ppOutMask1;
|
PPOutMask2 ppOutMask2;
|
PPOutFrameBuffer ppOutFrmBuffer;
|
PPOutDeinterlace ppOutDeinterlace;
|
} PPConfig;
|
|
/* Version information */
|
typedef struct PPApiVersion_ {
|
RK_U32 major; /* PP API major version */
|
RK_U32 minor; /* PP API minor version */
|
} PPApiVersion;
|
|
typedef struct PPBuild_ {
|
RK_U32 swBuild; /* Software build ID */
|
RK_U32 hwBuild; /* Hardware build ID */
|
DecHwConfig hwConfig; /* hardware supported configuration */
|
} PPBuild;
|
|
typedef struct PPOutput_ {
|
RK_U32 bufferBusAddr;
|
RK_U32 bufferChromaBusAddr;
|
} PPOutput;
|
|
typedef struct PPOutputBuffers_ {
|
RK_U32 nbrOfBuffers;
|
PPOutput ppOutputBuffers[PP_MAX_MULTIBUFFER];
|
} PPOutputBuffers;
|
|
/*------------------------------------------------------------------------------
|
Prototypes of PP API functions
|
------------------------------------------------------------------------------*/
|
PPResult PPInit(PPInst * pPostPInst);
|
|
PPResult PPDecCombinedModeEnable(PPInst postPInst, const void *pDecInst,
|
RK_U32 decType);
|
|
PPResult PPDecCombinedModeDisable(PPInst postPInst, const void *pDecInst);
|
|
PPResult PPGetConfig(PPInst postPInst, PPConfig * pPpConf);
|
|
PPResult PPSetConfig(PPInst postPInst, PPConfig * pPpConf);
|
|
PPResult PPDecSetMultipleOutput(PPInst postPInst,
|
const PPOutputBuffers * pBuffers);
|
|
PPResult PPGetNextOutput(PPInst postPInst, PPOutput * pOut);
|
|
void PPRelease(PPInst pPpInst);
|
|
PPResult PPGetResult(PPInst postPInst);
|
|
PPApiVersion PPGetAPIVersion(void);
|
|
PPBuild PPGetBuild(void);
|
|
void PPTrace(const char *string);
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#endif /* __PPAPI_H__ */
|