Quelle pisp_be_config.h
Sprache: C
/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
/*
* PiSP Back End configuration definitions .
*
* Copyright ( C ) 2021 - Raspberry Pi Ltd
*
*/
#ifndef _UAPI_PISP_BE_CONFIG_H_
#define _UAPI_PISP_BE_CONFIG_H_
#include <linux/types.h>
#include "pisp_common.h"
/* byte alignment for inputs */
#define PISP_BACK_END_INPUT_ALIGN 4 u
/* alignment for compressed inputs */
#define PISP_BACK_END_COMPRESSED_ALIGN 8 u
/* minimum required byte alignment for outputs */
#define PISP_BACK_END_OUTPUT_MIN_ALIGN 16 u
/* preferred byte alignment for outputs */
#define PISP_BACK_END_OUTPUT_MAX_ALIGN 64 u
/* minimum allowed tile sizes anywhere in the pipeline */
#define PISP_BACK_END_MIN_TILE_WIDTH 16 u
#define PISP_BACK_END_MIN_TILE_HEIGHT 16 u
#define PISP_BACK_END_MAX_TILE_WIDTH 65536 u
#define PISP_BACK_END_MAX_TILE_HEIGHT 65536 u
#define PISP_BACK_END_NUM_OUTPUTS 2
#define PISP_BACK_END_HOG_OUTPUT 1
#define PISP_BACK_END_NUM_TILES 64
enum pisp_be_bayer_enable {
PISP_BE_BAYER_ENABLE_INPUT = 0 x000001,
PISP_BE_BAYER_ENABLE_DECOMPRESS = 0 x000002,
PISP_BE_BAYER_ENABLE_DPC = 0 x000004,
PISP_BE_BAYER_ENABLE_GEQ = 0 x000008,
PISP_BE_BAYER_ENABLE_TDN_INPUT = 0 x000010,
PISP_BE_BAYER_ENABLE_TDN_DECOMPRESS = 0 x000020,
PISP_BE_BAYER_ENABLE_TDN = 0 x000040,
PISP_BE_BAYER_ENABLE_TDN_COMPRESS = 0 x000080,
PISP_BE_BAYER_ENABLE_TDN_OUTPUT = 0 x000100,
PISP_BE_BAYER_ENABLE_SDN = 0 x000200,
PISP_BE_BAYER_ENABLE_BLC = 0 x000400,
PISP_BE_BAYER_ENABLE_STITCH_INPUT = 0 x000800,
PISP_BE_BAYER_ENABLE_STITCH_DECOMPRESS = 0 x001000,
PISP_BE_BAYER_ENABLE_STITCH = 0 x002000,
PISP_BE_BAYER_ENABLE_STITCH_COMPRESS = 0 x004000,
PISP_BE_BAYER_ENABLE_STITCH_OUTPUT = 0 x008000,
PISP_BE_BAYER_ENABLE_WBG = 0 x010000,
PISP_BE_BAYER_ENABLE_CDN = 0 x020000,
PISP_BE_BAYER_ENABLE_LSC = 0 x040000,
PISP_BE_BAYER_ENABLE_TONEMAP = 0 x080000,
PISP_BE_BAYER_ENABLE_CAC = 0 x100000,
PISP_BE_BAYER_ENABLE_DEBIN = 0 x200000,
PISP_BE_BAYER_ENABLE_DEMOSAIC = 0 x400000,
};
enum pisp_be_rgb_enable {
PISP_BE_RGB_ENABLE_INPUT = 0 x000001,
PISP_BE_RGB_ENABLE_CCM = 0 x000002,
PISP_BE_RGB_ENABLE_SAT_CONTROL = 0 x000004,
PISP_BE_RGB_ENABLE_YCBCR = 0 x000008,
PISP_BE_RGB_ENABLE_FALSE_COLOUR = 0 x000010,
PISP_BE_RGB_ENABLE_SHARPEN = 0 x000020,
/* Preferred colours would occupy 0x000040 */
PISP_BE_RGB_ENABLE_YCBCR_INVERSE = 0 x000080,
PISP_BE_RGB_ENABLE_GAMMA = 0 x000100,
PISP_BE_RGB_ENABLE_CSC0 = 0 x000200,
PISP_BE_RGB_ENABLE_CSC1 = 0 x000400,
PISP_BE_RGB_ENABLE_DOWNSCALE0 = 0 x001000,
PISP_BE_RGB_ENABLE_DOWNSCALE1 = 0 x002000,
PISP_BE_RGB_ENABLE_RESAMPLE0 = 0 x008000,
PISP_BE_RGB_ENABLE_RESAMPLE1 = 0 x010000,
PISP_BE_RGB_ENABLE_OUTPUT0 = 0 x040000,
PISP_BE_RGB_ENABLE_OUTPUT1 = 0 x080000,
PISP_BE_RGB_ENABLE_HOG = 0 x200000
};
#define PISP_BE_RGB_ENABLE_CSC(i) (PISP_BE_RGB_ENABLE_CSC0 << (i))
#define PISP_BE_RGB_ENABLE_DOWNSCALE(i) (PISP_BE_RGB_ENABLE_DOWNSCALE0 << (i))
#define PISP_BE_RGB_ENABLE_RESAMPLE(i) (PISP_BE_RGB_ENABLE_RESAMPLE0 << (i))
#define PISP_BE_RGB_ENABLE_OUTPUT(i) (PISP_BE_RGB_ENABLE_OUTPUT0 << (i))
/*
* We use the enable flags to show when blocks are " dirty " , but we need some
* extra ones too .
*/
enum pisp_be_dirty {
PISP_BE_DIRTY_GLOBAL = 0 x0001,
PISP_BE_DIRTY_SH_FC_COMBINE = 0 x0002,
PISP_BE_DIRTY_CROP = 0 x0004
};
/**
* struct pisp_be_global_config - PiSP global enable bitmaps
* @ bayer_enables : Bayer input enable flags
* @ rgb_enables : RGB output enable flags
* @ bayer_order : Bayer input format ordering
* @ pad : Padding bytes
*/
struct pisp_be_global_config {
__u32 bayer_enables;
__u32 rgb_enables;
__u8 bayer_order;
__u8 pad[3 ];
} __attribute__((packed));
/**
* struct pisp_be_input_buffer_config - PiSP Back End input buffer
* @ addr : Input buffer address
*/
struct pisp_be_input_buffer_config {
/* low 32 bits followed by high 32 bits (for each of up to 3 planes) */
__u32 addr[3 ][2 ];
} __attribute__((packed));
/**
* struct pisp_be_dpc_config - PiSP Back End DPC config
*
* Defective Pixel Correction configuration
*
* @ coeff_level : Coefficient for the darkest neighbouring pixel value
* @ coeff_range : Coefficient for the range of pixels for this Bayer channel
* @ pad : Padding byte
* @ flags : DPC configuration flags
*/
struct pisp_be_dpc_config {
__u8 coeff_level;
__u8 coeff_range;
__u8 pad;
#define PISP_BE_DPC_FLAG_FOLDBACK 1
__u8 flags;
} __attribute__((packed));
/**
* struct pisp_be_geq_config - PiSP Back End GEQ config
*
* Green Equalisation configuration
*
* @ offset : Offset value for threshold calculation
* @ slope_sharper : Slope / Sharper configuration
* @ min : Minimum value the threshold may have
* @ max : Maximum value the threshold may have
*/
struct pisp_be_geq_config {
__u16 offset;
#define PISP_BE_GEQ_SHARPER (1 U << 15 )
#define PISP_BE_GEQ_SLOPE ((1 << 10 ) - 1 )
/* top bit is the "sharper" flag, slope value is bottom 10 bits */
__u16 slope_sharper;
__u16 min;
__u16 max;
} __attribute__((packed));
/**
* struct pisp_be_tdn_input_buffer_config - PiSP Back End TDN input buffer
* @ addr : TDN input buffer address
*/
struct pisp_be_tdn_input_buffer_config {
/* low 32 bits followed by high 32 bits */
__u32 addr[2 ];
} __attribute__((packed));
/**
* struct pisp_be_tdn_config - PiSP Back End TDN config
*
* Temporal Denoise configuration
*
* @ black_level : Black level value subtracted from pixels
* @ ratio : Multiplier for the LTA input frame
* @ noise_constant : Constant offset value used in noise estimation
* @ noise_slope : Noise estimation multiplier
* @ threshold : Threshold for TDN operations
* @ reset : Disable TDN operations
* @ pad : Padding byte
*/
struct pisp_be_tdn_config {
__u16 black_level;
__u16 ratio;
__u16 noise_constant;
__u16 noise_slope;
__u16 threshold;
__u8 reset;
__u8 pad;
} __attribute__((packed));
/**
* struct pisp_be_tdn_output_buffer_config - PiSP Back End TDN output buffer
* @ addr : TDN output buffer address
*/
struct pisp_be_tdn_output_buffer_config {
/* low 32 bits followed by high 32 bits */
__u32 addr[2 ];
} __attribute__((packed));
/**
* struct pisp_be_sdn_config - PiSP Back End SDN config
*
* Spatial Denoise configuration
*
* @ black_level : Black level subtracted from pixel for noise estimation
* @ leakage : Proportion of the original undenoised value to mix in
* denoised output
* @ pad : Padding byte
* @ noise_constant : Noise constant used for noise estimation
* @ noise_slope : Noise slope value used for noise estimation
* @ noise_constant2 : Second noise constant used for noise estimation
* @ noise_slope2 : Second slope value used for noise estimation
*/
struct pisp_be_sdn_config {
__u16 black_level;
__u8 leakage;
__u8 pad;
__u16 noise_constant;
__u16 noise_slope;
__u16 noise_constant2;
__u16 noise_slope2;
} __attribute__((packed));
/**
* struct pisp_be_stitch_input_buffer_config - PiSP Back End Stitch input
* @ addr : Stitch input buffer address
*/
struct pisp_be_stitch_input_buffer_config {
/* low 32 bits followed by high 32 bits */
__u32 addr[2 ];
} __attribute__((packed));
#define PISP_BE_STITCH_STREAMING_LONG 0 x8000
#define PISP_BE_STITCH_EXPOSURE_RATIO_MASK 0 x7fff
/**
* struct pisp_be_stitch_config - PiSP Back End Stitch config
*
* Stitch block configuration
*
* @ threshold_lo : Low threshold value
* @ threshold_diff_power : Low and high threshold difference
* @ pad : Padding bytes
* @ exposure_ratio : Multiplier to convert long exposure pixels into
* short exposure pixels
* @ motion_threshold_256 : Motion threshold above which short exposure
* pixels are used
* @ motion_threshold_recip : Reciprocal of motion_threshold_256 value
*/
struct pisp_be_stitch_config {
__u16 threshold_lo;
__u8 threshold_diff_power;
__u8 pad;
/* top bit indicates whether streaming input is the long exposure */
__u16 exposure_ratio;
__u8 motion_threshold_256;
__u8 motion_threshold_recip;
} __attribute__((packed));
/**
* struct pisp_be_stitch_output_buffer_config - PiSP Back End Stitch output
* @ addr : Stitch input buffer address
*/
struct pisp_be_stitch_output_buffer_config {
/* low 32 bits followed by high 32 bits */
__u32 addr[2 ];
} __attribute__((packed));
/**
* struct pisp_be_cdn_config - PiSP Back End CDN config
*
* Colour Denoise configuration
*
* @ thresh : Constant for noise estimation
* @ iir_strength : Relative strength of the IIR part of the filter
* @ g_adjust : Proportion of the change assigned to the G channel
*/
struct pisp_be_cdn_config {
__u16 thresh;
__u8 iir_strength;
__u8 g_adjust;
} __attribute__((packed));
#define PISP_BE_LSC_LOG_GRID_SIZE 5
#define PISP_BE_LSC_GRID_SIZE (1 << PISP_BE_LSC_LOG_GRID_SIZE)
#define PISP_BE_LSC_STEP_PRECISION 18
/**
* struct pisp_be_lsc_config - PiSP Back End LSC config
*
* Lens Shading Correction configuration
*
* @ grid_step_x : Reciprocal of cell size width
* @ grid_step_y : Reciprocal of cell size height
* @ lut_packed : Jointly - coded RGB gains for each LSC grid
*/
struct pisp_be_lsc_config {
/* (1<<18) / grid_cell_width */
__u16 grid_step_x;
/* (1<<18) / grid_cell_height */
__u16 grid_step_y;
/* RGB gains jointly encoded in 32 bits */
#define PISP_BE_LSC_LUT_SIZE (PISP_BE_LSC_GRID_SIZE + 1 )
__u32 lut_packed[PISP_BE_LSC_LUT_SIZE][PISP_BE_LSC_LUT_SIZE];
} __attribute__((packed));
/**
* struct pisp_be_lsc_extra - PiSP Back End LSC Extra config
* @ offset_x : Horizontal offset into the LSC table of this tile
* @ offset_y : Vertical offset into the LSC table of this tile
*/
struct pisp_be_lsc_extra {
__u16 offset_x;
__u16 offset_y;
} __attribute__((packed));
#define PISP_BE_CAC_LOG_GRID_SIZE 3
#define PISP_BE_CAC_GRID_SIZE (1 << PISP_BE_CAC_LOG_GRID_SIZE)
#define PISP_BE_CAC_STEP_PRECISION 20
/**
* struct pisp_be_cac_config - PiSP Back End CAC config
*
* Chromatic Aberration Correction config
*
* @ grid_step_x : Reciprocal of cell size width
* @ grid_step_y : Reciprocal of cell size height
* @ lut : Pixel shift for the CAC grid
*/
struct pisp_be_cac_config {
/* (1<<20) / grid_cell_width */
__u16 grid_step_x;
/* (1<<20) / grid_cell_height */
__u16 grid_step_y;
/* [gridy][gridx][rb][xy] */
#define PISP_BE_CAC_LUT_SIZE (PISP_BE_CAC_GRID_SIZE + 1 )
__s8 lut[PISP_BE_CAC_LUT_SIZE][PISP_BE_CAC_LUT_SIZE][2 ][2 ];
} __attribute__((packed));
/**
* struct pisp_be_cac_extra - PiSP Back End CAC extra config
* @ offset_x : Horizontal offset into the CAC table of this tile
* @ offset_y : Horizontal offset into the CAC table of this tile
*/
struct pisp_be_cac_extra {
__u16 offset_x;
__u16 offset_y;
} __attribute__((packed));
#define PISP_BE_DEBIN_NUM_COEFFS 4
/**
* struct pisp_be_debin_config - PiSP Back End Debin config
*
* Debinning configuration
*
* @ coeffs : Filter coefficients for debinning
* @ h_enable : Horizontal debinning enable
* @ v_enable : Vertical debinning enable
* @ pad : Padding bytes
*/
struct pisp_be_debin_config {
__s8 coeffs[PISP_BE_DEBIN_NUM_COEFFS];
__s8 h_enable;
__s8 v_enable;
__s8 pad[2 ];
} __attribute__((packed));
#define PISP_BE_TONEMAP_LUT_SIZE 64
/**
* struct pisp_be_tonemap_config - PiSP Back End Tonemap config
*
* Tonemapping configuration
*
* @ detail_constant : Constant value for threshold calculation
* @ detail_slope : Slope value for threshold calculation
* @ iir_strength : Relative strength of the IIR fiter
* @ strength : Strength factor
* @ lut : Look - up table for tonemap curve
*/
struct pisp_be_tonemap_config {
__u16 detail_constant;
__u16 detail_slope;
__u16 iir_strength;
__u16 strength;
__u32 lut[PISP_BE_TONEMAP_LUT_SIZE];
} __attribute__((packed));
/**
* struct pisp_be_demosaic_config - PiSP Back End Demosaic config
*
* Demosaic configuration
*
* @ sharper : Use other Bayer channels to increase sharpness
* @ fc_mode : Built - in false colour suppression mode
* @ pad : Padding bytes
*/
struct pisp_be_demosaic_config {
__u8 sharper;
__u8 fc_mode;
__u8 pad[2 ];
} __attribute__((packed));
/**
* struct pisp_be_ccm_config - PiSP Back End CCM config
*
* Colour Correction Matrix configuration
*
* @ coeffs : Matrix coefficients
* @ pad : Padding bytes
* @ offsets : Offsets triplet
*/
struct pisp_be_ccm_config {
__s16 coeffs[9 ];
__u8 pad[2 ];
__s32 offsets[3 ];
} __attribute__((packed));
/**
* struct pisp_be_sat_control_config - PiSP Back End SAT config
*
* Saturation Control configuration
*
* @ shift_r : Left shift for Red colour channel
* @ shift_g : Left shift for Green colour channel
* @ shift_b : Left shift for Blue colour channel
* @ pad : Padding byte
*/
struct pisp_be_sat_control_config {
__u8 shift_r;
__u8 shift_g;
__u8 shift_b;
__u8 pad;
} __attribute__((packed));
/**
* struct pisp_be_false_colour_config - PiSP Back End False Colour config
*
* False Colour configuration
*
* @ distance : Distance of neighbouring pixels , either 1 or 2
* @ pad : Padding bytes
*/
struct pisp_be_false_colour_config {
__u8 distance;
__u8 pad[3 ];
} __attribute__((packed));
#define PISP_BE_SHARPEN_SIZE 5
#define PISP_BE_SHARPEN_FUNC_NUM_POINTS 9
/**
* struct pisp_be_sharpen_config - PiSP Back End Sharpening config
*
* Sharpening configuration
*
* @ kernel0 : Coefficient for filter 0
* @ pad0 : Padding byte
* @ kernel1 : Coefficient for filter 1
* @ pad1 : Padding byte
* @ kernel2 : Coefficient for filter 2
* @ pad2 : Padding byte
* @ kernel3 : Coefficient for filter 3
* @ pad3 : Padding byte
* @ kernel4 : Coefficient for filter 4
* @ pad4 : Padding byte
* @ threshold_offset0 : Offset for filter 0 response calculation
* @ threshold_slope0 : Slope multiplier for the filter 0 response calculation
* @ scale0 : Scale factor for filter 0 response calculation
* @ pad5 : Padding byte
* @ threshold_offset1 : Offset for filter 0 response calculation
* @ threshold_slope1 : Slope multiplier for the filter 0 response calculation
* @ scale1 : Scale factor for filter 0 response calculation
* @ pad6 : Padding byte
* @ threshold_offset2 : Offset for filter 0 response calculation
* @ threshold_slope2 : Slope multiplier for the filter 0 response calculation
* @ scale2 : Scale factor for filter 0 response calculation
* @ pad7 : Padding byte
* @ threshold_offset3 : Offset for filter 0 response calculation
* @ threshold_slope3 : Slope multiplier for the filter 0 response calculation
* @ scale3 : Scale factor for filter 0 response calculation
* @ pad8 : Padding byte
* @ threshold_offset4 : Offset for filter 0 response calculation
* @ threshold_slope4 : Slope multiplier for the filter 0 response calculation
* @ scale4 : Scale factor for filter 0 response calculation
* @ pad9 : Padding byte
* @ positive_strength : Factor to scale the positive sharpening strength
* @ positive_pre_limit : Maximum allowed possible positive sharpening value
* @ positive_func : Gain factor applied to positive sharpening response
* @ positive_limit : Final gain factor applied to positive sharpening
* @ negative_strength : Factor to scale the negative sharpening strength
* @ negative_pre_limit : Maximum allowed possible negative sharpening value
* @ negative_func : Gain factor applied to negative sharpening response
* @ negative_limit : Final gain factor applied to negative sharpening
* @ enables : Filter enable mask
* @ white : White output pixel filter mask
* @ black : Black output pixel filter mask
* @ grey : Grey output pixel filter mask
*/
struct pisp_be_sharpen_config {
__s8 kernel0[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE];
__s8 pad0[3 ];
__s8 kernel1[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE];
__s8 pad1[3 ];
__s8 kernel2[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE];
__s8 pad2[3 ];
__s8 kernel3[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE];
__s8 pad3[3 ];
__s8 kernel4[PISP_BE_SHARPEN_SIZE * PISP_BE_SHARPEN_SIZE];
__s8 pad4[3 ];
__u16 threshold_offset0;
__u16 threshold_slope0;
__u16 scale0;
__u16 pad5;
__u16 threshold_offset1;
__u16 threshold_slope1;
__u16 scale1;
__u16 pad6;
__u16 threshold_offset2;
__u16 threshold_slope2;
__u16 scale2;
__u16 pad7;
__u16 threshold_offset3;
__u16 threshold_slope3;
__u16 scale3;
__u16 pad8;
__u16 threshold_offset4;
__u16 threshold_slope4;
__u16 scale4;
__u16 pad9;
__u16 positive_strength;
__u16 positive_pre_limit;
__u16 positive_func[PISP_BE_SHARPEN_FUNC_NUM_POINTS];
__u16 positive_limit;
__u16 negative_strength;
__u16 negative_pre_limit;
__u16 negative_func[PISP_BE_SHARPEN_FUNC_NUM_POINTS];
__u16 negative_limit;
__u8 enables;
__u8 white;
__u8 black;
__u8 grey;
} __attribute__((packed));
/**
* struct pisp_be_sh_fc_combine_config - PiSP Back End Sharpening and
* False Colour config
*
* Sharpening and False Colour configuration
*
* @ y_factor : Control amount of desaturation of pixels being darkened
* @ c1_factor : Control amount of brightening of a pixel for the Cb
* channel
* @ c2_factor : Control amount of brightening of a pixel for the Cr
* channel
* @ pad : Padding byte
*/
struct pisp_be_sh_fc_combine_config {
__u8 y_factor;
__u8 c1_factor;
__u8 c2_factor;
__u8 pad;
} __attribute__((packed));
#define PISP_BE_GAMMA_LUT_SIZE 64
/**
* struct pisp_be_gamma_config - PiSP Back End Gamma configuration
* @ lut : Gamma curve look - up table
*/
struct pisp_be_gamma_config {
__u32 lut[PISP_BE_GAMMA_LUT_SIZE];
} __attribute__((packed));
/**
* struct pisp_be_crop_config - PiSP Back End Crop config
*
* Crop configuration
*
* @ offset_x : Number of pixels cropped from the left of the tile
* @ offset_y : Number of pixels cropped from the top of the tile
* @ width : Width of the cropped tile output
* @ height : Height of the cropped tile output
*/
struct pisp_be_crop_config {
__u16 offset_x, offset_y;
__u16 width, height;
} __attribute__((packed));
#define PISP_BE_RESAMPLE_FILTER_SIZE 96
/**
* struct pisp_be_resample_config - PiSP Back End Resampling config
*
* Resample configuration
*
* @ scale_factor_h : Horizontal scale factor
* @ scale_factor_v : Vertical scale factor
* @ coef : Resample coefficients
*/
struct pisp_be_resample_config {
__u16 scale_factor_h, scale_factor_v;
__s16 coef[PISP_BE_RESAMPLE_FILTER_SIZE];
} __attribute__((packed));
/**
* struct pisp_be_resample_extra - PiSP Back End Resample config
*
* Resample configuration
*
* @ scaled_width : Width in pixels of the scaled output
* @ scaled_height : Height in pixels of the scaled output
* @ initial_phase_h : Initial horizontal phase
* @ initial_phase_v : Initial vertical phase
*/
struct pisp_be_resample_extra {
__u16 scaled_width;
__u16 scaled_height;
__s16 initial_phase_h[3 ];
__s16 initial_phase_v[3 ];
} __attribute__((packed));
/**
* struct pisp_be_downscale_config - PiSP Back End Downscale config
*
* Downscale configuration
*
* @ scale_factor_h : Horizontal scale factor
* @ scale_factor_v : Vertical scale factor
* @ scale_recip_h : Horizontal reciprocal factor
* @ scale_recip_v : Vertical reciprocal factor
*/
struct pisp_be_downscale_config {
__u16 scale_factor_h;
__u16 scale_factor_v;
__u16 scale_recip_h;
__u16 scale_recip_v;
} __attribute__((packed));
/**
* struct pisp_be_downscale_extra - PiSP Back End Downscale Extra config
* @ scaled_width : Scaled image width
* @ scaled_height : Scaled image height
*/
struct pisp_be_downscale_extra {
__u16 scaled_width;
__u16 scaled_height;
} __attribute__((packed));
/**
* struct pisp_be_hog_config - PiSP Back End HOG config
*
* Histogram of Oriented Gradients configuration
*
* @ compute_signed : Set 0 for unsigned gradients , 1 for signed
* @ channel_mix : Channels proportions to use
* @ stride : Stride in bytes between blocks directly below
*/
struct pisp_be_hog_config {
__u8 compute_signed;
__u8 channel_mix[3 ];
__u32 stride;
} __attribute__((packed));
struct pisp_be_axi_config {
__u8 r_qos; /* Read QoS */
__u8 r_cache_prot; /* Read { prot[2:0], cache[3:0] } */
__u8 w_qos; /* Write QoS */
__u8 w_cache_prot; /* Write { prot[2:0], cache[3:0] } */
} __attribute__((packed));
/**
* enum pisp_be_transform - PiSP Back End Transform flags
* @ PISP_BE_TRANSFORM_NONE : No transform
* @ PISP_BE_TRANSFORM_HFLIP : Horizontal flip
* @ PISP_BE_TRANSFORM_VFLIP : Vertical flip
* @ PISP_BE_TRANSFORM_ROT180 : 180 degress rotation
*/
enum pisp_be_transform {
PISP_BE_TRANSFORM_NONE = 0 x0,
PISP_BE_TRANSFORM_HFLIP = 0 x1,
PISP_BE_TRANSFORM_VFLIP = 0 x2,
PISP_BE_TRANSFORM_ROT180 =
(PISP_BE_TRANSFORM_HFLIP | PISP_BE_TRANSFORM_VFLIP)
};
struct pisp_be_output_format_config {
struct pisp_image_format_config image;
__u8 transform;
__u8 pad[3 ];
__u16 lo;
__u16 hi;
__u16 lo2;
__u16 hi2;
} __attribute__((packed));
/**
* struct pisp_be_output_buffer_config - PiSP Back End Output buffer
* @ addr : Output buffer address
*/
struct pisp_be_output_buffer_config {
/* low 32 bits followed by high 32 bits (for each of 3 planes) */
__u32 addr[3 ][2 ];
} __attribute__((packed));
/**
* struct pisp_be_hog_buffer_config - PiSP Back End HOG buffer
* @ addr : HOG buffer address
*/
struct pisp_be_hog_buffer_config {
/* low 32 bits followed by high 32 bits */
__u32 addr[2 ];
} __attribute__((packed));
/**
* struct pisp_be_config - RaspberryPi PiSP Back End Processing configuration
*
* @ input_buffer : Input buffer addresses
* @ tdn_input_buffer : TDN input buffer addresses
* @ stitch_input_buffer : Stitch input buffer addresses
* @ tdn_output_buffer : TDN output buffer addresses
* @ stitch_output_buffer : Stitch output buffer addresses
* @ output_buffer : Output buffers addresses
* @ hog_buffer : HOG buffer addresses
* @ global : Global PiSP configuration
* @ input_format : Input image format
* @ decompress : Decompress configuration
* @ dpc : Defective Pixel Correction configuration
* @ geq : Green Equalisation configuration
* @ tdn_input_format : Temporal Denoise input format
* @ tdn_decompress : Temporal Denoise decompress configuration
* @ tdn : Temporal Denoise configuration
* @ tdn_compress : Temporal Denoise compress configuration
* @ tdn_output_format : Temporal Denoise output format
* @ sdn : Spatial Denoise configuration
* @ blc : Black Level Correction configuration
* @ stitch_compress : Stitch compress configuration
* @ stitch_output_format : Stitch output format
* @ stitch_input_format : Stitch input format
* @ stitch_decompress : Stitch decompress configuration
* @ stitch : Stitch configuration
* @ lsc : Lens Shading Correction configuration
* @ wbg : White Balance Gain configuration
* @ cdn : Colour Denoise configuration
* @ cac : Colour Aberration Correction configuration
* @ debin : Debinning configuration
* @ tonemap : Tonemapping configuration
* @ demosaic : Demosaicing configuration
* @ ccm : Colour Correction Matrix configuration
* @ sat_control : Saturation Control configuration
* @ ycbcr : YCbCr colour correction configuration
* @ sharpen : Sharpening configuration
* @ false_colour : False colour correction
* @ sh_fc_combine : Sharpening and False Colour correction
* @ ycbcr_inverse : Inverse YCbCr colour correction
* @ gamma : Gamma curve configuration
* @ csc : Color Space Conversion configuration
* @ downscale : Downscale configuration
* @ resample : Resampling configuration
* @ output_format : Output format configuration
* @ hog : HOG configuration
* @ axi : AXI bus configuration
* @ lsc_extra : LSC extra info
* @ cac_extra : CAC extra info
* @ downscale_extra : Downscaler extra info
* @ resample_extra : Resample extra info
* @ crop : Crop configuration
* @ hog_format : HOG format info
* @ dirty_flags_bayer : Bayer enable dirty flags
* ( : c : type : ` pisp_be_bayer_enable ` )
* @ dirty_flags_rgb : RGB enable dirty flags
* ( : c : type : ` pisp_be_rgb_enable ` )
* @ dirty_flags_extra : Extra dirty flags
*/
struct pisp_be_config {
/* I/O configuration: */
struct pisp_be_input_buffer_config input_buffer;
struct pisp_be_tdn_input_buffer_config tdn_input_buffer;
struct pisp_be_stitch_input_buffer_config stitch_input_buffer;
struct pisp_be_tdn_output_buffer_config tdn_output_buffer;
struct pisp_be_stitch_output_buffer_config stitch_output_buffer;
struct pisp_be_output_buffer_config
output_buffer[PISP_BACK_END_NUM_OUTPUTS];
struct pisp_be_hog_buffer_config hog_buffer;
/* Processing configuration: */
struct pisp_be_global_config global;
struct pisp_image_format_config input_format;
struct pisp_decompress_config decompress;
struct pisp_be_dpc_config dpc;
struct pisp_be_geq_config geq;
struct pisp_image_format_config tdn_input_format;
struct pisp_decompress_config tdn_decompress;
struct pisp_be_tdn_config tdn;
struct pisp_compress_config tdn_compress;
struct pisp_image_format_config tdn_output_format;
struct pisp_be_sdn_config sdn;
struct pisp_bla_config blc;
struct pisp_compress_config stitch_compress;
struct pisp_image_format_config stitch_output_format;
struct pisp_image_format_config stitch_input_format;
struct pisp_decompress_config stitch_decompress;
struct pisp_be_stitch_config stitch;
struct pisp_be_lsc_config lsc;
struct pisp_wbg_config wbg;
struct pisp_be_cdn_config cdn;
struct pisp_be_cac_config cac;
struct pisp_be_debin_config debin;
struct pisp_be_tonemap_config tonemap;
struct pisp_be_demosaic_config demosaic;
struct pisp_be_ccm_config ccm;
struct pisp_be_sat_control_config sat_control;
struct pisp_be_ccm_config ycbcr;
struct pisp_be_sharpen_config sharpen;
struct pisp_be_false_colour_config false_colour;
struct pisp_be_sh_fc_combine_config sh_fc_combine;
struct pisp_be_ccm_config ycbcr_inverse;
struct pisp_be_gamma_config gamma;
struct pisp_be_ccm_config csc[PISP_BACK_END_NUM_OUTPUTS];
struct pisp_be_downscale_config downscale[PISP_BACK_END_NUM_OUTPUTS];
struct pisp_be_resample_config resample[PISP_BACK_END_NUM_OUTPUTS];
struct pisp_be_output_format_config
output_format[PISP_BACK_END_NUM_OUTPUTS];
struct pisp_be_hog_config hog;
struct pisp_be_axi_config axi;
/* Non-register fields: */
struct pisp_be_lsc_extra lsc_extra;
struct pisp_be_cac_extra cac_extra;
struct pisp_be_downscale_extra
downscale_extra[PISP_BACK_END_NUM_OUTPUTS];
struct pisp_be_resample_extra resample_extra[PISP_BACK_END_NUM_OUTPUTS];
struct pisp_be_crop_config crop;
struct pisp_image_format_config hog_format;
__u32 dirty_flags_bayer; /* these use pisp_be_bayer_enable */
__u32 dirty_flags_rgb; /* use pisp_be_rgb_enable */
__u32 dirty_flags_extra; /* these use pisp_be_dirty_t */
} __attribute__((packed));
/**
* enum pisp_tile_edge - PiSP Back End Tile position
* @ PISP_LEFT_EDGE : Left edge tile
* @ PISP_RIGHT_EDGE : Right edge tile
* @ PISP_TOP_EDGE : Top edge tile
* @ PISP_BOTTOM_EDGE : Bottom edge tile
*/
enum pisp_tile_edge {
PISP_LEFT_EDGE = (1 << 0 ),
PISP_RIGHT_EDGE = (1 << 1 ),
PISP_TOP_EDGE = (1 << 2 ),
PISP_BOTTOM_EDGE = (1 << 3 )
};
/**
* struct pisp_tile - Raspberry Pi PiSP Back End tile configuration
*
* Tile parameters : each set of tile parameters is a 160 - bytes block of data
* which contains the tile processing parameters .
*
* @ edge : Edge tile flag
* @ pad0 : Padding bytes
* @ input_addr_offset : Top - left pixel offset , in bytes
* @ input_addr_offset2 : Top - left pixel offset , in bytes for the second /
* third image planes
* @ input_offset_x : Horizontal offset in pixels of this tile in the
* input image
* @ input_offset_y : Vertical offset in pixels of this tile in the
* input image
* @ input_width : Width in pixels of this tile
* @ input_height : Height in pixels of the this tile
* @ tdn_input_addr_offset : TDN input image offset , in bytes
* @ tdn_output_addr_offset : TDN output image offset , in bytes
* @ stitch_input_addr_offset : Stitch input image offset , in bytes
* @ stitch_output_addr_offset : Stitch output image offset , in bytes
* @ lsc_grid_offset_x : Horizontal offset in the LSC table for this tile
* @ lsc_grid_offset_y : Vertical offset in the LSC table for this tile
* @ cac_grid_offset_x : Horizontal offset in the CAC table for this tile
* @ cac_grid_offset_y : Horizontal offset in the CAC table for this tile
* @ crop_x_start : Number of pixels cropped from the left of the
* tile
* @ crop_x_end : Number of pixels cropped from the right of the
* tile
* @ crop_y_start : Number of pixels cropped from the top of the
* tile
* @ crop_y_end : Number of pixels cropped from the bottom of the
* tile
* @ downscale_phase_x : Initial horizontal phase in pixels
* @ downscale_phase_y : Initial vertical phase in pixels
* @ resample_in_width : Width in pixels of the tile entering the
* Resample block
* @ resample_in_height : Height in pixels of the tile entering the
* Resample block
* @ resample_phase_x : Initial horizontal phase for the Resample block
* @ resample_phase_y : Initial vertical phase for the Resample block
* @ output_offset_x : Horizontal offset in pixels where the tile will
* be written into the output image
* @ output_offset_y : Vertical offset in pixels where the tile will be
* written into the output image
* @ output_width : Width in pixels in the output image of this tile
* @ output_height : Height in pixels in the output image of this tile
* @ output_addr_offset : Offset in bytes into the output buffer
* @ output_addr_offset2 : Offset in bytes into the output buffer for the
* second and third plane
* @ output_hog_addr_offset : Offset in bytes into the HOG buffer where
* results of this tile are to be written
*/
struct pisp_tile {
__u8 edge; /* enum pisp_tile_edge */
__u8 pad0[3 ];
/* 4 bytes */
__u32 input_addr_offset;
__u32 input_addr_offset2;
__u16 input_offset_x;
__u16 input_offset_y;
__u16 input_width;
__u16 input_height;
/* 20 bytes */
__u32 tdn_input_addr_offset;
__u32 tdn_output_addr_offset;
__u32 stitch_input_addr_offset;
__u32 stitch_output_addr_offset;
/* 36 bytes */
__u32 lsc_grid_offset_x;
__u32 lsc_grid_offset_y;
/* 44 bytes */
__u32 cac_grid_offset_x;
__u32 cac_grid_offset_y;
/* 52 bytes */
__u16 crop_x_start[PISP_BACK_END_NUM_OUTPUTS];
__u16 crop_x_end[PISP_BACK_END_NUM_OUTPUTS];
__u16 crop_y_start[PISP_BACK_END_NUM_OUTPUTS];
__u16 crop_y_end[PISP_BACK_END_NUM_OUTPUTS];
/* 68 bytes */
/* Ordering is planes then branches */
__u16 downscale_phase_x[3 * PISP_BACK_END_NUM_OUTPUTS];
__u16 downscale_phase_y[3 * PISP_BACK_END_NUM_OUTPUTS];
/* 92 bytes */
__u16 resample_in_width[PISP_BACK_END_NUM_OUTPUTS];
__u16 resample_in_height[PISP_BACK_END_NUM_OUTPUTS];
/* 100 bytes */
/* Ordering is planes then branches */
__u16 resample_phase_x[3 * PISP_BACK_END_NUM_OUTPUTS];
__u16 resample_phase_y[3 * PISP_BACK_END_NUM_OUTPUTS];
/* 124 bytes */
__u16 output_offset_x[PISP_BACK_END_NUM_OUTPUTS];
__u16 output_offset_y[PISP_BACK_END_NUM_OUTPUTS];
__u16 output_width[PISP_BACK_END_NUM_OUTPUTS];
__u16 output_height[PISP_BACK_END_NUM_OUTPUTS];
/* 140 bytes */
__u32 output_addr_offset[PISP_BACK_END_NUM_OUTPUTS];
__u32 output_addr_offset2[PISP_BACK_END_NUM_OUTPUTS];
/* 156 bytes */
__u32 output_hog_addr_offset;
/* 160 bytes */
} __attribute__((packed));
/**
* struct pisp_be_tiles_config - Raspberry Pi PiSP Back End configuration
* @ tiles : Tile descriptors
* @ num_tiles : Number of tiles
* @ config : PiSP Back End configuration
*/
struct pisp_be_tiles_config {
struct pisp_be_config config;
struct pisp_tile tiles[PISP_BACK_END_NUM_TILES];
__u32 num_tiles;
} __attribute__((packed));
#endif /* _UAPI_PISP_BE_CONFIG_H_ */
Messung V0.5 in Prozent C=94 H=99 G=96
¤ Dauer der Verarbeitung: 0.22 Sekunden
(vorverarbeitet am 2026-10-11)
¤
*© Formatika GbR, Deutschland
2026-10-11
Neuigkeiten
Aktuelles
Motto des Tages
Open Source Software
Jenseits des Üblichen ....
Besucherstatistik
Statistik
#Sources=1127926
#Domains=2039723