/* SPDX-License-Identifier: GPL-2.0 */
|
/**
|
Support for Intel Camera Imaging ISP subsystem.
|
Copyright (c) 2010 - 2015, Intel Corporation.
|
|
This program is free software; you can redistribute it and/or modify it
|
under the terms and conditions of the GNU General Public License,
|
version 2, as published by the Free Software Foundation.
|
|
This program is distributed in the hope it will be useful, but WITHOUT
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
more details.
|
*/
|
|
#ifndef _IA_CSS_BINARY_H_
|
#define _IA_CSS_BINARY_H_
|
|
#include <type_support.h>
|
#include "ia_css_types.h"
|
#include "ia_css_err.h"
|
#include "ia_css_stream_format.h"
|
#include "ia_css_stream_public.h"
|
#include "ia_css_frame_public.h"
|
#include "sh_css_metrics.h"
|
#include "isp/kernels/fixedbds/fixedbds_1.0/ia_css_fixedbds_types.h"
|
|
/* The binary mode is used in pre-processor expressions so we cannot
|
* use an enum here. */
|
#define IA_CSS_BINARY_MODE_COPY 0
|
#define IA_CSS_BINARY_MODE_PREVIEW 1
|
#define IA_CSS_BINARY_MODE_PRIMARY 2
|
#define IA_CSS_BINARY_MODE_VIDEO 3
|
#define IA_CSS_BINARY_MODE_PRE_ISP 4
|
#define IA_CSS_BINARY_MODE_GDC 5
|
#define IA_CSS_BINARY_MODE_POST_ISP 6
|
#define IA_CSS_BINARY_MODE_ANR 7
|
#define IA_CSS_BINARY_MODE_CAPTURE_PP 8
|
#define IA_CSS_BINARY_MODE_VF_PP 9
|
#define IA_CSS_BINARY_MODE_PRE_DE 10
|
#define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE0 11
|
#define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE1 12
|
#define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE2 13
|
#define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE3 14
|
#define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE4 15
|
#define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE5 16
|
#define IA_CSS_BINARY_NUM_MODES 17
|
|
#define MAX_NUM_PRIMARY_STAGES 6
|
#define NUM_PRIMARY_HQ_STAGES 6 /* number of primary stages for ISP2.6.1 high quality pipe */
|
#define NUM_PRIMARY_STAGES 1 /* number of primary satges for ISP1/ISP2.2 pipe */
|
|
/* Indicate where binaries can read input from */
|
#define IA_CSS_BINARY_INPUT_SENSOR 0
|
#define IA_CSS_BINARY_INPUT_MEMORY 1
|
#define IA_CSS_BINARY_INPUT_VARIABLE 2
|
|
/* Should be included without the path.
|
However, that requires adding the path to numerous makefiles
|
that have nothing to do with isp parameters.
|
*/
|
#include "runtime/isp_param/interface/ia_css_isp_param_types.h"
|
|
/* now these ports only include output ports but not vf output ports */
|
enum {
|
IA_CSS_BINARY_OUTPUT_PORT_0 = 0,
|
IA_CSS_BINARY_OUTPUT_PORT_1 = 1,
|
IA_CSS_BINARY_MAX_OUTPUT_PORTS = 2
|
};
|
|
struct ia_css_cas_binary_descr {
|
unsigned int num_stage;
|
unsigned int num_output_stage;
|
struct ia_css_frame_info *in_info;
|
struct ia_css_frame_info *internal_out_info;
|
struct ia_css_frame_info *out_info;
|
struct ia_css_frame_info *vf_info;
|
bool *is_output_stage;
|
};
|
|
struct ia_css_binary_descr {
|
int mode;
|
bool online;
|
bool continuous;
|
bool striped;
|
bool two_ppc;
|
bool enable_yuv_ds;
|
bool enable_high_speed;
|
bool enable_dvs_6axis;
|
bool enable_reduced_pipe;
|
bool enable_dz;
|
bool enable_xnr;
|
bool enable_fractional_ds;
|
bool enable_dpc;
|
|
/* ISP2401 */
|
bool enable_luma_only;
|
bool enable_tnr;
|
|
bool enable_capture_pp_bli;
|
struct ia_css_resolution dvs_env;
|
enum atomisp_input_format stream_format;
|
struct ia_css_frame_info *in_info; /* the info of the input-frame with the
|
ISP required resolution. */
|
struct ia_css_frame_info *bds_out_info;
|
struct ia_css_frame_info *out_info[IA_CSS_BINARY_MAX_OUTPUT_PORTS];
|
struct ia_css_frame_info *vf_info;
|
unsigned int isp_pipe_version;
|
unsigned int required_bds_factor;
|
int stream_config_left_padding;
|
};
|
|
struct ia_css_binary {
|
const struct ia_css_binary_xinfo *info;
|
enum atomisp_input_format input_format;
|
struct ia_css_frame_info in_frame_info;
|
struct ia_css_frame_info internal_frame_info;
|
struct ia_css_frame_info out_frame_info[IA_CSS_BINARY_MAX_OUTPUT_PORTS];
|
struct ia_css_resolution effective_in_frame_res;
|
struct ia_css_frame_info vf_frame_info;
|
int input_buf_vectors;
|
int deci_factor_log2;
|
int vf_downscale_log2;
|
int s3atbl_width;
|
int s3atbl_height;
|
int s3atbl_isp_width;
|
int s3atbl_isp_height;
|
unsigned int morph_tbl_width;
|
unsigned int morph_tbl_aligned_width;
|
unsigned int morph_tbl_height;
|
int sctbl_width_per_color;
|
int sctbl_aligned_width_per_color;
|
int sctbl_height;
|
int sctbl_legacy_width_per_color;
|
int sctbl_legacy_height;
|
struct ia_css_sdis_info dis;
|
struct ia_css_resolution dvs_envelope;
|
bool online;
|
unsigned int uds_xc;
|
unsigned int uds_yc;
|
unsigned int left_padding;
|
struct sh_css_binary_metrics metrics;
|
struct ia_css_isp_param_host_segments mem_params;
|
struct ia_css_isp_param_css_segments css_params;
|
};
|
|
#define IA_CSS_BINARY_DEFAULT_SETTINGS { \
|
.input_format = ATOMISP_INPUT_FORMAT_YUV420_8_LEGACY, \
|
.in_frame_info = IA_CSS_BINARY_DEFAULT_FRAME_INFO, \
|
.internal_frame_info = IA_CSS_BINARY_DEFAULT_FRAME_INFO, \
|
.out_frame_info = {IA_CSS_BINARY_DEFAULT_FRAME_INFO}, \
|
.vf_frame_info = IA_CSS_BINARY_DEFAULT_FRAME_INFO, \
|
}
|
|
int
|
ia_css_binary_init_infos(void);
|
|
int
|
ia_css_binary_uninit(void);
|
|
int
|
ia_css_binary_fill_info(const struct ia_css_binary_xinfo *xinfo,
|
bool online,
|
bool two_ppc,
|
enum atomisp_input_format stream_format,
|
const struct ia_css_frame_info *in_info,
|
const struct ia_css_frame_info *bds_out_info,
|
const struct ia_css_frame_info *out_info[],
|
const struct ia_css_frame_info *vf_info,
|
struct ia_css_binary *binary,
|
struct ia_css_resolution *dvs_env,
|
int stream_config_left_padding,
|
bool accelerator);
|
|
int
|
ia_css_binary_find(struct ia_css_binary_descr *descr,
|
struct ia_css_binary *binary);
|
|
/* @brief Get the shading information of the specified shading correction type.
|
*
|
* @param[in] binary: The isp binary which has the shading correction.
|
* @param[in] type: The shading correction type.
|
* @param[in] required_bds_factor: The bayer downscaling factor required in the pipe.
|
* @param[in] stream_config: The stream configuration.
|
* @param[out] shading_info: The shading information.
|
* The shading information necessary as API is stored in the shading_info.
|
* The driver needs to get this information to generate
|
* the shading table directly required from ISP.
|
* @param[out] pipe_config: The pipe configuration.
|
* The shading information related to ISP (but, not necessary as API) is stored in the pipe_config.
|
* @return 0 or error code upon error.
|
*
|
*/
|
int
|
ia_css_binary_get_shading_info(const struct ia_css_binary *binary,
|
enum ia_css_shading_correction_type type,
|
unsigned int required_bds_factor,
|
const struct ia_css_stream_config *stream_config,
|
struct ia_css_shading_info *shading_info,
|
struct ia_css_pipe_config *pipe_config);
|
|
int
|
ia_css_binary_3a_grid_info(const struct ia_css_binary *binary,
|
struct ia_css_grid_info *info,
|
struct ia_css_pipe *pipe);
|
|
void
|
ia_css_binary_dvs_grid_info(const struct ia_css_binary *binary,
|
struct ia_css_grid_info *info,
|
struct ia_css_pipe *pipe);
|
|
void
|
ia_css_binary_dvs_stat_grid_info(
|
const struct ia_css_binary *binary,
|
struct ia_css_grid_info *info,
|
struct ia_css_pipe *pipe);
|
|
unsigned
|
ia_css_binary_max_vf_width(void);
|
|
void
|
ia_css_binary_destroy_isp_parameters(struct ia_css_binary *binary);
|
|
void
|
ia_css_binary_get_isp_binaries(struct ia_css_binary_xinfo **binaries,
|
uint32_t *num_isp_binaries);
|
|
#endif /* _IA_CSS_BINARY_H_ */
|