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

239 lines
7.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.
*/
/* This header is for communication between userspace driver and kernel driver */
#ifndef IEP_H
#define IEP_H
#include <sys/ioctl.h>
#include "rk_type.h"
/* Capability for current iep version using by userspace to determine iep features */
typedef struct IepHwCap_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;
} IepHwCap;
#define IEP_IOC_MAGIC 'i'
#define IEP_SET_PARAMETER_REQ _IOW(IEP_IOC_MAGIC, 1, unsigned long)
#define IEP_SET_PARAMETER_DEINTERLACE _IOW(IEP_IOC_MAGIC, 2, unsigned long)
#define IEP_SET_PARAMETER_ENHANCE _IOW(IEP_IOC_MAGIC, 3, unsigned long)
#define IEP_SET_PARAMETER_CONVERT _IOW(IEP_IOC_MAGIC, 4, unsigned long)
#define IEP_SET_PARAMETER_SCALE _IOW(IEP_IOC_MAGIC, 5, unsigned long)
#define IEP_GET_RESULT_SYNC _IOW(IEP_IOC_MAGIC, 6, unsigned long)
#define IEP_GET_RESULT_ASYNC _IOW(IEP_IOC_MAGIC, 7, unsigned long)
#define IEP_SET_PARAMETER _IOW(IEP_IOC_MAGIC, 8, unsigned long)
#define IEP_RELEASE_CURRENT_TASK _IOW(IEP_IOC_MAGIC, 9, unsigned long)
#define IEP_GET_IOMMU_STATE _IOR(IEP_IOC_MAGIC, 10, unsigned long)
#define IEP_QUERY_CAP _IOR(IEP_IOC_MAGIC, 11, IepHwCap)
enum {
DEI_MODE_BYPASS_DIS = 0x0,
DEI_MODE_I4O2 = 0x1,
DEI_MODE_I4O1B = 0x2,
DEI_MODE_I4O1T = 0x3,
DEI_MODE_I2O1B = 0x4,
DEI_MODE_I2O1T = 0x5,
DEI_MODE_BYPASS = 0x6,
};
// for rgb_enhance_mode
enum {
RGB_ENHANCE_BYPASS = 0x0,
RGB_ENHANCE_DENOISE = 0x1,
RGB_ENHANCE_DETAIL = 0x2,
RGB_ENHANCE_EDGE = 0x3,
};
// for rgb_contrast_enhance_mode
enum {
RGB_CONTRAST_CC_P_DDE = 0x0, // cg prior to dde
RGB_CONTRAST_DDE_P_CC = 0x1, // dde prior to cg
};
// for video mode
enum {
BLACK_SCREEN = 0x0,
BLUE_SCREEN = 0x1,
COLOR_BAR = 0x2,
NORMAL_MODE = 0x3,
};
/*
// Alpha Red Green Blue
{ 4, 32, {{32,24, 24,16, 16, 8, 8, 0 }}, GGL_RGBA }, IEP_FORMAT_ARGB_8888
{ 4, 32, {{32,24, 8, 0, 16, 8, 24,16 }}, GGL_RGB }, IEP_FORMAT_ABGR_8888
{ 4, 32, {{ 8, 0, 32,24, 24,16, 16, 8 }}, GGL_RGB }, IEP_FORMAT_RGBA_8888
{ 4, 32, {{ 8, 0, 16, 8, 24,16, 32,24 }}, GGL_BGRA }, IEP_FORMAT_BGRA_8888
{ 2, 16, {{ 0, 0, 16,11, 11, 5, 5, 0 }}, GGL_RGB }, IEP_FORMAT_RGB_565
{ 2, 16, {{ 0, 0, 5, 0, 11, 5, 16,11 }}, GGL_RGB }, IEP_FORMAT_RGB_565
*/
// for hardware format value
enum {
IEP_MSG_FMT_ARGB_8888 = 0x0,
IEP_MSG_FMT_ABGR_8888 = 0x1,
IEP_MSG_FMT_RGBA_8888 = 0x2,
IEP_MSG_FMT_BGRA_8888 = 0x3,
IEP_MSG_FMT_RGB_565 = 0x4,
IEP_MSG_FMT_BGR_565 = 0x5,
IEP_MSG_FMT_YCbCr_422_SP = 0x10,
IEP_MSG_FMT_YCbCr_422_P = 0x11,
IEP_MSG_FMT_YCbCr_420_SP = 0x12,
IEP_MSG_FMT_YCbCr_420_P = 0x13,
IEP_MSG_FMT_YCrCb_422_SP = 0x14,
IEP_MSG_FMT_YCrCb_422_P = 0x15, // same as IEP_FORMAT_YCbCr_422_P
IEP_MSG_FMT_YCrCb_420_SP = 0x16,
IEP_MSG_FMT_YCrCb_420_P = 0x17, // same as IEP_FORMAT_YCbCr_420_P
};
/*
* + <--------------+ virtual width +------------> +
* | |
* +-------------------------------------------------+---+---+
* | | ^
* | + <---+ actual width +--> + | |
* | | | | |
* | +---------------------------+---+--+ | |
* | | | ^ | +
* | | | + | virtual
* | | | actual | height
* | | | height | +
* | | | + | |
* | | | ^ | |
* | +---------------------------+---+--+ | |
* | | ^
* +-------------------------------------------------+---+---+
*/
// NOTE: This is for kernel driver communication. keep it for compatibility
typedef struct IepMsgImg_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 :pix
RK_U16 vir_h; // unit :pix
RK_U32 format;
RK_U32 mem_addr;
RK_U32 uv_addr;
RK_U32 v_addr;
RK_U8 rb_swap; // not be used
RK_U8 uv_swap; // not be used
RK_U8 alpha_swap; // not be used
} IepMsgImg;
typedef struct IepMsg_t {
IepMsgImg src; // src active window
IepMsgImg dst; // src virtual window
IepMsgImg src1;
IepMsgImg dst1;
IepMsgImg src_itemp;
IepMsgImg src_ftemp;
IepMsgImg dst_itemp;
IepMsgImg dst_ftemp;
RK_U8 dither_up_en;
RK_U8 dither_down_en; //not to be used
RK_U8 yuv2rgb_mode;
RK_U8 rgb2yuv_mode;
RK_U8 global_alpha_value;
RK_U8 rgb2yuv_clip_en;
RK_U8 yuv2rgb_clip_en;
RK_U8 lcdc_path_en;
RK_S32 off_x;
RK_S32 off_y;
RK_S32 width;
RK_S32 height;
RK_S32 layer;
RK_U8 yuv_3D_denoise_en;
/// yuv color enhance
RK_U8 yuv_enhance_en;
RK_S32 sat_con_int;
RK_S32 contrast_int;
RK_S32 cos_hue_int;
RK_S32 sin_hue_int;
RK_S8 yuv_enh_brightness; // -32 < brightness < 31
RK_U8 video_mode; // 0 ~ 3
RK_U8 color_bar_y; // 0 ~ 127
RK_U8 color_bar_u; // 0 ~ 127
RK_U8 color_bar_v; // 0 ~ 127
RK_U8 rgb_enhance_en; // I don't know its usage
RK_U8 rgb_color_enhance_en; // sw_rgb_color_enh_en
RK_U32 rgb_enh_coe;
RK_U8 rgb_enhance_mode; // sw_rgb_enh_sel,dde sel
RK_U8 rgb_cg_en; // sw_rgb_con_gam_en
RK_U32 cg_tab[192];
// sw_con_gam_order; 0 cg prior to dde, 1 dde prior to cg
RK_U8 rgb_contrast_enhance_mode;
RK_S32 enh_threshold;
RK_S32 enh_alpha;
RK_S32 enh_radius;
RK_U8 scale_up_mode;
RK_U8 field_order;
RK_U8 dein_mode;
//DIL High Frequency
RK_U8 dein_high_fre_en;
RK_U8 dein_high_fre_fct;
//DIL EI
RK_U8 dein_ei_mode;
RK_U8 dein_ei_smooth;
RK_U8 dein_ei_sel;
RK_U8 dein_ei_radius; // when dein_ei_sel=0 will be used
RK_U8 dil_mtn_tbl_en;
RK_U32 dil_mtn_tbl[8];
RK_U8 vir_addr_enable;
void *base;
} IepMsg;
#endif /* IEP_H */