@@ -1308,22 +1308,8 @@ void CameraDevice::sendCaptureResults()
std::vector<camera3_stream_buffer_t> resultBuffers;
resultBuffers.reserve(descriptor->buffers_.size());
- for (auto &buffer : descriptor->buffers_) {
- camera3_buffer_status status = CAMERA3_BUFFER_STATUS_ERROR;
-
- if (buffer.status == Camera3RequestDescriptor::Status::Success)
- status = CAMERA3_BUFFER_STATUS_OK;
-
- /*
- * Pass the buffer fence back to the camera framework as
- * a release fence. This instructs the framework to wait
- * on the acquire fence in case we haven't done so
- * ourselves for any reason.
- */
- resultBuffers.push_back({ buffer.stream->camera3Stream(),
- buffer.camera3Buffer, status,
- -1, buffer.fence.release() });
- }
+ for (auto &buffer : descriptor->buffers_)
+ resultBuffers.push_back(buffer.prepareToReturn());
captureResult.num_output_buffers = resultBuffers.size();
captureResult.output_buffers = resultBuffers.data();
@@ -192,3 +192,23 @@ Camera3RequestDescriptor::StreamBuffer::StreamBuffer(StreamBuffer &&) = default;
Camera3RequestDescriptor::StreamBuffer &
Camera3RequestDescriptor::StreamBuffer::operator=(Camera3RequestDescriptor::StreamBuffer &&) = default;
+
+camera3_stream_buffer_t Camera3RequestDescriptor::StreamBuffer::prepareToReturn()
+{
+ /*
+ * Pass the buffer fence back to the camera framework as
+ * a release fence. This instructs the framework to wait
+ * on the acquire fence in case we haven't done so
+ * ourselves for any reason.
+ */
+
+ return {
+ .stream = stream->camera3Stream(),
+ .buffer = camera3Buffer,
+ .status = status == Camera3RequestDescriptor::Status::Success
+ ? CAMERA3_BUFFER_STATUS_OK
+ : CAMERA3_BUFFER_STATUS_ERROR,
+ .acquire_fence = -1,
+ .release_fence = fence.release(),
+ };
+}
@@ -43,6 +43,8 @@ public:
StreamBuffer(StreamBuffer &&);
StreamBuffer &operator=(StreamBuffer &&);
+ [[nodiscard]] camera3_stream_buffer_t prepareToReturn();
+
CameraStream *stream;
buffer_handle_t *camera3Buffer;
std::unique_ptr<HALFrameBuffer> frameBuffer;
Add a function to the `StreamBuffer` type that creates an appropriate `camera3_stream_buffer_t` for returning it to the camera framework. Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> --- src/android/camera_device.cpp | 18 ++---------------- src/android/camera_request.cpp | 20 ++++++++++++++++++++ src/android/camera_request.h | 2 ++ 3 files changed, 24 insertions(+), 16 deletions(-)