[libcamera-devel,05/10] android: Move buffer mapping to CameraStream
diff mbox series

Message ID 20210301150111.61791-6-jacopo@jmondi.org
State Superseded
Headers show
Series
  • Support memory backends
Related show

Commit Message

Jacopo Mondi March 1, 2021, 3:01 p.m. UTC
The destination buffer for the post-processing component is
currently first mapped in the CameraDevice class and then passed
to CameraStream which simply calls the post-processor interface.

Move the mapping to CameraStream::process() to tie the buffer
mapping to the lifetime of the CameraBuffer instance.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
---
 src/android/camera_device.cpp | 15 ++-------------
 src/android/camera_device.h   |  1 -
 src/android/camera_stream.cpp | 16 +++++++++++++---
 src/android/camera_stream.h   |  2 +-
 4 files changed, 16 insertions(+), 18 deletions(-)

Comments

Laurent Pinchart March 1, 2021, 11:12 p.m. UTC | #1
Hi Jacopo,

Thank you for the patch.

On Mon, Mar 01, 2021 at 04:01:06PM +0100, Jacopo Mondi wrote:
> The destination buffer for the post-processing component is
> currently first mapped in the CameraDevice class and then passed
> to CameraStream which simply calls the post-processor interface.
> 
> Move the mapping to CameraStream::process() to tie the buffer
> mapping to the lifetime of the CameraBuffer instance.
> 
> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  src/android/camera_device.cpp | 15 ++-------------
>  src/android/camera_device.h   |  1 -
>  src/android/camera_stream.cpp | 16 +++++++++++++---
>  src/android/camera_stream.h   |  2 +-
>  4 files changed, 16 insertions(+), 18 deletions(-)
> 
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 1c3b0f56ed28..ae01c362559e 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -1857,19 +1857,8 @@ void CameraDevice::requestComplete(Request *request)
>  			continue;
>  		}
>  
> -		/*
> -		 * \todo Buffer mapping and compression should be moved to a
> -		 * separate thread.
> -		 */
> -
> -		CameraBuffer dest(*descriptor->buffers_[i].buffer,
> -				  PROT_READ | PROT_WRITE);
> -		if (!dest.isValid()) {
> -			LOG(HAL, Error) << "Failed to map android blob buffer";
> -			continue;
> -		}
> -
> -		int ret = cameraStream->process(*src, &dest,
> +		int ret = cameraStream->process(*src,
> +						*descriptor->buffers_[i].buffer,
>  						descriptor->settings_,
>  						resultMetadata.get());
>  		if (ret) {
> diff --git a/src/android/camera_device.h b/src/android/camera_device.h
> index e6c192c2100b..4905958e63c6 100644
> --- a/src/android/camera_device.h
> +++ b/src/android/camera_device.h
> @@ -24,7 +24,6 @@
>  #include "libcamera/internal/log.h"
>  #include "libcamera/internal/message.h"
>  
> -#include "camera_buffer.h"
>  #include "camera_metadata.h"
>  #include "camera_stream.h"
>  #include "camera_worker.h"
> diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
> index 611ec0d1c42e..b2f03b505199 100644
> --- a/src/android/camera_stream.cpp
> +++ b/src/android/camera_stream.cpp
> @@ -7,6 +7,7 @@
>  
>  #include "camera_stream.h"
>  
> +#include "camera_buffer.h"
>  #include "camera_device.h"
>  #include "camera_metadata.h"
>  #include "jpeg/post_processor_jpeg.h"
> @@ -96,15 +97,24 @@ int CameraStream::configure()
>  }
>  
>  int CameraStream::process(const libcamera::FrameBuffer &source,
> -			  libcamera::MappedBuffer *destination,
> +			  buffer_handle_t camera3Dest,
>  			  const CameraMetadata &requestMetadata,
>  			  CameraMetadata *resultMetadata)
>  {
>  	if (!postProcessor_)
>  		return 0;
>  
> -	return postProcessor_->process(source, destination,
> -				       requestMetadata, resultMetadata);
> +	/*
> +	 * \todo Buffer mapping and processing should be moved to a
> +	 * separate thread.
> +	 */
> +	CameraBuffer dest(camera3Dest, PROT_READ | PROT_WRITE);
> +	if (!dest.isValid()) {
> +		LOG(HAL, Error) << "Failed to map android blob buffer";
> +		return -EINVAL;
> +	}
> +
> +	return postProcessor_->process(source, &dest, requestMetadata, resultMetadata);
>  }
>  
>  FrameBuffer *CameraStream::getBuffer()
> diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
> index fc242b2aadf1..f68fdd3a17cd 100644
> --- a/src/android/camera_stream.h
> +++ b/src/android/camera_stream.h
> @@ -120,7 +120,7 @@ public:
>  
>  	int configure();
>  	int process(const libcamera::FrameBuffer &source,
> -		    libcamera::MappedBuffer *destination,
> +		    buffer_handle_t camera3Dest,
>  		    const CameraMetadata &requestMetadata,
>  		    CameraMetadata *resultMetadata);
>  	libcamera::FrameBuffer *getBuffer();

Patch
diff mbox series

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 1c3b0f56ed28..ae01c362559e 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1857,19 +1857,8 @@  void CameraDevice::requestComplete(Request *request)
 			continue;
 		}
 
-		/*
-		 * \todo Buffer mapping and compression should be moved to a
-		 * separate thread.
-		 */
-
-		CameraBuffer dest(*descriptor->buffers_[i].buffer,
-				  PROT_READ | PROT_WRITE);
-		if (!dest.isValid()) {
-			LOG(HAL, Error) << "Failed to map android blob buffer";
-			continue;
-		}
-
-		int ret = cameraStream->process(*src, &dest,
+		int ret = cameraStream->process(*src,
+						*descriptor->buffers_[i].buffer,
 						descriptor->settings_,
 						resultMetadata.get());
 		if (ret) {
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index e6c192c2100b..4905958e63c6 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -24,7 +24,6 @@ 
 #include "libcamera/internal/log.h"
 #include "libcamera/internal/message.h"
 
-#include "camera_buffer.h"
 #include "camera_metadata.h"
 #include "camera_stream.h"
 #include "camera_worker.h"
diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
index 611ec0d1c42e..b2f03b505199 100644
--- a/src/android/camera_stream.cpp
+++ b/src/android/camera_stream.cpp
@@ -7,6 +7,7 @@ 
 
 #include "camera_stream.h"
 
+#include "camera_buffer.h"
 #include "camera_device.h"
 #include "camera_metadata.h"
 #include "jpeg/post_processor_jpeg.h"
@@ -96,15 +97,24 @@  int CameraStream::configure()
 }
 
 int CameraStream::process(const libcamera::FrameBuffer &source,
-			  libcamera::MappedBuffer *destination,
+			  buffer_handle_t camera3Dest,
 			  const CameraMetadata &requestMetadata,
 			  CameraMetadata *resultMetadata)
 {
 	if (!postProcessor_)
 		return 0;
 
-	return postProcessor_->process(source, destination,
-				       requestMetadata, resultMetadata);
+	/*
+	 * \todo Buffer mapping and processing should be moved to a
+	 * separate thread.
+	 */
+	CameraBuffer dest(camera3Dest, PROT_READ | PROT_WRITE);
+	if (!dest.isValid()) {
+		LOG(HAL, Error) << "Failed to map android blob buffer";
+		return -EINVAL;
+	}
+
+	return postProcessor_->process(source, &dest, requestMetadata, resultMetadata);
 }
 
 FrameBuffer *CameraStream::getBuffer()
diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
index fc242b2aadf1..f68fdd3a17cd 100644
--- a/src/android/camera_stream.h
+++ b/src/android/camera_stream.h
@@ -120,7 +120,7 @@  public:
 
 	int configure();
 	int process(const libcamera::FrameBuffer &source,
-		    libcamera::MappedBuffer *destination,
+		    buffer_handle_t camera3Dest,
 		    const CameraMetadata &requestMetadata,
 		    CameraMetadata *resultMetadata);
 	libcamera::FrameBuffer *getBuffer();