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....@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.ai...@linux.intel.com

Reply via email to