singe/thirdparty/rockchip-mpp/mpp/vproc/inc/iep_api.h
2026-09-10 20:17:28 -05:00

181 lines
5.7 KiB
C

/*
* Copyright 2015 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_API_H
#define IEP_API_H
#include "rk_type.h"
#include "mpp_err.h"
#include "iep_common.h"
/*
* IepCmdParamSetSrc is parameter for:
* IEP_CMD_SET_SRC
* IEP_CMD_SET_DST
* IEP_CMD_SET_DEI_SRC1
* IEP_CMD_SET_DEI_DST1
*/
typedef struct IepCmdParamImage_t {
IepImg image;
} IepCmdParamImage;
typedef enum IepDeiMode_e {
IEP_DEI_MODE_DISABLE,
IEP_DEI_MODE_I2O1,
IEP_DEI_MODE_I4O1,
IEP_DEI_MODE_I4O2,
IEP_DEI_MODE_BYPASS,
IEP_DEI_MODE_BUTT,
} IepDeiMode;
typedef enum IepDeiFldOrder {
IEP_DEI_FLD_ORDER_TOP_FIRST,
IEP_DEI_FLD_ORDER_BOT_FIRST,
IEP_DEI_FLD_ORDER_BUTT,
} IepDeiFldOrder;
/* IepCmdParamDeiCfg is parameter for IEP_CMD_SET_DEI_CFG */
typedef struct IepCmdParamDeiCfg_t {
IepDeiMode dei_mode;
IepDeiFldOrder dei_field_order;
RK_U32 dei_high_freq_en;
RK_U32 dei_high_freq_fct; // [0, 127]
RK_U32 dei_ei_mode; // deinterlace edge interpolation 0: disable, 1: enable
RK_U32 dei_ei_smooth; // deinterlace edge interpolation for smooth effect 0: disable, 1: enable
RK_U32 dei_ei_sel; // deinterlace edge interpolation select
RK_U32 dei_ei_radius; // deinterlace edge interpolation radius [0, 3]
} IepCmdParamDeiCfg;
typedef enum IepVideoMode_e {
IEP_VIDEO_MODE_BLACK_SCREEN,
IEP_VIDEO_MODE_BLUE_SCREEN,
IEP_VIDEO_MODE_COLOR_BAR,
IEP_VIDEO_MODE_NORMAL_VIDEO
} IepVideoMode;
/* IepCmdParamYuvEnhance is parameter for IEP_CMD_SET_YUV_ENHANCE */
typedef struct IepCmdParamYuvEnhance_t {
float saturation; // [0, 1.992]
float contrast; // [0, 1.992]
RK_S8 brightness; // [-32, 31]
float hue_angle; // [-30, 30]
IepVideoMode video_mode;
RK_U8 color_bar_y; // [0, 127]
RK_U8 color_bar_u; // [0, 127]
RK_U8 color_bar_v; // [0, 127]
} IepCmdParamYuvEnhance;
typedef enum IepRgbEnhanceMode_e {
IEP_RGB_ENHANCE_MODE_NO_OPERATION,
IEP_RGB_ENHANCE_MODE_DENOISE,
IEP_RGB_ENHANCE_MODE_DETAIL_ENHANCE,
IEP_RGB_ENHANCE_MODE_EDGE_ENHANCE
} IepRgbEnhanceMode;
typedef enum IepRgbEnhanceOrder_e {
IEP_RGB_ENHANCE_ORDER_CG_DDE, // CG(Contrast & Gammar) prior to DDE (De-noise, Detail & Edge Enhance)
IEP_RGB_ENHANCE_ORDER_DDE_CG // DDE prior to CG
} IepRgbEnhanceOrder;
/* IepCmdParamRgbEnhance is parameter for IEP_CMD_SET_RGB_ENHANCE */
typedef struct IepCmdParamRgbEnhance {
float coe; // [0, 3.96875]
IepRgbEnhanceMode mode;
RK_U8 cg_en; // sw_rgb_con_gam_en
double cg_rr;
double cg_rg;
double cg_rb;
IepRgbEnhanceOrder order;
/// more than this value considered as detail, and less than this value considered as noise.
RK_S32 threshold; // [0, 255]
/// combine the original pixel and enhanced pixel
/// if (enh_alpha_num / enh_alpha_base <= 1 ) enh_alpha_base = 8, else enh_alpha_base = 4
/// (1/8 ... 8/8) (5/4 ... 24/4)
RK_S32 alpha_num; // [0, 24]
RK_S32 alpha_base; // {4, 8}
RK_S32 radius; // [1, 4]
} IepCmdParamRgbEnhance;
typedef enum IepScaleAlg_e {
IEP_SCALE_ALG_HERMITE,
IEP_SCALE_ALG_SPLINE,
IEP_SCALE_ALG_CATROM,
IEP_SCALE_ALG_MITCHELL
} IepScaleAlg;
/* IepCmdParamScale is parameter for IEP_CMD_SET_SCALE */
typedef struct IepCmdParamScale_t {
IepScaleAlg scale_alg;
} IepCmdParamScale;
typedef enum IepColorConvertMode_e {
IEP_COLOR_MODE_BT601_L,
IEP_COLOR_MODE_BT601_F,
IEP_COLOR_MODE_BT709_L,
IEP_COLOR_MODE_BT709_F
} IepColorConvertMode;
/* IepCmdParamColorConvert is parameter for IEP_CMD_SET_COLOR_CONVERT */
typedef struct IepCmdParamColorConvert_t {
IepColorConvertMode rgb2yuv_mode;
IepColorConvertMode yuv2rgb_mode;
RK_U8 rgb2yuv_input_clip; // 0:R/G/B [0, 255], 1:R/G/B [16, 235]
RK_U8 yuv2rgb_input_clip; // 0:Y/U/V [0, 255], 1:Y [16, 235] U/V [16, 240]
RK_U8 global_alpha_value; // global alpha value for output ARGB
RK_U8 dither_up_en;
RK_U8 dither_down_en;
} IepCmdParamColorConvert;
/* IepCap is parameter for IEP_CMD_QUERY_CAP */
typedef struct IepCap_t {
RK_U8 scaling_supported;
RK_U8 i4_deinterlace_supported;
RK_U8 i2_deinterlace_supported;
RK_U8 compression_noise_reduction_supported;
RK_U8 sampling_noise_reduction_supported;
RK_U8 hsb_enhancement_supported;
RK_U8 cg_enhancement_supported;
RK_U8 direct_path_supported;
RK_U16 max_dynamic_width;
RK_U16 max_dynamic_height;
RK_U16 max_static_width;
RK_U16 max_static_height;
RK_U8 max_enhance_radius;
} IepCap;
typedef void* IepCtx;
#ifdef __cplusplus
extern "C" {
#endif
MPP_RET iep_init(IepCtx *ctx);
MPP_RET iep_deinit(IepCtx ctx);
MPP_RET iep_control(IepCtx ctx, IepCmd cmd, void *param);
iep_com_ctx* rockchip_iep_api_alloc_ctx(void);
void rockchip_iep_api_release_ctx(iep_com_ctx *com_ctx);
#ifdef __cplusplus
}
#endif
#endif /* IEP_API_H */