xref: /openbmc/linux/Documentation/userspace-api/media/v4l/metafmt-vsp1-hgt.rst (revision 2612e3bbc0386368a850140a6c9b990cd496a5ec)
1*e6a47023SSakari Ailus.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
2*e6a47023SSakari Ailus
3*e6a47023SSakari Ailus.. _v4l2-meta-fmt-vsp1-hgt:
4*e6a47023SSakari Ailus
5*e6a47023SSakari Ailus*******************************
6*e6a47023SSakari AilusV4L2_META_FMT_VSP1_HGT ('VSPT')
7*e6a47023SSakari Ailus*******************************
8*e6a47023SSakari Ailus
9*e6a47023SSakari AilusRenesas R-Car VSP1 2-D Histogram Data
10*e6a47023SSakari Ailus
11*e6a47023SSakari Ailus
12*e6a47023SSakari AilusDescription
13*e6a47023SSakari Ailus===========
14*e6a47023SSakari Ailus
15*e6a47023SSakari AilusThis format describes histogram data generated by the Renesas R-Car VSP1
16*e6a47023SSakari Ailus2-D Histogram (HGT) engine.
17*e6a47023SSakari Ailus
18*e6a47023SSakari AilusThe VSP1 HGT is a histogram computation engine that operates on HSV
19*e6a47023SSakari Ailusdata. It operates on a possibly cropped and subsampled input image and
20*e6a47023SSakari Ailuscomputes the sum, maximum and minimum of the S component as well as a
21*e6a47023SSakari Ailusweighted frequency histogram based on the H and S components.
22*e6a47023SSakari Ailus
23*e6a47023SSakari AilusThe histogram is a matrix of 6 Hue and 32 Saturation buckets, 192 in
24*e6a47023SSakari Ailustotal. Each HSV value is added to one or more buckets with a weight
25*e6a47023SSakari Ailusbetween 1 and 16 depending on the Hue areas configuration. Finding the
26*e6a47023SSakari Ailuscorresponding buckets is done by inspecting the H and S value independently.
27*e6a47023SSakari Ailus
28*e6a47023SSakari AilusThe Saturation position **n** (0 - 31) of the bucket in the matrix is
29*e6a47023SSakari Ailusfound by the expression:
30*e6a47023SSakari Ailus
31*e6a47023SSakari Ailus    n = S / 8
32*e6a47023SSakari Ailus
33*e6a47023SSakari AilusThe Hue position **m** (0 - 5) of the bucket in the matrix depends on
34*e6a47023SSakari Ailushow the HGT Hue areas are configured. There are 6 user configurable Hue
35*e6a47023SSakari AilusAreas which can be configured to cover overlapping Hue values:
36*e6a47023SSakari Ailus
37*e6a47023SSakari Ailus.. raw:: latex
38*e6a47023SSakari Ailus
39*e6a47023SSakari Ailus    \small
40*e6a47023SSakari Ailus
41*e6a47023SSakari Ailus::
42*e6a47023SSakari Ailus
43*e6a47023SSakari Ailus         Area 0       Area 1       Area 2       Area 3       Area 4       Area 5
44*e6a47023SSakari Ailus        ________     ________     ________     ________     ________     ________
45*e6a47023SSakari Ailus   \   /|      |\   /|      |\   /|      |\   /|      |\   /|      |\   /|      |\   /
46*e6a47023SSakari Ailus    \ / |      | \ / |      | \ / |      | \ / |      | \ / |      | \ / |      | \ /
47*e6a47023SSakari Ailus     X  |      |  X  |      |  X  |      |  X  |      |  X  |      |  X  |      |  X
48*e6a47023SSakari Ailus    / \ |      | / \ |      | / \ |      | / \ |      | / \ |      | / \ |      | / \
49*e6a47023SSakari Ailus   /   \|      |/   \|      |/   \|      |/   \|      |/   \|      |/   \|      |/   \
50*e6a47023SSakari Ailus  5U   0L      0U   1L      1U   2L      2U   3L      3U   4L      4U   5L      5U   0L
51*e6a47023SSakari Ailus        <0..............................Hue Value............................255>
52*e6a47023SSakari Ailus
53*e6a47023SSakari Ailus
54*e6a47023SSakari Ailus.. raw:: latex
55*e6a47023SSakari Ailus
56*e6a47023SSakari Ailus    \normalsize
57*e6a47023SSakari Ailus
58*e6a47023SSakari AilusWhen two consecutive areas don't overlap (n+1L is equal to nU) the boundary
59*e6a47023SSakari Ailusvalue is considered as part of the lower area.
60*e6a47023SSakari Ailus
61*e6a47023SSakari AilusPixels with a hue value included in the centre of an area (between nL and nU
62*e6a47023SSakari Ailusincluded) are attributed to that single area and given a weight of 16. Pixels
63*e6a47023SSakari Ailuswith a hue value included in the overlapping region between two areas (between
64*e6a47023SSakari Ailusn+1L and nU excluded) are attributed to both areas and given a weight for each
65*e6a47023SSakari Ailusof these areas proportional to their position along the diagonal lines
66*e6a47023SSakari Ailus(rounded down).
67*e6a47023SSakari Ailus
68*e6a47023SSakari AilusThe Hue area setup must match one of the following constrains:
69*e6a47023SSakari Ailus
70*e6a47023SSakari Ailus::
71*e6a47023SSakari Ailus
72*e6a47023SSakari Ailus    0L <= 0U <= 1L <= 1U <= 2L <= 2U <= 3L <= 3U <= 4L <= 4U <= 5L <= 5U
73*e6a47023SSakari Ailus
74*e6a47023SSakari Ailus::
75*e6a47023SSakari Ailus
76*e6a47023SSakari Ailus    0U <= 1L <= 1U <= 2L <= 2U <= 3L <= 3U <= 4L <= 4U <= 5L <= 5U <= 0L
77*e6a47023SSakari Ailus
78*e6a47023SSakari Ailus**Byte Order.**
79*e6a47023SSakari AilusAll data is stored in memory in little endian format. Each cell in the tables
80*e6a47023SSakari Ailuscontains one byte.
81*e6a47023SSakari Ailus
82*e6a47023SSakari Ailus.. flat-table:: VSP1 HGT Data - (776 bytes)
83*e6a47023SSakari Ailus    :header-rows:  2
84*e6a47023SSakari Ailus    :stub-columns: 0
85*e6a47023SSakari Ailus
86*e6a47023SSakari Ailus    * - Offset
87*e6a47023SSakari Ailus      - :cspan:`4` Memory
88*e6a47023SSakari Ailus    * -
89*e6a47023SSakari Ailus      - [31:24]
90*e6a47023SSakari Ailus      - [23:16]
91*e6a47023SSakari Ailus      - [15:8]
92*e6a47023SSakari Ailus      - [7:0]
93*e6a47023SSakari Ailus    * - 0
94*e6a47023SSakari Ailus      - -
95*e6a47023SSakari Ailus      - S max [7:0]
96*e6a47023SSakari Ailus      - -
97*e6a47023SSakari Ailus      - S min [7:0]
98*e6a47023SSakari Ailus    * - 4
99*e6a47023SSakari Ailus      - :cspan:`4` S sum [31:0]
100*e6a47023SSakari Ailus    * - 8
101*e6a47023SSakari Ailus      - :cspan:`4` Histogram bucket (m=0, n=0) [31:0]
102*e6a47023SSakari Ailus    * - 12
103*e6a47023SSakari Ailus      - :cspan:`4` Histogram bucket (m=0, n=1) [31:0]
104*e6a47023SSakari Ailus    * -
105*e6a47023SSakari Ailus      - :cspan:`4` ...
106*e6a47023SSakari Ailus    * - 132
107*e6a47023SSakari Ailus      - :cspan:`4` Histogram bucket (m=0, n=31) [31:0]
108*e6a47023SSakari Ailus    * - 136
109*e6a47023SSakari Ailus      - :cspan:`4` Histogram bucket (m=1, n=0) [31:0]
110*e6a47023SSakari Ailus    * -
111*e6a47023SSakari Ailus      - :cspan:`4` ...
112*e6a47023SSakari Ailus    * - 264
113*e6a47023SSakari Ailus      - :cspan:`4` Histogram bucket (m=2, n=0) [31:0]
114*e6a47023SSakari Ailus    * -
115*e6a47023SSakari Ailus      - :cspan:`4` ...
116*e6a47023SSakari Ailus    * - 392
117*e6a47023SSakari Ailus      - :cspan:`4` Histogram bucket (m=3, n=0) [31:0]
118*e6a47023SSakari Ailus    * -
119*e6a47023SSakari Ailus      - :cspan:`4` ...
120*e6a47023SSakari Ailus    * - 520
121*e6a47023SSakari Ailus      - :cspan:`4` Histogram bucket (m=4, n=0) [31:0]
122*e6a47023SSakari Ailus    * -
123*e6a47023SSakari Ailus      - :cspan:`4` ...
124*e6a47023SSakari Ailus    * - 648
125*e6a47023SSakari Ailus      - :cspan:`4` Histogram bucket (m=5, n=0) [31:0]
126*e6a47023SSakari Ailus    * -
127*e6a47023SSakari Ailus      - :cspan:`4` ...
128*e6a47023SSakari Ailus    * - 772
129*e6a47023SSakari Ailus      - :cspan:`4` Histogram bucket (m=5, n=31) [31:0]
130