summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKieran Bingham <kieran.bingham@ideasonboard.com>2020-07-28 14:01:19 +0100
committerKieran Bingham <kieran.bingham@ideasonboard.com>2020-08-06 15:44:02 +0100
commitc09aee4ccb7043484047d060f7f8bc1e0192ea23 (patch)
tree1835a1127703a38bcfcd0c79a508cf8ead1208d8
parent9f07aebde85e1ec4a19beafbdd09ce26db5d7932 (diff)
android: camera_device: Generate ResultMetadata earlier
Generate the ResultMetadata before performing JPEG compression so that JPEG specific metadata can be added to the metadata when it has been processed. Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-rw-r--r--src/android/camera_device.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index e5cd0877..e78fecf4 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1234,6 +1234,8 @@ void CameraDevice::requestComplete(Request *request)
const std::map<Stream *, FrameBuffer *> &buffers = request->buffers();
camera3_buffer_status status = CAMERA3_BUFFER_STATUS_OK;
std::unique_ptr<CameraMetadata> resultMetadata;
+ Camera3RequestDescriptor *descriptor =
+ reinterpret_cast<Camera3RequestDescriptor *>(request->cookie());
if (request->status() != Request::RequestComplete) {
LOG(HAL, Error) << "Request not successfully completed: "
@@ -1241,9 +1243,17 @@ void CameraDevice::requestComplete(Request *request)
status = CAMERA3_BUFFER_STATUS_ERROR;
}
+ /*
+ * \todo The timestamp used for the metadata is currently always taken
+ * from the first buffer (which may be the first stream) in the Request.
+ * It might be appropriate to return a 'correct' (as determined by
+ * pipeline handlers) timestamp in the Request itself.
+ */
+ FrameBuffer *buffer = buffers.begin()->second;
+ resultMetadata = getResultMetadata(descriptor->frameNumber,
+ buffer->metadata().timestamp);
+
/* Prepare to call back the Android camera stack. */
- Camera3RequestDescriptor *descriptor =
- reinterpret_cast<Camera3RequestDescriptor *>(request->cookie());
camera3_capture_result_t captureResult = {};
captureResult.frame_number = descriptor->frameNumber;
@@ -1256,21 +1266,12 @@ void CameraDevice::requestComplete(Request *request)
captureResult.output_buffers =
const_cast<const camera3_stream_buffer_t *>(descriptor->buffers);
- /*
- * \todo The timestamp used for the metadata is currently always taken
- * from the first buffer (which may be the first stream) in the Request.
- * It might be appropriate to return a 'correct' (as determined by
- * pipeline handlers) timestamp in the Request itself.
- */
- FrameBuffer *buffer = buffers.begin()->second;
if (status == CAMERA3_BUFFER_STATUS_OK) {
notifyShutter(descriptor->frameNumber,
buffer->metadata().timestamp);
captureResult.partial_result = 1;
- resultMetadata = getResultMetadata(descriptor->frameNumber,
- buffer->metadata().timestamp);
captureResult.result = resultMetadata->get();
}