[libcamera-devel] [PATCH 13/13] android: camera_device: Use controls::SensorTimestamp
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Apr 21 00:00:38 CEST 2021
Hi Jacopo,
Thank you for the patch.
On Mon, Apr 19, 2021 at 03:14:33PM +0200, Jacopo Mondi wrote:
> Use the controls::SensorTimestamp value to populate
> ANDROID_SENSOR_TIMESTAMP result metadata.
>
> The Camera is assumed to provide the control in the Request metadata.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/android/camera_device.cpp | 19 ++++++-------------
> src/android/camera_device.h | 3 +--
> 2 files changed, 7 insertions(+), 15 deletions(-)
>
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 89044efa7ebe..3d1e4bc3bff5 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -2019,7 +2019,6 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
>
> void CameraDevice::requestComplete(Request *request)
> {
> - const Request::BufferMap &buffers = request->buffers();
> camera3_buffer_status status = CAMERA3_BUFFER_STATUS_OK;
> std::unique_ptr<CameraMetadata> resultMetadata;
> Camera3RequestDescriptor *descriptor =
> @@ -2034,14 +2033,7 @@ void CameraDevice::requestComplete(Request *request)
> LOG(HAL, Debug) << "Request " << request->cookie() << " completed with "
> << descriptor->buffers_.size() << " streams";
>
> - /*
> - * \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.
> - */
> - uint64_t timestamp = buffers.begin()->second->metadata().timestamp;
> - resultMetadata = getResultMetadata(*descriptor, timestamp);
> + resultMetadata = getResultMetadata(*descriptor);
>
> /* Handle any JPEG compression. */
> for (camera3_stream_buffer_t &buffer : descriptor->buffers_) {
> @@ -2086,6 +2078,7 @@ void CameraDevice::requestComplete(Request *request)
> captureResult.output_buffers = descriptor->buffers_.data();
>
> if (status == CAMERA3_BUFFER_STATUS_OK) {
> + int64_t timestamp = request->metadata().get(controls::SensorTimestamp);
> notifyShutter(descriptor->frameNumber_, timestamp);
>
> captureResult.partial_result = 1;
> @@ -2147,8 +2140,7 @@ void CameraDevice::notifyError(uint32_t frameNumber, camera3_stream_t *stream)
> * Produce a set of fixed result metadata.
> */
> std::unique_ptr<CameraMetadata>
> -CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor,
> - int64_t timestamp) const
> +CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor) const
> {
> const ControlList &metadata = descriptor.request_->metadata();
> const CameraMetadata &settings = descriptor.settings_;
> @@ -2274,8 +2266,6 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor,
> resultMetadata->addEntry(ANDROID_SENSOR_TEST_PATTERN_MODE,
> &value32, 1);
>
> - resultMetadata->addEntry(ANDROID_SENSOR_TIMESTAMP, ×tamp, 1);
> -
> value = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;
> resultMetadata->addEntry(ANDROID_STATISTICS_FACE_DETECT_MODE,
> &value, 1);
> @@ -2301,6 +2291,9 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor,
> &rolling_shutter_skew, 1);
>
> /* Add metadata tags reported by libcamera. */
> + int64_t timestamp = metadata.get(controls::SensorTimestamp);
> + resultMetadata->addEntry(ANDROID_SENSOR_TIMESTAMP, ×tamp, 1);
> +
> if (metadata.contains(controls::draft::PipelineDepth)) {
> uint8_t pipeline_depth =
> metadata.get<int32_t>(controls::draft::PipelineDepth);
> diff --git a/src/android/camera_device.h b/src/android/camera_device.h
> index 11bdfec8d587..73e5009ac274 100644
> --- a/src/android/camera_device.h
> +++ b/src/android/camera_device.h
> @@ -102,8 +102,7 @@ private:
> libcamera::PixelFormat toPixelFormat(int format) const;
> int processControls(Camera3RequestDescriptor *descriptor);
> std::unique_ptr<CameraMetadata> getResultMetadata(
> - const Camera3RequestDescriptor &descriptor,
> - int64_t timestamp) const;
> + const Camera3RequestDescriptor &descriptor) const;
>
> unsigned int id_;
> camera3_device_t camera3Device_;
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list