mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 15:22:21 -04:00
Merge tag 'media/v7.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media updates from Mauro Carvalho Chehab: - v4l2-core: added ISP statistics support and per-block validation - v4l2-core: Allow unknown HDR10 white point and luminance - New camera sensors: Sony IMX678 and IMX471m, Himax HM1092 IR sensor - New codec: Milos: VPU v2.0 codec support - isp driver: gained support for Dreamchip RPPX1 ISP framework - vsp1 driver: gained support for RZ/T2H and RZ/N2H - Novalake driver: gained CVS support for new NVL hardware - dvb-core: fix feed leak on failed DMX_ADD_PID - several driver fixes, cleanups and minor improvements * tag 'media/v7.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (308 commits) media: ipu-bridge: check all DMI entries when overriding sensor rotation media: v4l2-async: avoid deleting unlinked ASC entry on link error media: rzg2l-cru: Align bytesperline to hardware DMA stride requirement media: intel/ipu6: fix async notifier cleanup leak on parse error media: staging/ipu7: fix async notifier UAF on probe error path media: amd: isp4: fix self-deadlock in isp4sd_pwron_and_init() error path media: amd: isp4: release partial allocations in isp4if_alloc_fw_gpumem() media: rcar-isp: Fix VSPX reference leaks media: rcar-isp: Release ISPCORE resources media: i2c: imx415: Release runtime PM reference on VBLANK error media: i2c: imx415: Return test pattern write errors media: renesas: vsp1: Declare index variables in for loop statement media: renesas: vsp1: Make reset control optional to support platforms without a reset line media: dt-bindings: media: renesas,vsp1: Document RZ/T2H and RZ/N2H SoCs media: dt-bindings: media: renesas,fcp: Document RZ/T2H and RZ/N2H SoCs media: nxp: imx8-isi: Add additional 32-bit RGB format support media: nxp: imx8-isi: Add 16-bit raw Bayer format support media: nxp: imx8-isi: Implement per-stream reference counting for multiplexed streams media: nxp: imx8-isi: Use BIT_ULL() for 64-bit stream masks media: nxp: imx8-isi: Correct color map between V4L2 and ISI ...
This commit is contained in:
@@ -403,6 +403,8 @@ struct cec_log_addrs {
|
||||
#define CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU (1 << 1)
|
||||
/* CDC-Only device: supports only CDC messages */
|
||||
#define CEC_LOG_ADDRS_FL_CDC_ONLY (1 << 2)
|
||||
/* Configuration failed */
|
||||
#define CEC_LOG_ADDRS_FL_CONFIG_FAILED (1 << 3)
|
||||
|
||||
/**
|
||||
* struct cec_drm_connector_info - tells which drm connector is
|
||||
|
||||
@@ -36,6 +36,9 @@
|
||||
*/
|
||||
#define MALI_C55_MAX_ZONES (15 * 15)
|
||||
|
||||
/* Number of RGB gamma LUT entries. */
|
||||
#define MALI_C55_NUM_GAMMA_LUT_ELEMENTS 129
|
||||
|
||||
/**
|
||||
* struct mali_c55_ae_1024bin_hist - Auto Exposure 1024-bin histogram statistics
|
||||
*
|
||||
@@ -219,6 +222,9 @@ struct mali_c55_stats_buffer {
|
||||
* @MALI_C55_PARAM_BLOCK_AWB_GAINS_AEXP: Auto-white balance gains for AEXP-0 tap
|
||||
* @MALI_C55_PARAM_MESH_SHADING_CONFIG : Mesh shading tables configuration
|
||||
* @MALI_C55_PARAM_MESH_SHADING_SELECTION: Mesh shading table selection
|
||||
* @MALI_C55_PARAM_BLOCK_CCM: Colour correction matrix
|
||||
* @MALI_C55_PARAM_BLOCK_GAMMA_FR: Gamma gain and offset for FR pipe
|
||||
* @MALI_C55_PARAM_BLOCK_GAMMA_DS: Gamma gain and offset for DS pipe
|
||||
*/
|
||||
enum mali_c55_param_block_type {
|
||||
MALI_C55_PARAM_BLOCK_SENSOR_OFFS,
|
||||
@@ -232,6 +238,9 @@ enum mali_c55_param_block_type {
|
||||
MALI_C55_PARAM_BLOCK_AWB_GAINS_AEXP,
|
||||
MALI_C55_PARAM_MESH_SHADING_CONFIG,
|
||||
MALI_C55_PARAM_MESH_SHADING_SELECTION,
|
||||
MALI_C55_PARAM_BLOCK_CCM,
|
||||
MALI_C55_PARAM_BLOCK_GAMMA_FR,
|
||||
MALI_C55_PARAM_BLOCK_GAMMA_DS,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -757,6 +766,78 @@ struct mali_c55_params_mesh_shading_selection {
|
||||
__u16 mesh_strength;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mali_c55_params_ccm - Coefficients, offsets and gains for the colour
|
||||
* correction matrix
|
||||
*
|
||||
* The colour correction module converts images data from a sensor-specific
|
||||
* colour space to known one.
|
||||
*
|
||||
* Colour correction is applied after demosaicing and each pixel is represented
|
||||
* as a column vector of the three RGB colour channels on which the following
|
||||
* operations take place:
|
||||
* 1) An offset is subtracted from each colour channel
|
||||
* 2) Each colour channel is multiplied by a gain
|
||||
* 3) The pixel column vector is multiplied by the colour correction matrix
|
||||
*
|
||||
* This struct allows users to configure the coefficients for CCM and the
|
||||
* per-channel offsets and gains. The nine matrix coefficients are expressed as
|
||||
* 13 bits signed Q4.8 Sign/Magnitude fixed-point numbers, the three gain
|
||||
* multipliers are expressed as 12 bits unsigned Q4.8 fixed-point numbers and
|
||||
* the three offsets are expressed as a 12 bits unsigned integers.
|
||||
*
|
||||
* header.type should be set to MALI_C55_PARAM_BLOCK_CCM from
|
||||
* :c:type:`mali_c55_param_block_type`.
|
||||
*
|
||||
* @header: The Mali-C55 parameters block header
|
||||
* @coeffs: 3x3 color conversion matrix coefficients in sign/magnitude
|
||||
* Q4.8 format
|
||||
* @gains: Gains for red, green and blue channels in unsigned Q4.8 format
|
||||
* @offs: Offsets for red, green and blue channels
|
||||
*/
|
||||
struct mali_c55_params_ccm {
|
||||
struct v4l2_isp_params_block_header header;
|
||||
__u16 coeffs[3][3];
|
||||
__u16 gains[3];
|
||||
__u16 offs[3];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mali_c55_params_gamma - RGB Gamma correction
|
||||
*
|
||||
* Gamma correction is used to program a standard gamma curve such as the sRGB
|
||||
* one. It provides gains and offsets to implement contrast adjustments.
|
||||
*
|
||||
* Gamma correction is applied on both the FR and DS pipes separately in the RGB
|
||||
* colour domain where the following operations take place:
|
||||
* 1) An offset is subtracted from each colour channel
|
||||
* 2) Each colour channel is multiplied by a gain
|
||||
* 3) The Gamma LUT is applied to each colour channel
|
||||
*
|
||||
* The Gamma LUT has 129 entries where each node is an unsigned 12 bit number.
|
||||
* It is expected that LUT[0]=0 and LUT[128]=0xfff, with the other 127 values
|
||||
* defining the Gamma correction curve. The three gain multipliers are expressed
|
||||
* as 12-bits unsigned Q4.8 fixed-point numbers and the three offsets are
|
||||
* expressed as a 12-bits unsigned integers.
|
||||
*
|
||||
* As one Gamma correction block is available on both the FR and DS pipes, the
|
||||
* header.type field should be set to one of either
|
||||
* MALI_C55_PARAM_BLOCK_GAMMA_FR or MALI_C55_PARAM_BLOCK_GAMMA_DS from
|
||||
* :c:type:`mali_c55_param_block_type`.
|
||||
*
|
||||
* @header: The Mali-C55 parameters block header
|
||||
* @gains: Gains for the red, green and blue channel in unsigned Q4.8 format
|
||||
* @offs: Offsets subtracted from the red, green and blue channels
|
||||
* in unsigned 12 bits format
|
||||
* @lut: 129-node Gamma LUT in unsigned 12 bits format
|
||||
*/
|
||||
struct mali_c55_params_gamma {
|
||||
struct v4l2_isp_params_block_header header;
|
||||
__u16 gains[3];
|
||||
__u16 offs[3];
|
||||
__u32 lut[MALI_C55_NUM_GAMMA_LUT_ELEMENTS];
|
||||
};
|
||||
|
||||
/**
|
||||
* define MALI_C55_PARAMS_MAX_SIZE - Maximum size of all Mali C55 Parameters
|
||||
*
|
||||
@@ -780,6 +861,9 @@ struct mali_c55_params_mesh_shading_selection {
|
||||
sizeof(struct mali_c55_params_awb_config) + \
|
||||
sizeof(struct mali_c55_params_awb_gains) + \
|
||||
sizeof(struct mali_c55_params_mesh_shading_config) + \
|
||||
sizeof(struct mali_c55_params_mesh_shading_selection))
|
||||
sizeof(struct mali_c55_params_mesh_shading_selection) + \
|
||||
sizeof(struct mali_c55_params_ccm) + \
|
||||
sizeof(struct mali_c55_params_gamma) + \
|
||||
sizeof(struct mali_c55_params_gamma))
|
||||
|
||||
#endif /* __UAPI_MALI_C55_CONFIG_H */
|
||||
|
||||
730
include/uapi/linux/media/dreamchip/rppx1-config.h
Normal file
730
include/uapi/linux/media/dreamchip/rppx1-config.h
Normal file
@@ -0,0 +1,730 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
/*
|
||||
* Dreamchip RPP-X1 ISP Driver - Userspace API
|
||||
*
|
||||
* Copyright (C) 2026 Renesas Electronics Corp.
|
||||
* Copyright (C) 2026 Ideas on Board Oy
|
||||
* Copyright (C) 2026 Ragnatech AB
|
||||
*/
|
||||
|
||||
#ifndef __UAPI_RPP_X1_CONFIG_H
|
||||
#define __UAPI_RPP_X1_CONFIG_H
|
||||
|
||||
#include <linux/media/v4l2-isp.h>
|
||||
|
||||
/**
|
||||
* struct rppx1_window - Measurement window
|
||||
*
|
||||
* RPP-X1 measurement window. Different blocks use a window or multiple
|
||||
* windows for measurement purposes. This defines a common type for all of
|
||||
* them. The number of relevant bits depends on the block where the window is
|
||||
* used and is specified in the per-block description
|
||||
*
|
||||
* @h_offs: horizontal offset from the left of the frame in pixels
|
||||
* @v_offs: vertical offset from the top of the frame in pixels
|
||||
* @h_size: horizontal size of the window in pixels
|
||||
* @v_size: vertical size of the window in pixels
|
||||
*/
|
||||
struct rppx1_window {
|
||||
__u16 h_offs;
|
||||
__u16 v_offs;
|
||||
__u16 h_size;
|
||||
__u16 v_size;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum rppx1_meas_chan - Measurement point for the Histogram and EXM Modules
|
||||
*
|
||||
* Measurement points for the RPP-X1 Histogram measurement module and Exposure
|
||||
* measurement module.
|
||||
*
|
||||
* All tap points are available for the PRE1/PRE2 pipes. Only
|
||||
* RPPX1_MEAS_CHAN_SEL4 and RPPX1_MEAS_CHAN_SEL7 are available for the
|
||||
* MAIN_POST pipe.
|
||||
*
|
||||
* @RPPX1_MEAS_CHAN_SEL0: after input acquisition
|
||||
* @RPPX1_MEAS_CHAN_SEL1: after black level subtraction
|
||||
* @RPPX1_MEAS_CHAN_SEL2: after sensor gamma linearization
|
||||
* @RPPX1_MEAS_CHAN_SEL3: after lens shading correction
|
||||
* @RPPX1_MEAS_CHAN_SEL4: after auto white balance gains
|
||||
* @RPPX1_MEAS_CHAN_SEL5: after defect pixel correction
|
||||
* @RPPX1_MEAS_CHAN_SEL6: after denoise pre-filter
|
||||
* @RPPX1_MEAS_CHAN_SEL7: after demosaicing
|
||||
*/
|
||||
enum rppx1_meas_chan {
|
||||
RPPX1_MEAS_CHAN_SEL0,
|
||||
RPPX1_MEAS_CHAN_SEL1,
|
||||
RPPX1_MEAS_CHAN_SEL2,
|
||||
RPPX1_MEAS_CHAN_SEL3,
|
||||
RPPX1_MEAS_CHAN_SEL4,
|
||||
RPPX1_MEAS_CHAN_SEL5,
|
||||
RPPX1_MEAS_CHAN_SEL6,
|
||||
RPPX1_MEAS_CHAN_SEL7,
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Parameter Structures
|
||||
*
|
||||
* The same ISP block might be instantiated in multiple pipeliness and operate
|
||||
* on a different bitdepth/precision. For fields of varying length among
|
||||
* different instances of the same block, use a data type that can accommodate
|
||||
* the larger bitdepth/precision.
|
||||
*/
|
||||
|
||||
/**
|
||||
* enum rppx1_params_block_type - RPP-X1 extensible params block types
|
||||
*
|
||||
* NOTE: Only append to the enumeration as the numbers are uAPI.
|
||||
*
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_WBMEAS_POST: AWB Measurement Configuration
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_AWBG_PRE1: PRE1 pipe White Balance Gains
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_AWBG_PRE2: PRE2 White Balance Gains
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_AWBG_POST: MAIN_POST White Balance Gains
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_EXM_PRE1: PRE1 pipe Exposure Measurement
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_EXM_PRE2: PRE2 pipe Exposure Measurement
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_HIST_PRE1: PRE1 pipe Histogram Measurement
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_HIST_PRE2: PRE2 pipe Histogram Measurement
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_HIST_POST: POST pipe Histogram Measurement
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_BLS_PRE1: PRE1 pipe Black Level Subtraction
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_BLS_PRE2: PRE2 pipe Black Level Subtraction
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_CCOR_POST: POST pipe Color Correction
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_LSC_PRE1: PRE1 pipe Lens Shading Correction
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_LSC_PRE2: PRE2 pipe Lens Shading Correction
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_GA_HV: Human Vision Pipe Gamma Out Correction
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_GA_MV: Machine Vision Gamma Out Correction
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_LIN_PRE1: PRE1 pipe Linearization (Sensor De-gamma)
|
||||
* @RPPX1_PARAMS_BLOCK_TYPE_LIN_PRE2: PRE2 pipe Linearization (Sensor De-gamma)
|
||||
*/
|
||||
enum rppx1_params_block_type {
|
||||
RPPX1_PARAMS_BLOCK_TYPE_WBMEAS_POST,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_AWBG_PRE1,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_AWBG_PRE2,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_AWBG_POST,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_EXM_PRE1,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_EXM_PRE2,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_HIST_PRE1,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_HIST_PRE2,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_HIST_POST,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_BLS_PRE1,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_BLS_PRE2,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_CCOR_POST,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_LSC_PRE1,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_LSC_PRE2,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_GA_HV,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_GA_MV,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_LIN_PRE1,
|
||||
RPPX1_PARAMS_BLOCK_TYPE_LIN_PRE2,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum rppx1_wbmeas_mode - AWB measurement mode
|
||||
*
|
||||
* @RPPX1_WBMEAS_MODE_YCBCR: YCbCr measurement mode
|
||||
* @RPPX1_WBMEAS_MODE_RGB: RGB measurement mode
|
||||
*/
|
||||
enum rppx1_wbmeas_mode {
|
||||
RPPX1_WBMEAS_MODE_YCBCR,
|
||||
RPPX1_WBMEAS_MODE_RGB,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rppx1_wbmeas_params - AWB measurement configuration
|
||||
*
|
||||
* The Auto-White Balance measurement module is available on the MAIN_POST pipe.
|
||||
* It supports two measurement modes, selected by the @mode field. The
|
||||
* measurement window is programmed through the @wnd field.
|
||||
*
|
||||
* To support measurement in YCbCr mode a color conversion matrix with
|
||||
* programmable offset is available in the @ccor_coeff and @ccor_offs fields.
|
||||
* The color conversion matrix coefficients are represented as 16 bits signed
|
||||
* Q4.12 numbers ranging from -8 to +7.99. The per-color channel offsets are
|
||||
* represented as 25 bits 2's complement integer numbers ranging from -16777216
|
||||
* to +16777215.
|
||||
*
|
||||
* @header: block header (type = RPPX1_PARAMS_BLOCK_TYPE_WBMEAS_POST)
|
||||
* @wnd: measurement window
|
||||
* @mode: measurement mode (from enum rppx1_wbmeas_mode)
|
||||
* @ymax_cmp: enable Y_MAX compare using @max_y
|
||||
* @frames: number of frames for mean value calculation (0 = 1 frame)
|
||||
* @reserved: padding
|
||||
* @ref_cr_max_r: reference Cr or max red value in RGB mode, 24 bits
|
||||
* @ref_cb_max_b: reference Cb or max blue value in RGB mode, 24 bits
|
||||
* @min_y_max_g: luminance minimum value or max green value in RGB mode, 24 bits
|
||||
* @max_y: luminance maximum value, only valid if @mode is set to YCbCr and
|
||||
* @ymax_cmp is set to enabled, 24 bits
|
||||
* @max_csum: chrominance sum maximum value, 24 bits
|
||||
* @min_c: chrominance minimum value, 24 bits
|
||||
* @ccor_coeff: coefficients for color conversion matrix, signed 16 bits Q4.6
|
||||
* @reserved2: padding
|
||||
* @ccor_offs: R-G-B color conversion coefficients, signed 25 bits 2's complement
|
||||
* @reserved3: padding
|
||||
*/
|
||||
struct rppx1_wbmeas_params {
|
||||
struct v4l2_isp_params_block_header header;
|
||||
struct rppx1_window wnd;
|
||||
__u8 mode;
|
||||
__u8 ymax_cmp;
|
||||
__u8 frames;
|
||||
__u8 reserved;
|
||||
__u32 ref_cr_max_r;
|
||||
__u32 ref_cb_max_b;
|
||||
__u32 min_y_max_g;
|
||||
__u32 max_y;
|
||||
__u32 max_csum;
|
||||
__u32 min_c;
|
||||
__u16 ccor_coeff[3][3];
|
||||
__u16 reserved2;
|
||||
__u32 ccor_offs[3];
|
||||
__u32 reserved3;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rppx1_awbg_params - WB gain configuration
|
||||
*
|
||||
* The RPP-X1 White Balance Gain module is available in the PRE1 and PRE2
|
||||
* pre-fusion pipes and in the MAIN_POST post-fusion pipe. Userspace selects
|
||||
* which pipe to operate by setting the @header.type field to
|
||||
* RPPX1_PARAMS_BLOCK_TYPE_AWBG_PRE1, RPPX1_PARAMS_BLOCK_TYPE_AWBG_PRE2
|
||||
* or RPPX1_PARAMS_BLOCK_TYPE_AWBG_POST.
|
||||
*
|
||||
* The White Balance module allows to specify per-color channel gains, expressed
|
||||
* as unsigned fixed-point values as 18 bits unsigned integers in Q6.12 format
|
||||
* with a maximum of 63.999.
|
||||
*
|
||||
* @header: block header (type = RPPX1_PARAMS_BLOCK_TYPE_AWBG_PRE1 or
|
||||
* type = RPPX1_PARAMS_BLOCK_TYPE_AWBG_PRE2 or
|
||||
* type = RPPX1_PARAMS_BLOCK_TYPE_AWBG_POST)
|
||||
* @gain_red: gain for red component, 18-bit (unsigned Q6.12)
|
||||
* @gain_green_r: gain for green component in red lines, 18-bit (unsigned Q6.12)
|
||||
* @gain_blue: gain for blue component, 18-bit (unsigned Q6.12)
|
||||
* @gain_green_b: gain for green component in blue lines, 18-bit (unsigned Q6.12)
|
||||
*/
|
||||
struct rppx1_awbg_params {
|
||||
struct v4l2_isp_params_block_header header;
|
||||
__u32 gain_red;
|
||||
__u32 gain_green_r;
|
||||
__u32 gain_blue;
|
||||
__u32 gain_green_b;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum rppx1_exm_mode - Exposure measurement mode
|
||||
*
|
||||
* Exaposure measurement mode selection (RGB/Bayer).
|
||||
*
|
||||
* @RPPX1_EXP_MEASURING_MODE_DISABLED: no measurement
|
||||
* @RPPX1_EXP_MEASURING_MODE_RGB: Y/R/G/B measurement
|
||||
* @RPPX1_EXP_MEASURING_MODE_BAYER: Bayer RGB measurement
|
||||
*/
|
||||
enum rppx1_exm_mode {
|
||||
RPPX1_EXP_MEASURING_MODE_DISABLED,
|
||||
RPPX1_EXP_MEASURING_MODE_RGB,
|
||||
RPPX1_EXP_MEASURING_MODE_BAYER,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rppx1_exm_params - Exposure measurement configuration
|
||||
*
|
||||
* The RPP-X1 Exposure measurement unit is available on the PRE1 and PRE2
|
||||
* pre-fusion pipes. Userspace selects which pipe to operate by setting
|
||||
* the @header.type field to RPPX1_PARAMS_BLOCK_TYPE_EXM_PRE1 or
|
||||
* RPPX1_PARAMS_BLOCK_TYPE_EXM_PRE2.
|
||||
*
|
||||
* Exposure measurement is performed in the RGB or Bayer domain, according to
|
||||
* the setting of the @mode field. The exposure measurement tap point is
|
||||
* selected according to the value of @channel_sel.
|
||||
*
|
||||
* The exposure measurement is performed on an input window specified in @wnd.
|
||||
* To each color component a programmable weight coefficient is associated.
|
||||
* Coefficients are represented as unsigned 8 bits integer values in Q1.7 format
|
||||
* ranging from 0 to 1.992.
|
||||
*
|
||||
* The @last_line fields controls when the exposure measurement completes. It
|
||||
* is usually programmed to the value of (@wnd.v_offs + @wnd.v_size + 1).
|
||||
*
|
||||
* @header: block header (type = RPPX1_PARAMS_BLOCK_TYPE_EXM_PRE1 or
|
||||
* type = RPPX1_PARAMS_BLOCK_TYPE_EXM_PRE2)
|
||||
* @wnd: measurement window coordinates
|
||||
* @mode: exposure measure mode (from enum rppx1_exm_mode)
|
||||
* @last_line: line number for which the exposure measurement completes
|
||||
* @channel_sel: exposure measurement point (see enum rppx1_meas_chan)
|
||||
* @coeff_r: coefficient for the red Bayer sample or red color channel, Q1.7
|
||||
* @coeff_g_gr: coefficient for the green/red Bayer sample or green color channel, Q1.7
|
||||
* @coeff_b: coefficient for the blue Bayer sample or blue color channel, Q1.7
|
||||
* @coeff_gb: coefficient for the green/blue Bayer sample, unused in RGB mode, Q1.7
|
||||
* @reserved: padding
|
||||
*/
|
||||
struct rppx1_exm_params {
|
||||
struct v4l2_isp_params_block_header header;
|
||||
struct rppx1_window wnd;
|
||||
__u32 mode;
|
||||
__u32 last_line;
|
||||
__u8 channel_sel;
|
||||
__u8 coeff_r;
|
||||
__u8 coeff_g_gr;
|
||||
__u8 coeff_b;
|
||||
__u8 coeff_gb;
|
||||
__u8 reserved[3];
|
||||
};
|
||||
|
||||
/* Histogram */
|
||||
#define RPPX1_HIST_WEIGHT_GRIDS_SIZE 25
|
||||
|
||||
/**
|
||||
* enum rppx1_hist_mode - Histogram measurement mode
|
||||
*
|
||||
* Histogram measurement mode. Select which channel or combination of channels
|
||||
* the histogram measurement is performed on.
|
||||
*
|
||||
* @RPPX1_HIST_MODE_DISABLE: histogram disabled
|
||||
* @RPPX1_HIST_MODE_RGB_COMBINED: combined RGB histogram
|
||||
* @RPPX1_HIST_MODE_R_HISTOGRAM: red channel histogram
|
||||
* @RPPX1_HIST_MODE_GR_HISTOGRAM: green/red channel histogram
|
||||
* @RPPX1_HIST_MODE_B_HISTOGRAM: blue channel histogram
|
||||
* @RPPX1_HIST_MODE_GB_HISTOGRAM: green/blue histogram
|
||||
*/
|
||||
enum rppx1_hist_mode {
|
||||
RPPX1_HIST_MODE_DISABLE,
|
||||
RPPX1_HIST_MODE_RGB_COMBINED,
|
||||
RPPX1_HIST_MODE_R_HISTOGRAM,
|
||||
RPPX1_HIST_MODE_GR_HISTOGRAM,
|
||||
RPPX1_HIST_MODE_B_HISTOGRAM,
|
||||
RPPX1_HIST_MODE_GB_HISTOGRAM,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rppx1_hist_params - Histogram measurement configuration
|
||||
*
|
||||
* The RPP-X1 Histogram measurement unit is available on the PRE1, PRE2 and
|
||||
* MAIN_POST pipes. Userspace selects which pipe to operate by setting the
|
||||
* @header.type field to RPPX1_PARAMS_BLOCK_TYPE_HIST_PRE1,
|
||||
* RPPX1_PARAMS_BLOCK_TYPE_HIST_PRE2 or
|
||||
* RPPX1_PARAMS_BLOCK_TYPE_HIST_POST.
|
||||
*
|
||||
* The histogram measurement point is selected using the @channel field while
|
||||
* histogram measurement mode is selected using the @mode field.
|
||||
*
|
||||
* Histogram measurement is performed by programming subsampling factors using
|
||||
* the @v_stepsize and @h_step_inc fields and by weighted windowing, by
|
||||
* programming the size of the measurement window @wnd with @weights associated
|
||||
* to each cell of the 5x5 measurement grid. Weights are represented as 5 bits
|
||||
* integer values ranging from 0 to 16.
|
||||
*
|
||||
* The @last_line fields controls when the histogram measurement completes. It
|
||||
* is usually programmed to the value of (@wnd.v_offs + @wnd.v_size - 1).
|
||||
*
|
||||
* Histogram values are calculated by applying a per-color channel coefficient
|
||||
* represented as an 8 bits unsigned Q1.7 integer value. The @sample_offs and
|
||||
* @sample_shift fields allow to reduce the color dynamic range on which
|
||||
* histogram data are produced.
|
||||
*
|
||||
* @header: block header (type = RPPX1_PARAMS_BLOCK_TYPE_HIST_PRE1,
|
||||
* type = RPPX1_PARAMS_BLOCK_TYPE_HIST_PRE2 or
|
||||
* type = RPPX1_PARAMS_BLOCK_TYPE_HIST_POST)
|
||||
* @wnd: measurement window coordinates
|
||||
* @last_line: line number for which the histogram measurement completes
|
||||
* @v_stepsize: vertical subsampling divider, 7 bits
|
||||
* @h_step_inc: horizontal subsampling step counter, 17 bits
|
||||
* @sample_offs: sample offset, 24 bits
|
||||
* @mode: histogram measurement mode (from enum rppx1_hist_mode)
|
||||
* @channel_sel: histogram measurement point (see enum rppx1_meas_chan)
|
||||
* @weights: weighting factors for each sub-window (5x5 grid)
|
||||
* @coeff: R-G-B coefficients, 8 bits unsigned Q1.7
|
||||
* @sample_shift: sample shift, 4 bits
|
||||
* @reserved: padding
|
||||
*/
|
||||
struct rppx1_hist_params {
|
||||
struct v4l2_isp_params_block_header header;
|
||||
struct rppx1_window wnd;
|
||||
__u32 last_line;
|
||||
__u32 v_stepsize;
|
||||
__u32 h_step_inc;
|
||||
__u32 sample_offs;
|
||||
__u8 mode;
|
||||
__u8 channel_sel;
|
||||
__u8 weights[RPPX1_HIST_WEIGHT_GRIDS_SIZE];
|
||||
__u8 coeff[3];
|
||||
__u8 sample_shift;
|
||||
__u8 reserved;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rppx1_bls_fixed - BLS fixed subtraction values
|
||||
*
|
||||
* Fixed black level values subtracted from sensor data per Bayer channel.
|
||||
* Negative values result in addition.
|
||||
*
|
||||
* The PRE1 pipe BLS module operates on a 24-bits input data and fixed black
|
||||
* levels are stored as a signed 2's complement representation ranging from
|
||||
* -2^24 to 2^24-1.
|
||||
*
|
||||
* The PRE2 pipe BLS module operates on a 12-bits input data and fixed black
|
||||
* levels are stored as a signed 2's complement representation ranging from
|
||||
* -2^12 to 2^12-1.
|
||||
*
|
||||
* Userspace is expected to provide fixed black level values with a bit-depth
|
||||
* matching the one of pipe in use.
|
||||
*
|
||||
* These subtraction values are matched with the sensor native Bayer components
|
||||
* ordering according to the cropping configuration on the input port.
|
||||
*
|
||||
* @a: subtraction value for channel A
|
||||
* @b: subtraction value for channel B
|
||||
* @c: subtraction value for channel C
|
||||
* @d: subtraction value for channel D
|
||||
*/
|
||||
struct rppx1_bls_fixed {
|
||||
__u32 a;
|
||||
__u32 b;
|
||||
__u32 c;
|
||||
__u32 d;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum rppx1_bls_mode - BLS subtraction mode
|
||||
*
|
||||
* Select if subtracted black level come from fixed or measured values.
|
||||
*
|
||||
* @RPPX1_BLS_MODE_FIXED: subtract fixed values
|
||||
* @RPPX1_BLS_MODE_MEAS: subtract measured values
|
||||
*/
|
||||
enum rppx1_bls_mode {
|
||||
RPPX1_BLS_MODE_FIXED,
|
||||
RPPX1_BLS_MODE_MEAS,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum rppx1_bls_win_en: BLS measurement configuration
|
||||
*
|
||||
* Select the measurement window to use for measured black level values.
|
||||
*
|
||||
* @RPPX1_BLS_WIN_EN_OFF: disable measurement
|
||||
* @RPPX1_BLS_WIN_EN_WIN1: Enable measurement from window 1
|
||||
* @RPPX1_BLS_WIN_EN_WIN2: enable measurement from window 2
|
||||
* @RPPX1_BLS_WIN_EN_WIN12: enable measurement from window 1 and window 2
|
||||
*/
|
||||
enum rppx1_bls_win_en {
|
||||
RPPX1_BLS_WIN_EN_OFF,
|
||||
RPPX1_BLS_WIN_EN_WIN1,
|
||||
RPPX1_BLS_WIN_EN_WIN2,
|
||||
RPPX1_BLS_WIN_EN_WIN12,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rppx1_bls_params - RPP-X1 Black Level Subtraction Module
|
||||
*
|
||||
* The RPP-X1 Black Level Subtraction module is available on the PRE1 and PRE2
|
||||
* pre-fusion pipes. Userspace selects which pipe to operate by setting the
|
||||
* @header.type field to RPPX1_PARAMS_BLOCK_TYPE_BLS_PRE1 or
|
||||
* RPPX1_PARAMS_BLOCK_TYPE_BLS_PRE2.
|
||||
*
|
||||
* The BLS module operates on fixed or measured data according to the setting of
|
||||
* the @mode field. When RPPX1_BLS_MODE_FIXED is used userspace shall provide
|
||||
* the per-channel black levels in @fixed. When RPPX1_BLS_MODE_MEAS is used
|
||||
* userspace shall configure the measurement windows @window1 and optionally
|
||||
* @window2 to select the optically black pixels region in the input frame. The
|
||||
* @samples fields controls how many measure samples are used for averaging the
|
||||
* measured black levels.
|
||||
*
|
||||
* @header: block header (type = RPPX1_PARAMS_BLOCK_TYPE_BLS_PRE1 or
|
||||
* type == RPPX1_PARAMS_BLOCK_TYPE_BLS_PRE2)
|
||||
* @window1: BLS measurement window 1 (14 bits)
|
||||
* @window2: BLS measurement window 2 (14 bits)
|
||||
* @fixed: fixed subtraction values (see enum rppx1_bls_fixed)
|
||||
* @mode: BLS subtraction mode (see enum rppx1_bls_mode)
|
||||
* @en_windows: BLS measurement mode (see rppx1_bls_win_en)
|
||||
* @samples: log2 of the number of measured pixels per Bayer position
|
||||
* @reserved: padding
|
||||
*/
|
||||
struct rppx1_bls_params {
|
||||
struct v4l2_isp_params_block_header header;
|
||||
struct rppx1_window window1;
|
||||
struct rppx1_window window2;
|
||||
struct rppx1_bls_fixed fixed;
|
||||
__u8 mode;
|
||||
__u8 en_windows;
|
||||
__u8 samples;
|
||||
__u8 reserved[5];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rppx1_ccor_params - Color CORrection configuration
|
||||
*
|
||||
* The CCOR (Color Correction) module is available on the MAIN_POST pipe. It
|
||||
* performs color space correction on a pixel-per-pixel basis using a 3x3 matrix
|
||||
* of coefficients and per-color channel offsets.
|
||||
*
|
||||
* The matrix coefficients are represented as 16 bits signed fixed point values
|
||||
* in Q4.12 format ranging from -8 to +7.999.
|
||||
*
|
||||
* The per-channel color offsets are represented as 2's complement values
|
||||
* stored in 25 bits ranging from -16777216 to 16777215.
|
||||
*
|
||||
* @header: block header (type = RPPX1_PARAMS_BLOCK_TYPE_CCOR_POST)
|
||||
* @coeff: color correction matrix coefficients, 16 bits signed Q4.12
|
||||
* @reserved: padding
|
||||
* @offset: R, G, B offsets, 2's complement 25 bits
|
||||
*/
|
||||
struct rppx1_ccor_params {
|
||||
struct v4l2_isp_params_block_header header;
|
||||
__u16 coeff[3][3];
|
||||
__u16 reserved;
|
||||
__u32 offset[3];
|
||||
};
|
||||
|
||||
/* Lens Shade Correction */
|
||||
#define RPPX1_LSC_SAMPLES_MAX 17
|
||||
#define RPPX1_LSC_NUM_SECTORS 16
|
||||
|
||||
/**
|
||||
* struct rppx1_lsc_params - Lens Shading Correction configuration
|
||||
*
|
||||
* The RPP-X1 Lens shading correction module is available on the PRE1 and PRE2
|
||||
* pre-fusion pipes. Userspace selects which pipe to operate by setting the
|
||||
* @header.type field to RPPX1_PARAMS_BLOCK_TYPE_LSC_PRE1 or
|
||||
* RPPX1_PARAMS_BLOCK_TYPE_LSC_PRE2.
|
||||
*
|
||||
* The module applies per-color channel correction factors @r_data, @gr_data,
|
||||
* @gb_data and @b_data as a 16x16 grid mapped on the image. The size of each
|
||||
* grid segment is expressed by the @x_sect_size and @y_sect_size arrays. Each
|
||||
* segment shall be at least 8 pixels in size and the sum of all horizontal
|
||||
* segments @x_sect_size shall match the input frame size width.
|
||||
*
|
||||
* The correction factors values are expressed as unsigned Q2.10 integers
|
||||
* ranging from 1 to 3.999.
|
||||
*
|
||||
* Pre-calculated interpolation factors shall be provided in the @x_grad
|
||||
* and @y_grad fields, expressed as 12 bits integer values.
|
||||
*
|
||||
* @header: block header (type = RPPX1_PARAMS_BLOCK_TYPE_LSC)
|
||||
* @r_data: correction factors for the red channel in Q2.10 format
|
||||
* @gr_data: correction factors for the green (red) channel in Q2.10 format
|
||||
* @gb_data: correction factors for the green (blue) channel in Q2.10 format
|
||||
* @b_data: correction factors for the blue channel in Q2.10 format
|
||||
* @x_grad: Interpolation gradients for each horizontal sector (12 bits)
|
||||
* @y_grad: Interpolation gradients for each vertical sector (12 bits)
|
||||
* @x_sect_size: Horizontal sectors sizes
|
||||
* @y_sect_size: Vertical sectors sizes
|
||||
*/
|
||||
struct rppx1_lsc_params {
|
||||
struct v4l2_isp_params_block_header header;
|
||||
__u16 r_data[RPPX1_LSC_SAMPLES_MAX][RPPX1_LSC_SAMPLES_MAX];
|
||||
__u16 gr_data[RPPX1_LSC_SAMPLES_MAX][RPPX1_LSC_SAMPLES_MAX];
|
||||
__u16 gb_data[RPPX1_LSC_SAMPLES_MAX][RPPX1_LSC_SAMPLES_MAX];
|
||||
__u16 b_data[RPPX1_LSC_SAMPLES_MAX][RPPX1_LSC_SAMPLES_MAX];
|
||||
__u16 x_grad[RPPX1_LSC_NUM_SECTORS];
|
||||
__u16 y_grad[RPPX1_LSC_NUM_SECTORS];
|
||||
__u16 x_sect_size[RPPX1_LSC_NUM_SECTORS];
|
||||
__u16 y_sect_size[RPPX1_LSC_NUM_SECTORS];
|
||||
};
|
||||
|
||||
/* Gamma Out */
|
||||
#define RPPX1_GA_MAX_SAMPLES 17
|
||||
|
||||
/**
|
||||
* enum rppx1_ga_seg_mode - Gamma out curve segmentation mode
|
||||
*
|
||||
* Segmentation mode of the 16 input sampling points for the Gamma Out
|
||||
* Correction module.
|
||||
*
|
||||
* @RPPX1_GA_SEG_MODE_LOGARITHMIC: logarithmic-like segmentation mode
|
||||
* @RPPX1_GA_SEG_MODE_EQUIDISTANT: equidistant segmentation mode
|
||||
*/
|
||||
enum rppx1_ga_seg_mode {
|
||||
RPPX1_GA_SEG_MODE_LOGARITHMIC,
|
||||
RPPX1_GA_SEG_MODE_EQUIDISTANT
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rppx1_ga_params - Gamma Out Correction configuration
|
||||
*
|
||||
* The Gamma Out Correction module is available on the Human Vision Output
|
||||
* Pipe (HV) and the Machine Vision Output Pipe (MV). Userspace selects
|
||||
* which pipe to operate by setting the @header.type field to
|
||||
* RPPX1_PARAMS_BLOCK_TYPE_GA_HV or RPPX1_PARAMS_BLOCK_TYPE_GA_MV.
|
||||
*
|
||||
* The module allows to apply a @gamma_y gamma correction curve to RGB data
|
||||
* represented as a table of 16 entries. The 16 input sampling points can be
|
||||
* equidistant or segmented using a logarithmic scale according to the value of
|
||||
* @mode.
|
||||
*
|
||||
* The gamma curve values are 12 bits on the HV output pipe and 24 bits on the
|
||||
* MV output pipe. Userspace is expected to provide the curve values with a
|
||||
* bit-depth matching the one of pipe in use.
|
||||
*
|
||||
* @header: block header (type = RPPX1_PARAMS_BLOCK_TYPE_GA_HV or
|
||||
* type = RPPX1_PARAMS_BLOCK_TYPE_GA_MV)
|
||||
* @gamma_y: gamma out curve y-axis values
|
||||
* @mode: gamma curve input segmentation mode (see rppx1_ga_seg_mode)
|
||||
* @reserved: padding
|
||||
*/
|
||||
struct rppx1_ga_params {
|
||||
struct v4l2_isp_params_block_header header;
|
||||
__u32 gamma_y[RPPX1_GA_MAX_SAMPLES];
|
||||
__u8 mode;
|
||||
__u8 reserved[3];
|
||||
};
|
||||
|
||||
/* Linearization (Sensor De-gamma) */
|
||||
#define RPPX1_LIN_SAMPLE_POINTS_NUM 16
|
||||
#define RPPX1_LIN_DEGAMMA_CURVE_NUM 17
|
||||
|
||||
/**
|
||||
* struct rppx1_lin_params - Linearization (Sensor De-gamma) configuration
|
||||
*
|
||||
* The RPP-X1 linearization module is available on the PRE1 and PRE2 pre-fusion
|
||||
* pipes. Userspace selects which pipe to operate by setting the @header.type
|
||||
* field to RPPX1_PARAMS_BLOCK_TYPE_LIN_PRE1 or
|
||||
* RPPX1_PARAMS_BLOCK_TYPE_LIN_PRE2.
|
||||
*
|
||||
* The LIN module applies the per-color channel de-gamma linearization curves
|
||||
* @curve_r, @curve_g and @curve_b defined on the input sampling points @dx.
|
||||
*
|
||||
* For the PRE1 pipe the de-gamma curves values are 24-bits, for the PRE2 pipe
|
||||
* the de-gamma curve values are 12-bits.
|
||||
*
|
||||
* For the PRE1 pipe de-gamma module sampling points @dx values are in the range
|
||||
* [0, 15] (4 bits). For the PRE2 pipe de-gamma module sampling points values
|
||||
* are in the range [0, 7] (3 bits).
|
||||
*
|
||||
* Userspace is expected to provide the curve values and sampling points with a
|
||||
* bit-depth matching the one of pipe in use.
|
||||
*
|
||||
* @header: block header (type = RPPX1_PARAMS_BLOCK_TYPE_LIN_PRE1 or
|
||||
* RPPX1_PARAMS_BLOCK_TYPE_LIN_PRE2)
|
||||
* @curve_r: de-gamma linearization curve for red channel
|
||||
* @curve_g: de-gamma linearization curve for green channel
|
||||
* @curve_b: de-gamma linearization curve for blue channel
|
||||
* @dx: input sampling points
|
||||
* @reserved: padding
|
||||
*/
|
||||
struct rppx1_lin_params {
|
||||
struct v4l2_isp_params_block_header header;
|
||||
__u32 curve_r[RPPX1_LIN_DEGAMMA_CURVE_NUM];
|
||||
__u32 curve_g[RPPX1_LIN_DEGAMMA_CURVE_NUM];
|
||||
__u32 curve_b[RPPX1_LIN_DEGAMMA_CURVE_NUM];
|
||||
__u8 dx[RPPX1_LIN_SAMPLE_POINTS_NUM];
|
||||
__u32 reserved;
|
||||
};
|
||||
|
||||
/**
|
||||
* RPPX1_PARAMS_MAX_SIZE - Maximum size of all RPP-X1 parameter blocks
|
||||
*
|
||||
* Some types are reported twice as the same block might be instantiated in
|
||||
* multiple pipes.
|
||||
*/
|
||||
#define RPPX1_PARAMS_MAX_SIZE \
|
||||
(sizeof(struct rppx1_wbmeas_params) + \
|
||||
sizeof(struct rppx1_awbg_params) + \
|
||||
sizeof(struct rppx1_awbg_params) + \
|
||||
sizeof(struct rppx1_awbg_params) + \
|
||||
sizeof(struct rppx1_exm_params) + \
|
||||
sizeof(struct rppx1_exm_params) + \
|
||||
sizeof(struct rppx1_hist_params) + \
|
||||
sizeof(struct rppx1_hist_params) + \
|
||||
sizeof(struct rppx1_hist_params) + \
|
||||
sizeof(struct rppx1_bls_params) + \
|
||||
sizeof(struct rppx1_bls_params) + \
|
||||
sizeof(struct rppx1_ccor_params) + \
|
||||
sizeof(struct rppx1_lsc_params) + \
|
||||
sizeof(struct rppx1_lsc_params) + \
|
||||
sizeof(struct rppx1_ga_params) + \
|
||||
sizeof(struct rppx1_ga_params) + \
|
||||
sizeof(struct rppx1_lin_params) + \
|
||||
sizeof(struct rppx1_lin_params))
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Statistics Structures
|
||||
*
|
||||
* The same ISP block might be instantiated in multiple pipeliness and operate
|
||||
* on a different bitdepth/precision. For fields of varying length among
|
||||
* different instances of the same block, use a data type that can accommodate
|
||||
* the larger bitdepth/precision.
|
||||
*/
|
||||
|
||||
/**
|
||||
* enum rppx1_stats_block_type - RPP-X1 extensible stats block types
|
||||
*
|
||||
* NOTE: Only append to the enumeration as the numbers are uAPI.
|
||||
*
|
||||
* @RPPX1_STATS_BLOCK_TYPE_WBMEAS_POST: post-fusion white-balance measurement
|
||||
* @RPPX1_STATS_BLOCK_TYPE_EXM_PRE1: pre-fusion pipe1 exposure measurement
|
||||
* @RPPX1_STATS_BLOCK_TYPE_EXM_PRE2: pre-fusion pipe2 exposure measurement
|
||||
* @RPPX1_STATS_BLOCK_TYPE_HIST_PRE1: pre-fusion pipe1 histogram
|
||||
* @RPPX1_STATS_BLOCK_TYPE_HIST_PRE2: pre-fusion pipe2 histogram
|
||||
* @RPPX1_STATS_BLOCK_TYPE_HIST_POST: post-fusion histogram
|
||||
*/
|
||||
enum rppx1_stats_block_type {
|
||||
RPPX1_STATS_BLOCK_TYPE_WBMEAS_POST,
|
||||
RPPX1_STATS_BLOCK_TYPE_EXM_PRE1,
|
||||
RPPX1_STATS_BLOCK_TYPE_EXM_PRE2,
|
||||
RPPX1_STATS_BLOCK_TYPE_HIST_PRE1,
|
||||
RPPX1_STATS_BLOCK_TYPE_HIST_PRE2,
|
||||
RPPX1_STATS_BLOCK_TYPE_HIST_POST,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rppx1_wbmeas_stats - AWB statistics
|
||||
*
|
||||
* @header: block header (type = RPPX1_STATS_BLOCK_TYPE_WBMEAS_POST)
|
||||
* @cnt: Number of pixels matched
|
||||
* @mean_y_or_g: mean Y (or G in RGB mode) value, 24-bit
|
||||
* @mean_cb_or_b: mean Cb (or B in RGB mode) value, 24-bit
|
||||
* @mean_cr_or_r: mean Cr (or R in RGB mode) value, 24-bit
|
||||
*/
|
||||
struct rppx1_wbmeas_stats {
|
||||
struct v4l2_isp_block_header header;
|
||||
__u32 cnt;
|
||||
__u32 mean_y_or_g;
|
||||
__u32 mean_cb_or_b;
|
||||
__u32 mean_cr_or_r;
|
||||
};
|
||||
|
||||
/* Exposure Measurement */
|
||||
#define RPPX1_EXM_NUM_WIN 25
|
||||
|
||||
/**
|
||||
* struct rppx1_exm_stats - Exposure measurement
|
||||
*
|
||||
* RPP-X1 exposure measurement calculates the mean value on 25 programmable
|
||||
* windows on the input picture.
|
||||
*
|
||||
* @header: block header (type = RPPX1_STATS_BLOCK_TYPE_EXM_PRE1)
|
||||
* @exp_mean: mean luminance values per block, up to 20-bit
|
||||
* @reserved: padding
|
||||
*/
|
||||
struct rppx1_exm_stats {
|
||||
struct v4l2_isp_block_header header;
|
||||
__u32 exp_mean[RPPX1_EXM_NUM_WIN];
|
||||
__u32 reserved;
|
||||
};
|
||||
|
||||
/* Histogram */
|
||||
#define RPPX1_HIST_NUM_BINS 32
|
||||
|
||||
/**
|
||||
* struct rppx1_hist_stats - Histogram statistics
|
||||
*
|
||||
* @header: block header (type = RPPX1_STATS_BLOCK_TYPE_HIST_POST)
|
||||
* @hist_bins: accumulation histogram results in unsigned 20-bit Q16.4 format
|
||||
*/
|
||||
struct rppx1_hist_stats {
|
||||
struct v4l2_isp_block_header header;
|
||||
__u32 hist_bins[RPPX1_HIST_NUM_BINS];
|
||||
};
|
||||
|
||||
/**
|
||||
* RPPX1_STATS_MAX_SIZE - Maximum size of all RPP-X1 statistics
|
||||
*
|
||||
* Some types are reported twice as the same block might be instantiated in
|
||||
* multiple pipes.
|
||||
*/
|
||||
#define RPPX1_STATS_MAX_SIZE \
|
||||
(sizeof(struct rppx1_wbmeas_stats) + \
|
||||
sizeof(struct rppx1_exm_stats) + \
|
||||
sizeof(struct rppx1_exm_stats) + \
|
||||
sizeof(struct rppx1_hist_stats) + \
|
||||
sizeof(struct rppx1_hist_stats) + \
|
||||
sizeof(struct rppx1_hist_stats))
|
||||
|
||||
#endif /* __UAPI_RPP_X1_CONFIG_H */
|
||||
@@ -13,25 +13,33 @@
|
||||
#include <linux/types.h>
|
||||
|
||||
/**
|
||||
* enum v4l2_isp_params_version - V4L2 ISP parameters versioning
|
||||
* enum v4l2_isp_version - V4L2 ISP serialization format versioning
|
||||
*
|
||||
* @V4L2_ISP_PARAMS_VERSION_V0: First version of the V4L2 ISP parameters format
|
||||
* (for compatibility)
|
||||
* @V4L2_ISP_PARAMS_VERSION_V1: First version of the V4L2 ISP parameters format
|
||||
* @V4L2_ISP_VERSION_V0: First version of the V4L2 ISP serialization format
|
||||
* (for compatibility)
|
||||
* @V4L2_ISP_VERSION_V1: First version of the V4L2 ISP serialization format
|
||||
*
|
||||
* V0 and V1 are identical in order to support drivers compatible with the V4L2
|
||||
* ISP parameters format already upstreamed which use either 0 or 1 as their
|
||||
* versioning identifier. Both V0 and V1 refers to the first version of the
|
||||
* V4L2 ISP parameters format.
|
||||
* ISP format already upstreamed which use either 0 or 1 as their versioning
|
||||
* identifier. Both V0 and V1 refers to the first version of the V4L2 ISP
|
||||
* serialization format.
|
||||
*
|
||||
* Future revisions of the V4L2 ISP parameters format should start from the
|
||||
* Future revisions of the V4L2 ISP serialization format should start from the
|
||||
* value of 2.
|
||||
*/
|
||||
enum v4l2_isp_params_version {
|
||||
V4L2_ISP_PARAMS_VERSION_V0 = 0,
|
||||
V4L2_ISP_PARAMS_VERSION_V1
|
||||
enum v4l2_isp_version {
|
||||
V4L2_ISP_VERSION_V0 = 0,
|
||||
V4L2_ISP_VERSION_V1
|
||||
};
|
||||
|
||||
/*
|
||||
* Compatibility with existing users of v4l2_isp_params which pre-date the
|
||||
* introduction of v4l2_isp_stats.
|
||||
*/
|
||||
#define v4l2_isp_params_version v4l2_isp_version
|
||||
#define V4L2_ISP_PARAMS_VERSION_V0 V4L2_ISP_VERSION_V0
|
||||
#define V4L2_ISP_PARAMS_VERSION_V1 V4L2_ISP_VERSION_V1
|
||||
|
||||
#define V4L2_ISP_PARAMS_FL_BLOCK_DISABLE (1U << 0)
|
||||
#define V4L2_ISP_PARAMS_FL_BLOCK_ENABLE (1U << 1)
|
||||
|
||||
@@ -39,64 +47,89 @@ enum v4l2_isp_params_version {
|
||||
* Reserve the first 8 bits for V4L2_ISP_PARAMS_FL_* flag.
|
||||
*
|
||||
* Driver-specific flags should be defined as:
|
||||
* #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(0))
|
||||
* #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(1))
|
||||
* #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_FL_DRIVER_FLAGS(0))
|
||||
* #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_FL_DRIVER_FLAGS(1))
|
||||
*/
|
||||
#define V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(n) ((n) + 8)
|
||||
#define V4L2_ISP_FL_DRIVER_FLAGS(n) ((n) + 8)
|
||||
|
||||
/**
|
||||
* struct v4l2_isp_params_block_header - V4L2 extensible parameters block header
|
||||
* @type: The parameters block type (driver-specific)
|
||||
* struct v4l2_isp_block_header - V4L2 extensible block header
|
||||
* @type: The parameters or statistics block type (driver-specific)
|
||||
* @flags: A bitmask of block flags (driver-specific)
|
||||
* @size: Size (in bytes) of the parameters block, including this header
|
||||
* @size: Size (in bytes) of the block, including this header
|
||||
*
|
||||
* This structure represents the common part of all the ISP configuration
|
||||
* blocks. Each parameters block shall embed an instance of this structure type
|
||||
* as its first member, followed by the block-specific configuration data.
|
||||
* This structure represents the common part of all the ISP configuration or
|
||||
* statistic blocks. Each block shall embed an instance of this structure type
|
||||
* as its first member, followed by the block-specific configuration or
|
||||
* statistic data.
|
||||
*
|
||||
* The @type field is an ISP driver-specific value that identifies the block
|
||||
* type. The @size field specifies the size of the parameters block.
|
||||
* type. The @size field specifies the size of the block, including this
|
||||
* header.
|
||||
*
|
||||
* The @flags field is a bitmask of per-block flags V4L2_PARAMS_ISP_FL_* and
|
||||
* driver-specific flags specified by the driver header.
|
||||
* The @flags field is a bitmask of per-block flags. If a block is used for
|
||||
* configuration parameters this field can be a combination of
|
||||
* V4L2_ISP_PARAMS_FL_* and driver-specific flags. If a block is used
|
||||
* for statistics this fields is used to report optional
|
||||
* driver-specific flags, if any.
|
||||
*/
|
||||
struct v4l2_isp_params_block_header {
|
||||
struct v4l2_isp_block_header {
|
||||
__u16 type;
|
||||
__u16 flags;
|
||||
__u32 size;
|
||||
} __attribute__((aligned(8)));
|
||||
|
||||
/**
|
||||
* struct v4l2_isp_params_buffer - V4L2 extensible parameters configuration
|
||||
* @version: The parameters buffer version (driver-specific)
|
||||
* @data_size: The configuration data effective size, excluding this header
|
||||
* @data: The configuration data
|
||||
* v4l2_isp_params_block_header - V4L2 extensible parameters block header
|
||||
*
|
||||
* This structure contains the configuration parameters of the ISP algorithms,
|
||||
* serialized by userspace into a data buffer. Each configuration parameter
|
||||
* block is represented by a block-specific structure which contains a
|
||||
* :c:type:`v4l2_isp_params_block_header` entry as first member. Userspace
|
||||
* populates the @data buffer with configuration parameters for the blocks that
|
||||
* it intends to configure. As a consequence, the data buffer effective size
|
||||
* changes according to the number of ISP blocks that userspace intends to
|
||||
* configure and is set by userspace in the @data_size field.
|
||||
* Compatibility with existing users of v4l2_isp_params_block_header
|
||||
* which pre-date the introduction of v4l2_isp_block_header.
|
||||
*/
|
||||
#define v4l2_isp_params_block_header v4l2_isp_block_header
|
||||
|
||||
/**
|
||||
* struct v4l2_isp_buffer - V4L2 extensible buffer
|
||||
* @version: The extensible buffer version (driver-specific)
|
||||
* @data_size: The data effective size, excluding this header
|
||||
* @data: The configuration or statistics data
|
||||
*
|
||||
* The parameters buffer is versioned by the @version field to allow modifying
|
||||
* and extending its definition. Userspace shall populate the @version field to
|
||||
* inform the driver about the version it intends to use. The driver will parse
|
||||
* and handle the @data buffer according to the data layout specific to the
|
||||
* indicated version and return an error if the desired version is not
|
||||
* This structure contains ISP configuration parameters or ISP hardware
|
||||
* statistics serialized into a data buffer. Each block is represented by a
|
||||
* block-specific structure which contains a :c:type:`v4l2_isp_block_header`
|
||||
* entry as first member.
|
||||
*
|
||||
* When used for ISP parameters, userspace populates the @data buffer with
|
||||
* configuration parameters for the blocks that it intends to configure. As a
|
||||
* consequence, the data buffer effective size changes according to the number
|
||||
* of ISP blocks that userspace intends to configure.
|
||||
*
|
||||
* When used to report ISP statistics, the driver populates the @data buffer
|
||||
* with statistics for each supported measurement block.
|
||||
*
|
||||
* The buffer is versioned by the @version field to allow modifying
|
||||
* and extending its definition. The writer shall populate the @version field
|
||||
* to inform the reader about the version it intends to use. The reader will
|
||||
* parse and handle the @data buffer according to the data layout specific to
|
||||
* the indicated version and return an error if the desired version is not
|
||||
* supported.
|
||||
*
|
||||
* For each ISP block that userspace wants to configure, a block-specific
|
||||
* structure is appended to the @data buffer, one after the other without gaps
|
||||
* in between. Userspace shall populate the @data_size field with the effective
|
||||
* size, in bytes, of the @data buffer.
|
||||
* For each ISP block, a block-specific structure is appended to the @data
|
||||
* buffer, one after the other without gaps in between. The writer shall
|
||||
* populate the @data_size field with the effective size, in bytes, of the
|
||||
* @data buffer.
|
||||
*/
|
||||
struct v4l2_isp_params_buffer {
|
||||
struct v4l2_isp_buffer {
|
||||
__u32 version;
|
||||
__u32 data_size;
|
||||
__u8 data[] __counted_by(data_size);
|
||||
};
|
||||
|
||||
/**
|
||||
* v4l2_isp_params_buffer - V4L2 extensible parameters compatibility
|
||||
*
|
||||
* Compatibility with existing users of v4l2_isp_params_buffer which
|
||||
* pre-date the introduction of v4l2_isp_buffer.
|
||||
*/
|
||||
#define v4l2_isp_params_buffer v4l2_isp_buffer
|
||||
|
||||
#endif /* _UAPI_V4L2_ISP_H_ */
|
||||
|
||||
@@ -889,6 +889,10 @@ struct v4l2_pix_format {
|
||||
#define V4L2_META_FMT_MALI_C55_PARAMS v4l2_fourcc('C', '5', '5', 'P') /* ARM Mali-C55 Parameters */
|
||||
#define V4L2_META_FMT_MALI_C55_STATS v4l2_fourcc('C', '5', '5', 'S') /* ARM Mali-C55 3A Statistics */
|
||||
|
||||
/* Vendor specific - used for Dreamchip RPP-X1 ISP */
|
||||
#define V4L2_META_FMT_RPPX1_PARAMS v4l2_fourcc('D', 'R', '1', 'P') /* Dreamchip RPP-X1 Parameters */
|
||||
#define V4L2_META_FMT_RPPX1_STATS v4l2_fourcc('D', 'R', '1', 'S') /* Dreamchip RPP-X1 Statistics */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
/*
|
||||
* Line-based metadata formats. Remember to update v4l_fill_fmtdesc() when
|
||||
|
||||
Reference in New Issue
Block a user