xref: /rockchip-linux_mpp/mpp/vproc/inc/iep_common.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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