From afeef4ee23b4865d6c3bf294b5ac9d55dbff5b82 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Fri, 5 Jun 2015 03:45:38 -0300 Subject: [PATCH] [media] vivid-tpg: improve Y16 color setup 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 Reviewed-by: Ricardo Ribalda Signed-off-by: Mauro Carvalho Chehab --- drivers/media/platform/vivid/vivid-tpg.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/vivid/vivid-tpg.c b/drivers/media/platform/vivid/vivid-tpg.c index 32ebf0d90d10..1458c7955547 100644 --- a/drivers/media/platform/vivid/vivid-tpg.c +++ b/drivers/media/platform/vivid/vivid-tpg.c @@ -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: -- 2.11.0