[libcamera-devel,v4,00/21] Clean up formats in v4l2-compat and pipeline handlers
mbox series

Message ID 20200708134417.67747-1-paul.elder@ideasonboard.com
Headers show
Series
  • Clean up formats in v4l2-compat and pipeline handlers
Related show

Message

Paul Elder July 8, 2020, 1:43 p.m. UTC
This patch series:
- improves format-related calculations (stride, frameSize)
- cleans up the v4l2 compatibility layer related to formats
- fixes v4l2 compatibility interception for the raspberry pi pipeline
  handler
- fixes unsupported formats in uvcvideo and raspberrypi pipeline
  handlers (the others were fine already)
- moves filling in stride and frameSize from camera configuration time
  to configuration validation time for all pipeline handlers

Patches 1~6 add functions and fields that are necessary in the rest of
the patches. Patches 7~8 move formats out of V4L2CameraProxy, and clean
up some of its code. Patch 10 forces pipeline handlers to use
acquireMediaDevice so that media devices can automatically be mapped to
devnums for the v4l2 compatibility layer to intercept, and patch 11
makes the raspberrypi pipeline handler conform to this. Patches 12~13
filter out unsupported formats at configuration generation time, to
prevent them from being selected, in the pipeline handlers that hadn't
already done so. Patches 14~19 move filling in the stide and frameSize
parameters from camera configuration time to configuration validation
time.

Changes in v4:
- upgraded documentation of format info definitions
- added overloaded PixelFormatInfo::stride() that takes alignment
- added optional parameter to PixelFormatInfo::frameSize that takes
  array of strides
- raspberrypi: fill in default format and frame size
- simple: fix stride and frameSize for converter (compared to v3)
- use tryFormat to get stride and frameSize for all pipelines except for
  ipu3

Paul Elder (21):
  libcamera: formats: Add NV24 and NV42, and reorder NV formats
  libcamera: formats: Add fields to info to ease calculating stride
  libcamera: StreamConfiguration: Add frameSize field
  libcamera: V4L2VideoDevice: Add tryFormat
  libcamera: formats: PixelFormatInfo: Add v4l2 lookup function
  libcamera: PixelFormatInfo: Add functions stride and frameSize
  v4l2: v4l2_camera_proxy: Get stride and frameSize from stream config
  v4l2: v4l2_camera_proxy: Use stream config in tryFormat
  libcamera: pipeline: raspberrypi: Simplify format fetching
  libcamera: pipeline: raspberrypi: Acquire media devices with
    acquireMediaDevice
  libcamera: pipeline_handler: Fatal if registering camera without media
    devices
  libcamera: pipeline: raspberrypi: Filter out unsupported formats
  libcamera: pipeline: uvcvideo: Filter out unsupported formats
  libcamera: ipu3: Fill stride and frameSize at config validation
  libcamera: raspberrypi: Fill stride and frameSize at config validation
  libcamera: rkisp1: Fill stride and frameSize at config validation
  libcamera: simple: Fill stride and frameSize at config validation
  libcamera: uvcvideo: Fill stride and frameSize at config validation
  libcamera: vimc: Fill stride and frameSize at config validation
  libcamera: StreamConfiguration: Update stride documentation
  v4l2: v4l2_camera: Fix stream selection for buffer operations

 include/libcamera/internal/formats.h          |  17 ++
 include/libcamera/internal/v4l2_videodevice.h |   7 +-
 include/libcamera/stream.h                    |   1 +
 src/libcamera/formats.cpp                     | 282 +++++++++++++++++-
 src/libcamera/pipeline/ipu3/ipu3.cpp          |  23 +-
 .../pipeline/raspberrypi/raspberrypi.cpp      |  81 ++---
 src/libcamera/pipeline/rkisp1/rkisp1.cpp      |  20 +-
 src/libcamera/pipeline/simple/converter.cpp   |  19 ++
 src/libcamera/pipeline/simple/converter.h     |   4 +
 src/libcamera/pipeline/simple/simple.cpp      |  27 +-
 src/libcamera/pipeline/uvcvideo/uvcvideo.cpp  |  36 ++-
 src/libcamera/pipeline/vimc/vimc.cpp          |  23 +-
 src/libcamera/pipeline_handler.cpp            |   4 +
 src/libcamera/stream.cpp                      |  22 +-
 src/libcamera/v4l2_videodevice.cpp            |  50 +++-
 src/v4l2/v4l2_camera.cpp                      |  26 +-
 src/v4l2/v4l2_camera.h                        |   3 +
 src/v4l2/v4l2_camera_proxy.cpp                | 207 +++----------
 src/v4l2/v4l2_camera_proxy.h                  |   8 -
 19 files changed, 578 insertions(+), 282 deletions(-)