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
