Skip to contentSkip to conversation

Improve Y16 color setup

PATCH Superseded Hans Verkuil 2 participants 2 messages Jun 1, 2015 Media (V4L/DVB)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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 using the same byte for both LSB and MSB so the full range is achieved.

drivers/media/platform/vivid/vivid-tpg.c +3 -7
index b1147f2..e28f32b 100644
@@ -896,16 +896,12 @@ static void gen_twopix(struct tpg_data *tpg,
 	b_v = tpg->colors[color][2]; /* B or precalculated V */
 
 	switch (tpg->fourcc) {
-	case V4L2_PIX_FMT_GREY:
-		buf[0][offset] = r_y;
-		break;
 	case V4L2_PIX_FMT_Y16:
-		buf[0][offset] = 0;
-		buf[0][offset+1] = r_y;
-		break;
 	case V4L2_PIX_FMT_Y16_BE:
+		buf[0][offset+1] = r_y;
+		/* fall through */
+	case V4L2_PIX_FMT_GREY:
 		buf[0][offset] = r_y;
-		buf[0][offset+1] = 0;
 		break;
 	case V4L2_PIX_FMT_YUV422P:
 	case V4L2_PIX_FMT_YUV420:
#1 lore raw

Hello Hans

Quoted 5 lines · Hans Verkuil

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 using the same byte for both LSB and MSB so the full range is achieved.

If someone uses vivid as reference (I sometimes do), this could lead to incorrect implementations. If the user don't implement the endianess right he will never notice. I have carried out an endianness bug for some months, until gstreamer was showing "funny" ;) images.

If the problem is that you want to reach saturation, I would rather setting the lsb to 0xff all the time. (i.e. going from 0x00ff to 0xffff).

If we want saturation and zero, we could set the lsb to val?0xff:0;

Regards!