summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2020-10-03 12:00:54 +0200
committerJacopo Mondi <jacopo@jmondi.org>2020-10-07 16:07:44 +0200
commite3393f147e5d011c6f02447a18eb73b1cf134b4b (patch)
tree05110dd9566b33400ca542a31cc7c17e303683e4
parent216030aa9d0953cff552d5892d32e5cd73864202 (diff)
android: camera_stream: Fetch format and size from configuration
Fetch the format and size of the libcamera::StreamConfiguration associated with a CameraStream by accessing the configuration by index. This removes the need to store the libcamera stream format and sizes as class members and avoid duplicating information that might get out of sync. It also allows to remove the StreamConfiguration from the constructor parameters list, as it can be identified by its index. While at it, re-order the constructor parameters order. Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r--src/android/camera_device.cpp8
-rw-r--r--src/android/camera_stream.cpp15
-rw-r--r--src/android/camera_stream.h18
3 files changed, 12 insertions, 29 deletions
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 47c42319..678dca60 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1206,9 +1206,8 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
streamConfiguration.pixelFormat = format;
config_->addConfiguration(streamConfiguration);
- unsigned int index = config_->size() - 1;
- streams_.emplace_back(this, stream, streamConfiguration,
- CameraStream::Type::Direct, index);
+ streams_.emplace_back(this, CameraStream::Type::Direct,
+ stream, config_->size() - 1);
stream->priv = static_cast<void *>(&streams_.back());
}
@@ -1262,8 +1261,7 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
index = config_->size() - 1;
}
- StreamConfiguration &cfg = config_->at(index);
- streams_.emplace_back(this, jpegStream, cfg, type, index);
+ streams_.emplace_back(this, type, jpegStream, index);
jpegStream->priv = static_cast<void *>(&streams_.back());
}
diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
index 9c7819ef..3946a2cd 100644
--- a/src/android/camera_stream.cpp
+++ b/src/android/camera_stream.cpp
@@ -17,18 +17,13 @@ using namespace libcamera;
LOG_DECLARE_CATEGORY(HAL);
-CameraStream::CameraStream(CameraDevice *cameraDevice,
- camera3_stream_t *camera3Stream,
- const libcamera::StreamConfiguration &cfg,
- Type type, unsigned int index)
- : cameraDevice_(cameraDevice), camera3Stream_(camera3Stream),
- type_(type), index_(index)
+CameraStream::CameraStream(CameraDevice *cameraDevice, Type type,
+ camera3_stream_t *camera3Stream, unsigned int index)
+ : cameraDevice_(cameraDevice), type_(type),
+ camera3Stream_(camera3Stream), index_(index)
{
config_ = cameraDevice_->cameraConfiguration();
- format_ = cfg.pixelFormat;
- size_ = cfg.size;
-
if (type_ == Type::Internal || type_ == Type::Mapped)
encoder_ = std::make_unique<EncoderLibJpeg>();
}
@@ -63,7 +58,7 @@ int CameraStream::process(const libcamera::FrameBuffer &source,
exif.setMake("libcamera");
exif.setModel("cameraModel");
exif.setOrientation(cameraDevice_->orientation());
- exif.setSize(size_);
+ exif.setSize(configuration().size);
/*
* We set the frame's EXIF timestamp as the time of encode.
* Since the precision we need for EXIF timestamp is only one
diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
index d8d9d8c4..f46cfd60 100644
--- a/src/android/camera_stream.h
+++ b/src/android/camera_stream.h
@@ -106,16 +106,11 @@ public:
Internal,
Mapped,
};
- CameraStream(CameraDevice *cameraDevice,
- camera3_stream_t *androidStream,
- const libcamera::StreamConfiguration &cfg,
- Type type, unsigned int index);
+ CameraStream(CameraDevice *cameraDevice, Type type,
+ camera3_stream_t *camera3Stream, unsigned int index);
- const camera3_stream_t &camera3Stream() const { return *camera3Stream_; }
- const libcamera::PixelFormat &format() const { return format_; }
- const libcamera::Size &size() const { return size_; }
Type type() const { return type_; }
-
+ const camera3_stream_t &camera3Stream() const { return *camera3Stream_; }
const libcamera::StreamConfiguration &configuration() const;
libcamera::Stream *stream() const;
@@ -126,13 +121,8 @@ public:
private:
CameraDevice *cameraDevice_;
libcamera::CameraConfiguration *config_;
- camera3_stream_t *camera3Stream_;
Type type_;
-
- /* Libcamera facing format and sizes. */
- libcamera::PixelFormat format_;
- libcamera::Size size_;
-
+ camera3_stream_t *camera3Stream_;
/*
* The index of the libcamera StreamConfiguration as added during
* configureStreams(). A single libcamera Stream may be used to deliver