/* 
 | 
 * Copyright 2015 Rockchip Electronics Co. LTD 
 | 
 * 
 | 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 | 
 * you may not use this file except in compliance with the License. 
 | 
 * You may obtain a copy of the License at 
 | 
 * 
 | 
 *      http://www.apache.org/licenses/LICENSE-2.0 
 | 
 * 
 | 
 * Unless required by applicable law or agreed to in writing, software 
 | 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 | 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 | 
 * See the License for the specific language governing permissions and 
 | 
 * limitations under the License. 
 | 
 */ 
 | 
  
 | 
#ifndef __VPU_H__ 
 | 
#define __VPU_H__ 
 | 
  
 | 
#ifdef __cplusplus 
 | 
extern "C" { 
 | 
#endif 
 | 
  
 | 
#include "rk_type.h" 
 | 
  
 | 
#define VPU_SUCCESS                     (0) 
 | 
#define VPU_FAILURE                     (-1) 
 | 
  
 | 
#define VPU_HW_WAIT_OK                  VPU_SUCCESS 
 | 
#define VPU_HW_WAIT_ERROR               VPU_FAILURE 
 | 
#define VPU_HW_WAIT_TIMEOUT             1 
 | 
  
 | 
// vpu decoder 60 registers, size 240B 
 | 
#define VPU_REG_NUM_DEC                 (60) 
 | 
// vpu post processor 41 registers, size 164B 
 | 
#define VPU_REG_NUM_PP                  (41) 
 | 
// vpu decoder + post processor 101 registers, size 404B 
 | 
#define VPU_REG_NUM_DEC_PP              (VPU_REG_NUM_DEC+VPU_REG_NUM_PP) 
 | 
// vpu encoder 96 registers, size 384B 
 | 
#define VPU_REG_NUM_ENC                 (96) 
 | 
  
 | 
typedef enum { 
 | 
    VPU_ENC                 = 0x0, 
 | 
    VPU_DEC                 = 0x1, 
 | 
    VPU_PP                  = 0x2, 
 | 
    VPU_DEC_PP              = 0x3, 
 | 
    VPU_DEC_HEVC            = 0x4, 
 | 
    VPU_DEC_RKV             = 0x5, 
 | 
    VPU_ENC_RKV             = 0x6, 
 | 
    VPU_DEC_AVS             = 0x7, 
 | 
    VPU_ENC_VEPU22          = 0x8, 
 | 
    VPU_TYPE_BUTT           , 
 | 
} VPU_CLIENT_TYPE; 
 | 
  
 | 
/* Hardware decoder configuration description */ 
 | 
  
 | 
typedef struct VPUHwDecConfig { 
 | 
    RK_U32 maxDecPicWidth;         /* Maximum video decoding width supported  */ 
 | 
    RK_U32 maxPpOutPicWidth;       /* Maximum output width of Post-Processor */ 
 | 
    RK_U32 h264Support;            /* HW supports h.264 */ 
 | 
    RK_U32 jpegSupport;            /* HW supports JPEG */ 
 | 
    RK_U32 mpeg4Support;           /* HW supports MPEG-4 */ 
 | 
    RK_U32 customMpeg4Support;     /* HW supports custom MPEG-4 features */ 
 | 
    RK_U32 vc1Support;             /* HW supports VC-1 Simple */ 
 | 
    RK_U32 mpeg2Support;           /* HW supports MPEG-2 */ 
 | 
    RK_U32 ppSupport;              /* HW supports post-processor */ 
 | 
    RK_U32 ppConfig;               /* HW post-processor functions bitmask */ 
 | 
    RK_U32 sorensonSparkSupport;   /* HW supports Sorenson Spark */ 
 | 
    RK_U32 refBufSupport;          /* HW supports reference picture buffering */ 
 | 
    RK_U32 vp6Support;             /* HW supports VP6 */ 
 | 
    RK_U32 vp7Support;             /* HW supports VP7 */ 
 | 
    RK_U32 vp8Support;             /* HW supports VP8 */ 
 | 
    RK_U32 avsSupport;             /* HW supports AVS */ 
 | 
    RK_U32 jpegESupport;           /* HW supports JPEG extensions */ 
 | 
    RK_U32 rvSupport;              /* HW supports REAL */ 
 | 
    RK_U32 mvcSupport;             /* HW supports H264 MVC extension */ 
 | 
} VPUHwDecConfig_t; 
 | 
  
 | 
/* Hardware encoder configuration description */ 
 | 
  
 | 
typedef struct VPUHwEndConfig { 
 | 
    RK_U32 maxEncodedWidth;        /* Maximum supported width for video encoding (not JPEG) */ 
 | 
    RK_U32 h264Enabled;            /* HW supports H.264 */ 
 | 
    RK_U32 jpegEnabled;            /* HW supports JPEG */ 
 | 
    RK_U32 mpeg4Enabled;           /* HW supports MPEG-4 */ 
 | 
    RK_U32 vsEnabled;              /* HW supports video stabilization */ 
 | 
    RK_U32 rgbEnabled;             /* HW supports RGB input */ 
 | 
    RK_U32 reg_size;                /* HW bus type in use */ 
 | 
    RK_U32 reserv[2]; 
 | 
} VPUHwEncConfig_t; 
 | 
  
 | 
typedef enum { 
 | 
    // common command 
 | 
    VPU_CMD_REGISTER            , 
 | 
    VPU_CMD_REGISTER_ACK_OK     , 
 | 
    VPU_CMD_REGISTER_ACK_FAIL   , 
 | 
    VPU_CMD_UNREGISTER          , 
 | 
  
 | 
    VPU_SEND_CONFIG             , 
 | 
    VPU_SEND_CONFIG_ACK_OK      , 
 | 
    VPU_SEND_CONFIG_ACK_FAIL    , 
 | 
  
 | 
    VPU_GET_HW_INFO             , 
 | 
    VPU_GET_HW_INFO_ACK_OK      , 
 | 
    VPU_GET_HW_INFO_ACK_FAIL    , 
 | 
  
 | 
    VPU_CMD_BUTT                , 
 | 
} VPU_CMD_TYPE; 
 | 
  
 | 
int VPUClientInit(VPU_CLIENT_TYPE type); 
 | 
RK_S32 VPUClientRelease(int socket); 
 | 
RK_S32 VPUClientSendReg(int socket, RK_U32 *regs, RK_U32 nregs); 
 | 
RK_S32 VPUClientSendReg2(RK_S32 socket, RK_S32 offset, RK_S32 size, void *param); 
 | 
RK_S32 VPUClientWaitResult(int socket, RK_U32 *regs, RK_U32 nregs, VPU_CMD_TYPE *cmd, RK_S32 *len); 
 | 
RK_S32 VPUClientGetHwCfg(int socket, RK_U32 *cfg, RK_U32 cfg_size); 
 | 
RK_S32 VPUClientGetIOMMUStatus(); 
 | 
RK_U32 VPUCheckSupportWidth(); 
 | 
  
 | 
#ifdef __cplusplus 
 | 
} 
 | 
#endif 
 | 
  
 | 
#endif /* __VPU_H__ */ 
 |