[libcamera-devel] [PATCH 3/7] android: camera_device: Copy camera3 buffers in descriptor
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Jan 21 22:35:50 CET 2021
Hi Jacopo,
Thank you for the patch.
On Thu, Jan 21, 2021 at 05:53:01PM +0100, Jacopo Mondi wrote:
> The camera3_stream_buffer_t instances part of a capture request contain
> information on the stream for which capture has been requested (size,
> format and fences) and an handle to the stream's memory buffers.
s/an handle/a handle/
> Those information are copied in the descriptor one at the time while
s/Those information are/This information is/
s/one/one piece/
> processing the camera3 streams to be re-used at request completion time.
>
> Simplyify the code by copying the stream information in the descriptor
> at construction time.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/android/camera_device.cpp | 27 ++++++++-------------------
> 1 file changed, 8 insertions(+), 19 deletions(-)
>
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index f10b572749eb..578fb2271a9e 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -299,8 +299,11 @@ CameraDevice::Camera3RequestDescriptor::Camera3RequestDescriptor(
> {
> frameNumber_ = camera3Request->frame_number;
>
> + /* Copy the camera3 request stream information for later access. */
> numBuffers_ = camera3Request->num_output_buffers;
> buffers_ = new camera3_stream_buffer_t[numBuffers_];
> + for (unsigned int i = 0; i < numBuffers_; ++i)
> + buffers_[i] = camera3Request->output_buffers[i];
>
> /*
> * FrameBuffer instances created by wrapping a camera3 provided dmabuf
> @@ -1672,13 +1675,6 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
> running_ = true;
> }
>
> - /*
> - * Queue a request for the Camera with the provided dmabuf file
> - * descriptors.
> - */
> - const camera3_stream_buffer_t *camera3Buffers =
> - camera3Request->output_buffers;
> -
> /*
> * Save the request descriptors for use at completion time.
> * The descriptor and the associated memory reserved here are freed
> @@ -1690,16 +1686,9 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
> LOG(HAL, Debug) << "Queueing Request to libcamera with "
> << descriptor->numBuffers_ << " HAL streams";
> for (unsigned int i = 0; i < descriptor->numBuffers_; ++i) {
> - camera3_stream *camera3Stream = camera3Buffers[i].stream;
> - CameraStream *cameraStream =
> - static_cast<CameraStream *>(camera3Buffers[i].stream->priv);
> -
> - /*
> - * Keep track of which stream the request belongs to and store
> - * the native buffer handles.
> - */
> - descriptor->buffers_[i].stream = camera3Buffers[i].stream;
> - descriptor->buffers_[i].buffer = camera3Buffers[i].buffer;
> + const camera3_stream_buffer_t *camera3Buffer = &descriptor->buffers_[i];
> + camera3_stream *camera3Stream = camera3Buffer->stream;
> + CameraStream *cameraStream = static_cast<CameraStream *>(camera3Stream->priv);
>
> std::stringstream ss;
> ss << i << " - (" << camera3Stream->width << "x"
> @@ -1729,7 +1718,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
> * associate it with the Camera3RequestDescriptor for
> * lifetime management only.
> */
> - buffer = createFrameBuffer(*camera3Buffers[i].buffer);
> + buffer = createFrameBuffer(*camera3Buffer->buffer);
> descriptor->frameBuffers_.emplace_back(buffer);
> LOG(HAL, Debug) << ss.str() << " (direct)";
> break;
> @@ -1754,7 +1743,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
> }
>
> descriptor->request_->addBuffer(cameraStream->stream(), buffer,
> - camera3Buffers[i].acquire_fence);
> + camera3Buffer->acquire_fence);
> }
>
> /*
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list