/* * Copyright 2020 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 __IEP_COMMON_H__ #define __IEP_COMMON_H__ #include "rk_type.h" #include "mpp_err.h" #define IEP_DBG_FUNCTION (0x00000001) #define IEP_DBG_TRACE (0x00000002) #define IEP_DBG_IMAGE (0x00000010) #define iep_dbg(flag, fmt, ...) _mpp_dbg(iep_debug, flag, "iep:" fmt, ## __VA_ARGS__) #define iep_dbg_f(flag, fmt, ...) _mpp_dbg_f(iep_debug, flag, fmt, ## __VA_ARGS__) #define iep_dbg_func(fmt, ...) iep_dbg(IEP_DBG_FUNCTION, fmt, ## __VA_ARGS__) #define iep_dbg_trace(fmt, ...) iep_dbg(IEP_DBG_TRACE, fmt, ## __VA_ARGS__) typedef enum IepCmd_e { IEP_CMD_INIT, // reset msg to all zero IEP_CMD_SET_SRC, // config source image info IEP_CMD_SET_DST, // config destination image info // deinterlace command IEP_CMD_SET_DEI_CFG = 0x0100, // config deinterlace configure IEP_CMD_SET_DEI_SRC1, // config deinterlace extra source IEP_CMD_SET_DEI_DST1, // config deinterlace extra destination IEP_CMD_SET_DEI_SRC2, // in case of iep2 deinterlacing // color enhancement command IEP_CMD_SET_YUV_ENHANCE = 0x0200, // config YUV enhancement parameter IEP_CMD_SET_RGB_ENHANCE, // config RGB enhancement parameter // scale algorithm command IEP_CMD_SET_SCALE = 0x0300, // config scale algorithm // color convert command IEP_CMD_SET_COLOR_CONVERT = 0x0400, // config color convert parameter // hardware trigger command IEP_CMD_RUN_SYNC = 0x1000, // start sync mode process IEP_CMD_RUN_ASYNC, // start async mode process // hardware capability query command IEP_CMD_QUERY_CAP = 0x8000, // query iep capability } IepCmd; typedef enum IepFormat_e { IEP_FORMAT_RGB_BASE = 0x0, IEP_FORMAT_ARGB_8888 = IEP_FORMAT_RGB_BASE, IEP_FORMAT_ABGR_8888 = 0x1, IEP_FORMAT_RGBA_8888 = 0x2, IEP_FORMAT_BGRA_8888 = 0x3, IEP_FORMAT_RGB_565 = 0x4, IEP_FORMAT_BGR_565 = 0x5, IEP_FORMAT_RGB_BUTT, IEP_FORMAT_YUV_BASE = 0x10, IEP_FORMAT_YCbCr_422_SP = IEP_FORMAT_YUV_BASE, IEP_FORMAT_YCbCr_422_P = 0x11, IEP_FORMAT_YCbCr_420_SP = 0x12, IEP_FORMAT_YCbCr_420_P = 0x13, IEP_FORMAT_YCrCb_422_SP = 0x14, IEP_FORMAT_YCrCb_422_P = 0x15, // same as IEP_FORMAT_YCbCr_422_P IEP_FORMAT_YCrCb_420_SP = 0x16, IEP_FORMAT_YCrCb_420_P = 0x17, // same as IEP_FORMAT_YCbCr_420_P IEP_FORMAT_YUV_BUTT, } IepFormat; // iep image for external user typedef struct IegImg_t { RK_U16 act_w; // act_width RK_U16 act_h; // act_height RK_S16 x_off; // x offset for the vir,word unit RK_S16 y_off; // y offset for the vir,word unit RK_U16 vir_w; // unit in byte RK_U16 vir_h; // unit in byte RK_U32 format; // IepFormat RK_U32 mem_addr; // base address fd RK_U32 uv_addr; // chroma address fd + (offset << 10) RK_U32 v_addr; } IepImg; typedef void* IepCtx; #ifdef __cplusplus extern "C" { #endif typedef struct iep_com_ctx_t iep_com_ctx; typedef struct iep_com_ops_t { MPP_RET (*init)(IepCtx *ctx); MPP_RET (*deinit)(IepCtx ctx); MPP_RET (*control)(IepCtx ctx, IepCmd cmd, void *param); void (*release)(iep_com_ctx *ctx); } iep_com_ops; typedef struct iep_com_ctx_t { iep_com_ops *ops; IepCtx priv; int ver; } iep_com_ctx; struct dev_compatible { const char *compatible; iep_com_ctx* (*get)(void); void (*put)(iep_com_ctx *ctx); int ver; }; iep_com_ctx* get_iep_ctx(); void put_iep_ctx(iep_com_ctx *ictx); extern RK_U32 iep_debug; #ifdef __cplusplus } #endif #endif /* __IEP_API_H__ */