Message ID | 20241107102508.48322-7-dan.scally@ideasonboard.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
Hi Dan On Thu, Nov 07, 2024 at 10:25:08AM +0000, Daniel Scally wrote: > Rather than hard coding default delays for control values in the > pipeline handlers, pick up the ones defined in the CameraSensor > properties. > > Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com> > --- > Changes in v2: > > - Switched to use the new getSensorDelays() function > > src/libcamera/pipeline/ipu3/ipu3.cpp | 12 +++++------- > src/libcamera/pipeline/rkisp1/rkisp1.cpp | 13 ++++++------- > src/libcamera/pipeline/simple/simple.cpp | 8 ++++++-- > 3 files changed, 17 insertions(+), 16 deletions(-) > > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp > index 29d3c6c1..50f887c6 100644 > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp > @@ -1077,14 +1077,12 @@ int PipelineHandlerIPU3::registerCameras() > if (ret) > continue; > > - /* > - * \todo Read delay values from the sensor itself or from a > - * a sensor database. For now use generic values taken from > - * the Raspberry Pi and listed as 'generic values'. > - */ > + uint8_t exposureDelay, gainDelay, vblankDelay, hblankDelay; > + cio2->sensor()->getSensorDelays(exposureDelay, gainDelay, > + vblankDelay, hblankDelay); Wrong alignment > std::unordered_map<uint32_t, DelayedControls::ControlParams> params = { > - { V4L2_CID_ANALOGUE_GAIN, { 1, false } }, > - { V4L2_CID_EXPOSURE, { 2, false } }, > + { V4L2_CID_ANALOGUE_GAIN, { gainDelay, false } }, > + { V4L2_CID_EXPOSURE, { exposureDelay, false } }, > }; > > data->delayedCtrls_ = > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp > index c7b0b392..a73cb6f2 100644 > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp > @@ -24,6 +24,7 @@ > #include <libcamera/control_ids.h> > #include <libcamera/formats.h> > #include <libcamera/framebuffer.h> > +#include <libcamera/property_ids.h> > #include <libcamera/request.h> > #include <libcamera/stream.h> > #include <libcamera/transform.h> > @@ -1240,14 +1241,12 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor) > /* Initialize the camera properties. */ > data->properties_ = data->sensor_->properties(); > > - /* > - * \todo Read delay values from the sensor itself or from a > - * a sensor database. For now use generic values taken from > - * the Raspberry Pi and listed as generic values. > - */ > + uint8_t exposureDelay, gainDelay, vblankDelay, hblankDelay; > + data->sensor_->getSensorDelays(exposureDelay, gainDelay, vblankDelay, > + hblankDelay); > std::unordered_map<uint32_t, DelayedControls::ControlParams> params = { > - { V4L2_CID_ANALOGUE_GAIN, { 1, false } }, > - { V4L2_CID_EXPOSURE, { 2, false } }, > + { V4L2_CID_ANALOGUE_GAIN, { gainDelay, false } }, > + { V4L2_CID_EXPOSURE, { exposureDelay, false } }, > }; > > data->delayedCtrls_ = > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp > index 3ddce71d..81dd9379 100644 > --- a/src/libcamera/pipeline/simple/simple.cpp > +++ b/src/libcamera/pipeline/simple/simple.cpp > @@ -26,6 +26,7 @@ > > #include <libcamera/camera.h> > #include <libcamera/control_ids.h> > +#include <libcamera/property_ids.h> > #include <libcamera/request.h> > #include <libcamera/stream.h> > > @@ -1286,9 +1287,12 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c) > if (outputCfgs.empty()) > return 0; > > + uint8_t exposureDelay, gainDelay, vblankDelay, hblankDelay; > + data->sensor_->getSensorDelays(exposureDelay, gainDelay, vblankDelay, > + hblankDelay); > std::unordered_map<uint32_t, DelayedControls::ControlParams> params = { > - { V4L2_CID_ANALOGUE_GAIN, { 2, false } }, > - { V4L2_CID_EXPOSURE, { 2, false } }, > + { V4L2_CID_ANALOGUE_GAIN, { gainDelay, false } }, > + { V4L2_CID_EXPOSURE, { exposureDelay, false } }, > }; > data->delayedCtrls_ = > std::make_unique<DelayedControls>(data->sensor_->device(), > -- > 2.30.2 >
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index 29d3c6c1..50f887c6 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -1077,14 +1077,12 @@ int PipelineHandlerIPU3::registerCameras() if (ret) continue; - /* - * \todo Read delay values from the sensor itself or from a - * a sensor database. For now use generic values taken from - * the Raspberry Pi and listed as 'generic values'. - */ + uint8_t exposureDelay, gainDelay, vblankDelay, hblankDelay; + cio2->sensor()->getSensorDelays(exposureDelay, gainDelay, + vblankDelay, hblankDelay); std::unordered_map<uint32_t, DelayedControls::ControlParams> params = { - { V4L2_CID_ANALOGUE_GAIN, { 1, false } }, - { V4L2_CID_EXPOSURE, { 2, false } }, + { V4L2_CID_ANALOGUE_GAIN, { gainDelay, false } }, + { V4L2_CID_EXPOSURE, { exposureDelay, false } }, }; data->delayedCtrls_ = diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index c7b0b392..a73cb6f2 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -24,6 +24,7 @@ #include <libcamera/control_ids.h> #include <libcamera/formats.h> #include <libcamera/framebuffer.h> +#include <libcamera/property_ids.h> #include <libcamera/request.h> #include <libcamera/stream.h> #include <libcamera/transform.h> @@ -1240,14 +1241,12 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor) /* Initialize the camera properties. */ data->properties_ = data->sensor_->properties(); - /* - * \todo Read delay values from the sensor itself or from a - * a sensor database. For now use generic values taken from - * the Raspberry Pi and listed as generic values. - */ + uint8_t exposureDelay, gainDelay, vblankDelay, hblankDelay; + data->sensor_->getSensorDelays(exposureDelay, gainDelay, vblankDelay, + hblankDelay); std::unordered_map<uint32_t, DelayedControls::ControlParams> params = { - { V4L2_CID_ANALOGUE_GAIN, { 1, false } }, - { V4L2_CID_EXPOSURE, { 2, false } }, + { V4L2_CID_ANALOGUE_GAIN, { gainDelay, false } }, + { V4L2_CID_EXPOSURE, { exposureDelay, false } }, }; data->delayedCtrls_ = diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp index 3ddce71d..81dd9379 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -26,6 +26,7 @@ #include <libcamera/camera.h> #include <libcamera/control_ids.h> +#include <libcamera/property_ids.h> #include <libcamera/request.h> #include <libcamera/stream.h> @@ -1286,9 +1287,12 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c) if (outputCfgs.empty()) return 0; + uint8_t exposureDelay, gainDelay, vblankDelay, hblankDelay; + data->sensor_->getSensorDelays(exposureDelay, gainDelay, vblankDelay, + hblankDelay); std::unordered_map<uint32_t, DelayedControls::ControlParams> params = { - { V4L2_CID_ANALOGUE_GAIN, { 2, false } }, - { V4L2_CID_EXPOSURE, { 2, false } }, + { V4L2_CID_ANALOGUE_GAIN, { gainDelay, false } }, + { V4L2_CID_EXPOSURE, { exposureDelay, false } }, }; data->delayedCtrls_ = std::make_unique<DelayedControls>(data->sensor_->device(),
Rather than hard coding default delays for control values in the pipeline handlers, pick up the ones defined in the CameraSensor properties. Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com> --- Changes in v2: - Switched to use the new getSensorDelays() function src/libcamera/pipeline/ipu3/ipu3.cpp | 12 +++++------- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 13 ++++++------- src/libcamera/pipeline/simple/simple.cpp | 8 ++++++-- 3 files changed, 17 insertions(+), 16 deletions(-)