[libcamera-devel] [PATCH v4 00/11] libcamerea: Add support for exclusive access to cameras between processes

Niklas Söderlund niklas.soderlund at ragnatech.se
Fri May 17 20:51:36 CEST 2019


I addressed Laurents comments and pushed this series.

On 2019-05-17 02:54:36 +0200, Niklas Söderlund wrote:
> Hi,
> 
> This series aims to solve mutably exclusive access to a  camera between
> two or more processes by the use of lockf(). In the process of adding
> support for this the MediaDevice implementation is cleaned up a bit and
> stricter call patterns are enforced. At the same time a small load is
> taken of pipeline handler implementations.
> 
> As a camera might share resources with other cameras from the same
> pipeline handler instance I have chosen to put the granularity of the
> lock at the media device level. When a camera is acquired by an
> applications all media devices the pipeline handler it belongs to have
> claimed are locked and becomes unavailable to other processes. Other
> process can still enumerate locked media devices and list all cameras
> they provide but they can't use any of the cameras who are backed by a
> locked media device.
> 
> Patches 1/11 -- 7/11 deals with tidying up and adding more restrictions
> to the MediaDevices and how they handled inside pipeline handlers. While
> patches 8/11 -- 11/11 adds the new locking scheme which depends on the
> new stricter handling of media devices.
> 
> * Changes since v3
> - Renamed media_device_basic.cpp to media_device_acquire.cpp.
> - Improved documentation.
> - Minor code improvements.
> 
> * Changes since v2
> - Moved cleanup from 2/11 into 1/11 hence dropping all tags from 1/11 as
>   it was a big move.
> - Iterate of MediaDevice references in 10/11.
> - Fixed spelling in commit messages.
> 
> * Changes since v1
> - Spelling in commit messages.
> - Explicitly prohibit nested locking inside the same libcamera instance,
>   thanks Kieran for spotting this!
> 
> Niklas Söderlund (11):
>   libcamera: Always check return value of MediaDevice::acquire()
>   libcamera: media_device: Open and close media device inside populate()
>   libcamera: media_device: Only read device information in populate()
>   libcamera: media_device: Handle media device fd in acquire() and
>     release()
>   test: media_device: Create a common MediaDeviceTest base class
>   test: media_device: Add test for acquire() and release()
>   libcamera: media_device: Make open() and close() private
>   libcamera: media_device: Add functions to lock device for other
>     processes
>   libcamera: pipeline_handler: Keep track of MediaDevice
>   libcamera: pipeline_handler: Add functions to lock a whole pipeline
>   libcamera: camera: Lock the pipeline handler in acquire()
> 
>  src/libcamera/camera.cpp                      |  16 +-
>  src/libcamera/device_enumerator.cpp           |   8 +-
>  src/libcamera/include/media_device.h          |  10 +-
>  src/libcamera/include/pipeline_handler.h      |   7 +
>  src/libcamera/media_device.cpp                | 243 +++++++++++-------
>  src/libcamera/pipeline/ipu3/ipu3.cpp          |  71 +----
>  src/libcamera/pipeline/rkisp1/rkisp1.cpp      |  58 ++---
>  src/libcamera/pipeline/uvcvideo.cpp           |  24 +-
>  src/libcamera/pipeline/vimc.cpp               |  19 +-
>  src/libcamera/pipeline_handler.cpp            |  68 +++++
>  test/media_device/media_device_acquire.cpp    |  33 +++
>  test/media_device/media_device_link_test.cpp  |  74 ++----
>  test/media_device/media_device_print_test.cpp |  17 --
>  test/media_device/media_device_test.cpp       |  36 +++
>  test/media_device/media_device_test.h         |  34 +++
>  test/media_device/meson.build                 |  10 +-
>  test/pipeline/ipu3/ipu3_pipeline_test.cpp     |   5 -
>  test/v4l2_device/v4l2_device_test.cpp         |   4 -
>  test/v4l2_subdevice/v4l2_subdevice_test.cpp   |  17 +-
>  19 files changed, 422 insertions(+), 332 deletions(-)
>  create mode 100644 test/media_device/media_device_acquire.cpp
>  create mode 100644 test/media_device/media_device_test.cpp
>  create mode 100644 test/media_device/media_device_test.h
> 
> -- 
> 2.21.0
> 

-- 
Regards,
Niklas Söderlund


More information about the libcamera-devel mailing list