[libcamera-devel] [RFC PATCH 3/4] libcamera: lens: Add a helper to get the fixed range lens values
Jean-Michel Hautbois
jeanmichel.hautbois at ideasonboard.com
Thu Jun 9 11:40:32 CEST 2022
Hi Laurent,
On 09/06/2022 11:34, Laurent Pinchart wrote:
> On Thu, Jun 09, 2022 at 08:03:05AM +0200, Jean-Michel Hautbois via libcamera-devel wrote:
>> When the focus algorithm runs, it can be asked to go to a specific
>> position, through the controls::LensPosition control. Those controls
>> need specific values to be known, in particular the minimum and maximum
>> value the driver can set to the lens to make it move to a given
>> position.
>>
>> Add a new helper on the camera lens side to get this range or a default
>> nulled structure if it is not available. This particular value needs to
>> be taken into account by the caller and it shall use the minimum and
>> maximum reported by the driver.
>>
>> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>
>> ---
>> include/libcamera/internal/camera_lens.h | 1 +
>> .../internal/camera_lens_properties.h | 2 ++
>> src/libcamera/camera_lens.cpp | 19 +++++++++++++++++++
>> src/libcamera/camera_lens_properties.cpp | 9 ++++++++-
>> 4 files changed, 30 insertions(+), 1 deletion(-)
>>
>> diff --git a/include/libcamera/internal/camera_lens.h b/include/libcamera/internal/camera_lens.h
>> index 523a1481..f6daff01 100644
>> --- a/include/libcamera/internal/camera_lens.h
>> +++ b/include/libcamera/internal/camera_lens.h
>> @@ -29,6 +29,7 @@ public:
>>
>> int init();
>> int setFocusPosition(int32_t position);
>> + const Size &getLensRange();
>>
>> const std::string &model() const { return model_; }
>>
>> diff --git a/include/libcamera/internal/camera_lens_properties.h b/include/libcamera/internal/camera_lens_properties.h
>> index 73982550..7424b375 100644
>> --- a/include/libcamera/internal/camera_lens_properties.h
>> +++ b/include/libcamera/internal/camera_lens_properties.h
>> @@ -17,6 +17,8 @@ namespace libcamera {
>>
>> struct CameraLensProperties {
>> static const CameraLensProperties *get(const std::string &lens);
>> +
>> + Size lensFocusRange;
>> };
>>
>> } /* namespace libcamera */
>> diff --git a/src/libcamera/camera_lens.cpp b/src/libcamera/camera_lens.cpp
>> index d4d44bc7..abec5a27 100644
>> --- a/src/libcamera/camera_lens.cpp
>> +++ b/src/libcamera/camera_lens.cpp
>> @@ -79,6 +79,25 @@ int CameraLens::init()
>> return 0;
>> }
>>
>> +/**
>> + * \brief Retrieve the lens position range
>> + * \return The minimum and maximum positions for the given lens or a default
>> + * nulled Size reference
>> + *
>> + * If a lens has no static properties associated, a special value is returned,
>> + * where the minimum and maximum are set to 0. The caller may then chose the
>> + * ones returned by the V4L2_CID_FOCUS_ABSOLUTE call.
>> + */
>> +const Size &CameraLens::getLensRange()
>> +{
>> + static const Size defaultLensFocusRange = { 0, 0 };
>> + if (!staticProps_ || staticProps_->lensFocusRange.isNull())
>> + return defaultLensFocusRange;
>> +
>> + return staticProps_->lensFocusRange;
>> +}
>> +
>> +
>> /**
>> * \brief This function sets the focal point of the lens to a specific position.
>> * \param[in] position The focal point of the lens
>> diff --git a/src/libcamera/camera_lens_properties.cpp b/src/libcamera/camera_lens_properties.cpp
>> index dee73b43..225546ae 100644
>> --- a/src/libcamera/camera_lens_properties.cpp
>> +++ b/src/libcamera/camera_lens_properties.cpp
>> @@ -32,6 +32,9 @@ LOG_DEFINE_CATEGORY(CameraLensProperties)
>> /**
>> * \struct CameraLensProperties
>> * \brief Database of camera lens properties
>> + *
>> + * \var CameraLensProperties::lensFocusRange
>> + * \brief The limits for the sensor position, stored as a min and a max.
>> */
>>
>> /**
>> @@ -42,7 +45,11 @@ LOG_DEFINE_CATEGORY(CameraLensProperties)
>> */
>> const CameraLensProperties *CameraLensProperties::get(const std::string &lens)
>> {
>> - static const std::map<std::string, const CameraLensProperties> lensProps = {};
>> + static const std::map<std::string, const CameraLensProperties> lensProps = {
>> + { "dw9714", {
>> + .lensFocusRange = { 150, 800 },
>> + } },
>> + };
>
> This partly answers the question I asked in a reply to the cover letter.
>
> What makes you think the lens focus range is an intrinsic property of
> the VCM driver ?
I am not sure of this indeed, probably it will be a couple lens/sensor
model... And what else do we have than the vcm driver ?
I don't have any tune files as example from "real life" so I don't
really know what is usually done, any insight will be appreciated ;-).
Thanks,
JM
>
>>
>> const auto it = lensProps.find(lens);
>> if (it == lensProps.end()) {
>
More information about the libcamera-devel
mailing list