/* SPDX-License-Identifier: GPL-2.0 */
|
/*
|
* Support for Intel Camera Imaging ISP subsystem.
|
* Copyright (c) 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_PIPE_H__
|
#define __IA_CSS_PIPE_H__
|
|
#include <type_support.h>
|
#include "ia_css_stream.h"
|
#include "ia_css_frame.h"
|
#include "ia_css_pipeline.h"
|
#include "ia_css_binary.h"
|
#include "sh_css_legacy.h"
|
|
#define PIPE_ENTRY_EMPTY_TOKEN (~0U)
|
#define PIPE_ENTRY_RESERVED_TOKEN (0x1)
|
|
struct ia_css_preview_settings {
|
struct ia_css_binary copy_binary;
|
struct ia_css_binary preview_binary;
|
struct ia_css_binary vf_pp_binary;
|
|
/* 2401 only for these two - do we in fact use them for anything real */
|
struct ia_css_frame *delay_frames[MAX_NUM_VIDEO_DELAY_FRAMES];
|
struct ia_css_frame *tnr_frames[NUM_TNR_FRAMES];
|
|
struct ia_css_pipe *copy_pipe;
|
struct ia_css_pipe *capture_pipe;
|
struct ia_css_pipe *acc_pipe;
|
};
|
|
#define IA_CSS_DEFAULT_PREVIEW_SETTINGS { \
|
.copy_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
.preview_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
.vf_pp_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
}
|
|
struct ia_css_capture_settings {
|
struct ia_css_binary copy_binary;
|
/* we extend primary binary to multiple stages because in ISP2.6.1
|
* the computation load is too high to fit in one single binary. */
|
struct ia_css_binary primary_binary[MAX_NUM_PRIMARY_STAGES];
|
unsigned int num_primary_stage;
|
struct ia_css_binary pre_isp_binary;
|
struct ia_css_binary anr_gdc_binary;
|
struct ia_css_binary post_isp_binary;
|
struct ia_css_binary capture_pp_binary;
|
struct ia_css_binary vf_pp_binary;
|
struct ia_css_binary capture_ldc_binary;
|
struct ia_css_binary *yuv_scaler_binary;
|
struct ia_css_frame *delay_frames[MAX_NUM_VIDEO_DELAY_FRAMES];
|
bool *is_output_stage;
|
unsigned int num_yuv_scaler;
|
};
|
|
#define IA_CSS_DEFAULT_CAPTURE_SETTINGS { \
|
.copy_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
.primary_binary = {IA_CSS_BINARY_DEFAULT_SETTINGS}, \
|
.pre_isp_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
.anr_gdc_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
.post_isp_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
.capture_pp_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
.vf_pp_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
.capture_ldc_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
}
|
|
struct ia_css_video_settings {
|
struct ia_css_binary copy_binary;
|
struct ia_css_binary video_binary;
|
struct ia_css_binary vf_pp_binary;
|
struct ia_css_binary *yuv_scaler_binary;
|
struct ia_css_frame *delay_frames[MAX_NUM_VIDEO_DELAY_FRAMES];
|
struct ia_css_frame *tnr_frames[NUM_TNR_FRAMES];
|
struct ia_css_frame *vf_pp_in_frame;
|
struct ia_css_pipe *copy_pipe;
|
struct ia_css_pipe *capture_pipe;
|
bool *is_output_stage;
|
unsigned int num_yuv_scaler;
|
};
|
|
#define IA_CSS_DEFAULT_VIDEO_SETTINGS { \
|
.copy_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
.video_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
.vf_pp_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
}
|
|
struct ia_css_yuvpp_settings {
|
struct ia_css_binary copy_binary;
|
struct ia_css_binary *yuv_scaler_binary;
|
struct ia_css_binary *vf_pp_binary;
|
bool *is_output_stage;
|
unsigned int num_yuv_scaler;
|
unsigned int num_vf_pp;
|
unsigned int num_output;
|
};
|
|
#define IA_CSS_DEFAULT_YUVPP_SETTINGS { \
|
.copy_binary = IA_CSS_BINARY_DEFAULT_SETTINGS, \
|
}
|
|
struct osys_object;
|
|
struct ia_css_pipe {
|
/* TODO: Remove stop_requested and use stop_requested in the pipeline */
|
bool stop_requested;
|
struct ia_css_pipe_config config;
|
struct ia_css_pipe_extra_config extra_config;
|
struct ia_css_pipe_info info;
|
enum ia_css_pipe_id mode;
|
struct ia_css_shading_table *shading_table;
|
struct ia_css_pipeline pipeline;
|
struct ia_css_frame_info output_info[IA_CSS_PIPE_MAX_OUTPUT_STAGE];
|
struct ia_css_frame_info bds_output_info;
|
struct ia_css_frame_info vf_output_info[IA_CSS_PIPE_MAX_OUTPUT_STAGE];
|
struct ia_css_frame_info out_yuv_ds_input_info;
|
struct ia_css_frame_info vf_yuv_ds_input_info;
|
struct ia_css_fw_info *output_stage; /* extra output stage */
|
struct ia_css_fw_info *vf_stage; /* extra vf_stage */
|
unsigned int required_bds_factor;
|
unsigned int dvs_frame_delay;
|
int num_invalid_frames;
|
bool enable_viewfinder[IA_CSS_PIPE_MAX_OUTPUT_STAGE];
|
struct ia_css_stream *stream;
|
struct ia_css_frame in_frame_struct;
|
struct ia_css_frame out_frame_struct;
|
struct ia_css_frame vf_frame_struct;
|
struct ia_css_frame *continuous_frames[NUM_CONTINUOUS_FRAMES];
|
struct ia_css_metadata *cont_md_buffers[NUM_CONTINUOUS_FRAMES];
|
union {
|
struct ia_css_preview_settings preview;
|
struct ia_css_video_settings video;
|
struct ia_css_capture_settings capture;
|
struct ia_css_yuvpp_settings yuvpp;
|
} pipe_settings;
|
ia_css_ptr scaler_pp_lut;
|
struct osys_object *osys_obj;
|
|
/* This number is unique per pipe each instance of css. This number is
|
* reused as pipeline number also. There is a 1-1 mapping between pipe_num
|
* and sp thread id. Current logic limits pipe_num to
|
* SH_CSS_MAX_SP_THREADS */
|
unsigned int pipe_num;
|
};
|
|
#define IA_CSS_DEFAULT_PIPE { \
|
.config = DEFAULT_PIPE_CONFIG, \
|
.info = DEFAULT_PIPE_INFO, \
|
.mode = IA_CSS_PIPE_ID_ACC, /* (pipe_id) */ \
|
.pipeline = DEFAULT_PIPELINE, \
|
.output_info = {IA_CSS_BINARY_DEFAULT_FRAME_INFO}, \
|
.bds_output_info = IA_CSS_BINARY_DEFAULT_FRAME_INFO, \
|
.vf_output_info = {IA_CSS_BINARY_DEFAULT_FRAME_INFO}, \
|
.out_yuv_ds_input_info = IA_CSS_BINARY_DEFAULT_FRAME_INFO, \
|
.vf_yuv_ds_input_info = IA_CSS_BINARY_DEFAULT_FRAME_INFO, \
|
.required_bds_factor = SH_CSS_BDS_FACTOR_1_00, \
|
.dvs_frame_delay = 1, \
|
.enable_viewfinder = {true}, \
|
.in_frame_struct = DEFAULT_FRAME, \
|
.out_frame_struct = DEFAULT_FRAME, \
|
.vf_frame_struct = DEFAULT_FRAME, \
|
.pipe_settings = { \
|
.preview = IA_CSS_DEFAULT_PREVIEW_SETTINGS \
|
}, \
|
.pipe_num = PIPE_ENTRY_EMPTY_TOKEN, \
|
}
|
|
void ia_css_pipe_map_queue(struct ia_css_pipe *pipe, bool map);
|
|
int
|
sh_css_param_update_isp_params(struct ia_css_pipe *curr_pipe,
|
struct ia_css_isp_parameters *params,
|
bool commit, struct ia_css_pipe *pipe);
|
|
#endif /* __IA_CSS_PIPE_H__ */
|