xref: /rockchip-linux_mpp/mpp/vproc/inc/iep2_api.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 __IEP2_API_H__
18*437bfbebSnyanmisaka #define __IEP2_API_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include <stdint.h>
21*437bfbebSnyanmisaka #include <stdbool.h>
22*437bfbebSnyanmisaka 
23*437bfbebSnyanmisaka #include "iep_common.h"
24*437bfbebSnyanmisaka 
25*437bfbebSnyanmisaka enum IEP2_FIELD_ORDER {
26*437bfbebSnyanmisaka     IEP2_FIELD_ORDER_TFF,
27*437bfbebSnyanmisaka     IEP2_FIELD_ORDER_BFF,
28*437bfbebSnyanmisaka     IEP2_FIELD_ORDER_UND
29*437bfbebSnyanmisaka };
30*437bfbebSnyanmisaka 
31*437bfbebSnyanmisaka enum IEP2_FF_MODE {
32*437bfbebSnyanmisaka     IEP2_FF_MODE_FRAME,
33*437bfbebSnyanmisaka     IEP2_FF_MODE_FIELD,
34*437bfbebSnyanmisaka     IEP2_FF_MODE_UND
35*437bfbebSnyanmisaka };
36*437bfbebSnyanmisaka 
37*437bfbebSnyanmisaka enum IEP2_FMT {
38*437bfbebSnyanmisaka     IEP2_FMT_YUV422 = 2,
39*437bfbebSnyanmisaka     IEP2_FMT_YUV420
40*437bfbebSnyanmisaka };
41*437bfbebSnyanmisaka 
42*437bfbebSnyanmisaka enum IEP2_YUV_SWAP {
43*437bfbebSnyanmisaka     IEP2_YUV_SWAP_SP_UV,
44*437bfbebSnyanmisaka     IEP2_YUV_SWAP_SP_VU,
45*437bfbebSnyanmisaka     IEP2_YUV_SWAP_P0,
46*437bfbebSnyanmisaka     IEP2_YUV_SWAP_P
47*437bfbebSnyanmisaka };
48*437bfbebSnyanmisaka 
49*437bfbebSnyanmisaka enum IEP2_DIL_MODE {
50*437bfbebSnyanmisaka     IEP2_DIL_MODE_DISABLE,
51*437bfbebSnyanmisaka     IEP2_DIL_MODE_I5O2,
52*437bfbebSnyanmisaka     IEP2_DIL_MODE_I5O1T,
53*437bfbebSnyanmisaka     IEP2_DIL_MODE_I5O1B,
54*437bfbebSnyanmisaka     IEP2_DIL_MODE_I2O2,
55*437bfbebSnyanmisaka     IEP2_DIL_MODE_I1O1T,
56*437bfbebSnyanmisaka     IEP2_DIL_MODE_I1O1B,
57*437bfbebSnyanmisaka     IEP2_DIL_MODE_PD,
58*437bfbebSnyanmisaka     IEP2_DIL_MODE_BYPASS,
59*437bfbebSnyanmisaka     IEP2_DIL_MODE_DECT
60*437bfbebSnyanmisaka };
61*437bfbebSnyanmisaka 
62*437bfbebSnyanmisaka enum IEP2_OUT_MODE {
63*437bfbebSnyanmisaka     IEP2_OUT_MODE_LINE,
64*437bfbebSnyanmisaka     IEP2_OUT_MODE_TILE
65*437bfbebSnyanmisaka };
66*437bfbebSnyanmisaka 
67*437bfbebSnyanmisaka enum IEP2_PARAM_TYPE {
68*437bfbebSnyanmisaka     IEP2_PARAM_TYPE_COM,
69*437bfbebSnyanmisaka     IEP2_PARAM_TYPE_MODE,
70*437bfbebSnyanmisaka     IEP2_PARAM_TYPE_MD,
71*437bfbebSnyanmisaka     IEP2_PARAM_TYPE_DECT,
72*437bfbebSnyanmisaka     IEP2_PARAM_TYPE_OSD,
73*437bfbebSnyanmisaka     IEP2_PARAM_TYPE_ME,
74*437bfbebSnyanmisaka     IEP2_PARAM_TYPE_EEDI,
75*437bfbebSnyanmisaka     IEP2_PARAM_TYPE_BLE,
76*437bfbebSnyanmisaka     IEP2_PARAM_TYPE_COMB,
77*437bfbebSnyanmisaka     IEP2_PARAM_TYPE_ROI
78*437bfbebSnyanmisaka };
79*437bfbebSnyanmisaka 
80*437bfbebSnyanmisaka // Pulldown compose flag
81*437bfbebSnyanmisaka enum PD_COMP_FLAG {
82*437bfbebSnyanmisaka     PD_COMP_FLAG_CC,
83*437bfbebSnyanmisaka     PD_COMP_FLAG_CN,
84*437bfbebSnyanmisaka     PD_COMP_FLAG_NC,
85*437bfbebSnyanmisaka     PD_COMP_FLAG_NON
86*437bfbebSnyanmisaka };
87*437bfbebSnyanmisaka 
88*437bfbebSnyanmisaka enum PD_TYPES {
89*437bfbebSnyanmisaka     PD_TYPES_3_2_3_2,
90*437bfbebSnyanmisaka     PD_TYPES_2_3_2_3,
91*437bfbebSnyanmisaka     PD_TYPES_2_3_3_2,
92*437bfbebSnyanmisaka     PD_TYPES_3_2_2_3,
93*437bfbebSnyanmisaka     PD_TYPES_UNKNOWN
94*437bfbebSnyanmisaka };
95*437bfbebSnyanmisaka 
96*437bfbebSnyanmisaka union iep2_api_content {
97*437bfbebSnyanmisaka     struct {
98*437bfbebSnyanmisaka         enum IEP2_FMT sfmt;
99*437bfbebSnyanmisaka         enum IEP2_YUV_SWAP sswap;
100*437bfbebSnyanmisaka         enum IEP2_FMT dfmt;
101*437bfbebSnyanmisaka         enum IEP2_YUV_SWAP dswap;
102*437bfbebSnyanmisaka         int width;
103*437bfbebSnyanmisaka         int height;
104*437bfbebSnyanmisaka         int hor_stride;
105*437bfbebSnyanmisaka     } com;
106*437bfbebSnyanmisaka 
107*437bfbebSnyanmisaka     struct {
108*437bfbebSnyanmisaka         enum IEP2_DIL_MODE dil_mode;
109*437bfbebSnyanmisaka         enum IEP2_OUT_MODE out_mode;
110*437bfbebSnyanmisaka         enum IEP2_FIELD_ORDER dil_order;
111*437bfbebSnyanmisaka         enum IEP2_FF_MODE ff_mode;
112*437bfbebSnyanmisaka     } mode;
113*437bfbebSnyanmisaka 
114*437bfbebSnyanmisaka     struct {
115*437bfbebSnyanmisaka         uint32_t md_theta;
116*437bfbebSnyanmisaka         uint32_t md_r;
117*437bfbebSnyanmisaka         uint32_t md_lambda;
118*437bfbebSnyanmisaka     } md;
119*437bfbebSnyanmisaka 
120*437bfbebSnyanmisaka     struct {
121*437bfbebSnyanmisaka         uint32_t roi_en;
122*437bfbebSnyanmisaka     } roi;
123*437bfbebSnyanmisaka };
124*437bfbebSnyanmisaka 
125*437bfbebSnyanmisaka struct iep2_api_params {
126*437bfbebSnyanmisaka     enum IEP2_PARAM_TYPE ptype;
127*437bfbebSnyanmisaka     union iep2_api_content param;
128*437bfbebSnyanmisaka };
129*437bfbebSnyanmisaka 
130*437bfbebSnyanmisaka struct iep2_api_info {
131*437bfbebSnyanmisaka     enum IEP2_FIELD_ORDER dil_order;
132*437bfbebSnyanmisaka     enum IEP2_FF_MODE frm_mode;
133*437bfbebSnyanmisaka     enum PD_TYPES pd_types;
134*437bfbebSnyanmisaka     enum PD_COMP_FLAG pd_flag;
135*437bfbebSnyanmisaka     RK_U32 dil_order_confidence_ratio;
136*437bfbebSnyanmisaka };
137*437bfbebSnyanmisaka 
138*437bfbebSnyanmisaka struct mv_list {
139*437bfbebSnyanmisaka     int mv[8];
140*437bfbebSnyanmisaka     int vld[8];
141*437bfbebSnyanmisaka     int idx;
142*437bfbebSnyanmisaka };
143*437bfbebSnyanmisaka 
144*437bfbebSnyanmisaka #ifdef __cplusplus
145*437bfbebSnyanmisaka extern "C" {
146*437bfbebSnyanmisaka #endif
147*437bfbebSnyanmisaka 
148*437bfbebSnyanmisaka iep_com_ctx* rockchip_iep2_api_alloc_ctx(void);
149*437bfbebSnyanmisaka void rockchip_iep2_api_release_ctx(iep_com_ctx *com_ctx);
150*437bfbebSnyanmisaka 
151*437bfbebSnyanmisaka #ifdef __cplusplus
152*437bfbebSnyanmisaka }
153*437bfbebSnyanmisaka #endif
154*437bfbebSnyanmisaka 
155*437bfbebSnyanmisaka #endif
156