android13/hardware/rockchip/libiep/include/iep_common.h

135 lines
4.4 KiB
C
Executable File

/*
* 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__ */