[v3,00/17] rkisp1: Fix aspect ratio and ScalerCrop
mbox series

Message ID 20241206101344.767170-1-stefan.klug@ideasonboard.com
Headers show
Series
  • rkisp1: Fix aspect ratio and ScalerCrop
Related show

Message

Stefan Klug Dec. 6, 2024, 10:13 a.m. UTC
Hi all,

This series contains fixes for a few issues on the imx8mp that I'd like
to get in before the next release.

Version 3 is a major extension which is described in the last paragraph.

Patch 1 is a drive by fix

Patch 2 Fixes the aspect ratio on the imx8mp. There is code to keep the
aspect ratio in the rkisp1 pipeline that adjust the input crop on the
resizer stage. On the imx8mp however the resizer hardware is missing
that functionality and cropping needs to be done on the ISP output.
Patch 2 implements that.

Patches 3-8 fix the ScalerCrop control. The existing implementation
implements ScalerCrop in dewarper coordinates (After scaling down).
This is incorrect as ScalerCrop is specified to be in sensor
coordinates. To fix that, patches 3-6 do preparatory changes and patch 6
implements the correct ScalerCrop control. Patch 8 adds
ScalerMaximumCrop for completeness sake.

Note that this solution while being correct on the numbers is still not
ideal, because the aspect ratio preserving crop on the ISP output is
still applied unconditionally. That will get fixed in an upcoming
series, where the full sensor size get's passed to the dewarper and all
cropping/scaling gets handled there.

Patches 9-17 were added after version 2 because it got clear that the
current master is completely missing the dewarper size validation and
that requires fixing. So patches 9-15 do the necessary plumbing and
implementation of the validation. Thanks Jacopo for helping with that.
Patches 16-17 fixe another bug found during that work where the sensor
might get configured to a size not supported by the isp.

Best regards,
Stefan

Changes in v3:
- Fixes from review (see individual changelogs)
- Added pipeline validation for the dewarper
- Fixed bug where sensor might be configured to a format incompatible
  with the isp

Changes in v2:
- Some smaller fixes from review (see individual changelogs)
- Added [PATCH v2 6/8] libcamera: converter_v4l2_m2m: Improve crop
  bounds support to be able to provide sane default values for
ScalerCrop before configure()

Jacopo Mondi (2):
  libcamera: converter: Add functions to adjust config
  libcamera: stream: Add operator<<(StreamConfiguration)

Stefan Klug (15):
  libcamera: rkisp1: Fix scope of dewarper stop() exit action
  libcamera: rkisp1: Keep aspect ratio on imx8mp
  libcamera: geometry: Add Rectangle::transformedBetween()
  pipeline: rkisp1: Split inputCrop and outputCrop
  pipeline: rkisp1: Reorder sensorInfo collection code
  libcamera: converter_v4l2_m2m: Improve crop bounds support
  pipeline: rkisp1: Fix ScalerCrop to be in sensor coordinates
  pipeline: rkisp1: Add ScalerMaximumCrop property
  libcamera: rkisp1: Refactor path validation
  libcamera: rkisp1: Enable the dewarper unconditionally
  camera: Add a const version of the pipe() function
  libcamera: rkisp1: make RkISP1CameraConfiguration a friend of the
    pipeline handler
  pipeline: rkisp1: Fix config validation when dewarper is used
  libcamera: camera_sensor: Add parameter to limit returned sensor size
  libcamera: pipeline: rkisp1: Limit sensor size to max resolution

 include/libcamera/geometry.h                  |   3 +
 include/libcamera/internal/camera.h           |   1 +
 include/libcamera/internal/camera_sensor.h    |   2 +-
 include/libcamera/internal/converter.h        |  17 ++
 .../internal/converter/converter_v4l2_m2m.h   |  12 +
 include/libcamera/stream.h                    |   2 +
 src/libcamera/camera.cpp                      |   5 +
 src/libcamera/converter.cpp                   |  46 +++
 .../converter/converter_v4l2_m2m.cpp          | 282 ++++++++++++++----
 src/libcamera/geometry.cpp                    |  49 +++
 src/libcamera/pipeline/rkisp1/rkisp1.cpp      | 182 ++++++++---
 src/libcamera/pipeline/rkisp1/rkisp1_path.cpp |  13 +-
 src/libcamera/pipeline/rkisp1/rkisp1_path.h   |   1 +
 src/libcamera/sensor/camera_sensor.cpp        |   3 +
 src/libcamera/sensor/camera_sensor_legacy.cpp |   9 +-
 src/libcamera/stream.cpp                      |  13 +
 test/geometry.cpp                             |  11 +
 17 files changed, 543 insertions(+), 108 deletions(-)