/* 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 _SH_CSS_PARAMS_DVS_H_
|
#define _SH_CSS_PARAMS_DVS_H_
|
|
#include <math_support.h>
|
#include <ia_css_types.h>
|
#include <sh_css_dvs_info.h>
|
#include "gdc_global.h" /* gdc_warp_param_mem_t */
|
|
#define DVS_ENV_MIN_X (12)
|
#define DVS_ENV_MIN_Y (12)
|
|
#define DVS_BLOCKDIM_X (64) /* X block height*/
|
#define DVS_BLOCKDIM_Y_LUMA (64) /* Y block height*/
|
#define DVS_BLOCKDIM_Y_CHROMA (32) /* UV height block size is half the Y block height*/
|
|
/* ISP2400 */
|
/* horizontal 64x64 blocks round up to DVS_BLOCKDIM_X, make even */
|
#define DVS_NUM_BLOCKS_X(X) (CEIL_MUL(CEIL_DIV((X), DVS_BLOCKDIM_X), 2))
|
|
/* ISP2400 */
|
/* vertical 64x64 blocks round up to DVS_BLOCKDIM_Y */
|
#define DVS_NUM_BLOCKS_Y(X) (CEIL_DIV((X), DVS_BLOCKDIM_Y_LUMA))
|
#define DVS_NUM_BLOCKS_X_CHROMA(X) (CEIL_DIV((X), DVS_BLOCKDIM_X))
|
#define DVS_NUM_BLOCKS_Y_CHROMA(X) (CEIL_DIV((X), DVS_BLOCKDIM_Y_CHROMA))
|
|
#define DVS_TABLE_IN_BLOCKDIM_X_LUMA(X) (DVS_NUM_BLOCKS_X(X) + 1) /* N blocks have N + 1 set of coords */
|
#define DVS_TABLE_IN_BLOCKDIM_X_CHROMA(X) (DVS_NUM_BLOCKS_X_CHROMA(X) + 1)
|
#define DVS_TABLE_IN_BLOCKDIM_Y_LUMA(X) (DVS_NUM_BLOCKS_Y(X) + 1)
|
#define DVS_TABLE_IN_BLOCKDIM_Y_CHROMA(X) (DVS_NUM_BLOCKS_Y_CHROMA(X) + 1)
|
|
#define DVS_ENVELOPE_X(X) (((X) == 0) ? (DVS_ENV_MIN_X) : (X))
|
#define DVS_ENVELOPE_Y(X) (((X) == 0) ? (DVS_ENV_MIN_Y) : (X))
|
|
#define DVS_COORD_FRAC_BITS (10)
|
|
/* ISP2400 */
|
#define DVS_INPUT_BYTES_PER_PIXEL (1)
|
|
#define XMEM_ALIGN_LOG2 (5)
|
|
#define DVS_6AXIS_COORDS_ELEMS CEIL_MUL(sizeof(gdc_warp_param_mem_t) \
|
, HIVE_ISP_DDR_WORD_BYTES)
|
|
/* currently we only support two output with the same resolution, output 0 is th default one. */
|
#define DVS_6AXIS_BYTES(binary) \
|
(DVS_6AXIS_COORDS_ELEMS \
|
* DVS_NUM_BLOCKS_X((binary)->out_frame_info[0].res.width) \
|
* DVS_NUM_BLOCKS_Y((binary)->out_frame_info[0].res.height))
|
|
/*
|
* ISP2400:
|
* Bilinear interpolation (HRT_GDC_BLI_MODE) is the supported method currently.
|
* Bicubic interpolation (HRT_GDC_BCI_MODE) is not supported yet */
|
#define DVS_GDC_INTERP_METHOD HRT_GDC_BLI_MODE
|
|
struct ia_css_dvs_6axis_config *
|
generate_dvs_6axis_table(const struct ia_css_resolution *frame_res,
|
const struct ia_css_resolution *dvs_offset);
|
|
struct ia_css_dvs_6axis_config *
|
generate_dvs_6axis_table_from_config(struct ia_css_dvs_6axis_config
|
*dvs_config_src);
|
|
void
|
free_dvs_6axis_table(struct ia_css_dvs_6axis_config **dvs_6axis_config);
|
|
void
|
copy_dvs_6axis_table(struct ia_css_dvs_6axis_config *dvs_config_dst,
|
const struct ia_css_dvs_6axis_config *dvs_config_src);
|
|
#endif
|