[libcamera-devel] [PATCH] android: CameraDevice: factorize generating a capture result
Hirokazu Honda
hiroh at chromium.org
Mon Apr 26 05:45:02 CEST 2021
This factorizes a code of generating camera3_capture_result. It
will be useful to report capture result in other places than
CameraDevice::reqeustComplete().
Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
---
I was going to implement
reportShutter() - createCaptureResult() + notifyShutter(), and
reportError() - createCaptureResult() + notifyError().
But reportError() can be called after reportShutter(). It is a
bit less efficient to create capture result twice in the case.
So I only factorize a code of generating a capture result.
---
src/android/camera_device.cpp | 29 ++++++++++++++++++++---------
src/android/camera_device.h | 3 +++
2 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index a71aee2f..ced8efcc 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -2094,15 +2094,8 @@ void CameraDevice::requestComplete(Request *request)
}
/* Prepare to call back the Android camera stack. */
- camera3_capture_result_t captureResult = {};
- captureResult.frame_number = descriptor.frameNumber_;
- captureResult.num_output_buffers = descriptor.buffers_.size();
- for (camera3_stream_buffer_t &buffer : descriptor.buffers_) {
- buffer.acquire_fence = -1;
- buffer.release_fence = -1;
- buffer.status = status;
- }
- captureResult.output_buffers = descriptor.buffers_.data();
+ camera3_capture_result_t captureResult =
+ createCaptureResult(descriptor, status);
if (status == CAMERA3_BUFFER_STATUS_OK) {
notifyShutter(descriptor.frameNumber_, timestamp);
@@ -2130,6 +2123,24 @@ std::string CameraDevice::logPrefix() const
return "'" + camera_->id() + "'";
}
+
+camera3_capture_result_t CameraDevice::createCaptureResult(
+ Camera3RequestDescriptor &descriptor,
+ camera3_buffer_status status) const
+{
+ camera3_capture_result_t captureResult = {};
+ captureResult.frame_number = descriptor.frameNumber_;
+ captureResult.num_output_buffers = descriptor.buffers_.size();
+ for (camera3_stream_buffer_t &buffer : descriptor.buffers_) {
+ buffer.acquire_fence = -1;
+ buffer.release_fence = -1;
+ buffer.status = status;
+ }
+ captureResult.output_buffers = descriptor.buffers_.data();
+
+ return captureResult;
+}
+
void CameraDevice::notifyShutter(uint32_t frameNumber, uint64_t timestamp)
{
camera3_notify_msg_t notify = {};
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index c63e8e21..a1abcead 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -100,6 +100,9 @@ private:
std::tuple<uint32_t, uint32_t> calculateStaticMetadataSize();
libcamera::FrameBuffer *createFrameBuffer(const buffer_handle_t camera3buffer);
+ camera3_capture_result_t createCaptureResult(
+ Camera3RequestDescriptor &descriptor,
+ camera3_buffer_status status) const;
void notifyShutter(uint32_t frameNumber, uint64_t timestamp);
void notifyError(uint32_t frameNumber, camera3_stream_t *stream);
std::unique_ptr<CameraMetadata> requestTemplatePreview();
--
2.31.1.498.g6c1eba8ee3d-goog
More information about the libcamera-devel
mailing list