[PATCH 3/5] pipeline_handler: Add acquireDevice() method to mirror existing releaseDevice()

Hans de Goede hdegoede at redhat.com
Tue Aug 27 16:25:00 CEST 2024


Hi,

On 8/25/24 2:49 AM, Laurent Pinchart wrote:

<snip>

>>> @@ -213,12 +215,35 @@ void PipelineHandler::release(Camera *camera)
>>>         --useCount_;
>>>  }
>>>
>>> +/**
>>> + * \brief Acquire resources associated with this camera
>>> + * \param[in] camera The camera for which to acquire resources
>>> + *
>>> + * Pipeline handlers may override this in order to get resources
>>> + * such as open /dev nodes are allocate buffers when a camera is
> 
> s at open /dev nodes at opening devices/
> s/are allocate/and allocating/

Ack, fixed for v2.

> As discussed previously, I think we need to improve the
> application-facing API to make resource and power management more
> explicit. Camera::acquire() was never meant for this purpose. I
> understand we need a short term solution to the power consumption issue
> for UVC cameras without an enormous amount of yak shaving

Ack, I have posted a RFC with the application-facing API changes we discussed
for this:

https://lists.libcamera.org/pipermail/libcamera-devel/2024-August/044384.html

> and I'm fine
> with this patch series as an interim measure, but I don't want to see
> acquireDevice() being used in random ways by pipeline handlers other
> than UVC before we address the more general problem. This should be
> documented here.

Ok I have added the following block to the docbook comment to address
this for v2:

 * This is used by the uvcvideo pipeline handler to delay opening /dev/video#
 * until the camera is acquired to avoid excess power consumption. The delayed
 * opening of /dev/video# is a special case because the kernel uvcvideo driver
 * powers on the USB device as soon as /dev/video# is opened. This behavior
 * must *not* be copied by other drivers.

>>> + * acquired.
> 
> Please reflow these paragraphs to 80 columns.

Ack, done for v2.

> 
>>> + *
>>> + * Note this is called once for every camera which is acquired,
> 
> s/which/that/
> 
>>> + * so if there are shared resources the pipeline handler must take
> 
> s/shared resources/resources shared by multiple cameras/
> 
>>> + * care to not release them until releaseDevice() has been called for
>>> + * all previously acquired cameras.
> 
> Doesn't this paragraph belong to releaseDevice() ?

that is a better place yes, I have moved it for v2.

Regards,

Hans



More information about the libcamera-devel mailing list