[libcamera-devel] [PATCH v5 0/3] Python bindings

David Plowman david.plowman at raspberrypi.com
Thu Mar 17 11:06:35 CET 2022


Hi Tomi

On Thu, 17 Mar 2022 at 10:03, Tomi Valkeinen
<tomi.valkeinen at ideasonboard.com> wrote:
>
> On 17/03/2022 11:55, Tomi Valkeinen wrote:
> > On 17/03/2022 11:44, David Plowman wrote:
> >> Hi everyone
> >>
> >> Thanks for the update!
> >>
> >> On Mon, 14 Mar 2022 at 15:46, Tomi Valkeinen
> >> <tomi.valkeinen at ideasonboard.com> wrote:
> >>>
> >>> Hi,
> >>>
> >>> This is v5 of the series. The changes to v4:
> >>>
> >>> - Changed to pybind11 'smart_holders' branch which allows us to drop the
> >>>    HACK for Camera public destructor
> >>> - Changed Request.set_control() so that we can drop the HACK for
> >>>    exposing Camera from Request
> >>> - Moved Python enum defs to a separate file for clarity
> >>> - "Forward" declare Python classes to fix docstring issues.
> >>>
> >>> The set_control change breaks the current users of that function.
> >>> Previously you could do this:
> >>>
> >>> req.set_control("Brightness", 1)
> >>>
> >>> Now you need to do:
> >>>
> >>> cid = camera.find_control("Brightness")
> >>> req.set_control(cid, 1)
> >>>
> >>
> >> I see the need for this, and I guess it's fine - obviously we'll hide
> >> that under our Picamera2 API as we wouldn't want our users to have to
> >> do that!
>
> I think the core question is whether a Request is tied to a Camera. I
> thought it is, as it is created from the Camera. And if that's the case,
> I don't see why the Camera cannot be exposed from the Request.
>
> Maybe Laurent can explain the reasons why not to expose it.

I wouldn't want to worry too much about this! I'll just hide it under
the Picamera2 API and that's fine...

David

>
> > Yes, it's not very nice. Then again, having to do a string search every
> > time we call set_control is not good either, at least if we can avoid it
> > (and we can, as above). But I agree that in a higher level API things
> > should be easy. Of course, it would be nice to have both versions even
> > in this low level API, but... if Request doesn't expose camera, I don't
> > think we can do it in a simple way.
>
> Note that there are multiple ways to approach this. E.g.:
>
> req.set_control(camera.controls["Brightness"], 1)
>
> or:
>
> req.set_control(camera.controls.Brightness, 1)
>
> or even (although this could perhaps conflict too easily):
>
> req.set_control(camera.Brightness, 1)
>
> Or we could go the other way:
>
> camera.set_control(req, "Brightness", 1)
>
> or:
>
> camera.controls.Brightness.set(req, 1)
>
>   Tomi


More information about the libcamera-devel mailing list