This is an automatic generated email to let you know that the following patch 
were queued at the 
http://git.linuxtv.org/cgit.cgi/v4l-utils.git tree:

Subject: qvidcap/v4l2-compliance: add support for new pixelformats
Author:  Hans Verkuil <hverkuil-ci...@xs4all.nl>
Date:    Tue Jul 30 18:36:38 2019 +0200

Add support for the following pixelformat variants:

       V4L2_PIX_FMT_RGBX32
       V4L2_PIX_FMT_RGBA32
       V4L2_PIX_FMT_BGRX32
       V4L2_PIX_FMT_BGRA32
       V4L2_PIX_FMT_XBGR444
       V4L2_PIX_FMT_ABGR444
       V4L2_PIX_FMT_RGBX444
       V4L2_PIX_FMT_RGBA444
       V4L2_PIX_FMT_BGRX444
       V4L2_PIX_FMT_BGRA444
       V4L2_PIX_FMT_RGBX555
       V4L2_PIX_FMT_RGBA555
       V4L2_PIX_FMT_XBGR555
       V4L2_PIX_FMT_ABGR555
       V4L2_PIX_FMT_BGRX555
       V4L2_PIX_FMT_BGRA555

Signed-off-by: Hans Verkuil <hverkuil-ci...@xs4all.nl>

 utils/qvidcap/capture.cpp                  |  40 +++++++++-
 utils/qvidcap/paint.cpp                    | 120 +++++++++++++++++++++++++----
 utils/qvidcap/v4l2-convert.glsl            |  29 ++++++-
 utils/v4l2-compliance/v4l2-test-colors.cpp |  68 +++++++++++++++-
 4 files changed, 236 insertions(+), 21 deletions(-)

---

http://git.linuxtv.org/cgit.cgi/v4l-utils.git/commit/?id=1f0c4fa2d65204ee7df255ca3eede12d6679eabe
diff --git a/utils/qvidcap/capture.cpp b/utils/qvidcap/capture.cpp
index 5e1d5c58665b..a3a605110cb4 100644
--- a/utils/qvidcap/capture.cpp
+++ b/utils/qvidcap/capture.cpp
@@ -60,9 +60,13 @@ const __u32 formats[] = {
        V4L2_PIX_FMT_RGB32,
        V4L2_PIX_FMT_XRGB32,
        V4L2_PIX_FMT_ARGB32,
+       V4L2_PIX_FMT_RGBX32,
+       V4L2_PIX_FMT_RGBA32,
        V4L2_PIX_FMT_BGR32,
        V4L2_PIX_FMT_XBGR32,
        V4L2_PIX_FMT_ABGR32,
+       V4L2_PIX_FMT_BGRX32,
+       V4L2_PIX_FMT_BGRA32,
        V4L2_PIX_FMT_RGB24,
        V4L2_PIX_FMT_BGR24,
        V4L2_PIX_FMT_RGB565,
@@ -70,12 +74,24 @@ const __u32 formats[] = {
        V4L2_PIX_FMT_RGB444,
        V4L2_PIX_FMT_XRGB444,
        V4L2_PIX_FMT_ARGB444,
+       V4L2_PIX_FMT_XBGR444,
+       V4L2_PIX_FMT_ABGR444,
+       V4L2_PIX_FMT_RGBX444,
+       V4L2_PIX_FMT_RGBA444,
+       V4L2_PIX_FMT_BGRX444,
+       V4L2_PIX_FMT_BGRA444,
        V4L2_PIX_FMT_RGB555,
        V4L2_PIX_FMT_XRGB555,
        V4L2_PIX_FMT_ARGB555,
        V4L2_PIX_FMT_RGB555X,
        V4L2_PIX_FMT_XRGB555X,
        V4L2_PIX_FMT_ARGB555X,
+       V4L2_PIX_FMT_RGBX555,
+       V4L2_PIX_FMT_RGBA555,
+       V4L2_PIX_FMT_XBGR555,
+       V4L2_PIX_FMT_ABGR555,
+       V4L2_PIX_FMT_BGRX555,
+       V4L2_PIX_FMT_BGRA555,
        V4L2_PIX_FMT_RGB332,
        V4L2_PIX_FMT_BGR666,
        V4L2_PIX_FMT_SBGGR8,
@@ -679,6 +695,12 @@ bool CaptureWin::supportedFmt(__u32 fmt)
        case V4L2_PIX_FMT_RGB555X:
        case V4L2_PIX_FMT_XRGB555X:
        case V4L2_PIX_FMT_ARGB555X:
+       case V4L2_PIX_FMT_RGBX555:
+       case V4L2_PIX_FMT_RGBA555:
+       case V4L2_PIX_FMT_XBGR555:
+       case V4L2_PIX_FMT_ABGR555:
+       case V4L2_PIX_FMT_BGRX555:
+       case V4L2_PIX_FMT_BGRA555:
        case V4L2_PIX_FMT_YUV555:
        case V4L2_PIX_FMT_RGB332:
        case V4L2_PIX_FMT_BGR666:
@@ -872,15 +894,25 @@ bool CaptureWin::updateV4LFormat(const cv4l_fmt &fmt)
        case V4L2_PIX_FMT_BGR666:
        case V4L2_PIX_FMT_RGB565:
        case V4L2_PIX_FMT_RGB565X:
-       case V4L2_PIX_FMT_ARGB444:
        case V4L2_PIX_FMT_RGB444:
        case V4L2_PIX_FMT_XRGB444:
+       case V4L2_PIX_FMT_ARGB444:
+       case V4L2_PIX_FMT_XBGR444:
+       case V4L2_PIX_FMT_ABGR444:
+       case V4L2_PIX_FMT_RGBX444:
+       case V4L2_PIX_FMT_RGBA444:
+       case V4L2_PIX_FMT_BGRX444:
+       case V4L2_PIX_FMT_BGRA444:
        case V4L2_PIX_FMT_RGB32:
        case V4L2_PIX_FMT_XRGB32:
        case V4L2_PIX_FMT_ARGB32:
+       case V4L2_PIX_FMT_RGBX32:
+       case V4L2_PIX_FMT_RGBA32:
        case V4L2_PIX_FMT_BGR32:
        case V4L2_PIX_FMT_XBGR32:
        case V4L2_PIX_FMT_ABGR32:
+       case V4L2_PIX_FMT_BGRX32:
+       case V4L2_PIX_FMT_BGRA32:
                m_accepts_srgb = false;
                /* fall through */
        case V4L2_PIX_FMT_RGB24:
@@ -891,6 +923,12 @@ bool CaptureWin::updateV4LFormat(const cv4l_fmt &fmt)
        case V4L2_PIX_FMT_RGB555X:
        case V4L2_PIX_FMT_XRGB555X:
        case V4L2_PIX_FMT_ARGB555X:
+       case V4L2_PIX_FMT_RGBX555:
+       case V4L2_PIX_FMT_RGBA555:
+       case V4L2_PIX_FMT_XBGR555:
+       case V4L2_PIX_FMT_ABGR555:
+       case V4L2_PIX_FMT_BGRX555:
+       case V4L2_PIX_FMT_BGRA555:
        case V4L2_PIX_FMT_RGB332:
                break;
        default:
diff --git a/utils/qvidcap/paint.cpp b/utils/qvidcap/paint.cpp
index 547ad07ad8fb..e4fd17c47bcb 100644
--- a/utils/qvidcap/paint.cpp
+++ b/utils/qvidcap/paint.cpp
@@ -195,9 +195,21 @@ void CaptureWin::paintGL()
        case V4L2_PIX_FMT_RGB555X:
        case V4L2_PIX_FMT_XRGB555X:
        case V4L2_PIX_FMT_ARGB555X:
+       case V4L2_PIX_FMT_RGBX555:
+       case V4L2_PIX_FMT_RGBA555:
+       case V4L2_PIX_FMT_XBGR555:
+       case V4L2_PIX_FMT_ABGR555:
+       case V4L2_PIX_FMT_BGRX555:
+       case V4L2_PIX_FMT_BGRA555:
        case V4L2_PIX_FMT_RGB444:
        case V4L2_PIX_FMT_XRGB444:
        case V4L2_PIX_FMT_ARGB444:
+       case V4L2_PIX_FMT_XBGR444:
+       case V4L2_PIX_FMT_ABGR444:
+       case V4L2_PIX_FMT_RGBX444:
+       case V4L2_PIX_FMT_RGBA444:
+       case V4L2_PIX_FMT_BGRX444:
+       case V4L2_PIX_FMT_BGRA444:
        case V4L2_PIX_FMT_RGB565:
        case V4L2_PIX_FMT_RGB565X:
        case V4L2_PIX_FMT_RGB24:
@@ -208,6 +220,10 @@ void CaptureWin::paintGL()
        case V4L2_PIX_FMT_XBGR32:
        case V4L2_PIX_FMT_ARGB32:
        case V4L2_PIX_FMT_ABGR32:
+       case V4L2_PIX_FMT_RGBX32:
+       case V4L2_PIX_FMT_BGRX32:
+       case V4L2_PIX_FMT_RGBA32:
+       case V4L2_PIX_FMT_BGRA32:
        case V4L2_PIX_FMT_HSV24:
        case V4L2_PIX_FMT_HSV32:
        default:
@@ -342,9 +358,13 @@ static const struct define defines[] = {
        DEF(V4L2_PIX_FMT_RGB32),
        DEF(V4L2_PIX_FMT_XRGB32),
        DEF(V4L2_PIX_FMT_ARGB32),
+       DEF(V4L2_PIX_FMT_RGBX32),
+       DEF(V4L2_PIX_FMT_RGBA32),
        DEF(V4L2_PIX_FMT_BGR32),
        DEF(V4L2_PIX_FMT_XBGR32),
        DEF(V4L2_PIX_FMT_ABGR32),
+       DEF(V4L2_PIX_FMT_BGRX32),
+       DEF(V4L2_PIX_FMT_BGRA32),
        DEF(V4L2_PIX_FMT_RGB24),
        DEF(V4L2_PIX_FMT_BGR24),
        DEF(V4L2_PIX_FMT_RGB565),
@@ -352,12 +372,24 @@ static const struct define defines[] = {
        DEF(V4L2_PIX_FMT_RGB444),
        DEF(V4L2_PIX_FMT_XRGB444),
        DEF(V4L2_PIX_FMT_ARGB444),
+       DEF(V4L2_PIX_FMT_XBGR444),
+       DEF(V4L2_PIX_FMT_ABGR444),
+       DEF(V4L2_PIX_FMT_RGBX444),
+       DEF(V4L2_PIX_FMT_RGBA444),
+       DEF(V4L2_PIX_FMT_BGRX444),
+       DEF(V4L2_PIX_FMT_BGRA444),
        DEF(V4L2_PIX_FMT_RGB555),
        DEF(V4L2_PIX_FMT_XRGB555),
        DEF(V4L2_PIX_FMT_ARGB555),
        DEF(V4L2_PIX_FMT_RGB555X),
        DEF(V4L2_PIX_FMT_XRGB555X),
        DEF(V4L2_PIX_FMT_ARGB555X),
+       DEF(V4L2_PIX_FMT_RGBX555),
+       DEF(V4L2_PIX_FMT_RGBA555),
+       DEF(V4L2_PIX_FMT_XBGR555),
+       DEF(V4L2_PIX_FMT_ABGR555),
+       DEF(V4L2_PIX_FMT_BGRX555),
+       DEF(V4L2_PIX_FMT_BGRA555),
        DEF(V4L2_PIX_FMT_RGB332),
        DEF(V4L2_PIX_FMT_BGR666),
        DEF(V4L2_PIX_FMT_SBGGR8),
@@ -599,15 +631,27 @@ void CaptureWin::changeShader()
 
        case V4L2_PIX_FMT_RGB332:
        case V4L2_PIX_FMT_BGR666:
-       case V4L2_PIX_FMT_RGB555:
-       case V4L2_PIX_FMT_XRGB555:
-       case V4L2_PIX_FMT_ARGB555:
        case V4L2_PIX_FMT_RGB444:
        case V4L2_PIX_FMT_XRGB444:
        case V4L2_PIX_FMT_ARGB444:
+       case V4L2_PIX_FMT_XBGR444:
+       case V4L2_PIX_FMT_ABGR444:
+       case V4L2_PIX_FMT_RGBX444:
+       case V4L2_PIX_FMT_RGBA444:
+       case V4L2_PIX_FMT_BGRX444:
+       case V4L2_PIX_FMT_BGRA444:
+       case V4L2_PIX_FMT_RGB555:
+       case V4L2_PIX_FMT_XRGB555:
+       case V4L2_PIX_FMT_ARGB555:
        case V4L2_PIX_FMT_RGB555X:
        case V4L2_PIX_FMT_XRGB555X:
        case V4L2_PIX_FMT_ARGB555X:
+       case V4L2_PIX_FMT_RGBX555:
+       case V4L2_PIX_FMT_RGBA555:
+       case V4L2_PIX_FMT_XBGR555:
+       case V4L2_PIX_FMT_ABGR555:
+       case V4L2_PIX_FMT_BGRX555:
+       case V4L2_PIX_FMT_BGRA555:
        case V4L2_PIX_FMT_RGB565:
        case V4L2_PIX_FMT_RGB565X:
        case V4L2_PIX_FMT_RGB24:
@@ -618,6 +662,10 @@ void CaptureWin::changeShader()
        case V4L2_PIX_FMT_XBGR32:
        case V4L2_PIX_FMT_ARGB32:
        case V4L2_PIX_FMT_ABGR32:
+       case V4L2_PIX_FMT_RGBX32:
+       case V4L2_PIX_FMT_BGRX32:
+       case V4L2_PIX_FMT_RGBA32:
+       case V4L2_PIX_FMT_BGRA32:
        case V4L2_PIX_FMT_GREY:
        case V4L2_PIX_FMT_Y10:
        case V4L2_PIX_FMT_Y12:
@@ -745,27 +793,43 @@ void CaptureWin::shader_RGB()
        GLint internalFmt = m_accepts_srgb ? GL_SRGB8_ALPHA8 : GL_RGBA8;
 
        switch (m_v4l_fmt.g_pixelformat()) {
-       case V4L2_PIX_FMT_ARGB555:
        case V4L2_PIX_FMT_RGB555:
        case V4L2_PIX_FMT_XRGB555:
+       case V4L2_PIX_FMT_ARGB555:
                glTexImage2D(GL_TEXTURE_2D, 0, internalFmt, 
m_v4l_fmt.g_width(), m_v4l_fmt.g_height(), 0,
                             GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, NULL);
                break;
 
-       case V4L2_PIX_FMT_ARGB444:
        case V4L2_PIX_FMT_RGB444:
+       case V4L2_PIX_FMT_ARGB444:
        case V4L2_PIX_FMT_XRGB444:
+       case V4L2_PIX_FMT_ABGR444:
+       case V4L2_PIX_FMT_XBGR444:
+       case V4L2_PIX_FMT_RGBA444:
+       case V4L2_PIX_FMT_RGBX444:
+       case V4L2_PIX_FMT_BGRA444:
+       case V4L2_PIX_FMT_BGRX444:
                glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA4, m_v4l_fmt.g_width(), 
m_v4l_fmt.g_height(), 0,
                             GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, NULL);
                break;
 
-       case V4L2_PIX_FMT_ARGB555X:
        case V4L2_PIX_FMT_RGB555X:
        case V4L2_PIX_FMT_XRGB555X:
+       case V4L2_PIX_FMT_ARGB555X:
+       case V4L2_PIX_FMT_XBGR555:
+       case V4L2_PIX_FMT_ABGR555:
                glTexImage2D(GL_TEXTURE_2D, 0, internalFmt, 
m_v4l_fmt.g_width(), m_v4l_fmt.g_height(), 0,
                             GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, NULL);
                break;
 
+       case V4L2_PIX_FMT_RGBX555:
+       case V4L2_PIX_FMT_RGBA555:
+       case V4L2_PIX_FMT_BGRX555:
+       case V4L2_PIX_FMT_BGRA555:
+               glTexImage2D(GL_TEXTURE_2D, 0, internalFmt, 
m_v4l_fmt.g_width(), m_v4l_fmt.g_height(), 0,
+                            GL_BGRA, GL_UNSIGNED_SHORT_5_5_5_1, NULL);
+               break;
+
        case V4L2_PIX_FMT_BGR666:
                glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_v4l_fmt.g_width(), 
m_v4l_fmt.g_height(), 0,
                                GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, NULL);
@@ -781,13 +845,17 @@ void CaptureWin::shader_RGB()
                glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB565, m_v4l_fmt.g_width(), 
m_v4l_fmt.g_height(), 0,
                             GL_RGB, GL_UNSIGNED_SHORT_5_6_5, NULL);
                break;
-       case V4L2_PIX_FMT_ARGB32:
        case V4L2_PIX_FMT_RGB32:
+       case V4L2_PIX_FMT_ARGB32:
        case V4L2_PIX_FMT_XRGB32:
+       case V4L2_PIX_FMT_RGBA32:
+       case V4L2_PIX_FMT_RGBX32:
        case V4L2_PIX_FMT_HSV32:
-       case V4L2_PIX_FMT_ABGR32:
        case V4L2_PIX_FMT_BGR32:
+       case V4L2_PIX_FMT_ABGR32:
        case V4L2_PIX_FMT_XBGR32:
+       case V4L2_PIX_FMT_BGRA32:
+       case V4L2_PIX_FMT_BGRX32:
                glTexImage2D(GL_TEXTURE_2D, 0, internalFmt, 
m_v4l_fmt.g_width(), m_v4l_fmt.g_height(), 0,
                             GL_RGBA, GL_UNSIGNED_BYTE, NULL);
                break;
@@ -1064,17 +1132,16 @@ void CaptureWin::render_RGB(__u32 format)
                glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_v4l_fmt.g_width(), 
m_v4l_fmt.g_height(),
                                GL_RGB, GL_UNSIGNED_BYTE_3_3_2, m_curData[0]);
                break;
-       case V4L2_PIX_FMT_RGB555:
-       case V4L2_PIX_FMT_XRGB555:
-       case V4L2_PIX_FMT_ARGB555:
-               glPixelStorei(GL_UNPACK_ROW_LENGTH, m_v4l_fmt.g_bytesperline() 
/ 2);
-               glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_v4l_fmt.g_width(), 
m_v4l_fmt.g_height(),
-                               GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, 
m_curData[0]);
-               break;
 
        case V4L2_PIX_FMT_RGB444:
        case V4L2_PIX_FMT_XRGB444:
        case V4L2_PIX_FMT_ARGB444:
+       case V4L2_PIX_FMT_XBGR444:
+       case V4L2_PIX_FMT_ABGR444:
+       case V4L2_PIX_FMT_RGBX444:
+       case V4L2_PIX_FMT_RGBA444:
+       case V4L2_PIX_FMT_BGRX444:
+       case V4L2_PIX_FMT_BGRA444:
                glPixelStorei(GL_UNPACK_ROW_LENGTH, m_v4l_fmt.g_bytesperline() 
/ 2);
                glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_v4l_fmt.g_width(), 
m_v4l_fmt.g_height(),
                                GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, 
m_curData[0]);
@@ -1100,6 +1167,16 @@ void CaptureWin::render_RGB(__u32 format)
                                GL_RED_INTEGER, GL_UNSIGNED_SHORT, 
m_curData[0]);
                break;
 
+       case V4L2_PIX_FMT_RGB555:
+       case V4L2_PIX_FMT_XRGB555:
+       case V4L2_PIX_FMT_ARGB555:
+       case V4L2_PIX_FMT_XBGR555:
+       case V4L2_PIX_FMT_ABGR555:
+               glPixelStorei(GL_UNPACK_ROW_LENGTH, m_v4l_fmt.g_bytesperline() 
/ 2);
+               glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_v4l_fmt.g_width(), 
m_v4l_fmt.g_height(),
+                               GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, 
m_curData[0]);
+               break;
+
        case V4L2_PIX_FMT_RGB555X:
        case V4L2_PIX_FMT_XRGB555X:
        case V4L2_PIX_FMT_ARGB555X:
@@ -1113,6 +1190,15 @@ void CaptureWin::render_RGB(__u32 format)
                glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE);
                break;
 
+       case V4L2_PIX_FMT_RGBX555:
+       case V4L2_PIX_FMT_RGBA555:
+       case V4L2_PIX_FMT_BGRX555:
+       case V4L2_PIX_FMT_BGRA555:
+               glPixelStorei(GL_UNPACK_ROW_LENGTH, m_v4l_fmt.g_bytesperline() 
/ 2);
+               glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_v4l_fmt.g_width(), 
m_v4l_fmt.g_height(),
+                               GL_BGRA, GL_UNSIGNED_SHORT_5_5_5_1, 
m_curData[0]);
+               break;
+
        case V4L2_PIX_FMT_RGB565:
                glPixelStorei(GL_UNPACK_ROW_LENGTH, m_v4l_fmt.g_bytesperline() 
/ 2);
                glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_v4l_fmt.g_width(), 
m_v4l_fmt.g_height(),
@@ -1133,10 +1219,14 @@ void CaptureWin::render_RGB(__u32 format)
        case V4L2_PIX_FMT_RGB32:
        case V4L2_PIX_FMT_XRGB32:
        case V4L2_PIX_FMT_ARGB32:
+       case V4L2_PIX_FMT_RGBX32:
+       case V4L2_PIX_FMT_RGBA32:
        case V4L2_PIX_FMT_HSV32:
        case V4L2_PIX_FMT_BGR32:
        case V4L2_PIX_FMT_XBGR32:
        case V4L2_PIX_FMT_ABGR32:
+       case V4L2_PIX_FMT_BGRX32:
+       case V4L2_PIX_FMT_BGRA32:
                glPixelStorei(GL_UNPACK_ROW_LENGTH, m_v4l_fmt.g_bytesperline() 
/ 4);
                glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_v4l_fmt.g_width(), 
m_v4l_fmt.g_height(),
                                GL_RGBA, GL_UNSIGNED_BYTE, m_curData[0]);
diff --git a/utils/qvidcap/v4l2-convert.glsl b/utils/qvidcap/v4l2-convert.glsl
index 8f80a903c9c8..458901c43838 100644
--- a/utils/qvidcap/v4l2-convert.glsl
+++ b/utils/qvidcap/v4l2-convert.glsl
@@ -139,18 +139,37 @@ void main()
        urgb.g = texture(tex, vec2((cell.y == xy.y) ? cell.x + texl_w : cell.x, 
xy.y)).r;
        urgb.r = texture(tex, cell).r;
 #elif PIXFMT == V4L2_PIX_FMT_RGB32 || PIXFMT == V4L2_PIX_FMT_XRGB32 || PIXFMT 
== V4L2_PIX_FMT_ARGB32 || \
-       PIXFMT == V4L2_PIX_FMT_RGB444 || PIXFMT == V4L2_PIX_FMT_XRGB444 || 
PIXFMT == V4L2_PIX_FMT_ARGB444
+      PIXFMT == V4L2_PIX_FMT_RGB444 || PIXFMT == V4L2_PIX_FMT_XRGB444 || 
PIXFMT == V4L2_PIX_FMT_ARGB444
        vec4 cell = texture(tex, xy);
 #if V4L2_PIX_FMT_ARGB444 || PIXFMT == V4L2_PIX_FMT_ARGB32
        alpha = cell.r;
 #endif
        rgb.rgb = cell.gba;
-#elif PIXFMT == V4L2_PIX_FMT_BGR32 || PIXFMT == V4L2_PIX_FMT_XBGR32 || PIXFMT 
== V4L2_PIX_FMT_ABGR32
+#elif PIXFMT == V4L2_PIX_FMT_BGR32 || PIXFMT == V4L2_PIX_FMT_XBGR32 || PIXFMT 
== V4L2_PIX_FMT_ABGR32 || \
+      PIXFMT == V4L2_PIX_FMT_BGRX444 || PIXFMT == V4L2_PIX_FMT_BGRA444 || \
+      PIXFMT == V4L2_PIX_FMT_XBGR555 || PIXFMT == V4L2_PIX_FMT_ABGR555 || \
+      PIXFMT == V4L2_PIX_FMT_RGBX555 || PIXFMT == V4L2_PIX_FMT_RGBA555
        vec4 cell = texture(tex, xy);
-#if PIXFMT == V4L2_PIX_FMT_ABGR32
+#if PIXFMT == V4L2_PIX_FMT_ABGR32 || PIXFMT == V4L2_PIX_FMT_BGRA444 || PIXFMT 
== V4L2_PIX_FMT_RGBA555 || PIXFMT == V4L2_PIX_FMT_ABGR555
        alpha = cell.a;
 #endif
        rgb.rgb = cell.bgr;
+#elif PIXFMT == V4L2_PIX_FMT_RGBX32 || PIXFMT == V4L2_PIX_FMT_RGBA32 || \
+      PIXFMT == V4L2_PIX_FMT_RGBX444 || PIXFMT == V4L2_PIX_FMT_RGBA444 || \
+      PIXFMT == V4L2_PIX_FMT_RGB555 || PIXFMT == V4L2_PIX_FMT_XRGB555 || 
PIXFMT == V4L2_PIX_FMT_ARGB555 || \
+      PIXFMT == V4L2_PIX_FMT_BGRX555 || PIXFMT == V4L2_PIX_FMT_BGRA555
+       vec4 cell = texture(tex, xy);
+#if PIXFMT == V4L2_PIX_FMT_RGBA32 || PIXFMT == V4L2_PIX_FMT_RGBA444 || PIXFMT 
== V4L2_PIX_FMT_ARGB555 || PIXFMT == V4L2_PIX_FMT_BGRA555
+       alpha = cell.a;
+#endif
+       rgb.rgb = cell.rgb;
+#elif PIXFMT == V4L2_PIX_FMT_BGRX32 || PIXFMT == V4L2_PIX_FMT_BGRA32 || \
+      PIXFMT == V4L2_PIX_FMT_XBGR444 || PIXFMT == V4L2_PIX_FMT_ABGR444
+       vec4 cell = texture(tex, xy);
+#if PIXFMT == V4L2_PIX_FMT_BGRA32 || PIXFMT == V4L2_PIX_FMT_ABGR444
+       alpha = cell.r;
+#endif
+       rgb.rgb = cell.abg;
 #elif PIXFMT == V4L2_PIX_FMT_GREY
        rgb.rgb = vec3(float(texture(tex, xy).r) / 255.0);
 #elif PIXFMT == V4L2_PIX_FMT_Y10
@@ -167,7 +186,9 @@ void main()
        vec4 color = texture(tex, xy);
 
 // RGB pixel formats with an alpha component
-#if PIXFMT == V4L2_PIX_FMT_ARGB555 || PIXFMT == V4L2_PIX_FMT_ARGB555X
+#if PIXFMT == V4L2_PIX_FMT_ARGB555 || PIXFMT == V4L2_PIX_FMT_ARGB555X || \
+    PIXFMT == V4L2_PIX_FMT_RGBA555 || PIXFMT == V4L2_PIX_FMT_ABGR555 || \
+    PIXFMT == V4L2_PIX_FMT_BGRA555
        alpha = color.a;
 #endif
 
diff --git a/utils/v4l2-compliance/v4l2-test-colors.cpp 
b/utils/v4l2-compliance/v4l2-test-colors.cpp
index 7c62dc726d23..de4dd1841e64 100644
--- a/utils/v4l2-compliance/v4l2-test-colors.cpp
+++ b/utils/v4l2-compliance/v4l2-test-colors.cpp
@@ -133,6 +133,48 @@ static void getColor(const cv4l_fmt &fmt, __u8 * const 
planes[3],
        case V4L2_PIX_FMT_ARGB555X:
                v16 = p8[2 * x + 1] + (p8[2 * x] << 8);
                break;
+       case V4L2_PIX_FMT_RGBX555:
+       case V4L2_PIX_FMT_RGBA555:
+               v16 = p8[2 * x] + (p8[2 * x + 1] << 8);
+               v16 = ((v16 & 1) << 15) | (v16 >> 1);
+               break;
+       case V4L2_PIX_FMT_XBGR555:
+       case V4L2_PIX_FMT_ABGR555:
+               v16 = p8[2 * x] + (p8[2 * x + 1] << 8);
+               v16 = (v16 & 0x8000) |
+                     ((v16 & 0x001f) << 10) |
+                     (v16 & 0x03e0) |
+                     ((v16 & 0x7c00) >> 10);
+               break;
+       case V4L2_PIX_FMT_BGRX555:
+       case V4L2_PIX_FMT_BGRA555:
+               v16 = p8[2 * x] + (p8[2 * x + 1] << 8);
+               v16 = ((v16 & 1) << 15) |
+                     ((v16 & 0x003e) << 9) |
+                     (v16 & 0x07c0) |
+                     ((v16 & 0xf800) >> 11);
+               break;
+       case V4L2_PIX_FMT_XBGR444:
+       case V4L2_PIX_FMT_ABGR444:
+               v16 = p8[2 * x] + (p8[2 * x + 1] << 8);
+               v16 = (v16 & 0xf000) |
+                     ((v16 & 0x0f00) >> 8) |
+                     (v16 & 0x00f0) |
+                     ((v16 & 0x000f) << 8);
+               break;
+       case V4L2_PIX_FMT_RGBX444:
+       case V4L2_PIX_FMT_RGBA444:
+               v16 = p8[2 * x] + (p8[2 * x + 1] << 8);
+               v16 = ((v16 & 0xf) << 12) | ((v16 >> 4) & 0xfff);
+               break;
+       case V4L2_PIX_FMT_BGRX444:
+       case V4L2_PIX_FMT_BGRA444:
+               v16 = p8[2 * x] + (p8[2 * x + 1] << 8);
+               v16 = ((v16 & 0x000f) << 12) |
+                     ((v16 & 0x00f0) << 4) |
+                     ((v16 & 0x0f00) >> 4) |
+                     ((v16 & 0xf000) >> 12);
+               break;
        case V4L2_PIX_FMT_RGB24:
                v32 = p8[3 * x + 2] + (p8[3 * x + 1] << 8) +
                      (p8[3 * x] << 16);
@@ -163,6 +205,16 @@ static void getColor(const cv4l_fmt &fmt, __u8 * const 
planes[3],
                v32 = p8[4 * x] + (p8[4 * x + 1] << 8) +
                      (p8[4 * x + 2] << 16) + (p8[4 * x + 3] << 24);
                break;
+       case V4L2_PIX_FMT_RGBX32:
+       case V4L2_PIX_FMT_RGBA32:
+               v32 = p8[4 * x + 2] + (p8[4 * x + 1] << 8) +
+                     (p8[4 * x] << 16) + (p8[4 * x + 3] << 24);
+               break;
+       case V4L2_PIX_FMT_BGRX32:
+       case V4L2_PIX_FMT_BGRA32:
+               v32 = p8[4 * x + 1] + (p8[4 * x + 2] << 8) +
+                     (p8[4 * x + 3] << 16) + (p8[4 * x] << 24);
+               break;
        case V4L2_PIX_FMT_SBGGR8:
                p8 = planes[0] + bpl * yeven + xeven;
                v32 = p8[0] + (p8[(y & 1) * bpl + 1 - (y & 1)] << 8) + (p8[bpl 
+ 1] << 16);
@@ -272,17 +324,26 @@ static void getColor(const cv4l_fmt &fmt, __u8 * const 
planes[3],
                c.b = (v16 & 0x1f) / 31.0;
                break;
        case V4L2_PIX_FMT_ARGB444:
+       case V4L2_PIX_FMT_ABGR444:
+       case V4L2_PIX_FMT_RGBA444:
+       case V4L2_PIX_FMT_BGRA444:
                c.a = (v16 >> 12) / 15.0;
                /* fall through */
-       case V4L2_PIX_FMT_YUV444:
        case V4L2_PIX_FMT_RGB444:
        case V4L2_PIX_FMT_XRGB444:
+       case V4L2_PIX_FMT_XBGR444:
+       case V4L2_PIX_FMT_RGBX444:
+       case V4L2_PIX_FMT_BGRX444:
+       case V4L2_PIX_FMT_YUV444:
                c.r = ((v16 >> 8) & 0xf) / 15.0;
                c.g = ((v16 >> 4) & 0xf) / 15.0;
                c.b = (v16 & 0xf) / 15.0;
                break;
        case V4L2_PIX_FMT_ARGB555:
        case V4L2_PIX_FMT_ARGB555X:
+       case V4L2_PIX_FMT_RGBA555:
+       case V4L2_PIX_FMT_ABGR555:
+       case V4L2_PIX_FMT_BGRA555:
                c.a = v16 >> 15;
                /* fall through */
        case V4L2_PIX_FMT_YUV555:
@@ -290,6 +351,9 @@ static void getColor(const cv4l_fmt &fmt, __u8 * const 
planes[3],
        case V4L2_PIX_FMT_XRGB555:
        case V4L2_PIX_FMT_RGB555X:
        case V4L2_PIX_FMT_XRGB555X:
+       case V4L2_PIX_FMT_RGBX555:
+       case V4L2_PIX_FMT_XBGR555:
+       case V4L2_PIX_FMT_BGRX555:
                c.r = ((v16 >> 10) & 0x1f) / 31.0;
                c.g = ((v16 >> 5) & 0x1f) / 31.0;
                c.b = (v16 & 0x1f) / 31.0;
@@ -309,6 +373,8 @@ static void getColor(const cv4l_fmt &fmt, __u8 * const 
planes[3],
                break;
        case V4L2_PIX_FMT_ARGB32:
        case V4L2_PIX_FMT_ABGR32:
+       case V4L2_PIX_FMT_RGBA32:
+       case V4L2_PIX_FMT_BGRA32:
                c.a = ((v32 >> 24) & 0xff) / 255.0;
                /* fall through */
        default:

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to