[libcamera-devel] [PATCH v3 08/10] android: camera_stream: Drop return value for process()
Umang Jain
umang.jain at ideasonboard.com
Mon Sep 20 19:37:50 CEST 2021
CameraStream::process() is invoked by CameraDevice::requestComplete()
in case any post-processing is required for the camera stream. The
failure or success is checked via the value returned by
CameraStream::process().
Now that the post-processor notifies about the post-processing
completion operation and sets the ProcessStatus on the
Camera3RequestDescriptor passed to it, we can drop the return value of
CameraStream::process() in favour of reading the process status set on
the descriptor in the PostProcessor::processComplete's slot.
Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
---
src/android/camera_device.cpp | 26 +++++++++++++-----------
src/android/camera_stream.cpp | 12 +++++------
src/android/camera_stream.h | 6 +++---
src/android/jpeg/post_processor_jpeg.cpp | 12 +++++------
src/android/jpeg/post_processor_jpeg.h | 6 +++---
src/android/post_processor.h | 6 +++---
src/android/yuv/post_processor_yuv.cpp | 14 ++++++-------
src/android/yuv/post_processor_yuv.h | 6 +++---
8 files changed, 43 insertions(+), 45 deletions(-)
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index e2de4012..4658e881 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1158,7 +1158,7 @@ void CameraDevice::requestComplete(Request *request)
descriptor->status_ = Camera3RequestDescriptor::ProcessStatus::Processing;
- int ret = cameraStream->process(src, *buffer.buffer, descriptor);
+ cameraStream->process(src, *buffer.buffer, descriptor);
/*
* Return the FrameBuffer to the CameraStream now that we're
@@ -1166,12 +1166,6 @@ void CameraDevice::requestComplete(Request *request)
*/
if (cameraStream->type() == CameraStream::Type::Internal)
cameraStream->putBuffer(src);
-
- if (ret) {
- buffer.status = CAMERA3_BUFFER_STATUS_ERROR;
- notifyError(descriptor->frameNumber_, buffer.stream,
- CAMERA3_MSG_ERROR_BUFFER);
- }
}
captureResult.result = descriptor->resultMetadata_->get();
@@ -1182,12 +1176,20 @@ void CameraDevice::requestComplete(Request *request)
void CameraDevice::streamProcessingComplete([[maybe_unused]] CameraStream *cameraStream,
- [[maybe_unused]] Camera3RequestDescriptor *request)
+ Camera3RequestDescriptor *request)
{
- /*
- * \todo Stream processing is completed hence, check for errors and
- * if any, mark the corresponding buffer with CAMERA3_BUFFER_STATUS_ERROR.
- */
+ if (request->status_ == Camera3RequestDescriptor::ProcessStatus::Error) {
+ for (camera3_stream_buffer_t &buffer : request->buffers_) {
+ CameraStream *cs = static_cast<CameraStream *>(buffer.stream->priv);
+
+ if (cs->camera3Stream().format != HAL_PIXEL_FORMAT_BLOB)
+ continue;
+
+ buffer.status = CAMERA3_BUFFER_STATUS_ERROR;
+ notifyError(request->frameNumber_, buffer.stream,
+ CAMERA3_MSG_ERROR_BUFFER);
+ }
+ }
}
std::string CameraDevice::logPrefix() const
diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
index 70471959..c18c7041 100644
--- a/src/android/camera_stream.cpp
+++ b/src/android/camera_stream.cpp
@@ -101,14 +101,14 @@ int CameraStream::configure()
return 0;
}
-int CameraStream::process(const FrameBuffer *source,
- buffer_handle_t camera3Dest,
- Camera3RequestDescriptor *request)
+void CameraStream::process(const FrameBuffer *source,
+ buffer_handle_t camera3Dest,
+ Camera3RequestDescriptor *request)
{
if (!postProcessor_) {
request->status_ = Camera3RequestDescriptor::ProcessStatus::Error;
handleProcessComplete(request);
- return 0;
+ return;
}
/*
@@ -122,10 +122,10 @@ int CameraStream::process(const FrameBuffer *source,
LOG(HAL, Error) << "Failed to map android blob buffer";
request->status_ = Camera3RequestDescriptor::ProcessStatus::Error;
handleProcessComplete(request);
- return -EINVAL;
+ return;
}
- return postProcessor_->process(source, &dest, request);
+ postProcessor_->process(source, &dest, request);
}
void CameraStream::handleProcessComplete(Camera3RequestDescriptor *request)
diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
index f8ad6245..d4ec5c25 100644
--- a/src/android/camera_stream.h
+++ b/src/android/camera_stream.h
@@ -120,9 +120,9 @@ public:
libcamera::Stream *stream() const;
int configure();
- int process(const libcamera::FrameBuffer *source,
- buffer_handle_t camera3Dest,
- Camera3RequestDescriptor *request);
+ void process(const libcamera::FrameBuffer *source,
+ buffer_handle_t camera3Dest,
+ Camera3RequestDescriptor *request);
libcamera::FrameBuffer *getBuffer();
void putBuffer(libcamera::FrameBuffer *buffer);
diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp
index 87252acd..19eb7983 100644
--- a/src/android/jpeg/post_processor_jpeg.cpp
+++ b/src/android/jpeg/post_processor_jpeg.cpp
@@ -97,14 +97,14 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer *source,
}
}
-int PostProcessorJpeg::process(const FrameBuffer *source,
- CameraBuffer *destination,
- Camera3RequestDescriptor *request)
+void PostProcessorJpeg::process(const FrameBuffer *source,
+ CameraBuffer *destination,
+ Camera3RequestDescriptor *request)
{
if (!encoder_) {
request->status_ = Camera3RequestDescriptor::ProcessStatus::Error;
processComplete.emit(request);
- return 0;
+ return;
}
ASSERT(destination->numPlanes() == 1);
@@ -202,7 +202,7 @@ int PostProcessorJpeg::process(const FrameBuffer *source,
LOG(JPEG, Error) << "Failed to encode stream image";
request->status_ = Camera3RequestDescriptor::ProcessStatus::Error;
processComplete.emit(request);
- return jpeg_size;
+ return;
}
/* Fill in the JPEG blob header. */
@@ -218,6 +218,4 @@ int PostProcessorJpeg::process(const FrameBuffer *source,
request->status_ = Camera3RequestDescriptor::ProcessStatus::Success;
processComplete.emit(request);
-
- return 0;
}
diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h
index d49c8d2b..e9938919 100644
--- a/src/android/jpeg/post_processor_jpeg.h
+++ b/src/android/jpeg/post_processor_jpeg.h
@@ -22,9 +22,9 @@ public:
int configure(const libcamera::StreamConfiguration &incfg,
const libcamera::StreamConfiguration &outcfg) override;
- int process(const libcamera::FrameBuffer *source,
- CameraBuffer *destination,
- Camera3RequestDescriptor *request) override;
+ void process(const libcamera::FrameBuffer *source,
+ CameraBuffer *destination,
+ Camera3RequestDescriptor *request) override;
private:
void generateThumbnail(const libcamera::FrameBuffer *source,
diff --git a/src/android/post_processor.h b/src/android/post_processor.h
index f639b237..48ddd8ac 100644
--- a/src/android/post_processor.h
+++ b/src/android/post_processor.h
@@ -25,9 +25,9 @@ public:
virtual int configure(const libcamera::StreamConfiguration &inCfg,
const libcamera::StreamConfiguration &outCfg) = 0;
- virtual int process(const libcamera::FrameBuffer *source,
- CameraBuffer *destination,
- Camera3RequestDescriptor *request) = 0;
+ virtual void process(const libcamera::FrameBuffer *source,
+ CameraBuffer *destination,
+ Camera3RequestDescriptor *request) = 0;
libcamera::Signal<Camera3RequestDescriptor *> processComplete;
};
diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp
index b144649a..09838aa5 100644
--- a/src/android/yuv/post_processor_yuv.cpp
+++ b/src/android/yuv/post_processor_yuv.cpp
@@ -51,14 +51,14 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg,
return 0;
}
-int PostProcessorYuv::process(const FrameBuffer *source,
- CameraBuffer *destination,
- Camera3RequestDescriptor *request)
+void PostProcessorYuv::process(const FrameBuffer *source,
+ CameraBuffer *destination,
+ Camera3RequestDescriptor *request)
{
if (!isValidBuffers(source, *destination)) {
request->status_ = Camera3RequestDescriptor::ProcessStatus::Error;
processComplete.emit(request);
- return -EINVAL;
+ return;
}
const MappedFrameBuffer sourceMapped(source, MappedFrameBuffer::MapFlag::Read);
@@ -66,7 +66,7 @@ int PostProcessorYuv::process(const FrameBuffer *source,
LOG(YUV, Error) << "Failed to mmap camera frame buffer";
request->status_ = Camera3RequestDescriptor::ProcessStatus::Error;
processComplete.emit(request);
- return -EINVAL;
+ return;
}
int ret = libyuv::NV12Scale(sourceMapped.planes()[0].data(),
@@ -85,13 +85,11 @@ int PostProcessorYuv::process(const FrameBuffer *source,
LOG(YUV, Error) << "Failed NV12 scaling: " << ret;
request->status_ = Camera3RequestDescriptor::ProcessStatus::Error;
processComplete.emit(request);
- return -EINVAL;
+ return;
}
request->status_ = Camera3RequestDescriptor::ProcessStatus::Success;
processComplete.emit(request);
-
- return 0;
}
bool PostProcessorYuv::isValidBuffers(const FrameBuffer *source,
diff --git a/src/android/yuv/post_processor_yuv.h b/src/android/yuv/post_processor_yuv.h
index eddd1086..32e5b60d 100644
--- a/src/android/yuv/post_processor_yuv.h
+++ b/src/android/yuv/post_processor_yuv.h
@@ -20,9 +20,9 @@ public:
int configure(const libcamera::StreamConfiguration &incfg,
const libcamera::StreamConfiguration &outcfg) override;
- int process(const libcamera::FrameBuffer *source,
- CameraBuffer *destination,
- Camera3RequestDescriptor *context) override;
+ void process(const libcamera::FrameBuffer *source,
+ CameraBuffer *destination,
+ Camera3RequestDescriptor *context) override;
private:
bool isValidBuffers(const libcamera::FrameBuffer *source,
--
2.31.1
More information about the libcamera-devel
mailing list