mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-14 07:59:44 +03:00
android: camera_device: Use controls::SensorTimestamp
Use the controls::SensorTimestamp value to populate ANDROID_SENSOR_TIMESTAMP result metadata. The Camera is assumed to provide the control in the Request metadata. Reviewed-by: Hirokazu Honda <hiroh@chromium.org> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
b3a504e965
commit
d66fd818ec
2 changed files with 9 additions and 15 deletions
|
@ -2025,7 +2025,6 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
|
||||||
|
|
||||||
void CameraDevice::requestComplete(Request *request)
|
void CameraDevice::requestComplete(Request *request)
|
||||||
{
|
{
|
||||||
const Request::BufferMap &buffers = request->buffers();
|
|
||||||
camera3_buffer_status status = CAMERA3_BUFFER_STATUS_OK;
|
camera3_buffer_status status = CAMERA3_BUFFER_STATUS_OK;
|
||||||
std::unique_ptr<CameraMetadata> resultMetadata;
|
std::unique_ptr<CameraMetadata> resultMetadata;
|
||||||
|
|
||||||
|
@ -2053,14 +2052,7 @@ void CameraDevice::requestComplete(Request *request)
|
||||||
LOG(HAL, Debug) << "Request " << request->cookie() << " completed with "
|
LOG(HAL, Debug) << "Request " << request->cookie() << " completed with "
|
||||||
<< descriptor.buffers_.size() << " streams";
|
<< descriptor.buffers_.size() << " streams";
|
||||||
|
|
||||||
/*
|
resultMetadata = getResultMetadata(descriptor);
|
||||||
* \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);
|
|
||||||
|
|
||||||
/* Handle any JPEG compression. */
|
/* Handle any JPEG compression. */
|
||||||
for (camera3_stream_buffer_t &buffer : descriptor.buffers_) {
|
for (camera3_stream_buffer_t &buffer : descriptor.buffers_) {
|
||||||
|
@ -2105,6 +2097,9 @@ void CameraDevice::requestComplete(Request *request)
|
||||||
captureResult.output_buffers = descriptor.buffers_.data();
|
captureResult.output_buffers = descriptor.buffers_.data();
|
||||||
|
|
||||||
if (status == CAMERA3_BUFFER_STATUS_OK) {
|
if (status == CAMERA3_BUFFER_STATUS_OK) {
|
||||||
|
uint64_t timestamp =
|
||||||
|
static_cast<uint64_t>(request->metadata()
|
||||||
|
.get(controls::SensorTimestamp));
|
||||||
notifyShutter(descriptor.frameNumber_, timestamp);
|
notifyShutter(descriptor.frameNumber_, timestamp);
|
||||||
|
|
||||||
captureResult.partial_result = 1;
|
captureResult.partial_result = 1;
|
||||||
|
@ -2164,8 +2159,7 @@ void CameraDevice::notifyError(uint32_t frameNumber, camera3_stream_t *stream)
|
||||||
* Produce a set of fixed result metadata.
|
* Produce a set of fixed result metadata.
|
||||||
*/
|
*/
|
||||||
std::unique_ptr<CameraMetadata>
|
std::unique_ptr<CameraMetadata>
|
||||||
CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor,
|
CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor) const
|
||||||
int64_t timestamp) const
|
|
||||||
{
|
{
|
||||||
const ControlList &metadata = descriptor.request_->metadata();
|
const ControlList &metadata = descriptor.request_->metadata();
|
||||||
const CameraMetadata &settings = descriptor.settings_;
|
const CameraMetadata &settings = descriptor.settings_;
|
||||||
|
@ -2291,8 +2285,6 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor,
|
||||||
resultMetadata->addEntry(ANDROID_SENSOR_TEST_PATTERN_MODE,
|
resultMetadata->addEntry(ANDROID_SENSOR_TEST_PATTERN_MODE,
|
||||||
&value32, 1);
|
&value32, 1);
|
||||||
|
|
||||||
resultMetadata->addEntry(ANDROID_SENSOR_TIMESTAMP, ×tamp, 1);
|
|
||||||
|
|
||||||
value = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;
|
value = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;
|
||||||
resultMetadata->addEntry(ANDROID_STATISTICS_FACE_DETECT_MODE,
|
resultMetadata->addEntry(ANDROID_STATISTICS_FACE_DETECT_MODE,
|
||||||
&value, 1);
|
&value, 1);
|
||||||
|
@ -2318,6 +2310,9 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor,
|
||||||
&rolling_shutter_skew, 1);
|
&rolling_shutter_skew, 1);
|
||||||
|
|
||||||
/* Add metadata tags reported by libcamera. */
|
/* Add metadata tags reported by libcamera. */
|
||||||
|
const int64_t timestamp = metadata.get(controls::SensorTimestamp);
|
||||||
|
resultMetadata->addEntry(ANDROID_SENSOR_TIMESTAMP, ×tamp, 1);
|
||||||
|
|
||||||
if (metadata.contains(controls::draft::PipelineDepth)) {
|
if (metadata.contains(controls::draft::PipelineDepth)) {
|
||||||
uint8_t pipeline_depth =
|
uint8_t pipeline_depth =
|
||||||
metadata.get<int32_t>(controls::draft::PipelineDepth);
|
metadata.get<int32_t>(controls::draft::PipelineDepth);
|
||||||
|
|
|
@ -107,8 +107,7 @@ private:
|
||||||
libcamera::PixelFormat toPixelFormat(int format) const;
|
libcamera::PixelFormat toPixelFormat(int format) const;
|
||||||
int processControls(Camera3RequestDescriptor *descriptor);
|
int processControls(Camera3RequestDescriptor *descriptor);
|
||||||
std::unique_ptr<CameraMetadata> getResultMetadata(
|
std::unique_ptr<CameraMetadata> getResultMetadata(
|
||||||
const Camera3RequestDescriptor &descriptor,
|
const Camera3RequestDescriptor &descriptor) const;
|
||||||
int64_t timestamp) const;
|
|
||||||
|
|
||||||
unsigned int id_;
|
unsigned int id_;
|
||||||
camera3_device_t camera3Device_;
|
camera3_device_t camera3Device_;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue