]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
[media] v4l2-tpg: don't clamp XV601/709 to lim range
authorHans Verkuil <hverkuil@xs4all.nl>
Mon, 10 Apr 2017 07:54:30 +0000 (04:54 -0300)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Mon, 10 Apr 2017 17:58:06 +0000 (14:58 -0300)
The XV601/709 encodings are special: they signal limited range, but use the full range
to encode a larger gamut with R', G' and B' values outside the [0-1] range.

So don't clamp to limited range for these two encodings.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/common/v4l2-tpg/v4l2-tpg-core.c

index e47b46e2d26ca7dd4a86f387422a19d8484701cf..3dd22da7e17d2ca2762c2c8385931d33be0b0130 100644 (file)
@@ -927,7 +927,14 @@ static void precalculate_color(struct tpg_data *tpg, int k)
                y >>= 4;
                cb >>= 4;
                cr >>= 4;
-               if (tpg->real_quantization == V4L2_QUANTIZATION_LIM_RANGE) {
+               /*
+                * XV601/709 use the header/footer margins to encode R', G'
+                * and B' values outside the range [0-1]. So do not clamp
+                * XV601/709 values.
+                */
+               if (tpg->real_quantization == V4L2_QUANTIZATION_LIM_RANGE &&
+                   tpg->real_ycbcr_enc != V4L2_YCBCR_ENC_XV601 &&
+                   tpg->real_ycbcr_enc != V4L2_YCBCR_ENC_XV709) {
                        y = clamp(y, 16, 235);
                        cb = clamp(cb, 16, 240);
                        cr = clamp(cr, 16, 240);