libcamera: v4l2PixelFormat: Replace hex with fourCC

Print fourCC characters instead of the hex value in toString() as they are
more informative. Also, write the tests for this in formats.cpp

Signed-off-by: Kaaira Gupta <kgupta@es.iitr.ac.in>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Kaaira Gupta 2020-03-27 01:44:00 +05:30 committed by Kieran Bingham
parent 6f553040fd
commit 2fbab8b077
2 changed files with 40 additions and 3 deletions

View file

@ -336,9 +336,23 @@ bool V4L2BufferCache::Entry::operator==(const FrameBuffer &buffer) const
*/
std::string V4L2PixelFormat::toString() const
{
char str[11];
snprintf(str, 11, "0x%08x", fourcc_);
return str;
if (fourcc_ == 0)
return "<INVALID>";
char ss[8] = { static_cast<char>(fourcc_ & 0x7f),
static_cast<char>((fourcc_ >> 8) & 0x7f),
static_cast<char>((fourcc_ >> 16) & 0x7f),
static_cast<char>((fourcc_ >> 24) & 0x7f) };
for (unsigned int i = 0; i < 4; i++) {
if (!isprint(ss[i]))
ss[i] = '.';
}
if (fourcc_ & (1 << 31))
strcat(ss, "-BE");
return ss;
}
/**

View file

@ -8,6 +8,7 @@
#include <iostream>
#include <limits.h>
#include "utils.h"
#include "v4l2_videodevice.h"
#include "v4l2_videodevice_test.h"
@ -47,6 +48,28 @@ protected:
return TestFail;
}
std::vector<std::pair<uint32_t, const char *>> formats{
{ V4L2_PIX_FMT_YUYV, "YUYV" },
{ 0, "<INVALID>" },
{ v4l2_fourcc(0, 1, 2, 3), "...." },
{ V4L2_PIX_FMT_Y16_BE, "Y16 -BE" }
};
for (const auto &format : formats) {
if (V4L2PixelFormat(format.first).toString() != format.second) {
cerr << "Failed to convert V4L2PixelFormat"
<< utils::hex(format.first) << "to string"
<< endl;
return TestFail;
}
}
if (V4L2PixelFormat().toString() != "<INVALID>") {
cerr << "Failed to convert default V4L2PixelFormat to string"
<< endl;
return TestFail;
}
return TestPass;
}
};