114 lines
3.2 KiB
C
114 lines
3.2 KiB
C
/*
|
||
* Copyright (c) 2022 Rockchip Corporation
|
||
*
|
||
* 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 _RK_ISPFEC_API_H_
|
||
#define _RK_ISPFEC_API_H_
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
typedef struct rk_ispfec_ctx_s rk_ispfec_ctx_t;
|
||
|
||
enum rk_ispfec_update_mesh_mode {
|
||
RK_ISPFEC_UPDATE_MESH_ONLINE = 0, // generate lut online
|
||
RK_ISPFEC_UPDATE_MESH_FROM_FILE, // external file import mesh
|
||
};
|
||
|
||
enum rk_ispfec_correct_direction {
|
||
RK_ISPFEC_CORRECT_DIRECTION_X = 0x1,
|
||
RK_ISPFEC_CORRECT_DIRECTION_Y,
|
||
RK_ISPFEC_CORRECT_DIRECTION_XY
|
||
};
|
||
|
||
enum rk_ispfec_correct_style {
|
||
RK_ISPFEC_KEEP_ASPECT_RATIO_REDUCE_FOV = 0x1,
|
||
RK_ISPFEC_COMPRES_IMAGE_KEEP_FOV,
|
||
};
|
||
|
||
/**
|
||
* the following prarams are only effective in 'RK_ISPFEC_UPDATE_MESH_ON_LINE'.
|
||
*
|
||
* @light_center: the optical center of the lens.
|
||
* @coefficient: the distortion coefficient of the lens.
|
||
* @direction: configure the correction direction of the generated mesh.
|
||
* @style: configure the correction style of the generated mesh.
|
||
* @correct_level: the distortion type of FEC.
|
||
*/
|
||
typedef struct gen_mesh_online_info_s {
|
||
double light_center[2];
|
||
double coeff[4];
|
||
enum rk_ispfec_correct_direction direction;
|
||
enum rk_ispfec_correct_style style;
|
||
|
||
int correct_level;
|
||
} gen_mesh_online_info_t;
|
||
|
||
typedef struct mesh_info_s {
|
||
int dmaFd;
|
||
void* vir_addr;
|
||
int size;
|
||
char mesh_file[64];
|
||
} mesh_info_t;
|
||
|
||
typedef struct rk_ispfec_cfg_s {
|
||
// 输入输出的分辨率
|
||
int in_width;
|
||
int in_height;
|
||
int out_width;
|
||
int out_height;
|
||
// 输入输出的 v4l2 fmt
|
||
int in_fourcc;
|
||
int out_fourcc;
|
||
// mesh 表 buf fd,外部分配,可用 rk_ispfec_api_calFecMeshsize 计算size
|
||
mesh_info_t mesh_xint;
|
||
mesh_info_t mesh_xfra;
|
||
mesh_info_t mesh_yint;
|
||
mesh_info_t mesh_yfra;
|
||
|
||
enum rk_ispfec_update_mesh_mode mesh_upd_mode;
|
||
|
||
/**
|
||
* @UPDATE_MESH_ONLINE : configure the online info from fec calibration for 'mesh_file_path'
|
||
* @UPDATE_MESH_FROM_FILE: configure the path of mesh file for 'mesh_online'
|
||
*/
|
||
union {
|
||
char mesh_file_path[128];
|
||
gen_mesh_online_info_t mesh_online;
|
||
} u;
|
||
} rk_ispfec_cfg_t;
|
||
|
||
rk_ispfec_ctx_t* rk_ispfec_api_init(rk_ispfec_cfg_t* cfg);
|
||
|
||
// prepare 时cfg可为 NULL,为NULL时使用 init时的。
|
||
// prepare 可用于 reconfig 参数
|
||
int rk_ispfec_api_prepare(rk_ispfec_ctx_t* ctx, rk_ispfec_cfg_t* cfg);
|
||
|
||
int rk_ispfec_api_process(rk_ispfec_ctx_t* ctx, int src_fd, int dst_fd);
|
||
|
||
void rk_ispfec_api_deinit(rk_ispfec_ctx_t* ctx);
|
||
|
||
// helper functions
|
||
// 用于计算 mesh buf 所需 size
|
||
int rk_ispfec_api_calFecMeshsize(int width, int height);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif
|