xref: /rockchip-linux_mpp/mpp/vproc/inc/iep_api.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2015 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_API_H__
18*437bfbebSnyanmisaka #define __IEP_API_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "rk_type.h"
21*437bfbebSnyanmisaka #include "mpp_err.h"
22*437bfbebSnyanmisaka 
23*437bfbebSnyanmisaka #include "iep_common.h"
24*437bfbebSnyanmisaka 
25*437bfbebSnyanmisaka /*
26*437bfbebSnyanmisaka  * IepCmdParamSetSrc is parameter for:
27*437bfbebSnyanmisaka  * IEP_CMD_SET_SRC
28*437bfbebSnyanmisaka  * IEP_CMD_SET_DST
29*437bfbebSnyanmisaka  * IEP_CMD_SET_DEI_SRC1
30*437bfbebSnyanmisaka  * IEP_CMD_SET_DEI_DST1
31*437bfbebSnyanmisaka  */
32*437bfbebSnyanmisaka typedef struct IepCmdParamImage_t {
33*437bfbebSnyanmisaka     IepImg  image;
34*437bfbebSnyanmisaka } IepCmdParamImage;
35*437bfbebSnyanmisaka 
36*437bfbebSnyanmisaka typedef enum IepDeiMode_e {
37*437bfbebSnyanmisaka     IEP_DEI_MODE_DISABLE,
38*437bfbebSnyanmisaka     IEP_DEI_MODE_I2O1,
39*437bfbebSnyanmisaka     IEP_DEI_MODE_I4O1,
40*437bfbebSnyanmisaka     IEP_DEI_MODE_I4O2,
41*437bfbebSnyanmisaka     IEP_DEI_MODE_BYPASS,
42*437bfbebSnyanmisaka     IEP_DEI_MODE_BUTT,
43*437bfbebSnyanmisaka } IepDeiMode;
44*437bfbebSnyanmisaka 
45*437bfbebSnyanmisaka typedef enum IepDeiFldOrder {
46*437bfbebSnyanmisaka     IEP_DEI_FLD_ORDER_TOP_FIRST,
47*437bfbebSnyanmisaka     IEP_DEI_FLD_ORDER_BOT_FIRST,
48*437bfbebSnyanmisaka     IEP_DEI_FLD_ORDER_BUTT,
49*437bfbebSnyanmisaka } IepDeiFldOrder;
50*437bfbebSnyanmisaka 
51*437bfbebSnyanmisaka /* IepCmdParamDeiCfg is parameter for IEP_CMD_SET_DEI_CFG */
52*437bfbebSnyanmisaka typedef struct IepCmdParamDeiCfg_t {
53*437bfbebSnyanmisaka     IepDeiMode      dei_mode;
54*437bfbebSnyanmisaka     IepDeiFldOrder  dei_field_order;
55*437bfbebSnyanmisaka 
56*437bfbebSnyanmisaka     RK_U32          dei_high_freq_en;
57*437bfbebSnyanmisaka     RK_U32          dei_high_freq_fct;  // [0, 127]
58*437bfbebSnyanmisaka 
59*437bfbebSnyanmisaka     RK_U32          dei_ei_mode;        // deinterlace edge interpolation 0: disable, 1: enable
60*437bfbebSnyanmisaka     RK_U32          dei_ei_smooth;      // deinterlace edge interpolation for smooth effect 0: disable, 1: enable
61*437bfbebSnyanmisaka     RK_U32          dei_ei_sel;         // deinterlace edge interpolation select
62*437bfbebSnyanmisaka     RK_U32          dei_ei_radius;      // deinterlace edge interpolation radius [0, 3]
63*437bfbebSnyanmisaka } IepCmdParamDeiCfg;
64*437bfbebSnyanmisaka 
65*437bfbebSnyanmisaka typedef enum IepVideoMode_e {
66*437bfbebSnyanmisaka     IEP_VIDEO_MODE_BLACK_SCREEN,
67*437bfbebSnyanmisaka     IEP_VIDEO_MODE_BLUE_SCREEN,
68*437bfbebSnyanmisaka     IEP_VIDEO_MODE_COLOR_BAR,
69*437bfbebSnyanmisaka     IEP_VIDEO_MODE_NORMAL_VIDEO
70*437bfbebSnyanmisaka } IepVideoMode;
71*437bfbebSnyanmisaka 
72*437bfbebSnyanmisaka /* IepCmdParamYuvEnhance is parameter for IEP_CMD_SET_YUV_ENHANCE */
73*437bfbebSnyanmisaka typedef struct IepCmdParamYuvEnhance_t {
74*437bfbebSnyanmisaka     float           saturation;         // [0, 1.992]
75*437bfbebSnyanmisaka     float           contrast;           // [0, 1.992]
76*437bfbebSnyanmisaka     RK_S8           brightness;         // [-32, 31]
77*437bfbebSnyanmisaka     float           hue_angle;          // [-30, 30]
78*437bfbebSnyanmisaka     IepVideoMode    video_mode;
79*437bfbebSnyanmisaka     RK_U8           color_bar_y;        // [0, 127]
80*437bfbebSnyanmisaka     RK_U8           color_bar_u;        // [0, 127]
81*437bfbebSnyanmisaka     RK_U8           color_bar_v;        // [0, 127]
82*437bfbebSnyanmisaka } IepCmdParamYuvEnhance;
83*437bfbebSnyanmisaka 
84*437bfbebSnyanmisaka typedef enum IepRgbEnhanceMode_e {
85*437bfbebSnyanmisaka     IEP_RGB_ENHANCE_MODE_NO_OPERATION,
86*437bfbebSnyanmisaka     IEP_RGB_ENHANCE_MODE_DENOISE,
87*437bfbebSnyanmisaka     IEP_RGB_ENHANCE_MODE_DETAIL_ENHANCE,
88*437bfbebSnyanmisaka     IEP_RGB_ENHANCE_MODE_EDGE_ENHANCE
89*437bfbebSnyanmisaka } IepRgbEnhanceMode;
90*437bfbebSnyanmisaka 
91*437bfbebSnyanmisaka typedef enum IepRgbEnhanceOrder_e {
92*437bfbebSnyanmisaka     IEP_RGB_ENHANCE_ORDER_CG_DDE,       // CG(Contrast & Gammar) prior to DDE (De-noise, Detail & Edge Enhance)
93*437bfbebSnyanmisaka     IEP_RGB_ENHANCE_ORDER_DDE_CG        // DDE prior to CG
94*437bfbebSnyanmisaka } IepRgbEnhanceOrder;
95*437bfbebSnyanmisaka 
96*437bfbebSnyanmisaka /* IepCmdParamRgbEnhance is parameter for IEP_CMD_SET_RGB_ENHANCE */
97*437bfbebSnyanmisaka typedef struct IepCmdParamRgbEnhance {
98*437bfbebSnyanmisaka     float               coe;            // [0, 3.96875]
99*437bfbebSnyanmisaka     IepRgbEnhanceMode   mode;
100*437bfbebSnyanmisaka     RK_U8               cg_en;          // sw_rgb_con_gam_en
101*437bfbebSnyanmisaka     double              cg_rr;
102*437bfbebSnyanmisaka     double              cg_rg;
103*437bfbebSnyanmisaka     double              cg_rb;
104*437bfbebSnyanmisaka     IepRgbEnhanceOrder  order;
105*437bfbebSnyanmisaka 
106*437bfbebSnyanmisaka     /// more than this value considered as detail, and less than this value considered as noise.
107*437bfbebSnyanmisaka     RK_S32              threshold;      // [0, 255]
108*437bfbebSnyanmisaka 
109*437bfbebSnyanmisaka     /// combine the original pixel and enhanced pixel
110*437bfbebSnyanmisaka     /// if (enh_alpha_num / enh_alpha_base <= 1 ) enh_alpha_base = 8, else enh_alpha_base = 4
111*437bfbebSnyanmisaka     /// (1/8 ... 8/8) (5/4 ... 24/4)
112*437bfbebSnyanmisaka     RK_S32              alpha_num;      // [0, 24]
113*437bfbebSnyanmisaka     RK_S32              alpha_base;     // {4, 8}
114*437bfbebSnyanmisaka     RK_S32              radius;         // [1, 4]
115*437bfbebSnyanmisaka } IepCmdParamRgbEnhance;
116*437bfbebSnyanmisaka 
117*437bfbebSnyanmisaka typedef enum IepScaleAlg_e {
118*437bfbebSnyanmisaka     IEP_SCALE_ALG_HERMITE,
119*437bfbebSnyanmisaka     IEP_SCALE_ALG_SPLINE,
120*437bfbebSnyanmisaka     IEP_SCALE_ALG_CATROM,
121*437bfbebSnyanmisaka     IEP_SCALE_ALG_MITCHELL
122*437bfbebSnyanmisaka } IepScaleAlg;
123*437bfbebSnyanmisaka 
124*437bfbebSnyanmisaka /* IepCmdParamScale is parameter for IEP_CMD_SET_SCALE */
125*437bfbebSnyanmisaka typedef struct IepCmdParamScale_t {
126*437bfbebSnyanmisaka     IepScaleAlg         scale_alg;
127*437bfbebSnyanmisaka } IepCmdParamScale;
128*437bfbebSnyanmisaka 
129*437bfbebSnyanmisaka typedef enum IepColorConvertMode_e {
130*437bfbebSnyanmisaka     IEP_COLOR_MODE_BT601_L,
131*437bfbebSnyanmisaka     IEP_COLOR_MODE_BT601_F,
132*437bfbebSnyanmisaka     IEP_COLOR_MODE_BT709_L,
133*437bfbebSnyanmisaka     IEP_COLOR_MODE_BT709_F
134*437bfbebSnyanmisaka } IepColorConvertMode;
135*437bfbebSnyanmisaka 
136*437bfbebSnyanmisaka /* IepCmdParamColorConvert is parameter for IEP_CMD_SET_COLOR_CONVERT */
137*437bfbebSnyanmisaka typedef struct IepCmdParamColorConvert_t {
138*437bfbebSnyanmisaka     IepColorConvertMode rgb2yuv_mode;
139*437bfbebSnyanmisaka     IepColorConvertMode yuv2rgb_mode;
140*437bfbebSnyanmisaka     RK_U8               rgb2yuv_input_clip; // 0:R/G/B [0, 255], 1:R/G/B [16, 235]
141*437bfbebSnyanmisaka     RK_U8               yuv2rgb_input_clip; // 0:Y/U/V [0, 255], 1:Y [16, 235] U/V [16, 240]
142*437bfbebSnyanmisaka     RK_U8               global_alpha_value; // global alpha value for output ARGB
143*437bfbebSnyanmisaka     RK_U8               dither_up_en;
144*437bfbebSnyanmisaka     RK_U8               dither_down_en;
145*437bfbebSnyanmisaka } IepCmdParamColorConvert;
146*437bfbebSnyanmisaka 
147*437bfbebSnyanmisaka /* IepCap is parameter for IEP_CMD_QUERY_CAP */
148*437bfbebSnyanmisaka typedef struct IepCap_t {
149*437bfbebSnyanmisaka     RK_U8   scaling_supported;
150*437bfbebSnyanmisaka     RK_U8   i4_deinterlace_supported;
151*437bfbebSnyanmisaka     RK_U8   i2_deinterlace_supported;
152*437bfbebSnyanmisaka     RK_U8   compression_noise_reduction_supported;
153*437bfbebSnyanmisaka     RK_U8   sampling_noise_reduction_supported;
154*437bfbebSnyanmisaka     RK_U8   hsb_enhancement_supported;
155*437bfbebSnyanmisaka     RK_U8   cg_enhancement_supported;
156*437bfbebSnyanmisaka     RK_U8   direct_path_supported;
157*437bfbebSnyanmisaka     RK_U16  max_dynamic_width;
158*437bfbebSnyanmisaka     RK_U16  max_dynamic_height;
159*437bfbebSnyanmisaka     RK_U16  max_static_width;
160*437bfbebSnyanmisaka     RK_U16  max_static_height;
161*437bfbebSnyanmisaka     RK_U8   max_enhance_radius;
162*437bfbebSnyanmisaka } IepCap;
163*437bfbebSnyanmisaka 
164*437bfbebSnyanmisaka typedef void* IepCtx;
165*437bfbebSnyanmisaka 
166*437bfbebSnyanmisaka #ifdef __cplusplus
167*437bfbebSnyanmisaka extern "C" {
168*437bfbebSnyanmisaka #endif
169*437bfbebSnyanmisaka 
170*437bfbebSnyanmisaka MPP_RET iep_init(IepCtx *ctx);
171*437bfbebSnyanmisaka MPP_RET iep_deinit(IepCtx ctx);
172*437bfbebSnyanmisaka MPP_RET iep_control(IepCtx ctx, IepCmd cmd, void *param);
173*437bfbebSnyanmisaka 
174*437bfbebSnyanmisaka iep_com_ctx* rockchip_iep_api_alloc_ctx(void);
175*437bfbebSnyanmisaka void rockchip_iep_api_release_ctx(iep_com_ctx *com_ctx);
176*437bfbebSnyanmisaka 
177*437bfbebSnyanmisaka #ifdef __cplusplus
178*437bfbebSnyanmisaka }
179*437bfbebSnyanmisaka #endif
180*437bfbebSnyanmisaka 
181*437bfbebSnyanmisaka #endif /* __IEP_API_H__ */
182