Message ID | 20220729160014.101503-2-jacopo@jmondi.org |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
Hi Jacopo, Thank you for the patch. On Fri, Jul 29, 2022 at 06:00:09PM +0200, Jacopo Mondi via libcamera-devel wrote: > To each libcamera PixelFormat two lists of V4L2 formats are associated, > the 'single' and 'multi' format variants. It's not two lists, but two V4L2 pixel formats. > The two versions list plane contiguous and non-contiguous format > variants, and an optional argument to V4L2PixelFormat::fromPixelFormat() > was used to select which one to pick. > > In order to prepare to remove V4L2PixelFormat::fromPixelFormat(), and > considering that no caller in the codebase uses the non-contiguous > format variant, merge the two formats vectors in a single one and > default the selection to the first available one, which is functionally > equivalent to what is currently implemented. > > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> > --- > include/libcamera/internal/formats.h | 5 +- > include/libcamera/internal/v4l2_pixelformat.h | 3 +- > src/libcamera/formats.cpp | 310 ++++-------------- > src/libcamera/v4l2_pixelformat.cpp | 15 +- > 4 files changed, 80 insertions(+), 253 deletions(-) > > diff --git a/include/libcamera/internal/formats.h b/include/libcamera/internal/formats.h > index ee599765be47..5b16c0a8c071 100644 > --- a/include/libcamera/internal/formats.h > +++ b/include/libcamera/internal/formats.h > @@ -53,10 +53,7 @@ public: > /* \todo Add support for non-contiguous memory planes */ > const char *name; > PixelFormat format; > - struct { > - V4L2PixelFormat single; > - V4L2PixelFormat multi; > - } v4l2Formats; > + std::vector<V4L2PixelFormat> v4l2Formats; > unsigned int bitsPerPixel; > enum ColourEncoding colourEncoding; > bool packed; > diff --git a/include/libcamera/internal/v4l2_pixelformat.h b/include/libcamera/internal/v4l2_pixelformat.h > index 7bd3ea79428f..ed94baf92795 100644 > --- a/include/libcamera/internal/v4l2_pixelformat.h > +++ b/include/libcamera/internal/v4l2_pixelformat.h > @@ -44,8 +44,7 @@ public: > const char *description() const; > > PixelFormat toPixelFormat() const; > - static V4L2PixelFormat fromPixelFormat(const PixelFormat &pixelFormat, > - bool multiplanar = false); > + static V4L2PixelFormat fromPixelFormat(const PixelFormat &pixelFormat); > > private: > uint32_t fourcc_; > diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp > index 283ecb3d89d8..3c536722f375 100644 > --- a/src/libcamera/formats.cpp > +++ b/src/libcamera/formats.cpp > @@ -42,12 +42,9 @@ LOG_DEFINE_CATEGORY(Formats) > * \var PixelFormatInfo::v4l2Formats > * \brief The V4L2 pixel formats corresponding to the PixelFormat > * > - * Multiple V4L2 formats may exist for one PixelFormat when the format uses > - * multiple planes, as V4L2 defines separate 4CCs for contiguous and separate > - * planes formats. The two entries in the array store the contiguous and > - * non-contiguous V4L2 formats respectively. If the PixelFormat isn't a > - * multiplanar format, or if no corresponding non-contiguous V4L2 format > - * exists, the second entry is invalid. > + * Multiple V4L2 formats may exist for one PixelForma, as V4L2 defines s/PixelForma/PixelFormat. > + * separate 4CCs for contiguous and non-contiguous versions of the same image > + * format. > * > * \var PixelFormatInfo::bitsPerPixel > * \brief The average number of bits per pixel > @@ -156,10 +153,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::RGB565, { > .name = "RGB565", > .format = formats::RGB565, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_RGB565), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_RGB565), }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingRGB, > .packed = false, > @@ -169,10 +163,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::RGB565_BE, { > .name = "RGB565_BE", > .format = formats::RGB565_BE, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_RGB565X), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_RGB565X), }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingRGB, > .packed = false, > @@ -182,10 +173,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::BGR888, { > .name = "BGR888", > .format = formats::BGR888, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_RGB24), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_RGB24), }, > .bitsPerPixel = 24, > .colourEncoding = PixelFormatInfo::ColourEncodingRGB, > .packed = false, > @@ -195,10 +183,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::RGB888, { > .name = "RGB888", > .format = formats::RGB888, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_BGR24), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_BGR24), }, > .bitsPerPixel = 24, > .colourEncoding = PixelFormatInfo::ColourEncodingRGB, > .packed = false, > @@ -208,10 +193,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::XRGB8888, { > .name = "XRGB8888", > .format = formats::XRGB8888, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_XBGR32), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_XBGR32), }, > .bitsPerPixel = 32, > .colourEncoding = PixelFormatInfo::ColourEncodingRGB, > .packed = false, > @@ -221,10 +203,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::XBGR8888, { > .name = "XBGR8888", > .format = formats::XBGR8888, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_RGBX32), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_RGBX32), }, > .bitsPerPixel = 32, > .colourEncoding = PixelFormatInfo::ColourEncodingRGB, > .packed = false, > @@ -234,10 +213,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::RGBX8888, { > .name = "RGBX8888", > .format = formats::RGBX8888, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_BGRX32), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_BGRX32), }, > .bitsPerPixel = 32, > .colourEncoding = PixelFormatInfo::ColourEncodingRGB, > .packed = false, > @@ -247,10 +223,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::BGRX8888, { > .name = "BGRX8888", > .format = formats::BGRX8888, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_XRGB32), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_XRGB32), }, > .bitsPerPixel = 32, > .colourEncoding = PixelFormatInfo::ColourEncodingRGB, > .packed = false, > @@ -260,10 +233,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::ABGR8888, { > .name = "ABGR8888", > .format = formats::ABGR8888, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_RGBA32), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_RGBA32), }, > .bitsPerPixel = 32, > .colourEncoding = PixelFormatInfo::ColourEncodingRGB, > .packed = false, > @@ -273,10 +243,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::ARGB8888, { > .name = "ARGB8888", > .format = formats::ARGB8888, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_ABGR32), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_ABGR32), }, > .bitsPerPixel = 32, > .colourEncoding = PixelFormatInfo::ColourEncodingRGB, > .packed = false, > @@ -286,10 +253,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::BGRA8888, { > .name = "BGRA8888", > .format = formats::BGRA8888, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_ARGB32), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_ARGB32), }, > .bitsPerPixel = 32, > .colourEncoding = PixelFormatInfo::ColourEncodingRGB, > .packed = false, > @@ -299,10 +263,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::RGBA8888, { > .name = "RGBA8888", > .format = formats::RGBA8888, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_BGRA32), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_BGRA32), }, > .bitsPerPixel = 32, > .colourEncoding = PixelFormatInfo::ColourEncodingRGB, > .packed = false, > @@ -314,10 +275,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::YUYV, { > .name = "YUYV", > .format = formats::YUYV, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_YUYV), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_YUYV), }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = false, > @@ -327,10 +285,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::YVYU, { > .name = "YVYU", > .format = formats::YVYU, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_YVYU), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_YVYU), }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = false, > @@ -340,10 +295,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::UYVY, { > .name = "UYVY", > .format = formats::UYVY, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_UYVY), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_UYVY), }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = false, > @@ -353,10 +305,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::VYUY, { > .name = "VYUY", > .format = formats::VYUY, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_VYUY), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_VYUY), }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = false, > @@ -369,8 +318,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > .name = "NV12", > .format = formats::NV12, > .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_NV12), > - .multi = V4L2PixelFormat(V4L2_PIX_FMT_NV12M), > + V4L2PixelFormat(V4L2_PIX_FMT_NV12), > + V4L2PixelFormat(V4L2_PIX_FMT_NV12M), > }, > .bitsPerPixel = 12, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > @@ -382,8 +331,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > .name = "NV21", > .format = formats::NV21, > .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_NV21), > - .multi = V4L2PixelFormat(V4L2_PIX_FMT_NV21M), > + V4L2PixelFormat(V4L2_PIX_FMT_NV21), > + V4L2PixelFormat(V4L2_PIX_FMT_NV21M), > }, > .bitsPerPixel = 12, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > @@ -395,8 +344,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > .name = "NV16", > .format = formats::NV16, > .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_NV16), > - .multi = V4L2PixelFormat(V4L2_PIX_FMT_NV16M), > + V4L2PixelFormat(V4L2_PIX_FMT_NV16), > + V4L2PixelFormat(V4L2_PIX_FMT_NV16M), > }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > @@ -408,8 +357,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > .name = "NV61", > .format = formats::NV61, > .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_NV61), > - .multi = V4L2PixelFormat(V4L2_PIX_FMT_NV61M), > + V4L2PixelFormat(V4L2_PIX_FMT_NV61), > + V4L2PixelFormat(V4L2_PIX_FMT_NV61M), > }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > @@ -420,10 +369,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::NV24, { > .name = "NV24", > .format = formats::NV24, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_NV24), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_NV24), }, > .bitsPerPixel = 24, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = false, > @@ -433,10 +379,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::NV42, { > .name = "NV42", > .format = formats::NV42, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_NV42), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_NV42), }, > .bitsPerPixel = 24, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = false, > @@ -447,8 +390,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > .name = "YUV420", > .format = formats::YUV420, > .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_YUV420), > - .multi = V4L2PixelFormat(V4L2_PIX_FMT_YUV420M), > + V4L2PixelFormat(V4L2_PIX_FMT_YUV420), > + V4L2PixelFormat(V4L2_PIX_FMT_YUV420M), > }, > .bitsPerPixel = 12, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > @@ -460,8 +403,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > .name = "YVU420", > .format = formats::YVU420, > .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_YVU420), > - .multi = V4L2PixelFormat(V4L2_PIX_FMT_YVU420M), > + V4L2PixelFormat(V4L2_PIX_FMT_YVU420), > + V4L2PixelFormat(V4L2_PIX_FMT_YVU420M), > }, > .bitsPerPixel = 12, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > @@ -473,8 +416,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > .name = "YUV422", > .format = formats::YUV422, > .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_YUV422P), > - .multi = V4L2PixelFormat(V4L2_PIX_FMT_YUV422M), > + V4L2PixelFormat(V4L2_PIX_FMT_YUV422P), > + V4L2PixelFormat(V4L2_PIX_FMT_YUV422M), > }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > @@ -485,10 +428,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::YVU422, { > .name = "YVU422", > .format = formats::YVU422, > - .v4l2Formats = { > - .single = V4L2PixelFormat(), > - .multi = V4L2PixelFormat(V4L2_PIX_FMT_YVU422M), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_YVU422M), }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = false, > @@ -498,10 +438,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::YUV444, { > .name = "YUV444", > .format = formats::YUV444, > - .v4l2Formats = { > - .single = V4L2PixelFormat(), > - .multi = V4L2PixelFormat(V4L2_PIX_FMT_YUV444M), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_YUV444M), }, > .bitsPerPixel = 24, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = false, > @@ -511,10 +448,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::YVU444, { > .name = "YVU444", > .format = formats::YVU444, > - .v4l2Formats = { > - .single = V4L2PixelFormat(), > - .multi = V4L2PixelFormat(V4L2_PIX_FMT_YVU444M), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_YVU444M), }, > .bitsPerPixel = 24, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = false, > @@ -526,10 +460,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::R8, { > .name = "R8", > .format = formats::R8, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_GREY), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_GREY), }, > .bitsPerPixel = 8, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = false, > @@ -539,10 +470,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::R10, { > .name = "R10", > .format = formats::R10, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_Y10), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_Y10), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = false, > @@ -552,10 +480,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::R12, { > .name = "R12", > .format = formats::R12, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_Y12), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_Y12), }, > .bitsPerPixel = 12, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = false, > @@ -565,10 +490,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::R10_CSI2P, { > .name = "R10_CSI2P", > .format = formats::R10, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_Y10P), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_Y10P), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = true, > @@ -580,10 +502,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SBGGR8, { > .name = "SBGGR8", > .format = formats::SBGGR8, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR8), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SBGGR8), }, > .bitsPerPixel = 8, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -593,10 +512,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGBRG8, { > .name = "SGBRG8", > .format = formats::SGBRG8, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG8), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGBRG8), }, > .bitsPerPixel = 8, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -606,10 +522,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGRBG8, { > .name = "SGRBG8", > .format = formats::SGRBG8, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG8), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGRBG8), }, > .bitsPerPixel = 8, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -619,10 +532,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SRGGB8, { > .name = "SRGGB8", > .format = formats::SRGGB8, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB8), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SRGGB8), }, > .bitsPerPixel = 8, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -632,10 +542,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SBGGR10, { > .name = "SBGGR10", > .format = formats::SBGGR10, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -645,10 +552,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGBRG10, { > .name = "SGBRG10", > .format = formats::SGBRG10, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -658,10 +562,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGRBG10, { > .name = "SGRBG10", > .format = formats::SGRBG10, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -671,10 +572,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SRGGB10, { > .name = "SRGGB10", > .format = formats::SRGGB10, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -684,10 +582,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SBGGR10_CSI2P, { > .name = "SBGGR10_CSI2P", > .format = formats::SBGGR10_CSI2P, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10P), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10P), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = true, > @@ -697,10 +592,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGBRG10_CSI2P, { > .name = "SGBRG10_CSI2P", > .format = formats::SGBRG10_CSI2P, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10P), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10P), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = true, > @@ -710,10 +602,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGRBG10_CSI2P, { > .name = "SGRBG10_CSI2P", > .format = formats::SGRBG10_CSI2P, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10P), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10P), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = true, > @@ -723,10 +612,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SRGGB10_CSI2P, { > .name = "SRGGB10_CSI2P", > .format = formats::SRGGB10_CSI2P, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10P), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10P), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = true, > @@ -736,10 +622,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SBGGR12, { > .name = "SBGGR12", > .format = formats::SBGGR12, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12), }, > .bitsPerPixel = 12, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -749,10 +632,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGBRG12, { > .name = "SGBRG12", > .format = formats::SGBRG12, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12), }, > .bitsPerPixel = 12, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -762,10 +642,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGRBG12, { > .name = "SGRBG12", > .format = formats::SGRBG12, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12), }, > .bitsPerPixel = 12, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -775,10 +652,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SRGGB12, { > .name = "SRGGB12", > .format = formats::SRGGB12, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12), }, > .bitsPerPixel = 12, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -788,10 +662,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SBGGR12_CSI2P, { > .name = "SBGGR12_CSI2P", > .format = formats::SBGGR12_CSI2P, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12P), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12P), }, > .bitsPerPixel = 12, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = true, > @@ -801,10 +672,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGBRG12_CSI2P, { > .name = "SGBRG12_CSI2P", > .format = formats::SGBRG12_CSI2P, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12P), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12P), }, > .bitsPerPixel = 12, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = true, > @@ -814,10 +682,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGRBG12_CSI2P, { > .name = "SGRBG12_CSI2P", > .format = formats::SGRBG12_CSI2P, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12P), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12P), }, > .bitsPerPixel = 12, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = true, > @@ -827,10 +692,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SRGGB12_CSI2P, { > .name = "SRGGB12_CSI2P", > .format = formats::SRGGB12_CSI2P, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12P), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12P), }, > .bitsPerPixel = 12, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = true, > @@ -840,10 +702,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SBGGR16, { > .name = "SBGGR16", > .format = formats::SBGGR16, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR16), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SBGGR16), }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -853,10 +712,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGBRG16, { > .name = "SGBRG16", > .format = formats::SGBRG16, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG16), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGBRG16), }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -866,10 +722,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGRBG16, { > .name = "SGRBG16", > .format = formats::SGRBG16, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG16), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGRBG16), }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -879,10 +732,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SRGGB16, { > .name = "SRGGB16", > .format = formats::SRGGB16, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB16), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SRGGB16), }, > .bitsPerPixel = 16, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = false, > @@ -892,10 +742,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SBGGR10_IPU3, { > .name = "SBGGR10_IPU3", > .format = formats::SBGGR10_IPU3, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SBGGR10), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SBGGR10), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = true, > @@ -906,10 +753,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGBRG10_IPU3, { > .name = "SGBRG10_IPU3", > .format = formats::SGBRG10_IPU3, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SGBRG10), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SGBRG10), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = true, > @@ -919,10 +763,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SGRBG10_IPU3, { > .name = "SGRBG10_IPU3", > .format = formats::SGRBG10_IPU3, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SGRBG10), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SGRBG10), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = true, > @@ -932,10 +773,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::SRGGB10_IPU3, { > .name = "SRGGB10_IPU3", > .format = formats::SRGGB10_IPU3, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SRGGB10), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SRGGB10), }, > .bitsPerPixel = 10, > .colourEncoding = PixelFormatInfo::ColourEncodingRAW, > .packed = true, > @@ -947,10 +785,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ > { formats::MJPEG, { > .name = "MJPEG", > .format = formats::MJPEG, > - .v4l2Formats = { > - .single = V4L2PixelFormat(V4L2_PIX_FMT_MJPEG), > - .multi = V4L2PixelFormat(), > - }, > + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_MJPEG), }, > .bitsPerPixel = 0, > .colourEncoding = PixelFormatInfo::ColourEncodingYUV, > .packed = false, > @@ -996,8 +831,7 @@ const PixelFormatInfo &PixelFormatInfo::info(const V4L2PixelFormat &format) > { > const auto &info = std::find_if(pixelFormatInfo.begin(), pixelFormatInfo.end(), > [format](auto pair) { > - return pair.second.v4l2Formats.single == format || > - pair.second.v4l2Formats.multi == format; > + return pair.second.v4l2Formats[0] == format; This should consider all the values in the vector. You do that in a subsequent patch in the series, if it's not too much trouble, I'd move it to this one. > }); > if (info == pixelFormatInfo.end()) > return pixelFormatInfoInvalid; > diff --git a/src/libcamera/v4l2_pixelformat.cpp b/src/libcamera/v4l2_pixelformat.cpp > index bdcdc3be4e0c..91a882baa75b 100644 > --- a/src/libcamera/v4l2_pixelformat.cpp > +++ b/src/libcamera/v4l2_pixelformat.cpp > @@ -304,24 +304,21 @@ PixelFormat V4L2PixelFormat::toPixelFormat() const > /** > * \brief Convert \a pixelFormat to its corresponding V4L2PixelFormat > * \param[in] pixelFormat The PixelFormat to convert > - * \param[in] multiplanar V4L2 Multiplanar API support flag > * > - * Multiple V4L2 formats may exist for one PixelFormat when the format uses > - * multiple planes, as V4L2 defines separate 4CCs for contiguous and separate > - * planes formats. Set the \a multiplanar parameter to false to select a format > - * with contiguous planes, or to true to select a format with non-contiguous > - * planes. > + * Multiple V4L2 formats may exist for one PixelFormat as V4L2 defines separate > + * 4CCs for contiguous and non-contiguous versions of the same image format. > + * > + * Return the contiguous planes format version by default. That's not true for formats::YVU422, formats::YUV444 and formats::YVU444 as they have no contiguous variants. We can leave it as-is as the function is later removed, but it's easy to be accurate here: * Multiple V4L2 formats may exist for one PixelFormat as V4L2 defines separate * 4CCs for contiguous and non-contiguous versions of the same image format. * When that is the case, this function returns the contiguous planes format. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > * > * \return The V4L2PixelFormat corresponding to \a pixelFormat > */ > -V4L2PixelFormat V4L2PixelFormat::fromPixelFormat(const PixelFormat &pixelFormat, > - bool multiplanar) > +V4L2PixelFormat V4L2PixelFormat::fromPixelFormat(const PixelFormat &pixelFormat) > { > const PixelFormatInfo &info = PixelFormatInfo::info(pixelFormat); > if (!info.isValid()) > return V4L2PixelFormat(); > > - return multiplanar ? info.v4l2Formats.multi : info.v4l2Formats.single; > + return info.v4l2Formats[0]; > } > > /**
diff --git a/include/libcamera/internal/formats.h b/include/libcamera/internal/formats.h index ee599765be47..5b16c0a8c071 100644 --- a/include/libcamera/internal/formats.h +++ b/include/libcamera/internal/formats.h @@ -53,10 +53,7 @@ public: /* \todo Add support for non-contiguous memory planes */ const char *name; PixelFormat format; - struct { - V4L2PixelFormat single; - V4L2PixelFormat multi; - } v4l2Formats; + std::vector<V4L2PixelFormat> v4l2Formats; unsigned int bitsPerPixel; enum ColourEncoding colourEncoding; bool packed; diff --git a/include/libcamera/internal/v4l2_pixelformat.h b/include/libcamera/internal/v4l2_pixelformat.h index 7bd3ea79428f..ed94baf92795 100644 --- a/include/libcamera/internal/v4l2_pixelformat.h +++ b/include/libcamera/internal/v4l2_pixelformat.h @@ -44,8 +44,7 @@ public: const char *description() const; PixelFormat toPixelFormat() const; - static V4L2PixelFormat fromPixelFormat(const PixelFormat &pixelFormat, - bool multiplanar = false); + static V4L2PixelFormat fromPixelFormat(const PixelFormat &pixelFormat); private: uint32_t fourcc_; diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp index 283ecb3d89d8..3c536722f375 100644 --- a/src/libcamera/formats.cpp +++ b/src/libcamera/formats.cpp @@ -42,12 +42,9 @@ LOG_DEFINE_CATEGORY(Formats) * \var PixelFormatInfo::v4l2Formats * \brief The V4L2 pixel formats corresponding to the PixelFormat * - * Multiple V4L2 formats may exist for one PixelFormat when the format uses - * multiple planes, as V4L2 defines separate 4CCs for contiguous and separate - * planes formats. The two entries in the array store the contiguous and - * non-contiguous V4L2 formats respectively. If the PixelFormat isn't a - * multiplanar format, or if no corresponding non-contiguous V4L2 format - * exists, the second entry is invalid. + * Multiple V4L2 formats may exist for one PixelForma, as V4L2 defines + * separate 4CCs for contiguous and non-contiguous versions of the same image + * format. * * \var PixelFormatInfo::bitsPerPixel * \brief The average number of bits per pixel @@ -156,10 +153,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::RGB565, { .name = "RGB565", .format = formats::RGB565, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_RGB565), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_RGB565), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingRGB, .packed = false, @@ -169,10 +163,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::RGB565_BE, { .name = "RGB565_BE", .format = formats::RGB565_BE, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_RGB565X), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_RGB565X), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingRGB, .packed = false, @@ -182,10 +173,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::BGR888, { .name = "BGR888", .format = formats::BGR888, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_RGB24), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_RGB24), }, .bitsPerPixel = 24, .colourEncoding = PixelFormatInfo::ColourEncodingRGB, .packed = false, @@ -195,10 +183,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::RGB888, { .name = "RGB888", .format = formats::RGB888, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_BGR24), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_BGR24), }, .bitsPerPixel = 24, .colourEncoding = PixelFormatInfo::ColourEncodingRGB, .packed = false, @@ -208,10 +193,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::XRGB8888, { .name = "XRGB8888", .format = formats::XRGB8888, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_XBGR32), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_XBGR32), }, .bitsPerPixel = 32, .colourEncoding = PixelFormatInfo::ColourEncodingRGB, .packed = false, @@ -221,10 +203,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::XBGR8888, { .name = "XBGR8888", .format = formats::XBGR8888, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_RGBX32), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_RGBX32), }, .bitsPerPixel = 32, .colourEncoding = PixelFormatInfo::ColourEncodingRGB, .packed = false, @@ -234,10 +213,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::RGBX8888, { .name = "RGBX8888", .format = formats::RGBX8888, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_BGRX32), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_BGRX32), }, .bitsPerPixel = 32, .colourEncoding = PixelFormatInfo::ColourEncodingRGB, .packed = false, @@ -247,10 +223,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::BGRX8888, { .name = "BGRX8888", .format = formats::BGRX8888, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_XRGB32), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_XRGB32), }, .bitsPerPixel = 32, .colourEncoding = PixelFormatInfo::ColourEncodingRGB, .packed = false, @@ -260,10 +233,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::ABGR8888, { .name = "ABGR8888", .format = formats::ABGR8888, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_RGBA32), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_RGBA32), }, .bitsPerPixel = 32, .colourEncoding = PixelFormatInfo::ColourEncodingRGB, .packed = false, @@ -273,10 +243,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::ARGB8888, { .name = "ARGB8888", .format = formats::ARGB8888, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_ABGR32), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_ABGR32), }, .bitsPerPixel = 32, .colourEncoding = PixelFormatInfo::ColourEncodingRGB, .packed = false, @@ -286,10 +253,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::BGRA8888, { .name = "BGRA8888", .format = formats::BGRA8888, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_ARGB32), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_ARGB32), }, .bitsPerPixel = 32, .colourEncoding = PixelFormatInfo::ColourEncodingRGB, .packed = false, @@ -299,10 +263,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::RGBA8888, { .name = "RGBA8888", .format = formats::RGBA8888, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_BGRA32), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_BGRA32), }, .bitsPerPixel = 32, .colourEncoding = PixelFormatInfo::ColourEncodingRGB, .packed = false, @@ -314,10 +275,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::YUYV, { .name = "YUYV", .format = formats::YUYV, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_YUYV), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_YUYV), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = false, @@ -327,10 +285,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::YVYU, { .name = "YVYU", .format = formats::YVYU, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_YVYU), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_YVYU), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = false, @@ -340,10 +295,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::UYVY, { .name = "UYVY", .format = formats::UYVY, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_UYVY), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_UYVY), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = false, @@ -353,10 +305,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::VYUY, { .name = "VYUY", .format = formats::VYUY, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_VYUY), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_VYUY), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = false, @@ -369,8 +318,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ .name = "NV12", .format = formats::NV12, .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_NV12), - .multi = V4L2PixelFormat(V4L2_PIX_FMT_NV12M), + V4L2PixelFormat(V4L2_PIX_FMT_NV12), + V4L2PixelFormat(V4L2_PIX_FMT_NV12M), }, .bitsPerPixel = 12, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, @@ -382,8 +331,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ .name = "NV21", .format = formats::NV21, .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_NV21), - .multi = V4L2PixelFormat(V4L2_PIX_FMT_NV21M), + V4L2PixelFormat(V4L2_PIX_FMT_NV21), + V4L2PixelFormat(V4L2_PIX_FMT_NV21M), }, .bitsPerPixel = 12, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, @@ -395,8 +344,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ .name = "NV16", .format = formats::NV16, .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_NV16), - .multi = V4L2PixelFormat(V4L2_PIX_FMT_NV16M), + V4L2PixelFormat(V4L2_PIX_FMT_NV16), + V4L2PixelFormat(V4L2_PIX_FMT_NV16M), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, @@ -408,8 +357,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ .name = "NV61", .format = formats::NV61, .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_NV61), - .multi = V4L2PixelFormat(V4L2_PIX_FMT_NV61M), + V4L2PixelFormat(V4L2_PIX_FMT_NV61), + V4L2PixelFormat(V4L2_PIX_FMT_NV61M), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, @@ -420,10 +369,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::NV24, { .name = "NV24", .format = formats::NV24, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_NV24), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_NV24), }, .bitsPerPixel = 24, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = false, @@ -433,10 +379,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::NV42, { .name = "NV42", .format = formats::NV42, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_NV42), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_NV42), }, .bitsPerPixel = 24, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = false, @@ -447,8 +390,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ .name = "YUV420", .format = formats::YUV420, .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_YUV420), - .multi = V4L2PixelFormat(V4L2_PIX_FMT_YUV420M), + V4L2PixelFormat(V4L2_PIX_FMT_YUV420), + V4L2PixelFormat(V4L2_PIX_FMT_YUV420M), }, .bitsPerPixel = 12, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, @@ -460,8 +403,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ .name = "YVU420", .format = formats::YVU420, .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_YVU420), - .multi = V4L2PixelFormat(V4L2_PIX_FMT_YVU420M), + V4L2PixelFormat(V4L2_PIX_FMT_YVU420), + V4L2PixelFormat(V4L2_PIX_FMT_YVU420M), }, .bitsPerPixel = 12, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, @@ -473,8 +416,8 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ .name = "YUV422", .format = formats::YUV422, .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_YUV422P), - .multi = V4L2PixelFormat(V4L2_PIX_FMT_YUV422M), + V4L2PixelFormat(V4L2_PIX_FMT_YUV422P), + V4L2PixelFormat(V4L2_PIX_FMT_YUV422M), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, @@ -485,10 +428,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::YVU422, { .name = "YVU422", .format = formats::YVU422, - .v4l2Formats = { - .single = V4L2PixelFormat(), - .multi = V4L2PixelFormat(V4L2_PIX_FMT_YVU422M), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_YVU422M), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = false, @@ -498,10 +438,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::YUV444, { .name = "YUV444", .format = formats::YUV444, - .v4l2Formats = { - .single = V4L2PixelFormat(), - .multi = V4L2PixelFormat(V4L2_PIX_FMT_YUV444M), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_YUV444M), }, .bitsPerPixel = 24, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = false, @@ -511,10 +448,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::YVU444, { .name = "YVU444", .format = formats::YVU444, - .v4l2Formats = { - .single = V4L2PixelFormat(), - .multi = V4L2PixelFormat(V4L2_PIX_FMT_YVU444M), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_YVU444M), }, .bitsPerPixel = 24, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = false, @@ -526,10 +460,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::R8, { .name = "R8", .format = formats::R8, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_GREY), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_GREY), }, .bitsPerPixel = 8, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = false, @@ -539,10 +470,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::R10, { .name = "R10", .format = formats::R10, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_Y10), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_Y10), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = false, @@ -552,10 +480,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::R12, { .name = "R12", .format = formats::R12, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_Y12), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_Y12), }, .bitsPerPixel = 12, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = false, @@ -565,10 +490,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::R10_CSI2P, { .name = "R10_CSI2P", .format = formats::R10, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_Y10P), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_Y10P), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = true, @@ -580,10 +502,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SBGGR8, { .name = "SBGGR8", .format = formats::SBGGR8, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR8), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SBGGR8), }, .bitsPerPixel = 8, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -593,10 +512,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGBRG8, { .name = "SGBRG8", .format = formats::SGBRG8, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG8), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGBRG8), }, .bitsPerPixel = 8, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -606,10 +522,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGRBG8, { .name = "SGRBG8", .format = formats::SGRBG8, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG8), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGRBG8), }, .bitsPerPixel = 8, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -619,10 +532,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SRGGB8, { .name = "SRGGB8", .format = formats::SRGGB8, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB8), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SRGGB8), }, .bitsPerPixel = 8, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -632,10 +542,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SBGGR10, { .name = "SBGGR10", .format = formats::SBGGR10, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -645,10 +552,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGBRG10, { .name = "SGBRG10", .format = formats::SGBRG10, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -658,10 +562,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGRBG10, { .name = "SGRBG10", .format = formats::SGRBG10, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -671,10 +572,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SRGGB10, { .name = "SRGGB10", .format = formats::SRGGB10, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -684,10 +582,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SBGGR10_CSI2P, { .name = "SBGGR10_CSI2P", .format = formats::SBGGR10_CSI2P, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10P), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10P), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = true, @@ -697,10 +592,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGBRG10_CSI2P, { .name = "SGBRG10_CSI2P", .format = formats::SGBRG10_CSI2P, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10P), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10P), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = true, @@ -710,10 +602,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGRBG10_CSI2P, { .name = "SGRBG10_CSI2P", .format = formats::SGRBG10_CSI2P, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10P), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10P), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = true, @@ -723,10 +612,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SRGGB10_CSI2P, { .name = "SRGGB10_CSI2P", .format = formats::SRGGB10_CSI2P, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10P), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10P), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = true, @@ -736,10 +622,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SBGGR12, { .name = "SBGGR12", .format = formats::SBGGR12, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12), }, .bitsPerPixel = 12, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -749,10 +632,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGBRG12, { .name = "SGBRG12", .format = formats::SGBRG12, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12), }, .bitsPerPixel = 12, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -762,10 +642,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGRBG12, { .name = "SGRBG12", .format = formats::SGRBG12, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12), }, .bitsPerPixel = 12, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -775,10 +652,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SRGGB12, { .name = "SRGGB12", .format = formats::SRGGB12, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12), }, .bitsPerPixel = 12, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -788,10 +662,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SBGGR12_CSI2P, { .name = "SBGGR12_CSI2P", .format = formats::SBGGR12_CSI2P, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12P), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12P), }, .bitsPerPixel = 12, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = true, @@ -801,10 +672,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGBRG12_CSI2P, { .name = "SGBRG12_CSI2P", .format = formats::SGBRG12_CSI2P, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12P), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12P), }, .bitsPerPixel = 12, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = true, @@ -814,10 +682,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGRBG12_CSI2P, { .name = "SGRBG12_CSI2P", .format = formats::SGRBG12_CSI2P, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12P), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12P), }, .bitsPerPixel = 12, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = true, @@ -827,10 +692,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SRGGB12_CSI2P, { .name = "SRGGB12_CSI2P", .format = formats::SRGGB12_CSI2P, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12P), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12P), }, .bitsPerPixel = 12, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = true, @@ -840,10 +702,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SBGGR16, { .name = "SBGGR16", .format = formats::SBGGR16, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR16), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SBGGR16), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -853,10 +712,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGBRG16, { .name = "SGBRG16", .format = formats::SGBRG16, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGBRG16), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGBRG16), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -866,10 +722,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGRBG16, { .name = "SGRBG16", .format = formats::SGRBG16, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SGRBG16), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SGRBG16), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -879,10 +732,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SRGGB16, { .name = "SRGGB16", .format = formats::SRGGB16, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_SRGGB16), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_SRGGB16), }, .bitsPerPixel = 16, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = false, @@ -892,10 +742,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SBGGR10_IPU3, { .name = "SBGGR10_IPU3", .format = formats::SBGGR10_IPU3, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SBGGR10), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SBGGR10), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = true, @@ -906,10 +753,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGBRG10_IPU3, { .name = "SGBRG10_IPU3", .format = formats::SGBRG10_IPU3, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SGBRG10), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SGBRG10), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = true, @@ -919,10 +763,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SGRBG10_IPU3, { .name = "SGRBG10_IPU3", .format = formats::SGRBG10_IPU3, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SGRBG10), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SGRBG10), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = true, @@ -932,10 +773,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::SRGGB10_IPU3, { .name = "SRGGB10_IPU3", .format = formats::SRGGB10_IPU3, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SRGGB10), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_IPU3_SRGGB10), }, .bitsPerPixel = 10, .colourEncoding = PixelFormatInfo::ColourEncodingRAW, .packed = true, @@ -947,10 +785,7 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{ { formats::MJPEG, { .name = "MJPEG", .format = formats::MJPEG, - .v4l2Formats = { - .single = V4L2PixelFormat(V4L2_PIX_FMT_MJPEG), - .multi = V4L2PixelFormat(), - }, + .v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_MJPEG), }, .bitsPerPixel = 0, .colourEncoding = PixelFormatInfo::ColourEncodingYUV, .packed = false, @@ -996,8 +831,7 @@ const PixelFormatInfo &PixelFormatInfo::info(const V4L2PixelFormat &format) { const auto &info = std::find_if(pixelFormatInfo.begin(), pixelFormatInfo.end(), [format](auto pair) { - return pair.second.v4l2Formats.single == format || - pair.second.v4l2Formats.multi == format; + return pair.second.v4l2Formats[0] == format; }); if (info == pixelFormatInfo.end()) return pixelFormatInfoInvalid; diff --git a/src/libcamera/v4l2_pixelformat.cpp b/src/libcamera/v4l2_pixelformat.cpp index bdcdc3be4e0c..91a882baa75b 100644 --- a/src/libcamera/v4l2_pixelformat.cpp +++ b/src/libcamera/v4l2_pixelformat.cpp @@ -304,24 +304,21 @@ PixelFormat V4L2PixelFormat::toPixelFormat() const /** * \brief Convert \a pixelFormat to its corresponding V4L2PixelFormat * \param[in] pixelFormat The PixelFormat to convert - * \param[in] multiplanar V4L2 Multiplanar API support flag * - * Multiple V4L2 formats may exist for one PixelFormat when the format uses - * multiple planes, as V4L2 defines separate 4CCs for contiguous and separate - * planes formats. Set the \a multiplanar parameter to false to select a format - * with contiguous planes, or to true to select a format with non-contiguous - * planes. + * Multiple V4L2 formats may exist for one PixelFormat as V4L2 defines separate + * 4CCs for contiguous and non-contiguous versions of the same image format. + * + * Return the contiguous planes format version by default. * * \return The V4L2PixelFormat corresponding to \a pixelFormat */ -V4L2PixelFormat V4L2PixelFormat::fromPixelFormat(const PixelFormat &pixelFormat, - bool multiplanar) +V4L2PixelFormat V4L2PixelFormat::fromPixelFormat(const PixelFormat &pixelFormat) { const PixelFormatInfo &info = PixelFormatInfo::info(pixelFormat); if (!info.isValid()) return V4L2PixelFormat(); - return multiplanar ? info.v4l2Formats.multi : info.v4l2Formats.single; + return info.v4l2Formats[0]; } /**
To each libcamera PixelFormat two lists of V4L2 formats are associated, the 'single' and 'multi' format variants. The two versions list plane contiguous and non-contiguous format variants, and an optional argument to V4L2PixelFormat::fromPixelFormat() was used to select which one to pick. In order to prepare to remove V4L2PixelFormat::fromPixelFormat(), and considering that no caller in the codebase uses the non-contiguous format variant, merge the two formats vectors in a single one and default the selection to the first available one, which is functionally equivalent to what is currently implemented. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> --- include/libcamera/internal/formats.h | 5 +- include/libcamera/internal/v4l2_pixelformat.h | 3 +- src/libcamera/formats.cpp | 310 ++++-------------- src/libcamera/v4l2_pixelformat.cpp | 15 +- 4 files changed, 80 insertions(+), 253 deletions(-)