Back to Linux

V4L2_META_FMT_C3ISP_STATS ('C3ST'), V4L2_META_FMT_C3ISP_PARAMS ('C3PM')

Documentation/userspace-api/media/v4l/metafmt-c3-isp.rst

7.03.1 KB
Original Source

.. SPDX-License-Identifier: (GPL-2.0-only OR MIT) .. c:namespace:: V4L

.. _v4l2-meta-fmt-c3isp-stats: .. _v4l2-meta-fmt-c3isp-params:


V4L2_META_FMT_C3ISP_STATS ('C3ST'), V4L2_META_FMT_C3ISP_PARAMS ('C3PM')


.. c3_isp_stats_info

3A Statistics

The C3 ISP can collect different statistics over an input Bayer frame. Those statistics are obtained from the "c3-isp-stats" metadata capture video nodes, using the :c:type:v4l2_meta_format interface. They are formatted as described by the :c:type:c3_isp_stats_info structure.

The statistics collected are Auto-white balance, Auto-exposure and Auto-focus information.

.. c3_isp_params_cfg

Configuration Parameters

The configuration parameters are passed to the c3-isp-params metadata output video node, using the :c:type:v4l2_meta_format interface. Rather than a single struct containing sub-structs for each configurable area of the ISP, parameters for the C3-ISP are defined as distinct structs or "blocks" which may be added to the data member of :c:type:c3_isp_params_cfg. Userspace is responsible for populating the data member with the blocks that need to be configured by the driver, but need not populate it with all the blocks, or indeed with any at all if there are no configuration changes to make. Populated blocks must be consecutive in the buffer. To assist both userspace and the driver in identifying the blocks each block-specific struct embeds :c:type:c3_isp_params_block_header as its first member and userspace must populate the type member with a value from :c:type:c3_isp_params_block_type. Once the blocks have been populated into the data buffer, the combined size of all populated blocks shall be set in the data_size member of :c:type:c3_isp_params_cfg. For example:

.. code-block:: c

struct c3_isp_params_cfg *params =
	(struct c3_isp_params_cfg *)buffer;

params->version = C3_ISP_PARAM_BUFFER_V0;
params->data_size = 0;

void *data = (void *)params->data;

struct c3_isp_params_awb_gains *gains =
	(struct c3_isp_params_awb_gains *)data;

gains->header.type = C3_ISP_PARAMS_BLOCK_AWB_GAINS;
gains->header.flags = C3_ISP_PARAMS_BLOCK_FL_ENABLE;
gains->header.size = sizeof(struct c3_isp_params_awb_gains);

gains->gr_gain = 256;
gains->r_gain = 256;
gains->b_gain = 256;
gains->gb_gain = 256;

data += sizeof(struct c3_isp__params_awb_gains);
params->data_size += sizeof(struct c3_isp_params_awb_gains);

struct c3_isp_params_awb_config *awb_cfg =
	(struct c3_isp_params_awb_config *)data;

awb_cfg->header.type = C3_ISP_PARAMS_BLOCK_AWB_CONFIG;
awb_cfg->header.flags = C3_ISP_PARAMS_BLOCK_FL_ENABLE;
awb_cfg->header.size = sizeof(struct c3_isp_params_awb_config);

awb_cfg->tap_point = C3_ISP_AWB_STATS_TAP_BEFORE_WB;
awb_cfg->satur = 1;
awb_cfg->horiz_zones_num = 32;
awb_cfg->vert_zones_num = 24;

params->data_size += sizeof(struct c3_isp_params_awb_config);

Amlogic C3 ISP uAPI data types

.. kernel-doc:: include/uapi/linux/media/amlogic/c3-isp-config.h