1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * Copyright 2020 Rockchip Electronics Co. LTD 3*437bfbebSnyanmisaka * 4*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License"); 5*437bfbebSnyanmisaka * you may not use this file except in compliance with the License. 6*437bfbebSnyanmisaka * You may obtain a copy of the License at 7*437bfbebSnyanmisaka * 8*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0 9*437bfbebSnyanmisaka * 10*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software 11*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS, 12*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*437bfbebSnyanmisaka * See the License for the specific language governing permissions and 14*437bfbebSnyanmisaka * limitations under the License. 15*437bfbebSnyanmisaka */ 16*437bfbebSnyanmisaka 17*437bfbebSnyanmisaka #ifndef __IEP_COMMON_H__ 18*437bfbebSnyanmisaka #define __IEP_COMMON_H__ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #include "mpp_debug.h" 21*437bfbebSnyanmisaka 22*437bfbebSnyanmisaka #define IEP_DBG_FUNCTION (0x00000001) 23*437bfbebSnyanmisaka #define IEP_DBG_TRACE (0x00000002) 24*437bfbebSnyanmisaka #define IEP_DBG_IMAGE (0x00000010) 25*437bfbebSnyanmisaka 26*437bfbebSnyanmisaka #define iep_dbg(flag, fmt, ...) _mpp_dbg(iep_debug, flag, "iep:" fmt, ## __VA_ARGS__) 27*437bfbebSnyanmisaka #define iep_dbg_f(flag, fmt, ...) _mpp_dbg_f(iep_debug, flag, fmt, ## __VA_ARGS__) 28*437bfbebSnyanmisaka #define iep_dbg_func(fmt, ...) iep_dbg(IEP_DBG_FUNCTION, fmt, ## __VA_ARGS__) 29*437bfbebSnyanmisaka #define iep_dbg_trace(fmt, ...) iep_dbg(IEP_DBG_TRACE, fmt, ## __VA_ARGS__) 30*437bfbebSnyanmisaka 31*437bfbebSnyanmisaka typedef enum IepCmd_e { 32*437bfbebSnyanmisaka IEP_CMD_INIT, // reset msg to all zero 33*437bfbebSnyanmisaka IEP_CMD_SET_SRC, // config source image info 34*437bfbebSnyanmisaka IEP_CMD_SET_DST, // config destination image info 35*437bfbebSnyanmisaka 36*437bfbebSnyanmisaka // deinterlace command 37*437bfbebSnyanmisaka IEP_CMD_SET_DEI_CFG = 0x0100, // config deinterlace configure 38*437bfbebSnyanmisaka IEP_CMD_SET_DEI_SRC1, // config deinterlace extra source 39*437bfbebSnyanmisaka IEP_CMD_SET_DEI_DST1, // config deinterlace extra destination 40*437bfbebSnyanmisaka IEP_CMD_SET_DEI_SRC2, // in case of iep2 deinterlacing 41*437bfbebSnyanmisaka 42*437bfbebSnyanmisaka // color enhancement command 43*437bfbebSnyanmisaka IEP_CMD_SET_YUV_ENHANCE = 0x0200, // config YUV enhancement parameter 44*437bfbebSnyanmisaka IEP_CMD_SET_RGB_ENHANCE, // config RGB enhancement parameter 45*437bfbebSnyanmisaka 46*437bfbebSnyanmisaka // scale algorithm command 47*437bfbebSnyanmisaka IEP_CMD_SET_SCALE = 0x0300, // config scale algorithm 48*437bfbebSnyanmisaka 49*437bfbebSnyanmisaka // color convert command 50*437bfbebSnyanmisaka IEP_CMD_SET_COLOR_CONVERT = 0x0400, // config color convert parameter 51*437bfbebSnyanmisaka 52*437bfbebSnyanmisaka // hardware trigger command 53*437bfbebSnyanmisaka IEP_CMD_RUN_SYNC = 0x1000, // start sync mode process 54*437bfbebSnyanmisaka IEP_CMD_RUN_ASYNC, // start async mode process 55*437bfbebSnyanmisaka 56*437bfbebSnyanmisaka // hardware capability query command 57*437bfbebSnyanmisaka IEP_CMD_QUERY_CAP = 0x8000, // query iep capability 58*437bfbebSnyanmisaka } IepCmd; 59*437bfbebSnyanmisaka 60*437bfbebSnyanmisaka typedef enum IepFormat_e { 61*437bfbebSnyanmisaka IEP_FORMAT_RGB_BASE = 0x0, 62*437bfbebSnyanmisaka IEP_FORMAT_ARGB_8888 = IEP_FORMAT_RGB_BASE, 63*437bfbebSnyanmisaka IEP_FORMAT_ABGR_8888 = 0x1, 64*437bfbebSnyanmisaka IEP_FORMAT_RGBA_8888 = 0x2, 65*437bfbebSnyanmisaka IEP_FORMAT_BGRA_8888 = 0x3, 66*437bfbebSnyanmisaka IEP_FORMAT_RGB_565 = 0x4, 67*437bfbebSnyanmisaka IEP_FORMAT_BGR_565 = 0x5, 68*437bfbebSnyanmisaka IEP_FORMAT_RGB_BUTT, 69*437bfbebSnyanmisaka 70*437bfbebSnyanmisaka IEP_FORMAT_YUV_BASE = 0x10, 71*437bfbebSnyanmisaka IEP_FORMAT_YCbCr_422_SP = IEP_FORMAT_YUV_BASE, 72*437bfbebSnyanmisaka IEP_FORMAT_YCbCr_422_P = 0x11, 73*437bfbebSnyanmisaka IEP_FORMAT_YCbCr_420_SP = 0x12, 74*437bfbebSnyanmisaka IEP_FORMAT_YCbCr_420_P = 0x13, 75*437bfbebSnyanmisaka IEP_FORMAT_YCrCb_422_SP = 0x14, 76*437bfbebSnyanmisaka IEP_FORMAT_YCrCb_422_P = 0x15, // same as IEP_FORMAT_YCbCr_422_P 77*437bfbebSnyanmisaka IEP_FORMAT_YCrCb_420_SP = 0x16, 78*437bfbebSnyanmisaka IEP_FORMAT_YCrCb_420_P = 0x17, // same as IEP_FORMAT_YCbCr_420_P 79*437bfbebSnyanmisaka IEP_FORMAT_YUV_BUTT, 80*437bfbebSnyanmisaka } IepFormat; 81*437bfbebSnyanmisaka 82*437bfbebSnyanmisaka // iep image for external user 83*437bfbebSnyanmisaka typedef struct IegImg_t { 84*437bfbebSnyanmisaka RK_U16 act_w; // act_width 85*437bfbebSnyanmisaka RK_U16 act_h; // act_height 86*437bfbebSnyanmisaka RK_S16 x_off; // x offset for the vir,word unit 87*437bfbebSnyanmisaka RK_S16 y_off; // y offset for the vir,word unit 88*437bfbebSnyanmisaka 89*437bfbebSnyanmisaka RK_U16 vir_w; // unit in byte 90*437bfbebSnyanmisaka RK_U16 vir_h; // unit in byte 91*437bfbebSnyanmisaka RK_U32 format; // IepFormat 92*437bfbebSnyanmisaka RK_U32 mem_addr; // base address fd 93*437bfbebSnyanmisaka RK_U32 uv_addr; // chroma address fd + (offset << 10) 94*437bfbebSnyanmisaka RK_U32 v_addr; 95*437bfbebSnyanmisaka } IepImg; 96*437bfbebSnyanmisaka 97*437bfbebSnyanmisaka typedef void* IepCtx; 98*437bfbebSnyanmisaka 99*437bfbebSnyanmisaka #ifdef __cplusplus 100*437bfbebSnyanmisaka extern "C" { 101*437bfbebSnyanmisaka #endif 102*437bfbebSnyanmisaka 103*437bfbebSnyanmisaka typedef struct iep_com_ctx_t iep_com_ctx; 104*437bfbebSnyanmisaka 105*437bfbebSnyanmisaka typedef struct iep_com_ops_t { 106*437bfbebSnyanmisaka MPP_RET (*init)(IepCtx *ctx); 107*437bfbebSnyanmisaka MPP_RET (*deinit)(IepCtx ctx); 108*437bfbebSnyanmisaka MPP_RET (*control)(IepCtx ctx, IepCmd cmd, void *param); 109*437bfbebSnyanmisaka MPP_RET (*reset)(IepCtx ctx); 110*437bfbebSnyanmisaka void (*release)(iep_com_ctx *ctx); 111*437bfbebSnyanmisaka } iep_com_ops; 112*437bfbebSnyanmisaka 113*437bfbebSnyanmisaka typedef struct iep_com_ctx_t { 114*437bfbebSnyanmisaka iep_com_ops *ops; 115*437bfbebSnyanmisaka IepCtx priv; 116*437bfbebSnyanmisaka int ver; 117*437bfbebSnyanmisaka } iep_com_ctx; 118*437bfbebSnyanmisaka 119*437bfbebSnyanmisaka struct dev_compatible { 120*437bfbebSnyanmisaka const char *compatible; 121*437bfbebSnyanmisaka iep_com_ctx* (*get)(void); 122*437bfbebSnyanmisaka void (*put)(iep_com_ctx *ctx); 123*437bfbebSnyanmisaka int ver; 124*437bfbebSnyanmisaka }; 125*437bfbebSnyanmisaka 126*437bfbebSnyanmisaka iep_com_ctx* get_iep_ctx(); 127*437bfbebSnyanmisaka void put_iep_ctx(iep_com_ctx *ictx); 128*437bfbebSnyanmisaka extern RK_U32 iep_debug; 129*437bfbebSnyanmisaka 130*437bfbebSnyanmisaka #ifdef __cplusplus 131*437bfbebSnyanmisaka } 132*437bfbebSnyanmisaka #endif 133*437bfbebSnyanmisaka 134*437bfbebSnyanmisaka #endif /* __IEP_API_H__ */ 135