hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
 * 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 "mpp_debug.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, 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__ */