[libcamera-devel] [PATCH v9 7/8] android: jpeg: Pass StreamBuffer to Encoder::encoder
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Jan 16 01:28:07 CET 2023
From: Harvey Yang <chenghaoyang at chromium.org>
To prepare for support of the JEA encoder in a following commit, which
will need to access the buffer_handle_t of the destination buffer, pass
the StreamBuffer to the Encoder::encoder() function. As the StreamBuffer
contains the source FrameBuffer and the destination Span, drop them from
the function arguments and access them directly from the StreamBuffer.
Signed-off-by: Harvey Yang <chenghaoyang at chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Han-Lin Chen <hanlinchen at chromium.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
src/android/jpeg/encoder.h | 5 +++--
src/android/jpeg/encoder_libjpeg.cpp | 15 ++++++++++-----
src/android/jpeg/encoder_libjpeg.h | 3 +--
src/android/jpeg/post_processor_jpeg.cpp | 3 +--
4 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/src/android/jpeg/encoder.h b/src/android/jpeg/encoder.h
index d15f22e67830..d73cafba099d 100644
--- a/src/android/jpeg/encoder.h
+++ b/src/android/jpeg/encoder.h
@@ -12,14 +12,15 @@
#include <libcamera/framebuffer.h>
#include <libcamera/stream.h>
+#include "../camera_request.h"
+
class Encoder
{
public:
virtual ~Encoder() = default;
virtual int configure(const libcamera::StreamConfiguration &cfg) = 0;
- virtual int encode(const libcamera::FrameBuffer &source,
- libcamera::Span<uint8_t> destination,
+ virtual int encode(Camera3RequestDescriptor::StreamBuffer *buffer,
libcamera::Span<const uint8_t> exifData,
unsigned int quality) = 0;
virtual int generateThumbnail(const libcamera::FrameBuffer &source,
diff --git a/src/android/jpeg/encoder_libjpeg.cpp b/src/android/jpeg/encoder_libjpeg.cpp
index 8f4df7899dfd..c2fdc37770e5 100644
--- a/src/android/jpeg/encoder_libjpeg.cpp
+++ b/src/android/jpeg/encoder_libjpeg.cpp
@@ -24,6 +24,8 @@
#include "libcamera/internal/formats.h"
#include "libcamera/internal/mapped_framebuffer.h"
+#include "../camera_buffer.h"
+
using namespace libcamera;
LOG_DECLARE_CATEGORY(JPEG)
@@ -76,17 +78,20 @@ int EncoderLibJpeg::configure(const StreamConfiguration &cfg)
return captureEncoder_.configure(cfg);
}
-int EncoderLibJpeg::encode(const FrameBuffer &source, Span<uint8_t> dest,
- Span<const uint8_t> exifData, unsigned int quality)
+int EncoderLibJpeg::encode(Camera3RequestDescriptor::StreamBuffer *buffer,
+ libcamera::Span<const uint8_t> exifData,
+ unsigned int quality)
{
- MappedFrameBuffer frame(&source, MappedFrameBuffer::MapFlag::Read);
+ MappedFrameBuffer frame(buffer->srcBuffer,
+ MappedFrameBuffer::MapFlag::Read);
if (!frame.isValid()) {
- LOG(JPEG, Error) << "Failed to map FrameBuffer: "
+ LOG(JPEG, Error) << "Failed to map FrameBuffer : "
<< strerror(frame.error());
return frame.error();
}
- return captureEncoder_.encode(frame.planes(), dest, exifData, quality);
+ return captureEncoder_.encode(frame.planes(), buffer->dstBuffer->plane(0),
+ exifData, quality);
}
int EncoderLibJpeg::generateThumbnail(const libcamera::FrameBuffer &source,
diff --git a/src/android/jpeg/encoder_libjpeg.h b/src/android/jpeg/encoder_libjpeg.h
index 9cff4f1b42e3..d770595a495c 100644
--- a/src/android/jpeg/encoder_libjpeg.h
+++ b/src/android/jpeg/encoder_libjpeg.h
@@ -24,8 +24,7 @@ public:
~EncoderLibJpeg();
int configure(const libcamera::StreamConfiguration &cfg) override;
- int encode(const libcamera::FrameBuffer &source,
- libcamera::Span<uint8_t> destination,
+ int encode(Camera3RequestDescriptor::StreamBuffer *buffer,
libcamera::Span<const uint8_t> exifData,
unsigned int quality) override;
int generateThumbnail(const libcamera::FrameBuffer &source,
diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp
index 5df89383e1af..2a22b4a88f4a 100644
--- a/src/android/jpeg/post_processor_jpeg.cpp
+++ b/src/android/jpeg/post_processor_jpeg.cpp
@@ -146,8 +146,7 @@ void PostProcessorJpeg::process(Camera3RequestDescriptor::StreamBuffer *streamBu
const uint8_t quality = ret ? *entry.data.u8 : 95;
resultMetadata->addEntry(ANDROID_JPEG_QUALITY, quality);
- int jpeg_size = encoder_->encode(source, destination->plane(0),
- exif.data(), quality);
+ int jpeg_size = encoder_->encode(streamBuffer, exif.data(), quality);
if (jpeg_size < 0) {
LOG(JPEG, Error) << "Failed to encode stream image";
processComplete.emit(streamBuffer, PostProcessor::Status::Error);
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list