[libcamera-devel] [PATCH v5 00/23] Clean up formats in v4l2-compat and pipeline handlers
Paul Elder
paul.elder at ideasonboard.com
Thu Jul 9 15:28:12 CEST 2020
Alright, I'm pretty sure this v5 is enough... just one final check
before merging. I tacked on the v4l2-compat test at the end too, since
it'll be merged at the same time (and I added one line to tell the
v4l2-compat test to test raspi as well).
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. Patch 8 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 9 makes the
raspberrypi pipeline handler conform to this. Patches 10~11
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 12~13, 15~18 move filling in the stide and
frameSize parameters from camera configuration time to configuration
validation time. Patches 21~22 move formats out of V4L2CameraProxy,
and clean up some of its code. Finally, patch 23 adds the test for the
v4l2 compatibility layer.
Changes in v5:
- change default "align" parameter in PixelFormatInfo::stride() to 1
- add optional "align" parameter to PixelFormatInfo::frameSize()
- reorder patches to avoid bisection regression:
- extend PixelFormatInfo
- add stride and frameSize to StreamConfiguration
- update pipeline handlers
- use in V4L2 compat layer
- return error from try_fmt and s_fmt if format negotiation on the
V4L2Camera/Camera side fail
- add the v4l2-compat test to the end of this patch series, in a v5 that
adds raspi support
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 (23):
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
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: raspberrypi: Set default configuration size at 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
v4l2: v4l2_camera_proxy: Get stride and frameSize from stream config
v4l2: v4l2_camera_proxy: Use stream config in tryFormat
tests: v4l2_compat: Add test for v4l2_compat
include/libcamera/internal/formats.h | 18 ++
include/libcamera/internal/v4l2_videodevice.h | 7 +-
include/libcamera/stream.h | 1 +
src/libcamera/formats.cpp | 289 +++++++++++++++++-
src/libcamera/pipeline/ipu3/ipu3.cpp | 14 +-
.../pipeline/raspberrypi/raspberrypi.cpp | 73 +++--
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 | 26 +-
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 | 225 ++++----------
src/v4l2/v4l2_camera_proxy.h | 10 +-
test/meson.build | 1 +
test/v4l2_compat/meson.build | 10 +
test/v4l2_compat/v4l2_compat_test.py | 152 +++++++++
22 files changed, 748 insertions(+), 285 deletions(-)
create mode 100644 test/v4l2_compat/meson.build
create mode 100755 test/v4l2_compat/v4l2_compat_test.py
--
2.27.0
More information about the libcamera-devel
mailing list