[libcamera-devel] [PATCH 2/3] android: jpeg: Pass a Exif object while encoding
Umang Jain
email at uajain.com
Mon Aug 24 22:46:54 CEST 2020
Create a Exif object when the jpeg encoder is about to start
encoding the stream in CameraDevice::requestComplete(). This is
done so that the CameraDevice's metadata (like Orientation) can
be populated inside the Exif object and passed on to the encoder
(which will populate FrameBuffer associated metadata).
Signed-off-by: Umang Jain <email at uajain.com>
---
src/android/camera_device.cpp | 4 +++-
src/android/jpeg/encoder.h | 5 ++++-
src/android/jpeg/encoder_libjpeg.cpp | 3 ++-
src/android/jpeg/encoder_libjpeg.h | 3 ++-
4 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index de6f86f..bc5690e 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1434,7 +1434,9 @@ void CameraDevice::requestComplete(Request *request)
continue;
}
- int jpeg_size = encoder->encode(buffer, mapped.maps()[0]);
+ Exif exif;
+
+ int jpeg_size = encoder->encode(buffer, mapped.maps()[0], &exif);
if (jpeg_size < 0) {
LOG(HAL, Error) << "Failed to encode stream image";
status = CAMERA3_BUFFER_STATUS_ERROR;
diff --git a/src/android/jpeg/encoder.h b/src/android/jpeg/encoder.h
index f9eb88e..806cf4f 100644
--- a/src/android/jpeg/encoder.h
+++ b/src/android/jpeg/encoder.h
@@ -7,6 +7,8 @@
#ifndef __ANDROID_JPEG_ENCODER_H__
#define __ANDROID_JPEG_ENCODER_H__
+#include "exif.h"
+
#include <libcamera/buffer.h>
#include <libcamera/span.h>
#include <libcamera/stream.h>
@@ -18,7 +20,8 @@ public:
virtual int configure(const libcamera::StreamConfiguration &cfg) = 0;
virtual int encode(const libcamera::FrameBuffer *source,
- const libcamera::Span<uint8_t> &destination) = 0;
+ const libcamera::Span<uint8_t> &destination,
+ Exif *exif) = 0;
};
#endif /* __ANDROID_JPEG_ENCODER_H__ */
diff --git a/src/android/jpeg/encoder_libjpeg.cpp b/src/android/jpeg/encoder_libjpeg.cpp
index 977538c..0cd93b6 100644
--- a/src/android/jpeg/encoder_libjpeg.cpp
+++ b/src/android/jpeg/encoder_libjpeg.cpp
@@ -180,7 +180,8 @@ void EncoderLibJpeg::compressNV(const libcamera::MappedBuffer *frame)
}
int EncoderLibJpeg::encode(const FrameBuffer *source,
- const libcamera::Span<uint8_t> &dest)
+ const libcamera::Span<uint8_t> &dest,
+ Exif *exif)
{
MappedFrameBuffer frame(source, PROT_READ);
if (!frame.isValid()) {
diff --git a/src/android/jpeg/encoder_libjpeg.h b/src/android/jpeg/encoder_libjpeg.h
index aed081a..7e0757a 100644
--- a/src/android/jpeg/encoder_libjpeg.h
+++ b/src/android/jpeg/encoder_libjpeg.h
@@ -22,7 +22,8 @@ public:
int configure(const libcamera::StreamConfiguration &cfg) override;
int encode(const libcamera::FrameBuffer *source,
- const libcamera::Span<uint8_t> &destination) override;
+ const libcamera::Span<uint8_t> &destination,
+ Exif *exif) override;
private:
void compressRGB(const libcamera::MappedBuffer *frame);
--
2.25.1
More information about the libcamera-devel
mailing list