[libcamera-devel] [PATCH 1/3] libcamera: raspberrypi: dma_heaps: Add open/close

Kieran Bingham kieran.bingham at ideasonboard.com
Thu Aug 27 13:02:19 CEST 2020


Hi Jacopo,

I've got my eye on this class, and thinking we should try to move it to
core libcamera too, as I already want to be able to allocate
intermediate buffers for the Android HAL.

But that's separate, so improving the usage in this series seems like a
good thing to do:


On 27/08/2020 09:20, Jacopo Mondi wrote:
> The dma_heaps device is opened in the class constructor, making
> it impossible (or rather ugly) to catch errors before the allocator gets
> actually used.
> 
> Provide an open() and a close() method to allow users to catch errors
> earlier.
> 
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>

Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

> ---
>  .../pipeline/raspberrypi/dma_heaps.cpp        | 22 ++++++++++++++++---
>  .../pipeline/raspberrypi/dma_heaps.h          |  2 ++
>  2 files changed, 21 insertions(+), 3 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/raspberrypi/dma_heaps.cpp b/src/libcamera/pipeline/raspberrypi/dma_heaps.cpp
> index 6769c04640f1..739f05d3d4d8 100644
> --- a/src/libcamera/pipeline/raspberrypi/dma_heaps.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/dma_heaps.cpp
> @@ -32,20 +32,36 @@ LOG_DECLARE_CATEGORY(RPI)
>  namespace RPi {
>  
>  DmaHeap::DmaHeap()
> +	: dmaHeapHandle_(-1)
> +{
> +}
> +
> +DmaHeap::~DmaHeap()
> +{
> +	close();
> +}
> +
> +int DmaHeap::open()
>  {
>  	dmaHeapHandle_ = ::open(DMA_HEAP_CMA_NAME, O_RDWR, 0);
>  	if (dmaHeapHandle_ == -1) {
>  		dmaHeapHandle_ = ::open(DMA_HEAP_CMA_ALT_NAME, O_RDWR, 0);
>  		if (dmaHeapHandle_ == -1) {
>  			LOG(RPI, Error) << "Could not open dmaHeap device";
> +			return dmaHeapHandle_;
>  		}
>  	}
> +
> +	return 0;
>  }
>  
> -DmaHeap::~DmaHeap()
> +void DmaHeap::close()
>  {
> -	if (dmaHeapHandle_)
> -		::close(dmaHeapHandle_);
> +	if (dmaHeapHandle_ < 0)
> +		return;
> +
> +	::close(dmaHeapHandle_);
> +	dmaHeapHandle_ = -1;
>  }
>  
>  FileDescriptor DmaHeap::alloc(const char *name, std::size_t size)
> diff --git a/src/libcamera/pipeline/raspberrypi/dma_heaps.h b/src/libcamera/pipeline/raspberrypi/dma_heaps.h
> index ae6be1135f17..3e17993097ef 100644
> --- a/src/libcamera/pipeline/raspberrypi/dma_heaps.h
> +++ b/src/libcamera/pipeline/raspberrypi/dma_heaps.h
> @@ -18,6 +18,8 @@ class DmaHeap
>  public:
>  	DmaHeap();
>  	~DmaHeap();
> +	int open();
> +	void close();
>  	FileDescriptor alloc(const char *name, std::size_t size);
>  
>  private:
> 

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list