Re: [PATCH v2 2/2] libv4lconvert: Support for RGB32 and BGR32 format

2013-08-09 Thread Ricardo Ribalda Delgado
ping?

On Sun, Aug 4, 2013 at 10:05 AM, Ricardo Ribalda Delgado
ricardo.riba...@gmail.com wrote:
 Hello Gregor

 Thanks for your comments. I have replied inline.

 On Sat, Aug 3, 2013 at 6:42 PM, Gregor Jasny gja...@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
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 2/2] libv4lconvert: Support for RGB32 and BGR32 format

2013-08-04 Thread Ricardo Ribalda Delgado
Hello Gregor

Thanks for your comments. I have replied inline.

On Sat, Aug 3, 2013 at 6:42 PM, Gregor Jasny gja...@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
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 2/2] libv4lconvert: Support for RGB32 and BGR32 format

2013-08-03 Thread Gregor Jasny

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.


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 2/2] libv4lconvert: Support for RGB32 and BGR32 format

2013-08-02 Thread 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.riba...@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:
+