[media] vivid-tpg: improve Y16 color setup
authorHans Verkuil <hverkuil@xs4all.nl>
Fri, 5 Jun 2015 06:45:38 +0000 (03:45 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Sat, 6 Jun 2015 10:34:52 +0000 (07:34 -0300)
Currently the colors for the Y16 and Y16_BE pixelformats are in the range
0x0000-0xff00. So pure white (0xffff) is never created.

Improve this by making white really white. For other colors the lsb remains 0
so vivid can be used to detect endian problems.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Reviewed-by: Ricardo Ribalda <ricardo.ribalda@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/platform/vivid/vivid-tpg.c

index 32ebf0d90d10e60e7ac61e3fb3e85f0832734606..1458c7955547104e53a19b772e76452779073cae 100644 (file)
@@ -900,12 +900,19 @@ static void gen_twopix(struct tpg_data *tpg,
                buf[0][offset] = r_y;
                break;
        case V4L2_PIX_FMT_Y16:
-               buf[0][offset] = 0;
+               /*
+                * Ideally both bytes should be set to r_y, but then you won't
+                * be able to detect endian problems. So keep it 0 except for
+                * the corner case where r_y is 0xff so white really will be
+                * white (0xffff).
+                */
+               buf[0][offset] = r_y == 0xff ? r_y : 0;
                buf[0][offset+1] = r_y;
                break;
        case V4L2_PIX_FMT_Y16_BE:
+               /* See comment for V4L2_PIX_FMT_Y16 above */
                buf[0][offset] = r_y;
-               buf[0][offset+1] = 0;
+               buf[0][offset+1] = r_y == 0xff ? r_y : 0;
                break;
        case V4L2_PIX_FMT_YUV422P:
        case V4L2_PIX_FMT_YUV420: