[libcamera-devel] [PATCH 2/3] libcamera: camera: Create a CameraControlValidator
Kieran Bingham
kieran.bingham at ideasonboard.com
Wed Aug 11 17:03:50 CEST 2021
Hi Jacopo,
On 11/08/2021 13:35, Jacopo Mondi wrote:
> Hi Kieran,
>
> On Tue, Aug 10, 2021 at 05:11:33PM +0100, Kieran Bingham wrote:
>> Create a Camera specific CameraControlValidator for the Camera instance.
>> This will allow requests to use a single validor instance without having
>> to construct their own.
>>
>> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>> ---
>>
>> Laurent:
>> - Is the use of the _o<Public>() reference valid here in the
>> initialiser list?
>
> Could the requirement to pass a Camera * to the CameraControlValidator
> constructor be dropped ? The Request class has access to the internal
> Camera::Private representation and the need for the Validator to have
> a Camera * is only to access the Camera's control info map.
It looks like Camera is used for both:
camera_->name()
and
camera_->controls()
indeed.
the name is a little trivial, but still there.
I'm not sure what the fear is about passing the Camera *
Indeed, if we can pass the Camera::Private we can dig the
pipe_->controls() ... but .. ahh.
To get the ControlInfoMap - it's indexed from the Pipe based on the
Camera * ... which is because it's in the CameraData ...
Aha - Now I see where you're going with that - Laurent's series moves
that CameraData into Camera::Private. So - at that point, yes we could.
But I haven't got that series applied here yet ;-)
> IOW: Can the CameraControlValidator be made to accept a
> Camera::Private ? There shouldn't be a need to expose it to
> applications, right ?
Perhaps I need to rebase on top of Laurent's patches, or give this
series to him ;-)
--
Kieran
>
>>
>>
>> include/libcamera/internal/camera.h | 6 ++++++
>> src/libcamera/camera.cpp | 2 +-
>> 2 files changed, 7 insertions(+), 1 deletion(-)
>>
>> diff --git a/include/libcamera/internal/camera.h b/include/libcamera/internal/camera.h
>> index b60ed140356a..f14bafc75e05 100644
>> --- a/include/libcamera/internal/camera.h
>> +++ b/include/libcamera/internal/camera.h
>> @@ -16,6 +16,8 @@
>>
>> #include <libcamera/camera.h>
>>
>> +#include "libcamera/internal/camera_controls.h"
>> +
>> namespace libcamera {
>>
>> class PipelineHandler;
>> @@ -30,6 +32,8 @@ public:
>> const std::set<Stream *> &streams);
>> ~Private();
>>
>> + const CameraControlValidator &validator() const { return validator_; }
>> +
>> private:
>> enum State {
>> CameraAvailable,
>> @@ -56,6 +60,8 @@ private:
>>
>> bool disconnected_;
>> std::atomic<State> state_;
>> +
>> + CameraControlValidator validator_;
>> };
>>
>> } /* namespace libcamera */
>> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
>> index 6281e92057e4..b914bf188d57 100644
>> --- a/src/libcamera/camera.cpp
>> +++ b/src/libcamera/camera.cpp
>> @@ -336,7 +336,7 @@ Camera::Private::Private(PipelineHandler *pipe,
>> const std::string &id,
>> const std::set<Stream *> &streams)
>> : pipe_(pipe->shared_from_this()), id_(id), streams_(streams),
>> - disconnected_(false), state_(CameraAvailable)
>> + disconnected_(false), state_(CameraAvailable), validator_(_o<Public>())
>> {
>> }
>>
>> --
>> 2.30.2
>>
More information about the libcamera-devel
mailing list