@@ -1207,6 +1207,8 @@ void CameraDevice::requestComplete(Request *request)
resultMetadata = std::make_unique<CameraMetadata>(0, 0);
}
+ descriptor->resultMetadata_ = std::move(resultMetadata);
+
/* Handle post-processing. */
for (camera3_stream_buffer_t &buffer : descriptor->buffers_) {
CameraStream *cameraStream =
@@ -1224,9 +1226,8 @@ void CameraDevice::requestComplete(Request *request)
continue;
}
- int ret = cameraStream->process(*src, buffer,
- descriptor->settings_,
- resultMetadata.get());
+ int ret = cameraStream->process(*src, buffer, descriptor);
+
/*
* Return the FrameBuffer to the CameraStream now that we're
* done processing it.
@@ -1241,7 +1242,7 @@ void CameraDevice::requestComplete(Request *request)
}
}
- captureResult.result = resultMetadata->get();
+ captureResult.result = descriptor->resultMetadata_->get();
descriptor->status_ = Camera3RequestDescriptor::Status::Success;
sendCaptureResults();
}
@@ -55,6 +55,7 @@ struct Camera3RequestDescriptor {
std::vector<std::unique_ptr<libcamera::FrameBuffer>> frameBuffers_;
CameraMetadata settings_;
std::unique_ptr<CaptureRequest> request_;
+ std::unique_ptr<CameraMetadata> resultMetadata_;
camera3_capture_result_t captureResult_ = {};
Status status_ = Status::Pending;
@@ -144,8 +144,7 @@ int CameraStream::waitFence(int fence)
int CameraStream::process(const FrameBuffer &source,
camera3_stream_buffer_t &camera3Dest,
- const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata)
+ Camera3RequestDescriptor *request)
{
/* Handle waiting on fences on the destination buffer. */
int fence = camera3Dest.acquire_fence;
@@ -175,7 +174,7 @@ int CameraStream::process(const FrameBuffer &source,
return -EINVAL;
}
- return postProcessor_->process(source, &dest, requestMetadata, resultMetadata);
+ return postProcessor_->process(source, &dest, request);
}
FrameBuffer *CameraStream::getBuffer()
@@ -23,6 +23,8 @@ class CameraDevice;
class CameraMetadata;
class PostProcessor;
+struct Camera3RequestDescriptor;
+
class CameraStream
{
public:
@@ -120,8 +122,7 @@ public:
int configure();
int process(const libcamera::FrameBuffer &source,
camera3_stream_buffer_t &camera3Buffer,
- const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata);
+ Camera3RequestDescriptor *request);
libcamera::FrameBuffer *getBuffer();
void putBuffer(libcamera::FrameBuffer *buffer);
@@ -99,14 +99,15 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source,
int PostProcessorJpeg::process(const FrameBuffer &source,
CameraBuffer *destination,
- const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata)
+ Camera3RequestDescriptor *request)
{
if (!encoder_)
return 0;
ASSERT(destination->numPlanes() == 1);
+ const CameraMetadata &requestMetadata = request->settings_;
+ CameraMetadata *resultMetadata = request->resultMetadata_.get();
camera_metadata_ro_entry_t entry;
int ret;
@@ -24,8 +24,7 @@ public:
const libcamera::StreamConfiguration &outcfg) override;
int process(const libcamera::FrameBuffer &source,
CameraBuffer *destination,
- const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata) override;
+ Camera3RequestDescriptor *request) override;
private:
void generateThumbnail(const libcamera::FrameBuffer &source,
@@ -14,6 +14,8 @@
class CameraMetadata;
+struct Camera3RequestDescriptor;
+
class PostProcessor
{
public:
@@ -23,8 +25,7 @@ public:
const libcamera::StreamConfiguration &outCfg) = 0;
virtual int process(const libcamera::FrameBuffer &source,
CameraBuffer *destination,
- const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata) = 0;
+ Camera3RequestDescriptor *request) = 0;
};
#endif /* __ANDROID_POST_PROCESSOR_H__ */
@@ -51,8 +51,7 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg,
int PostProcessorYuv::process(const FrameBuffer &source,
CameraBuffer *destination,
- [[maybe_unused]] const CameraMetadata &requestMetadata,
- [[maybe_unused]] CameraMetadata *metadata)
+ [[maybe_unused]] Camera3RequestDescriptor *request)
{
if (!isValidBuffers(source, *destination))
return -EINVAL;
@@ -20,8 +20,7 @@ public:
const libcamera::StreamConfiguration &outcfg) override;
int process(const libcamera::FrameBuffer &source,
CameraBuffer *destination,
- const CameraMetadata &requestMetadata,
- CameraMetadata *metadata) override;
+ Camera3RequestDescriptor *request) override;
private:
bool isValidBuffers(const libcamera::FrameBuffer &source,