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: v4l2-compliance: improve pixelformat reporting
Author:  Hans Verkuil <[email protected]>
Date:    Thu Feb 18 14:48:07 2016 +0100

Fix an ambiguous error (the pixelformat is unknown in the sense that it
was not reported in the ENUM_FMT format list by the driver).

Also print the pixelformat in a human readable form.

Signed-off-by: Hans Verkuil <[email protected]>

 utils/v4l2-compliance/v4l2-compliance.cpp   | 13 +++++++++++++
 utils/v4l2-compliance/v4l2-compliance.h     |  2 ++
 utils/v4l2-compliance/v4l2-test-formats.cpp | 26 +++++++++++++++-----------
 3 files changed, 30 insertions(+), 11 deletions(-)

---

http://git.linuxtv.org/cgit.cgi/v4l-utils.git/commit/?id=3903d2eb382d3a566ee2242605b7c686eb72819c
diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp 
b/utils/v4l2-compliance/v4l2-compliance.cpp
index 9a3681b55133..54d4ab6cc618 100644
--- a/utils/v4l2-compliance/v4l2-compliance.cpp
+++ b/utils/v4l2-compliance/v4l2-compliance.cpp
@@ -229,6 +229,19 @@ std::string cap2s(unsigned cap)
        return s;
 }
 
+std::string fcc2s(unsigned int val)
+{
+       std::string s;
+
+       s += val & 0x7f;
+       s += (val >> 8) & 0x7f;
+       s += (val >> 16) & 0x7f;
+       s += (val >> 24) & 0x7f;
+       if (val & (1 << 31))
+               s += "-BE";
+       return s;
+}
+
 std::string buftype2s(int type)
 {
        switch (type) {
diff --git a/utils/v4l2-compliance/v4l2-compliance.h 
b/utils/v4l2-compliance/v4l2-compliance.h
index a1a6fd2b5335..b10e48971fef 100644
--- a/utils/v4l2-compliance/v4l2-compliance.h
+++ b/utils/v4l2-compliance/v4l2-compliance.h
@@ -150,6 +150,8 @@ static inline double fract2f(const struct v4l2_fract *f)
 
 std::string cap2s(unsigned cap);
 std::string buftype2s(int type);
+std::string fcc2s(unsigned int val);
+
 static inline std::string buftype2s(enum v4l2_buf_type type)
 {
        return buftype2s((int)type);
diff --git a/utils/v4l2-compliance/v4l2-test-formats.cpp 
b/utils/v4l2-compliance/v4l2-test-formats.cpp
index f9f905517633..8dd919ec1c26 100644
--- a/utils/v4l2-compliance/v4l2-test-formats.cpp
+++ b/utils/v4l2-compliance/v4l2-test-formats.cpp
@@ -121,7 +121,8 @@ static int testEnumFrameIntervals(struct node *node, __u32 
pixfmt,
        }
        if (type == 0)
                return fail("found frame intervals for invalid size %dx%d\n", 
w, h);
-       info("found %d frameintervals for pixel format %08x and size %dx%d\n", 
f, pixfmt, w, h);
+       info("found %d frameintervals for pixel format %08x (%s) and size 
%dx%d\n",
+            f, pixfmt, fcc2s(pixfmt).c_str(), w, h);
        return 0;
 }
 
@@ -215,7 +216,8 @@ static int testEnumFrameSizes(struct node *node, __u32 
pixfmt)
                f++;
        }
        node->frmsizes_count[pixfmt] = count;
-       info("found %d framesizes for pixel format %08x\n", f, pixfmt);
+       info("found %d framesizes for pixel format %08x (%s)\n",
+            f, pixfmt, fcc2s(pixfmt).c_str());
        return 0;
 }
 
@@ -265,7 +267,8 @@ static int testEnumFormatsType(struct node *node, unsigned 
type)
                // Update define in v4l2-compliance.h if new buffer types are 
added
                assert(type <= V4L2_BUF_TYPE_LAST);
                if (map.find(fmtdesc.pixelformat) != map.end())
-                       return fail("duplicate format %08x\n", 
fmtdesc.pixelformat);
+                       return fail("duplicate format %08x (%s)\n",
+                                   fmtdesc.pixelformat, 
fcc2s(fmtdesc.pixelformat).c_str());
                map[fmtdesc.pixelformat] = fmtdesc.flags;
        }
        info("found %d formats for buftype %d\n", f, type);
@@ -423,8 +426,8 @@ static int testFormatsType(struct node *node, int ret,  
unsigned type, struct v4
        case V4L2_BUF_TYPE_VIDEO_OUTPUT:
                fail_on_test(!pix.width || !pix.height);
                if (map.find(pix.pixelformat) == map.end())
-                       return fail("unknown pixelformat %08x for buftype %d\n",
-                                       pix.pixelformat, type);
+                       return fail("pixelformat %08x (%s) for buftype %d not 
reported by ENUM_FMT\n",
+                                       pix.pixelformat, 
fcc2s(pix.pixelformat).c_str(), type);
                fail_on_test(pix.bytesperline && pix.bytesperline < pix.width);
                fail_on_test(!pix.sizeimage);
                if (!node->is_m2m)
@@ -440,8 +443,8 @@ static int testFormatsType(struct node *node, int ret,  
unsigned type, struct v4
                map_splane = &node->buftype_pixfmts[type - 8];
                if (map.find(pix_mp.pixelformat) == map.end() &&
                    map_splane->find(pix_mp.pixelformat) == map_splane->end())
-                       return fail("unknown pixelformat %08x for buftype %d\n",
-                                       pix_mp.pixelformat, type);
+                       return fail("pixelformat %08x (%s) for buftype %d not 
reported by ENUM_FMT\n",
+                                       pix_mp.pixelformat, 
fcc2s(pix_mp.pixelformat).c_str(), type);
                if (!node->is_m2m)
                        fail_on_test(testColorspace(pix_mp.pixelformat, 
pix_mp.colorspace, 
                                             pix_mp.ycbcr_enc, 
pix_mp.quantization));
@@ -533,8 +536,8 @@ static int testFormatsType(struct node *node, int ret,  
unsigned type, struct v4
        case V4L2_BUF_TYPE_SDR_CAPTURE:
        case V4L2_BUF_TYPE_SDR_OUTPUT:
                if (map.find(sdr.pixelformat) == map.end())
-                       return fail("unknown pixelformat %08x for buftype %d\n",
-                                       pix.pixelformat, type);
+                       return fail("pixelformat %08x (%s) for buftype %d not 
reported by ENUM_FMT\n",
+                                       pix.pixelformat, 
fcc2s(pix.pixelformat).c_str(), type);
                fail_on_test(sdr.buffersize == 0);
                fail_on_test(check_0(sdr.reserved, sizeof(sdr.reserved)));
                break;
@@ -875,8 +878,9 @@ static int testGlobalFormat(struct node *node, int type)
                h2 = p2->height;
        }
        if (pixfmt1 != pixfmt2 || w1 != w2 || h1 != h2)
-               return fail("Global format mismatch: %08x/%dx%d vs 
%08x/%dx%d\n",
-                               pixfmt1, w1, h1, pixfmt2, w2, h2);
+               return fail("Global format mismatch: %08x(%s)/%dx%d vs 
%08x(%s)/%dx%d\n",
+                           pixfmt1, fcc2s(pixfmt1).c_str(), w1, h1,
+                           pixfmt2, fcc2s(pixfmt2).c_str(), w2, h2);
        info("Global format check succeeded for type %d\n", type);
        return 0;
 }

_______________________________________________
linuxtv-commits mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to