.. Permission is granted to copy, distribute and/or modify this
.. document under the terms of the GNU Free Documentation License,
.. Version 1.1 or any later version published by the Free Software
.. Foundation, with no Invariant Sections, no Front-Cover Texts
.. and no Back-Cover Texts. A copy of the license is included at
.. Documentation/media/uapi/fdl-appendix.rst.
..
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections

.. _v4l2-meta-fmt-vsp1-hgt:

*******************************
V4L2_META_FMT_VSP1_HGT ('VSPT')
*******************************

Renesas R-Car VSP1 2-D Histogram Data


Description
===========

This format describes histogram data generated by the Renesas R-Car VSP1
2-D Histogram (HGT) engine.

The VSP1 HGT is a histogram computation engine that operates on HSV
data. It operates on a possibly cropped and subsampled input image and
computes the sum, maximum and minimum of the S component as well as a
weighted frequency histogram based on the H and S components.

The histogram is a matrix of 6 Hue and 32 Saturation buckets, 192 in
total. Each HSV value is added to one or more buckets with a weight
between 1 and 16 depending on the Hue areas configuration. Finding the
corresponding buckets is done by inspecting the H and S value independently.

The Saturation position **n** (0 - 31) of the bucket in the matrix is
found by the expression:

    n = S / 8

The Hue position **m** (0 - 5) of the bucket in the matrix depends on
how the HGT Hue areas are configured. There are 6 user configurable Hue
Areas which can be configured to cover overlapping Hue values:

.. raw:: latex

    \small

::

         Area 0       Area 1       Area 2       Area 3       Area 4       Area 5
        ________     ________     ________     ________     ________     ________
   \   /|      |\   /|      |\   /|      |\   /|      |\   /|      |\   /|      |\   /
    \ / |      | \ / |      | \ / |      | \ / |      | \ / |      | \ / |      | \ /
     X  |      |  X  |      |  X  |      |  X  |      |  X  |      |  X  |      |  X
    / \ |      | / \ |      | / \ |      | / \ |      | / \ |      | / \ |      | / \
   /   \|      |/   \|      |/   \|      |/   \|      |/   \|      |/   \|      |/   \
  5U   0L      0U   1L      1U   2L      2U   3L      3U   4L      4U   5L      5U   0L
        <0..............................Hue Value............................255>


.. raw:: latex

    \normalsize

When two consecutive areas don't overlap (n+1L is equal to nU) the boundary
value is considered as part of the lower area.

Pixels with a hue value included in the centre of an area (between nL and nU
included) are attributed to that single area and given a weight of 16. Pixels
with a hue value included in the overlapping region between two areas (between
n+1L and nU excluded) are attributed to both areas and given a weight for each
of these areas proportional to their position along the diagonal lines
(rounded down).

The Hue area setup must match one of the following constrains:

::

    0L <= 0U <= 1L <= 1U <= 2L <= 2U <= 3L <= 3U <= 4L <= 4U <= 5L <= 5U

::

    0U <= 1L <= 1U <= 2L <= 2U <= 3L <= 3U <= 4L <= 4U <= 5L <= 5U <= 0L

**Byte Order.**
All data is stored in memory in little endian format. Each cell in the tables
contains one byte.

.. flat-table:: VSP1 HGT Data - (776 bytes)
    :header-rows:  2
    :stub-columns: 0

    * - Offset
      - :cspan:`4` Memory
    * -
      - [31:24]
      - [23:16]
      - [15:8]
      - [7:0]
    * - 0
      - -
      - S max [7:0]
      - -
      - S min [7:0]
    * - 4
      - :cspan:`4` S sum [31:0]
    * - 8
      - :cspan:`4` Histogram bucket (m=0, n=0) [31:0]
    * - 12
      - :cspan:`4` Histogram bucket (m=0, n=1) [31:0]
    * -
      - :cspan:`4` ...
    * - 132
      - :cspan:`4` Histogram bucket (m=0, n=31) [31:0]
    * - 136
      - :cspan:`4` Histogram bucket (m=1, n=0) [31:0]
    * -
      - :cspan:`4` ...
    * - 264
      - :cspan:`4` Histogram bucket (m=2, n=0) [31:0]
    * -
      - :cspan:`4` ...
    * - 392
      - :cspan:`4` Histogram bucket (m=3, n=0) [31:0]
    * -
      - :cspan:`4` ...
    * - 520
      - :cspan:`4` Histogram bucket (m=4, n=0) [31:0]
    * -
      - :cspan:`4` ...
    * - 648
      - :cspan:`4` Histogram bucket (m=5, n=0) [31:0]
    * -
      - :cspan:`4` ...
    * - 772
      - :cspan:`4` Histogram bucket (m=5, n=31) [31:0]
