All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] Add support for V4L2_PIX_FMT_Y16, V4L2_PIX_FMT_RGB32 and V4L2_PIX_FMT_BGR32
@ 2013-08-02 22:42 Ricardo Ribalda Delgado
  2013-08-02 22:42 ` [PATCH v2 1/2] libv4lconvert: Support for Y16 pixel format Ricardo Ribalda Delgado
  2013-08-02 22:42 ` [PATCH v2 2/2] libv4lconvert: Support for RGB32 and BGR32 format Ricardo Ribalda Delgado
  0 siblings, 2 replies; 11+ messages in thread
From: Ricardo Ribalda Delgado @ 2013-08-02 22:42 UTC (permalink / raw)
  To: hans.verkuil, linux-media, Gregor Jasny; +Cc: Ricardo Ribalda Delgado

This patch adds support for 3 new formats.

v2: Includes feedback from Gregor Jasny
Gregor: Replaces rbg32 flag with bytesperpixes

Ricardo Ribalda Delgado (2):
  libv4lconvert: Support for Y16 pixel format
  libv4lconvert: Support for RGB32 and BGR32 format

 lib/libv4lconvert/libv4lconvert-priv.h |   11 ++++-
 lib/libv4lconvert/libv4lconvert.c      |   77 +++++++++++++++++++++++++++++---
 lib/libv4lconvert/rgbyuv.c             |   75 ++++++++++++++++++++++++++-----
 3 files changed, 145 insertions(+), 18 deletions(-)

-- 
1.7.10.4


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v2 1/2] libv4lconvert: Support for Y16 pixel format
  2013-08-02 22:42 [PATCH v2 0/2] Add support for V4L2_PIX_FMT_Y16, V4L2_PIX_FMT_RGB32 and V4L2_PIX_FMT_BGR32 Ricardo Ribalda Delgado
@ 2013-08-02 22:42 ` Ricardo Ribalda Delgado
  2013-08-09 16:04   ` Ricardo Ribalda Delgado
  2013-08-02 22:42 ` [PATCH v2 2/2] libv4lconvert: Support for RGB32 and BGR32 format Ricardo Ribalda Delgado
  1 sibling, 1 reply; 11+ messages in thread
From: Ricardo Ribalda Delgado @ 2013-08-02 22:42 UTC (permalink / raw)
  To: hans.verkuil, linux-media, Gregor Jasny; +Cc: Ricardo Ribalda Delgado

This patch adds support for V4L2_PIX_FMT_Y16 format.

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
 lib/libv4lconvert/libv4lconvert-priv.h |    6 ++++++
 lib/libv4lconvert/libv4lconvert.c      |   19 +++++++++++++++++++
 lib/libv4lconvert/rgbyuv.c             |   30 ++++++++++++++++++++++++++++++
 3 files changed, 55 insertions(+)

diff --git a/lib/libv4lconvert/libv4lconvert-priv.h b/lib/libv4lconvert/libv4lconvert-priv.h
index c37e220..6422fdd 100644
--- a/lib/libv4lconvert/libv4lconvert-priv.h
+++ b/lib/libv4lconvert/libv4lconvert-priv.h
@@ -152,6 +152,12 @@ void v4lconvert_grey_to_rgb24(const unsigned char *src, unsigned char *dest,
 void v4lconvert_grey_to_yuv420(const unsigned char *src, unsigned char *dest,
 		const struct v4l2_format *src_fmt);
 
+void v4lconvert_y16_to_rgb24(const unsigned char *src, unsigned char *dest,
+		int width, int height);
+
+void v4lconvert_y16_to_yuv420(const unsigned char *src, unsigned char *dest,
+		const struct v4l2_format *src_fmt);
+
 int v4lconvert_y10b_to_rgb24(struct v4lconvert_data *data,
 	const unsigned char *src, unsigned char *dest, int width, int height);
 
diff --git a/lib/libv4lconvert/libv4lconvert.c b/lib/libv4lconvert/libv4lconvert.c
index 60010f1..bc5e34f 100644
--- a/lib/libv4lconvert/libv4lconvert.c
+++ b/lib/libv4lconvert/libv4lconvert.c
@@ -128,6 +128,7 @@ static const struct v4lconvert_pixfmt supported_src_pixfmts[] = {
 	{ V4L2_PIX_FMT_Y4,		 8,	20,	20,	0 },
 	{ V4L2_PIX_FMT_Y6,		 8,	20,	20,	0 },
 	{ V4L2_PIX_FMT_Y10BPACK,	10,	20,	20,	0 },
+	{ V4L2_PIX_FMT_Y16,		16,	20,	20,	0 },
 };
 
 static const struct v4lconvert_pixfmt supported_dst_pixfmts[] = {
@@ -989,6 +990,24 @@ static int v4lconvert_convert_pixfmt(struct v4lconvert_data *data,
 		break;
 	}
 
+	case V4L2_PIX_FMT_Y16:
+		switch (dest_pix_fmt) {
+		case V4L2_PIX_FMT_RGB24:
+	        case V4L2_PIX_FMT_BGR24:
+			v4lconvert_y16_to_rgb24(src, dest, width, height);
+			break;
+		case V4L2_PIX_FMT_YUV420:
+		case V4L2_PIX_FMT_YVU420:
+			v4lconvert_y16_to_yuv420(src, dest, fmt);
+			break;
+		}
+		if (src_size < (width * height * 2)) {
+			V4LCONVERT_ERR("short y16 data frame\n");
+			errno = EPIPE;
+			result = -1;
+		}
+		break;
+
 	case V4L2_PIX_FMT_GREY:
 	case V4L2_PIX_FMT_Y4:
 	case V4L2_PIX_FMT_Y6:
diff --git a/lib/libv4lconvert/rgbyuv.c b/lib/libv4lconvert/rgbyuv.c
index d05abe9..bef034f 100644
--- a/lib/libv4lconvert/rgbyuv.c
+++ b/lib/libv4lconvert/rgbyuv.c
@@ -586,6 +586,36 @@ void v4lconvert_rgb565_to_yuv420(const unsigned char *src, unsigned char *dest,
 	}
 }
 
+void v4lconvert_y16_to_rgb24(const unsigned char *src, unsigned char *dest,
+		int width, int height)
+{
+	int j;
+	while (--height >= 0) {
+		for (j = 0; j < width; j++) {
+			*dest++ = *src;
+			*dest++ = *src;
+			*dest++ = *src;
+			src+=2;
+		}
+	}
+}
+
+void v4lconvert_y16_to_yuv420(const unsigned char *src, unsigned char *dest,
+		const struct v4l2_format *src_fmt)
+{
+	int x, y;
+
+	/* Y */
+	for (y = 0; y < src_fmt->fmt.pix.height; y++)
+		for (x = 0; x < src_fmt->fmt.pix.width; x++){
+			*dest++ = *src;
+			src+=2;
+		}
+
+	/* Clear U/V */
+	memset(dest, 0x80, src_fmt->fmt.pix.width * src_fmt->fmt.pix.height / 2);
+}
+
 void v4lconvert_grey_to_rgb24(const unsigned char *src, unsigned char *dest,
 		int width, int height)
 {
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 2/2] libv4lconvert: Support for RGB32 and BGR32 format
  2013-08-02 22:42 [PATCH v2 0/2] Add support for V4L2_PIX_FMT_Y16, V4L2_PIX_FMT_RGB32 and V4L2_PIX_FMT_BGR32 Ricardo Ribalda Delgado
  2013-08-02 22:42 ` [PATCH v2 1/2] libv4lconvert: Support for Y16 pixel format Ricardo Ribalda Delgado
@ 2013-08-02 22:42 ` Ricardo Ribalda Delgado
  2013-08-03 16:42   ` Gregor Jasny
  1 sibling, 1 reply; 11+ messages in thread
From: Ricardo Ribalda Delgado @ 2013-08-02 22:42 UTC (permalink / raw)
  To: hans.verkuil, linux-media, Gregor Jasny; +Cc: Ricardo Ribalda Delgado

This patch adds support for V4L2_PIX_FMT_BGR32 and V4L2_PIX_FMT_BGR32
formats.

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
 lib/libv4lconvert/libv4lconvert-priv.h |    5 ++-
 lib/libv4lconvert/libv4lconvert.c      |   58 ++++++++++++++++++++++++++++----
 lib/libv4lconvert/rgbyuv.c             |   45 +++++++++++++++++++------
 3 files changed, 90 insertions(+), 18 deletions(-)

diff --git a/lib/libv4lconvert/libv4lconvert-priv.h b/lib/libv4lconvert/libv4lconvert-priv.h
index 6422fdd..ac1391e 100644
--- a/lib/libv4lconvert/libv4lconvert-priv.h
+++ b/lib/libv4lconvert/libv4lconvert-priv.h
@@ -108,7 +108,7 @@ unsigned char *v4lconvert_alloc_buffer(int needed,
 int v4lconvert_oom_error(struct v4lconvert_data *data);
 
 void v4lconvert_rgb24_to_yuv420(const unsigned char *src, unsigned char *dest,
-		const struct v4l2_format *src_fmt, int bgr, int yvu);
+		const struct v4l2_format *src_fmt, int bgr, int yvu, int bpp);
 
 void v4lconvert_yuv420_to_rgb24(const unsigned char *src, unsigned char *dst,
 		int width, int height, int yvu);
@@ -158,6 +158,9 @@ void v4lconvert_y16_to_rgb24(const unsigned char *src, unsigned char *dest,
 void v4lconvert_y16_to_yuv420(const unsigned char *src, unsigned char *dest,
 		const struct v4l2_format *src_fmt);
 
+void v4lconvert_rgb32_to_rgb24(const unsigned char *src, unsigned char *dest,
+		int width, int height, int bgr);
+
 int v4lconvert_y10b_to_rgb24(struct v4lconvert_data *data,
 	const unsigned char *src, unsigned char *dest, int width, int height);
 
diff --git a/lib/libv4lconvert/libv4lconvert.c b/lib/libv4lconvert/libv4lconvert.c
index bc5e34f..2aec99a 100644
--- a/lib/libv4lconvert/libv4lconvert.c
+++ b/lib/libv4lconvert/libv4lconvert.c
@@ -84,6 +84,8 @@ static const struct v4lconvert_pixfmt supported_src_pixfmts[] = {
 	SUPPORTED_DST_PIXFMTS,
 	/* packed rgb formats */
 	{ V4L2_PIX_FMT_RGB565,		16,	 4,	 6,	0 },
+	{ V4L2_PIX_FMT_BGR32,		32,	 4,	 6,	0 },
+	{ V4L2_PIX_FMT_RGB32,		32,	 4,	 6,	0 },
 	/* yuv 4:2:2 formats */
 	{ V4L2_PIX_FMT_YUYV,		16,	 5,	 4,	0 },
 	{ V4L2_PIX_FMT_YVYU,		16,	 5,	 4,	0 },
@@ -981,10 +983,10 @@ static int v4lconvert_convert_pixfmt(struct v4lconvert_data *data,
 			v4lconvert_swap_rgb(d, dest, width, height);
 			break;
 		case V4L2_PIX_FMT_YUV420:
-			v4lconvert_rgb24_to_yuv420(d, dest, fmt, 0, 0);
+			v4lconvert_rgb24_to_yuv420(d, dest, fmt, 0, 0, 3);
 			break;
 		case V4L2_PIX_FMT_YVU420:
-			v4lconvert_rgb24_to_yuv420(d, dest, fmt, 0, 1);
+			v4lconvert_rgb24_to_yuv420(d, dest, fmt, 0, 1, 3);
 			break;
 		}
 		break;
@@ -1079,10 +1081,10 @@ static int v4lconvert_convert_pixfmt(struct v4lconvert_data *data,
 			v4lconvert_swap_rgb(src, dest, width, height);
 			break;
 		case V4L2_PIX_FMT_YUV420:
-			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 0, 0);
+			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 0, 0, 3);
 			break;
 		case V4L2_PIX_FMT_YVU420:
-			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 0, 1);
+			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 0, 1, 3);
 			break;
 		}
 		if (src_size < (width * height * 3)) {
@@ -1101,10 +1103,10 @@ static int v4lconvert_convert_pixfmt(struct v4lconvert_data *data,
 			memcpy(dest, src, width * height * 3);
 			break;
 		case V4L2_PIX_FMT_YUV420:
-			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 1, 0);
+			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 1, 0, 3);
 			break;
 		case V4L2_PIX_FMT_YVU420:
-			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 1, 1);
+			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 1, 1, 3);
 			break;
 		}
 		if (src_size < (width * height * 3)) {
@@ -1114,6 +1116,50 @@ static int v4lconvert_convert_pixfmt(struct v4lconvert_data *data,
 		}
 		break;
 
+	case V4L2_PIX_FMT_RGB32:
+		switch (dest_pix_fmt) {
+		case V4L2_PIX_FMT_RGB24:
+			v4lconvert_rgb32_to_rgb24(src, dest, width, height, 0);
+			break;
+		case V4L2_PIX_FMT_BGR24:
+			v4lconvert_rgb32_to_rgb24(src, dest, width, height, 1);
+			break;
+		case V4L2_PIX_FMT_YUV420:
+			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 0, 0, 4);
+			break;
+		case V4L2_PIX_FMT_YVU420:
+			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 0, 1, 4);
+			break;
+		}
+		if (src_size < (width * height * 4)) {
+			V4LCONVERT_ERR("short rgb32 data frame\n");
+			errno = EPIPE;
+			result = -1;
+		}
+		break;
+
+	case V4L2_PIX_FMT_BGR32:
+		switch (dest_pix_fmt) {
+		case V4L2_PIX_FMT_RGB24:
+			v4lconvert_rgb32_to_rgb24(src, dest, width, height, 1);
+			break;
+		case V4L2_PIX_FMT_BGR24:
+			v4lconvert_rgb32_to_rgb24(src, dest, width, height, 0);
+			break;
+		case V4L2_PIX_FMT_YUV420:
+			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 1, 0, 4);
+			break;
+		case V4L2_PIX_FMT_YVU420:
+			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 1, 1, 4);
+			break;
+		}
+		if (src_size < (width * height * 4)) {
+			V4LCONVERT_ERR("short bgr32 data frame\n");
+			errno = EPIPE;
+			result = -1;
+		}
+		break;
+
 	case V4L2_PIX_FMT_YUV420:
 		switch (dest_pix_fmt) {
 		case V4L2_PIX_FMT_RGB24:
diff --git a/lib/libv4lconvert/rgbyuv.c b/lib/libv4lconvert/rgbyuv.c
index bef034f..d2f11bf 100644
--- a/lib/libv4lconvert/rgbyuv.c
+++ b/lib/libv4lconvert/rgbyuv.c
@@ -35,7 +35,7 @@
 	} while (0)
 
 void v4lconvert_rgb24_to_yuv420(const unsigned char *src, unsigned char *dest,
-		const struct v4l2_format *src_fmt, int bgr, int yvu)
+		const struct v4l2_format *src_fmt, int bgr, int yvu, int bpp)
 {
 	int x, y;
 	unsigned char *udest, *vdest;
@@ -47,9 +47,10 @@ void v4lconvert_rgb24_to_yuv420(const unsigned char *src, unsigned char *dest,
 				RGB2Y(src[2], src[1], src[0], *dest++);
 			else
 				RGB2Y(src[0], src[1], src[2], *dest++);
-			src += 3;
+			src += bpp;
 		}
-		src += src_fmt->fmt.pix.bytesperline - 3 * src_fmt->fmt.pix.width;
+
+		src += src_fmt->fmt.pix.bytesperline - bpp * src_fmt->fmt.pix.width;
 	}
 	src -= src_fmt->fmt.pix.height * src_fmt->fmt.pix.bytesperline;
 
@@ -66,19 +67,19 @@ void v4lconvert_rgb24_to_yuv420(const unsigned char *src, unsigned char *dest,
 		for (x = 0; x < src_fmt->fmt.pix.width / 2; x++) {
 			int avg_src[3];
 
-			avg_src[0] = (src[0] + src[3] + src[src_fmt->fmt.pix.bytesperline] +
-					src[src_fmt->fmt.pix.bytesperline + 3]) / 4;
-			avg_src[1] = (src[1] + src[4] + src[src_fmt->fmt.pix.bytesperline + 1] +
-					src[src_fmt->fmt.pix.bytesperline + 4]) / 4;
-			avg_src[2] = (src[2] + src[5] + src[src_fmt->fmt.pix.bytesperline + 2] +
-					src[src_fmt->fmt.pix.bytesperline + 5]) / 4;
+			avg_src[0] = (src[0] + src[bpp] + src[src_fmt->fmt.pix.bytesperline] +
+					src[src_fmt->fmt.pix.bytesperline + bpp]) / 4;
+			avg_src[1] = (src[1] + src[bpp + 1] + src[src_fmt->fmt.pix.bytesperline + 1] +
+					src[src_fmt->fmt.pix.bytesperline + bpp + 1]) / 4;
+			avg_src[2] = (src[2] + src[bpp + 2] + src[src_fmt->fmt.pix.bytesperline + 2] +
+					src[src_fmt->fmt.pix.bytesperline + bpp + 2]) / 4;
 			if (bgr)
 				RGB2UV(avg_src[2], avg_src[1], avg_src[0], *udest++, *vdest++);
 			else
 				RGB2UV(avg_src[0], avg_src[1], avg_src[2], *udest++, *vdest++);
-			src += 6;
+			src += 2 * bpp;
 		}
-		src += 2 * src_fmt->fmt.pix.bytesperline - 3 * src_fmt->fmt.pix.width;
+		src += 2 * src_fmt->fmt.pix.bytesperline - bpp * src_fmt->fmt.pix.width;
 	}
 }
 
@@ -725,3 +726,25 @@ int v4lconvert_y10b_to_yuv420(struct v4lconvert_data *data,
 
 	return 0;
 }
+
+void v4lconvert_rgb32_to_rgb24(const unsigned char *src, unsigned char *dest,
+		int width, int height,int bgr)
+{
+	int j;
+	while (--height >= 0) {
+		for (j = 0; j < width; j++) {
+			if (bgr){
+				*dest++ = src[2];
+				*dest++ = src[1];
+				*dest++ = src[0];
+				src+=4;
+			}
+			else{
+				*dest++ = *src++;
+				*dest++ = *src++;
+				*dest++ = *src++;
+				src+=1;
+			}
+		}
+	}
+}
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] libv4lconvert: Support for RGB32 and BGR32 format
  2013-08-02 22:42 ` [PATCH v2 2/2] libv4lconvert: Support for RGB32 and BGR32 format Ricardo Ribalda Delgado
@ 2013-08-03 16:42   ` Gregor Jasny
  2013-08-04  8:05     ` Ricardo Ribalda Delgado
  0 siblings, 1 reply; 11+ messages in thread
From: Gregor Jasny @ 2013-08-03 16:42 UTC (permalink / raw)
  To: Ricardo Ribalda Delgado, linux-media

On 8/3/13 12:42 AM, Ricardo Ribalda Delgado wrote:
> +	case V4L2_PIX_FMT_RGB32:
> +		switch (dest_pix_fmt) {
> +		case V4L2_PIX_FMT_RGB24:
> +			v4lconvert_rgb32_to_rgb24(src, dest, width, height, 0);
> +			break;
> +		case V4L2_PIX_FMT_BGR24:
> +			v4lconvert_rgb32_to_rgb24(src, dest, width, height, 1);
> +			break;
> +		case V4L2_PIX_FMT_YUV420:
> +			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 0, 0, 4);
> +			break;
> +		case V4L2_PIX_FMT_YVU420:
> +			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 0, 1, 4);
> +			break;
> +		}
> +		if (src_size < (width * height * 4)) {
> +			V4LCONVERT_ERR("short rgb32 data frame\n");
> +			errno = EPIPE;
> +			result = -1;
> +		}
> +		break;

I have not looked at the whole function but shouldn't this sanity check 
happen before the actual work? Also aren't you applying the condition 
here also for rgb24_to_xxx which should have only three bpp?

> +	case V4L2_PIX_FMT_BGR32:
> +		switch (dest_pix_fmt) {
> +		case V4L2_PIX_FMT_RGB24:
> +			v4lconvert_rgb32_to_rgb24(src, dest, width, height, 1);
> +			break;
> +		case V4L2_PIX_FMT_BGR24:
> +			v4lconvert_rgb32_to_rgb24(src, dest, width, height, 0);
> +			break;
> +		case V4L2_PIX_FMT_YUV420:
> +			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 1, 0, 4);
> +			break;
> +		case V4L2_PIX_FMT_YVU420:
> +			v4lconvert_rgb24_to_yuv420(src, dest, fmt, 1, 1, 4);
> +			break;
> +		}
> +		if (src_size < (width * height * 4)) {
> +			V4LCONVERT_ERR("short bgr32 data frame\n");
> +			errno = EPIPE;
> +			result = -1;
> +		}
> +		break;

Same here. And also in the other patch.



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] libv4lconvert: Support for RGB32 and BGR32 format
  2013-08-03 16:42   ` Gregor Jasny
@ 2013-08-04  8:05     ` Ricardo Ribalda Delgado
  2013-08-09 16:03       ` Ricardo Ribalda Delgado
  0 siblings, 1 reply; 11+ messages in thread
From: Ricardo Ribalda Delgado @ 2013-08-04  8:05 UTC (permalink / raw)
  To: Gregor Jasny; +Cc: linux-media

Hello Gregor

Thanks for your comments. I have replied inline.

On Sat, Aug 3, 2013 at 6:42 PM, Gregor Jasny <gjasny@googlemail.com> wrote:
> On 8/3/13 12:42 AM, Ricardo Ribalda Delgado wrote:
>>
>> +       case V4L2_PIX_FMT_RGB32:
>> +               switch (dest_pix_fmt) {
>> +               case V4L2_PIX_FMT_RGB24:
>> +                       v4lconvert_rgb32_to_rgb24(src, dest, width,
>> height, 0);
>> +                       break;
>> +               case V4L2_PIX_FMT_BGR24:
>> +                       v4lconvert_rgb32_to_rgb24(src, dest, width,
>> height, 1);
>> +                       break;
>> +               case V4L2_PIX_FMT_YUV420:
>> +                       v4lconvert_rgb24_to_yuv420(src, dest, fmt, 0, 0,
>> 4);
>> +                       break;
>> +               case V4L2_PIX_FMT_YVU420:
>> +                       v4lconvert_rgb24_to_yuv420(src, dest, fmt, 0, 1,
>> 4);
>> +                       break;
>> +               }
>> +               if (src_size < (width * height * 4)) {
>> +                       V4LCONVERT_ERR("short rgb32 data frame\n");
>> +                       errno = EPIPE;
>> +                       result = -1;
>> +               }
>> +               break;
>
>
> I have not looked at the whole function but shouldn't this sanity check
> happen before the actual work?

Yes, but it is how it is done in the whole library with all the
formats. Please grep for "short " on libv4lconvert.c

> Also aren't you applying the condition here
> also for rgb24_to_xxx which should have only three bpp?
>

I have modified the function rgb24_to_yuv420 to support other bytes per pixel.

>
>> +       case V4L2_PIX_FMT_BGR32:
>> +               switch (dest_pix_fmt) {
>> +               case V4L2_PIX_FMT_RGB24:
>> +                       v4lconvert_rgb32_to_rgb24(src, dest, width,
>> height, 1);
>> +                       break;
>> +               case V4L2_PIX_FMT_BGR24:
>> +                       v4lconvert_rgb32_to_rgb24(src, dest, width,
>> height, 0);
>> +                       break;
>> +               case V4L2_PIX_FMT_YUV420:
>> +                       v4lconvert_rgb24_to_yuv420(src, dest, fmt, 1, 0,
>> 4);
>> +                       break;
>> +               case V4L2_PIX_FMT_YVU420:
>> +                       v4lconvert_rgb24_to_yuv420(src, dest, fmt, 1, 1,
>> 4);
>> +                       break;
>> +               }
>> +               if (src_size < (width * height * 4)) {
>> +                       V4LCONVERT_ERR("short bgr32 data frame\n");
>> +                       errno = EPIPE;
>> +                       result = -1;
>> +               }
>> +               break;
>
>
> Same here. And also in the other patch.
>
>

Thanks again

-- 
Ricardo Ribalda

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] libv4lconvert: Support for RGB32 and BGR32 format
  2013-08-04  8:05     ` Ricardo Ribalda Delgado
@ 2013-08-09 16:03       ` Ricardo Ribalda Delgado
  0 siblings, 0 replies; 11+ messages in thread
From: Ricardo Ribalda Delgado @ 2013-08-09 16:03 UTC (permalink / raw)
  To: Gregor Jasny; +Cc: linux-media

ping?

On Sun, Aug 4, 2013 at 10:05 AM, Ricardo Ribalda Delgado
<ricardo.ribalda@gmail.com> wrote:
> Hello Gregor
>
> Thanks for your comments. I have replied inline.
>
> On Sat, Aug 3, 2013 at 6:42 PM, Gregor Jasny <gjasny@googlemail.com> wrote:
>> On 8/3/13 12:42 AM, Ricardo Ribalda Delgado wrote:
>>>
>>> +       case V4L2_PIX_FMT_RGB32:
>>> +               switch (dest_pix_fmt) {
>>> +               case V4L2_PIX_FMT_RGB24:
>>> +                       v4lconvert_rgb32_to_rgb24(src, dest, width,
>>> height, 0);
>>> +                       break;
>>> +               case V4L2_PIX_FMT_BGR24:
>>> +                       v4lconvert_rgb32_to_rgb24(src, dest, width,
>>> height, 1);
>>> +                       break;
>>> +               case V4L2_PIX_FMT_YUV420:
>>> +                       v4lconvert_rgb24_to_yuv420(src, dest, fmt, 0, 0,
>>> 4);
>>> +                       break;
>>> +               case V4L2_PIX_FMT_YVU420:
>>> +                       v4lconvert_rgb24_to_yuv420(src, dest, fmt, 0, 1,
>>> 4);
>>> +                       break;
>>> +               }
>>> +               if (src_size < (width * height * 4)) {
>>> +                       V4LCONVERT_ERR("short rgb32 data frame\n");
>>> +                       errno = EPIPE;
>>> +                       result = -1;
>>> +               }
>>> +               break;
>>
>>
>> I have not looked at the whole function but shouldn't this sanity check
>> happen before the actual work?
>
> Yes, but it is how it is done in the whole library with all the
> formats. Please grep for "short " on libv4lconvert.c
>
>> Also aren't you applying the condition here
>> also for rgb24_to_xxx which should have only three bpp?
>>
>
> I have modified the function rgb24_to_yuv420 to support other bytes per pixel.
>
>>
>>> +       case V4L2_PIX_FMT_BGR32:
>>> +               switch (dest_pix_fmt) {
>>> +               case V4L2_PIX_FMT_RGB24:
>>> +                       v4lconvert_rgb32_to_rgb24(src, dest, width,
>>> height, 1);
>>> +                       break;
>>> +               case V4L2_PIX_FMT_BGR24:
>>> +                       v4lconvert_rgb32_to_rgb24(src, dest, width,
>>> height, 0);
>>> +                       break;
>>> +               case V4L2_PIX_FMT_YUV420:
>>> +                       v4lconvert_rgb24_to_yuv420(src, dest, fmt, 1, 0,
>>> 4);
>>> +                       break;
>>> +               case V4L2_PIX_FMT_YVU420:
>>> +                       v4lconvert_rgb24_to_yuv420(src, dest, fmt, 1, 1,
>>> 4);
>>> +                       break;
>>> +               }
>>> +               if (src_size < (width * height * 4)) {
>>> +                       V4LCONVERT_ERR("short bgr32 data frame\n");
>>> +                       errno = EPIPE;
>>> +                       result = -1;
>>> +               }
>>> +               break;
>>
>>
>> Same here. And also in the other patch.
>>
>>
>
> Thanks again
>
> --
> Ricardo Ribalda



-- 
Ricardo Ribalda

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 1/2] libv4lconvert: Support for Y16 pixel format
  2013-08-02 22:42 ` [PATCH v2 1/2] libv4lconvert: Support for Y16 pixel format Ricardo Ribalda Delgado
@ 2013-08-09 16:04   ` Ricardo Ribalda Delgado
  2013-08-12 19:39     ` Gregor Jasny
  0 siblings, 1 reply; 11+ messages in thread
From: Ricardo Ribalda Delgado @ 2013-08-09 16:04 UTC (permalink / raw)
  To: hans.verkuil, linux-media, Gregor Jasny; +Cc: Ricardo Ribalda Delgado

ping?

On Sat, Aug 3, 2013 at 12:42 AM, Ricardo Ribalda Delgado
<ricardo.ribalda@gmail.com> wrote:
> This patch adds support for V4L2_PIX_FMT_Y16 format.
>
> Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
> ---
>  lib/libv4lconvert/libv4lconvert-priv.h |    6 ++++++
>  lib/libv4lconvert/libv4lconvert.c      |   19 +++++++++++++++++++
>  lib/libv4lconvert/rgbyuv.c             |   30 ++++++++++++++++++++++++++++++
>  3 files changed, 55 insertions(+)
>
> diff --git a/lib/libv4lconvert/libv4lconvert-priv.h b/lib/libv4lconvert/libv4lconvert-priv.h
> index c37e220..6422fdd 100644
> --- a/lib/libv4lconvert/libv4lconvert-priv.h
> +++ b/lib/libv4lconvert/libv4lconvert-priv.h
> @@ -152,6 +152,12 @@ void v4lconvert_grey_to_rgb24(const unsigned char *src, unsigned char *dest,
>  void v4lconvert_grey_to_yuv420(const unsigned char *src, unsigned char *dest,
>                 const struct v4l2_format *src_fmt);
>
> +void v4lconvert_y16_to_rgb24(const unsigned char *src, unsigned char *dest,
> +               int width, int height);
> +
> +void v4lconvert_y16_to_yuv420(const unsigned char *src, unsigned char *dest,
> +               const struct v4l2_format *src_fmt);
> +
>  int v4lconvert_y10b_to_rgb24(struct v4lconvert_data *data,
>         const unsigned char *src, unsigned char *dest, int width, int height);
>
> diff --git a/lib/libv4lconvert/libv4lconvert.c b/lib/libv4lconvert/libv4lconvert.c
> index 60010f1..bc5e34f 100644
> --- a/lib/libv4lconvert/libv4lconvert.c
> +++ b/lib/libv4lconvert/libv4lconvert.c
> @@ -128,6 +128,7 @@ static const struct v4lconvert_pixfmt supported_src_pixfmts[] = {
>         { V4L2_PIX_FMT_Y4,               8,     20,     20,     0 },
>         { V4L2_PIX_FMT_Y6,               8,     20,     20,     0 },
>         { V4L2_PIX_FMT_Y10BPACK,        10,     20,     20,     0 },
> +       { V4L2_PIX_FMT_Y16,             16,     20,     20,     0 },
>  };
>
>  static const struct v4lconvert_pixfmt supported_dst_pixfmts[] = {
> @@ -989,6 +990,24 @@ static int v4lconvert_convert_pixfmt(struct v4lconvert_data *data,
>                 break;
>         }
>
> +       case V4L2_PIX_FMT_Y16:
> +               switch (dest_pix_fmt) {
> +               case V4L2_PIX_FMT_RGB24:
> +               case V4L2_PIX_FMT_BGR24:
> +                       v4lconvert_y16_to_rgb24(src, dest, width, height);
> +                       break;
> +               case V4L2_PIX_FMT_YUV420:
> +               case V4L2_PIX_FMT_YVU420:
> +                       v4lconvert_y16_to_yuv420(src, dest, fmt);
> +                       break;
> +               }
> +               if (src_size < (width * height * 2)) {
> +                       V4LCONVERT_ERR("short y16 data frame\n");
> +                       errno = EPIPE;
> +                       result = -1;
> +               }
> +               break;
> +
>         case V4L2_PIX_FMT_GREY:
>         case V4L2_PIX_FMT_Y4:
>         case V4L2_PIX_FMT_Y6:
> diff --git a/lib/libv4lconvert/rgbyuv.c b/lib/libv4lconvert/rgbyuv.c
> index d05abe9..bef034f 100644
> --- a/lib/libv4lconvert/rgbyuv.c
> +++ b/lib/libv4lconvert/rgbyuv.c
> @@ -586,6 +586,36 @@ void v4lconvert_rgb565_to_yuv420(const unsigned char *src, unsigned char *dest,
>         }
>  }
>
> +void v4lconvert_y16_to_rgb24(const unsigned char *src, unsigned char *dest,
> +               int width, int height)
> +{
> +       int j;
> +       while (--height >= 0) {
> +               for (j = 0; j < width; j++) {
> +                       *dest++ = *src;
> +                       *dest++ = *src;
> +                       *dest++ = *src;
> +                       src+=2;
> +               }
> +       }
> +}
> +
> +void v4lconvert_y16_to_yuv420(const unsigned char *src, unsigned char *dest,
> +               const struct v4l2_format *src_fmt)
> +{
> +       int x, y;
> +
> +       /* Y */
> +       for (y = 0; y < src_fmt->fmt.pix.height; y++)
> +               for (x = 0; x < src_fmt->fmt.pix.width; x++){
> +                       *dest++ = *src;
> +                       src+=2;
> +               }
> +
> +       /* Clear U/V */
> +       memset(dest, 0x80, src_fmt->fmt.pix.width * src_fmt->fmt.pix.height / 2);
> +}
> +
>  void v4lconvert_grey_to_rgb24(const unsigned char *src, unsigned char *dest,
>                 int width, int height)
>  {
> --
> 1.7.10.4
>



-- 
Ricardo Ribalda

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 1/2] libv4lconvert: Support for Y16 pixel format
  2013-08-09 16:04   ` Ricardo Ribalda Delgado
@ 2013-08-12 19:39     ` Gregor Jasny
  2013-08-12 20:29       ` Ricardo Ribalda Delgado
  2013-08-13  8:56       ` Hans de Goede
  0 siblings, 2 replies; 11+ messages in thread
From: Gregor Jasny @ 2013-08-12 19:39 UTC (permalink / raw)
  To: Ricardo Ribalda Delgado; +Cc: Hans de Goede, linux-media

On 8/9/13 6:04 PM, Ricardo Ribalda Delgado wrote:
> ping?

Thank you for your the updated series.

Unfortunately I'm still partially busy with moving. I hoped the 
v4lconvert maintainer Hans (de Goede) will ack these patches. If this 
series does not get an ack by Sunday I'll double check and commit.

What hardware did you use to test this?

Thanks,
Gregor

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 1/2] libv4lconvert: Support for Y16 pixel format
  2013-08-12 19:39     ` Gregor Jasny
@ 2013-08-12 20:29       ` Ricardo Ribalda Delgado
  2013-08-13  8:56       ` Hans de Goede
  1 sibling, 0 replies; 11+ messages in thread
From: Ricardo Ribalda Delgado @ 2013-08-12 20:29 UTC (permalink / raw)
  To: Gregor Jasny; +Cc: Hans de Goede, linux-media

Hello Gregor

I am using some cameras from qtec.com. In fact, I am developing the
firmware for them :)

qv4l2 has been very useful for testing.

Thanks for your response.

On Mon, Aug 12, 2013 at 9:39 PM, Gregor Jasny <gjasny@googlemail.com> wrote:
> On 8/9/13 6:04 PM, Ricardo Ribalda Delgado wrote:
>>
>> ping?
>
>
> Thank you for your the updated series.
>
> Unfortunately I'm still partially busy with moving. I hoped the v4lconvert
> maintainer Hans (de Goede) will ack these patches. If this series does not
> get an ack by Sunday I'll double check and commit.
>
> What hardware did you use to test this?
>
> Thanks,
> Gregor



-- 
Ricardo Ribalda

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 1/2] libv4lconvert: Support for Y16 pixel format
  2013-08-12 19:39     ` Gregor Jasny
  2013-08-12 20:29       ` Ricardo Ribalda Delgado
@ 2013-08-13  8:56       ` Hans de Goede
  2013-08-16 16:03         ` Gregor Jasny
  1 sibling, 1 reply; 11+ messages in thread
From: Hans de Goede @ 2013-08-13  8:56 UTC (permalink / raw)
  To: Gregor Jasny; +Cc: Ricardo Ribalda Delgado, linux-media

Hi,

On 08/12/2013 09:39 PM, Gregor Jasny wrote:
> On 8/9/13 6:04 PM, Ricardo Ribalda Delgado wrote:
>> ping?
>
> Thank you for your the updated series.
>
> Unfortunately I'm still partially busy with moving. I hoped the v4lconvert maintainer Hans (de Goede) will ack these patches.

Series looks good to me:

Acked-by: Hans de Goede <hdegoede@redhat.com>

Regards,

Hans

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 1/2] libv4lconvert: Support for Y16 pixel format
  2013-08-13  8:56       ` Hans de Goede
@ 2013-08-16 16:03         ` Gregor Jasny
  0 siblings, 0 replies; 11+ messages in thread
From: Gregor Jasny @ 2013-08-16 16:03 UTC (permalink / raw)
  To: Hans de Goede; +Cc: Ricardo Ribalda Delgado, linux-media

On 8/13/13 10:56 AM, Hans de Goede wrote:
> Series looks good to me:
>
> Acked-by: Hans de Goede <hdegoede@redhat.com>

I submitted it yesterday.


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2013-08-16 16:03 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-02 22:42 [PATCH v2 0/2] Add support for V4L2_PIX_FMT_Y16, V4L2_PIX_FMT_RGB32 and V4L2_PIX_FMT_BGR32 Ricardo Ribalda Delgado
2013-08-02 22:42 ` [PATCH v2 1/2] libv4lconvert: Support for Y16 pixel format Ricardo Ribalda Delgado
2013-08-09 16:04   ` Ricardo Ribalda Delgado
2013-08-12 19:39     ` Gregor Jasny
2013-08-12 20:29       ` Ricardo Ribalda Delgado
2013-08-13  8:56       ` Hans de Goede
2013-08-16 16:03         ` Gregor Jasny
2013-08-02 22:42 ` [PATCH v2 2/2] libv4lconvert: Support for RGB32 and BGR32 format Ricardo Ribalda Delgado
2013-08-03 16:42   ` Gregor Jasny
2013-08-04  8:05     ` Ricardo Ribalda Delgado
2013-08-09 16:03       ` Ricardo Ribalda Delgado

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.