* Re: [PATCH v2] media: ipu3: update meta format documentation
[not found] <1548272156-1368-1-git-send-email-yong.zhi@intel.com>
@ 2019-01-24 7:25 ` Sakari Ailus
2019-01-24 17:15 ` Zhi, Yong
0 siblings, 1 reply; 2+ messages in thread
From: Sakari Ailus @ 2019-01-24 7:25 UTC (permalink / raw)
To: Yong Zhi
Cc: linux-media, laurent.pinchart, rajmohan.mani, tfiga,
hans.verkuil, mchehab, tian.shu.qiu, bingbu.cao
Hi Yong,
On Wed, Jan 23, 2019 at 11:35:56AM -0800, Yong Zhi wrote:
> Make changes based on Laurent's v8 review:
> https://www.spinics.net/lists/linux-media/msg144408.html
Could you outline the changes made by this patch, instead of referring to
an e-mail on a list, please? A short summary is sufficient. Such as:
Language improvements, fix entity naming, make pipeline a graph and move
device usage documentation to device documentation (out of format
documentation).
I'd put the struch rename in the header into a separate patch: it's not
about documentation.
>
> Signed-off-by: Yong Zhi <yong.zhi@intel.com>
> ---
> v2
>
> Rename stats_4a_config to stats_3a_config in intel-ipu3.h.
>
> Documentation/media/uapi/v4l/meta-formats.rst | 2 +-
> .../media/uapi/v4l/pixfmt-meta-intel-ipu3.rst | 119 ++---------------
> Documentation/media/v4l-drivers/ipu3.rst | 147 +++++++++++++++++++++
> drivers/staging/media/ipu3/include/intel-ipu3.h | 8 +-
> 4 files changed, 163 insertions(+), 113 deletions(-)
>
> diff --git a/Documentation/media/uapi/v4l/meta-formats.rst b/Documentation/media/uapi/v4l/meta-formats.rst
> index 5f956fa..b10ca9e 100644
> --- a/Documentation/media/uapi/v4l/meta-formats.rst
> +++ b/Documentation/media/uapi/v4l/meta-formats.rst
> @@ -19,8 +19,8 @@ These formats are used for the :ref:`metadata` interface only.
> .. toctree::
> :maxdepth: 1
>
> - pixfmt-meta-intel-ipu3
> pixfmt-meta-d4xx
> + pixfmt-meta-intel-ipu3
> pixfmt-meta-uvc
> pixfmt-meta-vsp1-hgo
> pixfmt-meta-vsp1-hgt
> diff --git a/Documentation/media/uapi/v4l/pixfmt-meta-intel-ipu3.rst b/Documentation/media/uapi/v4l/pixfmt-meta-intel-ipu3.rst
> index 659e58a..7fb5433 100644
> --- a/Documentation/media/uapi/v4l/pixfmt-meta-intel-ipu3.rst
> +++ b/Documentation/media/uapi/v4l/pixfmt-meta-intel-ipu3.rst
> @@ -30,21 +30,22 @@
> V4L2_META_FMT_IPU3_PARAMS ('ip3p'), V4L2_META_FMT_IPU3_3A ('ip3s')
> ******************************************************************
>
> -.. c:type:: ipu3_uapi_stats_3a
> +.. ipu3_uapi_stats_3a
>
> 3A statistics
> =============
>
> -For IPU3 ImgU, the 3A statistics accelerators collect different statistics over
> -an input bayer frame. Those statistics, defined in data struct :c:type:`ipu3_uapi_stats_3a`,
> -are obtained from "ipu3-imgu 3a stat" metadata capture video node, which are then
> -passed to user space for statistics analysis using :c:type:`v4l2_meta_format` interface.
> +The IPU3 ImgU 3A statistics accelerators collect different statistics over
> +an input Bayer frame. Those statistics are obtained from the "ipu3-imgu [01] 3a
> +stat" metadata capture video nodes, using the :c:type:`v4l2_meta_format`
> +interface. They are formatted as described by the :c:type:`ipu3_uapi_stats_3a`
> +structure.
>
> The statistics collected are AWB (Auto-white balance) RGBS (Red, Green, Blue and
> Saturation measure) cells, AWB filter response, AF (Auto-focus) filter response,
> and AE (Auto-exposure) histogram.
>
> -struct :c:type:`ipu3_uapi_4a_config` saves configurable parameters for all above.
> +The struct :c:type:`ipu3_uapi_4a_config` saves all configurable parameters.
>
> .. code-block:: c
>
> @@ -60,105 +61,14 @@ struct :c:type:`ipu3_uapi_4a_config` saves configurable parameters for all above
> struct ipu3_uapi_ff_status stats_3a_status;
> };
>
> -.. c:type:: ipu3_uapi_params
> +.. ipu3_uapi_params
>
> Pipeline parameters
> ===================
>
> -IPU3 pipeline has a number of image processing stages, each of which takes a
> -set of parameters as input. The major stages of pipelines are shown here:
> -
> -Raw pixels -> Bayer Downscaling -> Optical Black Correction ->
> -
> -Linearization -> Lens Shading Correction -> White Balance / Exposure /
> -
> -Focus Apply -> Bayer Noise Reduction -> ANR -> Demosaicing -> Color
> -
> -Correction Matrix -> Gamma correction -> Color Space Conversion ->
> -
> -Chroma Down Scaling -> Chromatic Noise Reduction -> Total Color
> -
> -Correction -> XNR3 -> TNR -> DDR
> -
> -The table below presents a description of the above algorithms.
> -
> -======================== =======================================================
> -Name Description
> -======================== =======================================================
> -Optical Black Correction Optical Black Correction block subtracts a pre-defined
> - value from the respective pixel values to obtain better
> - image quality.
> - Defined in :c:type:`ipu3_uapi_obgrid_param`.
> -Linearization This algo block uses linearization parameters to
> - address non-linearity sensor effects. The Lookup table
> - table is defined in
> - :c:type:`ipu3_uapi_isp_lin_vmem_params`.
> -SHD Lens shading correction is used to correct spatial
> - non-uniformity of the pixel response due to optical
> - lens shading. This is done by applying a different gain
> - for each pixel. The gain, black level etc are
> - configured in :c:type:`ipu3_uapi_shd_config_static`.
> -BNR Bayer noise reduction block removes image noise by
> - applying a bilateral filter.
> - See :c:type:`ipu3_uapi_bnr_static_config` for details.
> -ANR Advanced Noise Reduction is a block based algorithm
> - that performs noise reduction in the Bayer domain. The
> - convolution matrix etc can be found in
> - :c:type:`ipu3_uapi_anr_config`.
> -Demosaicing Demosaicing converts raw sensor data in Bayer format
> - into RGB (Red, Green, Blue) presentation. Then add
> - outputs of estimation of Y channel for following stream
> - processing by Firmware. The struct is defined as
> - :c:type:`ipu3_uapi_dm_config`. (TODO)
> -Color Correction Color Correction algo transforms sensor specific color
> - space to the standard "sRGB" color space. This is done
> - by applying 3x3 matrix defined in
> - :c:type:`ipu3_uapi_ccm_mat_config`.
> -Gamma correction Gamma correction :c:type:`ipu3_uapi_gamma_config` is a
> - basic non-linear tone mapping correction that is
> - applied per pixel for each pixel component.
> -CSC Color space conversion transforms each pixel from the
> - RGB primary presentation to YUV (Y: brightness,
> - UV: Luminance) presentation. This is done by applying
> - a 3x3 matrix defined in
> - :c:type:`ipu3_uapi_csc_mat_config`
> -CDS Chroma down sampling
> - After the CSC is performed, the Chroma Down Sampling
> - is applied for a UV plane down sampling by a factor
> - of 2 in each direction for YUV 4:2:0 using a 4x2
> - configurable filter :c:type:`ipu3_uapi_cds_params`.
> -CHNR Chroma noise reduction
> - This block processes only the chrominance pixels and
> - performs noise reduction by cleaning the high
> - frequency noise.
> - See struct :c:type:`ipu3_uapi_yuvp1_chnr_config`.
> -TCC Total color correction as defined in struct
> - :c:type:`ipu3_uapi_yuvp2_tcc_static_config`.
> -XNR3 eXtreme Noise Reduction V3 is the third revision of
> - noise reduction algorithm used to improve image
> - quality. This removes the low frequency noise in the
> - captured image. Two related structs are being defined,
> - :c:type:`ipu3_uapi_isp_xnr3_params` for ISP data memory
> - and :c:type:`ipu3_uapi_isp_xnr3_vmem_params` for vector
> - memory.
> -TNR Temporal Noise Reduction block compares successive
> - frames in time to remove anomalies / noise in pixel
> - values. :c:type:`ipu3_uapi_isp_tnr3_vmem_params` and
> - :c:type:`ipu3_uapi_isp_tnr3_params` are defined for ISP
> - vector and data memory respectively.
> -======================== =======================================================
> -
> -A few stages of the pipeline will be executed by firmware running on the ISP
> -processor, while many others will use a set of fixed hardware blocks also
> -called accelerator cluster (ACC) to crunch pixel data and produce statistics.
> -
> -ACC parameters of individual algorithms, as defined by
> -:c:type:`ipu3_uapi_acc_param`, can be chosen to be applied by the user
> -space through struct :c:type:`ipu3_uapi_flags` embedded in
> -:c:type:`ipu3_uapi_params` structure. For parameters that are configured as
> -not enabled by the user space, the corresponding structs are ignored by the
> -driver, in which case the existing configuration of the algorithm will be
> -preserved.
> +The pipeline parameters are passed to the "ipu3-imgu [01] parameters" metadata
> +output video nodes, using the :c:type:`v4l2_meta_format` interface. They are
> +formatted as described by the :c:type:`ipu3_uapi_params` structure.
>
> Both 3A statistics and pipeline parameters described here are closely tied to
> the underlying camera sub-system (CSS) APIs. They are usually consumed and
> @@ -166,13 +76,6 @@ produced by dedicated user space libraries that comprise the important tuning
> tools, thus freeing the developers from being bothered with the low level
> hardware and algorithm details.
>
> -It should be noted that IPU3 DMA operations require the addresses of all data
> -structures (that includes both input and output) to be aligned on 32 byte
> -boundaries.
> -
> -The meta data :c:type:`ipu3_uapi_params` will be sent to "ipu3-imgu parameters"
> -video node in ``V4L2_BUF_TYPE_META_CAPTURE`` format.
> -
> .. code-block:: c
>
> struct ipu3_uapi_params {
> diff --git a/Documentation/media/v4l-drivers/ipu3.rst b/Documentation/media/v4l-drivers/ipu3.rst
> index 804f373..c9f7804 100644
> --- a/Documentation/media/v4l-drivers/ipu3.rst
> +++ b/Documentation/media/v4l-drivers/ipu3.rst
> @@ -357,6 +357,153 @@ https://chromium.googlesource.com/chromiumos/platform/arc-camera/+/master/
>
> The source can be located under hal/intel directory.
>
> +Overview of IPU3 pipeline
> +=========================
> +
> +IPU3 pipeline has a number of image processing stages, each of which takes a
> +set of parameters as input. The major stages of pipelines are shown here:
> +
> +.. kernel-render:: DOT
> + :alt: IPU3 ImgU Pipeline
> + :caption: IPU3 ImgU Pipeline Diagram
> +
> + digraph "IPU3 ImgU" {
> + node [shape=box]
> + splines="ortho"
> + rankdir="LR"
> +
> + a [label="Raw pixels"]
> + b [label="Bayer Downscaling"]
> + c [label="Optical Black Correction"]
> + d [label="Linearization"]
> + e [label="Lens Shading Correction"]
> + f [label="White Balance / Exposure / Focus Apply"]
> + g [label="Bayer Noise Reduction"]
> + h [label="ANR"]
> + i [label="Demosaicing"]
> + j [label="Color Correction Matrix"]
> + k [label="Gamma correction"]
> + l [label="Color Space Conversion"]
> + m [label="Chroma Down Scaling"]
> + n [label="Chromatic Noise Reduction"]
> + o [label="Total Color Correction"]
> + p [label="XNR3"]
> + q [label="TNR"]
> + r [label="DDR"]
> +
> + { rank=same; a -> b -> c -> d -> e -> f }
> + { rank=same; g -> h -> i -> j -> k -> l }
> + { rank=same; m -> n -> o -> p -> q -> r }
> +
> + a -> g -> m [style=invis, weight=10]
> +
> + f -> g
> + l -> m
> + }
> +
> +The table below presents a description of the above algorithms.
> +
> +======================== =======================================================
> +Name Description
> +======================== =======================================================
> +Optical Black Correction Optical Black Correction block subtracts a pre-defined
> + value from the respective pixel values to obtain better
> + image quality.
> + Defined in :c:type:`ipu3_uapi_obgrid_param`.
> +Linearization This algo block uses linearization parameters to
> + address non-linearity sensor effects. The Lookup table
> + table is defined in
> + :c:type:`ipu3_uapi_isp_lin_vmem_params`.
> +SHD Lens shading correction is used to correct spatial
> + non-uniformity of the pixel response due to optical
> + lens shading. This is done by applying a different gain
> + for each pixel. The gain, black level etc are
> + configured in :c:type:`ipu3_uapi_shd_config_static`.
> +BNR Bayer noise reduction block removes image noise by
> + applying a bilateral filter.
> + See :c:type:`ipu3_uapi_bnr_static_config` for details.
> +ANR Advanced Noise Reduction is a block based algorithm
> + that performs noise reduction in the Bayer domain. The
> + convolution matrix etc can be found in
> + :c:type:`ipu3_uapi_anr_config`.
> +DM Demosaicing converts raw sensor data in Bayer format
> + into RGB (Red, Green, Blue) presentation. Then add
> + outputs of estimation of Y channel for following stream
> + processing by Firmware. The struct is defined as
> + :c:type:`ipu3_uapi_dm_config`.
> +Color Correction Color Correction algo transforms sensor specific color
> + space to the standard "sRGB" color space. This is done
> + by applying 3x3 matrix defined in
> + :c:type:`ipu3_uapi_ccm_mat_config`.
> +Gamma correction Gamma correction :c:type:`ipu3_uapi_gamma_config` is a
> + basic non-linear tone mapping correction that is
> + applied per pixel for each pixel component.
> +CSC Color space conversion transforms each pixel from the
> + RGB primary presentation to YUV (Y: brightness,
> + UV: Luminance) presentation. This is done by applying
> + a 3x3 matrix defined in
> + :c:type:`ipu3_uapi_csc_mat_config`
> +CDS Chroma down sampling
> + After the CSC is performed, the Chroma Down Sampling
> + is applied for a UV plane down sampling by a factor
> + of 2 in each direction for YUV 4:2:0 using a 4x2
> + configurable filter :c:type:`ipu3_uapi_cds_params`.
> +CHNR Chroma noise reduction
> + This block processes only the chrominance pixels and
> + performs noise reduction by cleaning the high
> + frequency noise.
> + See struct :c:type:`ipu3_uapi_yuvp1_chnr_config`.
> +TCC Total color correction as defined in struct
> + :c:type:`ipu3_uapi_yuvp2_tcc_static_config`.
> +XNR3 eXtreme Noise Reduction V3 is the third revision of
> + noise reduction algorithm used to improve image
> + quality. This removes the low frequency noise in the
> + captured image. Two related structs are being defined,
> + :c:type:`ipu3_uapi_isp_xnr3_params` for ISP data memory
> + and :c:type:`ipu3_uapi_isp_xnr3_vmem_params` for vector
> + memory.
> +TNR Temporal Noise Reduction block compares successive
> + frames in time to remove anomalies / noise in pixel
> + values. :c:type:`ipu3_uapi_isp_tnr3_vmem_params` and
> + :c:type:`ipu3_uapi_isp_tnr3_params` are defined for ISP
> + vector and data memory respectively.
> +======================== =======================================================
> +
> +Other often encountered acronyms not listed in above table:
> +
> + ACC
> + Accelerator cluster
> + AWB_FR
> + Auto white balance filter response statistics
> + BDS
> + Bayer downscaler parameters
> + CCM
> + Color correction matrix coefficients
> + IEFd
> + Image enhancement filter directed
> + Obgrid
> + Optical black level compensation
> + OSYS
> + Output system configuration
> + ROI
> + Region of interest
> + YDS
> + Y down sampling
> + YTM
> + Y-tone mapping
> +
> +A few stages of the pipeline will be executed by firmware running on the ISP
> +processor, while many others will use a set of fixed hardware blocks also
> +called accelerator cluster (ACC) to crunch pixel data and produce statistics.
> +
> +ACC parameters of individual algorithms, as defined by
> +:c:type:`ipu3_uapi_acc_param`, can be chosen to be applied by the user
> +space through struct :c:type:`ipu3_uapi_flags` embedded in
> +:c:type:`ipu3_uapi_params` structure. For parameters that are configured as
> +not enabled by the user space, the corresponding structs are ignored by the
> +driver, in which case the existing configuration of the algorithm will be
> +preserved.
> +
> References
> ==========
>
> diff --git a/drivers/staging/media/ipu3/include/intel-ipu3.h b/drivers/staging/media/ipu3/include/intel-ipu3.h
> index eb6f52a..bd75f87 100644
> --- a/drivers/staging/media/ipu3/include/intel-ipu3.h
> +++ b/drivers/staging/media/ipu3/include/intel-ipu3.h
> @@ -453,7 +453,7 @@ struct ipu3_uapi_awb_fr_config_s {
> } __attribute__((aligned(32))) __packed;
>
> /**
> - * struct ipu3_uapi_4a_config - 4A config
> + * struct ipu3_uapi_3a_config - 3A config
> *
> * @awb_config: &ipu3_uapi_awb_config_s, default resolution 16x16
> * @ae_grd_config: auto exposure statistics &ipu3_uapi_ae_grid_config
> @@ -461,7 +461,7 @@ struct ipu3_uapi_awb_fr_config_s {
> * @af_config: auto focus config &ipu3_uapi_af_config_s
> * @awb_fr_config: &ipu3_uapi_awb_fr_config_s, default resolution 16x16
> */
> -struct ipu3_uapi_4a_config {
> +struct ipu3_uapi_3a_config {
> struct ipu3_uapi_awb_config_s awb_config __attribute__((aligned(32)));
> struct ipu3_uapi_ae_grid_config ae_grd_config;
> __u8 padding[20];
> @@ -534,7 +534,7 @@ struct ipu3_uapi_ff_status {
> * @ae_raw_buffer: auto exposure raw data &ipu3_uapi_ae_raw_buffer_aligned
> * @af_raw_buffer: &ipu3_uapi_af_raw_buffer for auto focus meta data
> * @awb_fr_raw_buffer: value as specified by &ipu3_uapi_awb_fr_raw_buffer
> - * @stats_4a_config: 4a statistics config as defined by &ipu3_uapi_4a_config.
> + * @stats_3a_config: 3a statistics config as defined by &ipu3_uapi_3a_config.
> * @ae_join_buffers: 1 to use ae_raw_buffer.
> * @padding: padding config
> * @stats_3a_bubble_per_stripe: a &ipu3_uapi_stats_3a_bubble_info_per_stripe
> @@ -546,7 +546,7 @@ struct ipu3_uapi_stats_3a {
> ae_raw_buffer[IPU3_UAPI_MAX_STRIPES];
> struct ipu3_uapi_af_raw_buffer af_raw_buffer;
> struct ipu3_uapi_awb_fr_raw_buffer awb_fr_raw_buffer;
> - struct ipu3_uapi_4a_config stats_4a_config;
> + struct ipu3_uapi_3a_config stats_3a_config;
> __u32 ae_join_buffers;
> __u8 padding[28];
> struct ipu3_uapi_stats_3a_bubble_info_per_stripe
> --
> 2.7.4
>
--
Sakari Ailus
sakari.ailus@linux.intel.com
^ permalink raw reply [flat|nested] 2+ messages in thread
* RE: [PATCH v2] media: ipu3: update meta format documentation
2019-01-24 7:25 ` [PATCH v2] media: ipu3: update meta format documentation Sakari Ailus
@ 2019-01-24 17:15 ` Zhi, Yong
0 siblings, 0 replies; 2+ messages in thread
From: Zhi, Yong @ 2019-01-24 17:15 UTC (permalink / raw)
To: Sakari Ailus
Cc: linux-media, laurent.pinchart, Mani, Rajmohan, tfiga,
hans.verkuil, mchehab, Qiu, Tian Shu, Cao, Bingbu
Hi, Sakari,
> -----Original Message-----
> From: Sakari Ailus [mailto:sakari.ailus@linux.intel.com]
> Sent: Wednesday, January 23, 2019 11:25 PM
> To: Zhi, Yong <yong.zhi@intel.com>
> Cc: linux-media@vger.kernel.org; laurent.pinchart@ideasonboard.com;
> Mani, Rajmohan <rajmohan.mani@intel.com>; tfiga@chromium.org;
> hans.verkuil@cisco.com; mchehab@kernel.org; Qiu, Tian Shu
> <tian.shu.qiu@intel.com>; Cao, Bingbu <bingbu.cao@intel.com>
> Subject: Re: [PATCH v2] media: ipu3: update meta format documentation
>
> Hi Yong,
>
> On Wed, Jan 23, 2019 at 11:35:56AM -0800, Yong Zhi wrote:
> > Make changes based on Laurent's v8 review:
> > https://www.spinics.net/lists/linux-media/msg144408.html
>
> Could you outline the changes made by this patch, instead of referring to an
> e-mail on a list, please? A short summary is sufficient. Such as:
>
> Language improvements, fix entity naming, make pipeline a graph and move
> device usage documentation to device documentation (out of format
> documentation).
>
> I'd put the struch rename in the header into a separate patch: it's not about
> documentation.
>
Sure, Tomasz also suggested few struct name changes, I will put them together in the header patch.
> >
> > Signed-off-by: Yong Zhi <yong.zhi@intel.com>
> > ---
> > v2
> >
> > Rename stats_4a_config to stats_3a_config in intel-ipu3.h.
> >
> > Documentation/media/uapi/v4l/meta-formats.rst | 2 +-
> > .../media/uapi/v4l/pixfmt-meta-intel-ipu3.rst | 119 ++---------------
> > Documentation/media/v4l-drivers/ipu3.rst | 147
> +++++++++++++++++++++
> > drivers/staging/media/ipu3/include/intel-ipu3.h | 8 +-
> > 4 files changed, 163 insertions(+), 113 deletions(-)
> >
> > diff --git a/Documentation/media/uapi/v4l/meta-formats.rst
> > b/Documentation/media/uapi/v4l/meta-formats.rst
> > index 5f956fa..b10ca9e 100644
> > --- a/Documentation/media/uapi/v4l/meta-formats.rst
> > +++ b/Documentation/media/uapi/v4l/meta-formats.rst
> > @@ -19,8 +19,8 @@ These formats are used for the :ref:`metadata`
> interface only.
> > .. toctree::
> > :maxdepth: 1
> >
> > - pixfmt-meta-intel-ipu3
> > pixfmt-meta-d4xx
> > + pixfmt-meta-intel-ipu3
> > pixfmt-meta-uvc
> > pixfmt-meta-vsp1-hgo
> > pixfmt-meta-vsp1-hgt
> > diff --git a/Documentation/media/uapi/v4l/pixfmt-meta-intel-ipu3.rst
> > b/Documentation/media/uapi/v4l/pixfmt-meta-intel-ipu3.rst
> > index 659e58a..7fb5433 100644
> > --- a/Documentation/media/uapi/v4l/pixfmt-meta-intel-ipu3.rst
> > +++ b/Documentation/media/uapi/v4l/pixfmt-meta-intel-ipu3.rst
> > @@ -30,21 +30,22 @@
> > V4L2_META_FMT_IPU3_PARAMS ('ip3p'), V4L2_META_FMT_IPU3_3A
> ('ip3s')
> >
> ****************************************************************
> **
> >
> > -.. c:type:: ipu3_uapi_stats_3a
> > +.. ipu3_uapi_stats_3a
> >
> > 3A statistics
> > =============
> >
> > -For IPU3 ImgU, the 3A statistics accelerators collect different
> > statistics over -an input bayer frame. Those statistics, defined in
> > data struct :c:type:`ipu3_uapi_stats_3a`, -are obtained from
> > "ipu3-imgu 3a stat" metadata capture video node, which are then -passed
> to user space for statistics analysis using :c:type:`v4l2_meta_format` interface.
> > +The IPU3 ImgU 3A statistics accelerators collect different statistics
> > +over an input Bayer frame. Those statistics are obtained from the
> > +"ipu3-imgu [01] 3a stat" metadata capture video nodes, using the
> > +:c:type:`v4l2_meta_format` interface. They are formatted as described
> > +by the :c:type:`ipu3_uapi_stats_3a` structure.
> >
> > The statistics collected are AWB (Auto-white balance) RGBS (Red,
> > Green, Blue and Saturation measure) cells, AWB filter response, AF
> > (Auto-focus) filter response, and AE (Auto-exposure) histogram.
> >
> > -struct :c:type:`ipu3_uapi_4a_config` saves configurable parameters for all
> above.
> > +The struct :c:type:`ipu3_uapi_4a_config` saves all configurable parameters.
> >
> > .. code-block:: c
> >
> > @@ -60,105 +61,14 @@ struct :c:type:`ipu3_uapi_4a_config` saves
> configurable parameters for all above
> > struct ipu3_uapi_ff_status stats_3a_status;
> > };
> >
> > -.. c:type:: ipu3_uapi_params
> > +.. ipu3_uapi_params
> >
> > Pipeline parameters
> > ===================
> >
> > -IPU3 pipeline has a number of image processing stages, each of which
> > takes a -set of parameters as input. The major stages of pipelines are
> shown here:
> > -
> > -Raw pixels -> Bayer Downscaling -> Optical Black Correction ->
> > -
> > -Linearization -> Lens Shading Correction -> White Balance / Exposure
> > /
> > -
> > -Focus Apply -> Bayer Noise Reduction -> ANR -> Demosaicing -> Color
> > -
> > -Correction Matrix -> Gamma correction -> Color Space Conversion ->
> > -
> > -Chroma Down Scaling -> Chromatic Noise Reduction -> Total Color
> > -
> > -Correction -> XNR3 -> TNR -> DDR
> > -
> > -The table below presents a description of the above algorithms.
> > -
> > -========================
> =======================================================
> > -Name Description
> > -========================
> > =======================================================
> > -Optical Black Correction Optical Black Correction block subtracts a pre-
> defined
> > - value from the respective pixel values to obtain
> better
> > - image quality.
> > - Defined in :c:type:`ipu3_uapi_obgrid_param`.
> > -Linearization This algo block uses linearization parameters to
> > - address non-linearity sensor effects. The Lookup
> table
> > - table is defined in
> > - :c:type:`ipu3_uapi_isp_lin_vmem_params`.
> > -SHD Lens shading correction is used to correct spatial
> > - non-uniformity of the pixel response due to optical
> > - lens shading. This is done by applying a different
> gain
> > - for each pixel. The gain, black level etc are
> > - configured in :c:type:`ipu3_uapi_shd_config_static`.
> > -BNR Bayer noise reduction block removes image noise by
> > - applying a bilateral filter.
> > - See :c:type:`ipu3_uapi_bnr_static_config` for details.
> > -ANR Advanced Noise Reduction is a block based algorithm
> > - that performs noise reduction in the Bayer domain.
> The
> > - convolution matrix etc can be found in
> > - :c:type:`ipu3_uapi_anr_config`.
> > -Demosaicing Demosaicing converts raw sensor data in Bayer
> format
> > - into RGB (Red, Green, Blue) presentation. Then add
> > - outputs of estimation of Y channel for following
> stream
> > - processing by Firmware. The struct is defined as
> > - :c:type:`ipu3_uapi_dm_config`. (TODO)
> > -Color Correction Color Correction algo transforms sensor specific
> color
> > - space to the standard "sRGB" color space. This is
> done
> > - by applying 3x3 matrix defined in
> > - :c:type:`ipu3_uapi_ccm_mat_config`.
> > -Gamma correction Gamma
> correction :c:type:`ipu3_uapi_gamma_config` is a
> > - basic non-linear tone mapping correction that is
> > - applied per pixel for each pixel component.
> > -CSC Color space conversion transforms each pixel from
> the
> > - RGB primary presentation to YUV (Y: brightness,
> > - UV: Luminance) presentation. This is done by
> applying
> > - a 3x3 matrix defined in
> > - :c:type:`ipu3_uapi_csc_mat_config`
> > -CDS Chroma down sampling
> > - After the CSC is performed, the Chroma Down
> Sampling
> > - is applied for a UV plane down sampling by a factor
> > - of 2 in each direction for YUV 4:2:0 using a 4x2
> > - configurable filter :c:type:`ipu3_uapi_cds_params`.
> > -CHNR Chroma noise reduction
> > - This block processes only the chrominance pixels
> and
> > - performs noise reduction by cleaning the high
> > - frequency noise.
> > - See struct :c:type:`ipu3_uapi_yuvp1_chnr_config`.
> > -TCC Total color correction as defined in struct
> > - :c:type:`ipu3_uapi_yuvp2_tcc_static_config`.
> > -XNR3 eXtreme Noise Reduction V3 is the third
> revision of
> > - noise reduction algorithm used to improve image
> > - quality. This removes the low frequency noise in the
> > - captured image. Two related structs are being
> defined,
> > - :c:type:`ipu3_uapi_isp_xnr3_params` for ISP data
> memory
> > - and :c:type:`ipu3_uapi_isp_xnr3_vmem_params` for
> vector
> > - memory.
> > -TNR Temporal Noise Reduction block compares
> successive
> > - frames in time to remove anomalies / noise in pixel
> > - values. :c:type:`ipu3_uapi_isp_tnr3_vmem_params`
> and
> > - :c:type:`ipu3_uapi_isp_tnr3_params` are defined for
> ISP
> > - vector and data memory respectively.
> > -========================
> > =======================================================
> > -
> > -A few stages of the pipeline will be executed by firmware running on
> > the ISP -processor, while many others will use a set of fixed hardware
> > blocks also -called accelerator cluster (ACC) to crunch pixel data and
> produce statistics.
> > -
> > -ACC parameters of individual algorithms, as defined by
> > -:c:type:`ipu3_uapi_acc_param`, can be chosen to be applied by the
> > user -space through struct :c:type:`ipu3_uapi_flags` embedded in
> > -:c:type:`ipu3_uapi_params` structure. For parameters that are
> > configured as -not enabled by the user space, the corresponding
> > structs are ignored by the -driver, in which case the existing
> > configuration of the algorithm will be -preserved.
> > +The pipeline parameters are passed to the "ipu3-imgu [01] parameters"
> > +metadata output video nodes, using the :c:type:`v4l2_meta_format`
> > +interface. They are formatted as described by
> the :c:type:`ipu3_uapi_params` structure.
> >
> > Both 3A statistics and pipeline parameters described here are closely
> > tied to the underlying camera sub-system (CSS) APIs. They are usually
> > consumed and @@ -166,13 +76,6 @@ produced by dedicated user space
> > libraries that comprise the important tuning tools, thus freeing the
> > developers from being bothered with the low level hardware and
> algorithm details.
> >
> > -It should be noted that IPU3 DMA operations require the addresses of
> > all data -structures (that includes both input and output) to be
> > aligned on 32 byte -boundaries.
> > -
> > -The meta data :c:type:`ipu3_uapi_params` will be sent to "ipu3-imgu
> parameters"
> > -video node in ``V4L2_BUF_TYPE_META_CAPTURE`` format.
> > -
> > .. code-block:: c
> >
> > struct ipu3_uapi_params {
> > diff --git a/Documentation/media/v4l-drivers/ipu3.rst
> > b/Documentation/media/v4l-drivers/ipu3.rst
> > index 804f373..c9f7804 100644
> > --- a/Documentation/media/v4l-drivers/ipu3.rst
> > +++ b/Documentation/media/v4l-drivers/ipu3.rst
> > @@ -357,6 +357,153 @@
> > https://chromium.googlesource.com/chromiumos/platform/arc-
> camera/+/mas
> > ter/
> >
> > The source can be located under hal/intel directory.
> >
> > +Overview of IPU3 pipeline
> > +=========================
> > +
> > +IPU3 pipeline has a number of image processing stages, each of which
> > +takes a set of parameters as input. The major stages of pipelines are
> shown here:
> > +
> > +.. kernel-render:: DOT
> > + :alt: IPU3 ImgU Pipeline
> > + :caption: IPU3 ImgU Pipeline Diagram
> > +
> > + digraph "IPU3 ImgU" {
> > + node [shape=box]
> > + splines="ortho"
> > + rankdir="LR"
> > +
> > + a [label="Raw pixels"]
> > + b [label="Bayer Downscaling"]
> > + c [label="Optical Black Correction"]
> > + d [label="Linearization"]
> > + e [label="Lens Shading Correction"]
> > + f [label="White Balance / Exposure / Focus Apply"]
> > + g [label="Bayer Noise Reduction"]
> > + h [label="ANR"]
> > + i [label="Demosaicing"]
> > + j [label="Color Correction Matrix"]
> > + k [label="Gamma correction"]
> > + l [label="Color Space Conversion"]
> > + m [label="Chroma Down Scaling"]
> > + n [label="Chromatic Noise Reduction"]
> > + o [label="Total Color Correction"]
> > + p [label="XNR3"]
> > + q [label="TNR"]
> > + r [label="DDR"]
> > +
> > + { rank=same; a -> b -> c -> d -> e -> f }
> > + { rank=same; g -> h -> i -> j -> k -> l }
> > + { rank=same; m -> n -> o -> p -> q -> r }
> > +
> > + a -> g -> m [style=invis, weight=10]
> > +
> > + f -> g
> > + l -> m
> > + }
> > +
> > +The table below presents a description of the above algorithms.
> > +
> > +========================
> =======================================================
> > +Name Description
> > +========================
> > +=======================================================
> > +Optical Black Correction Optical Black Correction block subtracts a pre-
> defined
> > + value from the respective pixel values to obtain
> better
> > + image quality.
> > + Defined in :c:type:`ipu3_uapi_obgrid_param`.
> > +Linearization This algo block uses linearization parameters
> to
> > + address non-linearity sensor effects. The Lookup
> table
> > + table is defined in
> > + :c:type:`ipu3_uapi_isp_lin_vmem_params`.
> > +SHD Lens shading correction is used to correct spatial
> > + non-uniformity of the pixel response due to optical
> > + lens shading. This is done by applying a different
> gain
> > + for each pixel. The gain, black level etc are
> > + configured in :c:type:`ipu3_uapi_shd_config_static`.
> > +BNR Bayer noise reduction block removes image noise by
> > + applying a bilateral filter.
> > + See :c:type:`ipu3_uapi_bnr_static_config` for details.
> > +ANR Advanced Noise Reduction is a block based algorithm
> > + that performs noise reduction in the Bayer domain.
> The
> > + convolution matrix etc can be found in
> > + :c:type:`ipu3_uapi_anr_config`.
> > +DM Demosaicing converts raw sensor data in Bayer
> format
> > + into RGB (Red, Green, Blue) presentation. Then add
> > + outputs of estimation of Y channel for following
> stream
> > + processing by Firmware. The struct is defined as
> > + :c:type:`ipu3_uapi_dm_config`.
> > +Color Correction Color Correction algo transforms sensor specific
> color
> > + space to the standard "sRGB" color space. This is
> done
> > + by applying 3x3 matrix defined in
> > + :c:type:`ipu3_uapi_ccm_mat_config`.
> > +Gamma correction Gamma
> correction :c:type:`ipu3_uapi_gamma_config` is a
> > + basic non-linear tone mapping correction that is
> > + applied per pixel for each pixel component.
> > +CSC Color space conversion transforms each pixel from
> the
> > + RGB primary presentation to YUV (Y: brightness,
> > + UV: Luminance) presentation. This is done by
> applying
> > + a 3x3 matrix defined in
> > + :c:type:`ipu3_uapi_csc_mat_config`
> > +CDS Chroma down sampling
> > + After the CSC is performed, the Chroma Down
> Sampling
> > + is applied for a UV plane down sampling by a factor
> > + of 2 in each direction for YUV 4:2:0 using a 4x2
> > + configurable filter :c:type:`ipu3_uapi_cds_params`.
> > +CHNR Chroma noise reduction
> > + This block processes only the chrominance pixels
> and
> > + performs noise reduction by cleaning the high
> > + frequency noise.
> > + See struct :c:type:`ipu3_uapi_yuvp1_chnr_config`.
> > +TCC Total color correction as defined in struct
> > + :c:type:`ipu3_uapi_yuvp2_tcc_static_config`.
> > +XNR3 eXtreme Noise Reduction V3 is the third
> revision of
> > + noise reduction algorithm used to improve image
> > + quality. This removes the low frequency noise in the
> > + captured image. Two related structs are being
> defined,
> > + :c:type:`ipu3_uapi_isp_xnr3_params` for ISP data
> memory
> > + and :c:type:`ipu3_uapi_isp_xnr3_vmem_params` for
> vector
> > + memory.
> > +TNR Temporal Noise Reduction block compares
> successive
> > + frames in time to remove anomalies / noise in pixel
> > + values. :c:type:`ipu3_uapi_isp_tnr3_vmem_params`
> and
> > + :c:type:`ipu3_uapi_isp_tnr3_params` are defined for
> ISP
> > + vector and data memory respectively.
> > +========================
> > +=======================================================
> > +
> > +Other often encountered acronyms not listed in above table:
> > +
> > + ACC
> > + Accelerator cluster
> > + AWB_FR
> > + Auto white balance filter response statistics
> > + BDS
> > + Bayer downscaler parameters
> > + CCM
> > + Color correction matrix coefficients
> > + IEFd
> > + Image enhancement filter directed
> > + Obgrid
> > + Optical black level compensation
> > + OSYS
> > + Output system configuration
> > + ROI
> > + Region of interest
> > + YDS
> > + Y down sampling
> > + YTM
> > + Y-tone mapping
> > +
> > +A few stages of the pipeline will be executed by firmware running on
> > +the ISP processor, while many others will use a set of fixed hardware
> > +blocks also called accelerator cluster (ACC) to crunch pixel data and
> produce statistics.
> > +
> > +ACC parameters of individual algorithms, as defined by
> > +:c:type:`ipu3_uapi_acc_param`, can be chosen to be applied by the
> > +user space through struct :c:type:`ipu3_uapi_flags` embedded in
> > +:c:type:`ipu3_uapi_params` structure. For parameters that are
> > +configured as not enabled by the user space, the corresponding
> > +structs are ignored by the driver, in which case the existing
> > +configuration of the algorithm will be preserved.
> > +
> > References
> > ==========
> >
> > diff --git a/drivers/staging/media/ipu3/include/intel-ipu3.h
> > b/drivers/staging/media/ipu3/include/intel-ipu3.h
> > index eb6f52a..bd75f87 100644
> > --- a/drivers/staging/media/ipu3/include/intel-ipu3.h
> > +++ b/drivers/staging/media/ipu3/include/intel-ipu3.h
> > @@ -453,7 +453,7 @@ struct ipu3_uapi_awb_fr_config_s { }
> > __attribute__((aligned(32))) __packed;
> >
> > /**
> > - * struct ipu3_uapi_4a_config - 4A config
> > + * struct ipu3_uapi_3a_config - 3A config
> > *
> > * @awb_config: &ipu3_uapi_awb_config_s, default resolution 16x16
> > * @ae_grd_config: auto exposure statistics &ipu3_uapi_ae_grid_config
> > @@ -461,7 +461,7 @@ struct ipu3_uapi_awb_fr_config_s {
> > * @af_config: auto focus config &ipu3_uapi_af_config_s
> > * @awb_fr_config: &ipu3_uapi_awb_fr_config_s, default resolution 16x16
> > */
> > -struct ipu3_uapi_4a_config {
> > +struct ipu3_uapi_3a_config {
> > struct ipu3_uapi_awb_config_s awb_config
> __attribute__((aligned(32)));
> > struct ipu3_uapi_ae_grid_config ae_grd_config;
> > __u8 padding[20];
> > @@ -534,7 +534,7 @@ struct ipu3_uapi_ff_status {
> > * @ae_raw_buffer: auto exposure raw data
> &ipu3_uapi_ae_raw_buffer_aligned
> > * @af_raw_buffer: &ipu3_uapi_af_raw_buffer for auto focus meta data
> > * @awb_fr_raw_buffer: value as specified by
> > &ipu3_uapi_awb_fr_raw_buffer
> > - * @stats_4a_config: 4a statistics config as defined by
> &ipu3_uapi_4a_config.
> > + * @stats_3a_config: 3a statistics config as defined by
> &ipu3_uapi_3a_config.
> > * @ae_join_buffers: 1 to use ae_raw_buffer.
> > * @padding: padding config
> > * @stats_3a_bubble_per_stripe: a
> > &ipu3_uapi_stats_3a_bubble_info_per_stripe
> > @@ -546,7 +546,7 @@ struct ipu3_uapi_stats_3a {
> > ae_raw_buffer[IPU3_UAPI_MAX_STRIPES];
> > struct ipu3_uapi_af_raw_buffer af_raw_buffer;
> > struct ipu3_uapi_awb_fr_raw_buffer awb_fr_raw_buffer;
> > - struct ipu3_uapi_4a_config stats_4a_config;
> > + struct ipu3_uapi_3a_config stats_3a_config;
> > __u32 ae_join_buffers;
> > __u8 padding[28];
> > struct ipu3_uapi_stats_3a_bubble_info_per_stripe
> > --
> > 2.7.4
> >
>
> --
> Sakari Ailus
> sakari.ailus@linux.intel.com
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-01-24 17:16 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <1548272156-1368-1-git-send-email-yong.zhi@intel.com>
2019-01-24 7:25 ` [PATCH v2] media: ipu3: update meta format documentation Sakari Ailus
2019-01-24 17:15 ` Zhi, Yong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).