Improve Y16 color setup
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
@@ -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 :
Hello Hans
Quoted 5 lines · Hans Verkuil
Currently the colors for the Y16 and
Y16_BEpixelformats 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!