[libcamera-devel,v2,0/8] libcamera: Map multiple V4L2 formats to a single libcamera::format
mbox series

Message ID 20220723095330.43542-1-jacopo@jmondi.org
Headers show
Series
  • libcamera: Map multiple V4L2 formats to a single libcamera::format
Related show

Message

Jacopo Mondi July 23, 2022, 9:53 a.m. UTC
This series addresses the requirement of mapping multiple V4L2 pixel formats
to a single libcamera format. Specifically, it allows to map V4L2_PIX_FMT_JPEG
and V4L2_PIX_FMT_MJPEG to libcamera::formats::MJPEG.

The series starts by allowing to associate mulitple V4L2 FourCC in
PixelFormatInfo and re-introduces toV4L2PixelFormat() in V4L2VideoDevice in
order to select among from the list of V4L2 formats the first one supported
from the video device.

Patch [7/8] adds a multiplanar flag to V4L2VideoDevice::toV4L2PixelFormat() to
allow selection of the contiguous or non-contiguous format versions.

Finally, the last patches associate V4L2_PIX_FMT_JPEG to formats::MJPEG in
the libcamera::formats enumeration and the conversely maps formats::MJPEG to
V4L2_PIX_FMT_JPEG in the V4L2 formats enumeration.

Tested with a UVC camera and on pinephone where the format is correctly mapped

v1->v2:
- Add a missing conversion using the video device in Simple converter
- Map formats::MJPEG to V4L2_PIX_FMT_JPEG in v4l2 formats enumeration

Jacopo Mondi (8):
  libcamera: formats: Support multiple V4L2 pixel formats
  libcamera: formats: Search PixelFormatInfo on multiple formats
  libcamera: v4l2_pixelformat: Return a format list in fromPixelFormat()
  libcamera: v4l2_videodevice: Reintroduce toV4L2PixelFormat()
  libcamera: v4l2_videodevice: Match formats supported by the device
  libcamera: v4l2_videodevice: Add multiplanar argument to
    toV4L2PixelFormat
  libcamera: formats: Map V4L2_PIX_FMT_JPEG to formats::MJPEG
  libcamera: v4l2_pixelformat: Map formats::MJPEG to V4L2_PIX_FMT_JPEG

 Documentation/guides/pipeline-handler.rst     |   7 +-
 include/libcamera/internal/formats.h          |   4 +-
 include/libcamera/internal/v4l2_device.h      |   1 +
 include/libcamera/internal/v4l2_pixelformat.h |   6 +-
 include/libcamera/internal/v4l2_videodevice.h |   9 +-
 src/libcamera/formats.cpp                     | 262 +++++++++---------
 src/libcamera/pipeline/ipu3/cio2.cpp          |   2 +-
 src/libcamera/pipeline/ipu3/imgu.cpp          |   2 +-
 .../pipeline/raspberrypi/raspberrypi.cpp      |  34 ++-
 src/libcamera/pipeline/rkisp1/rkisp1_path.cpp |   6 +-
 src/libcamera/pipeline/simple/converter.cpp   |  10 +-
 src/libcamera/pipeline/simple/simple.cpp      |   4 +-
 src/libcamera/pipeline/uvcvideo/uvcvideo.cpp  |   6 +-
 src/libcamera/pipeline/vimc/vimc.cpp          |   8 +-
 src/libcamera/v4l2_device.cpp                 |  15 +
 src/libcamera/v4l2_pixelformat.cpp            |  20 +-
 src/libcamera/v4l2_videodevice.cpp            |  41 ++-
 src/v4l2/v4l2_camera_proxy.cpp                |   6 +-
 test/libtest/buffer_source.cpp                |   2 +-
 19 files changed, 261 insertions(+), 184 deletions(-)

--
2.37.1