diff options
-rw-r--r-- | src/android/camera_device.cpp | 22 | ||||
-rw-r--r-- | src/android/camera_device.h | 8 |
2 files changed, 13 insertions, 17 deletions
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 2cb81387..b245c9a1 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -169,16 +169,11 @@ MappedCamera3Buffer::MappedCamera3Buffer(const buffer_handle_t camera3buffer, } } -CameraStream::CameraStream(PixelFormat f, Size s, unsigned int i) - : format(f), size(s), jpeg(nullptr), index_(i) +CameraStream::CameraStream(PixelFormat f, Size s, unsigned int i, Encoder *e) + : format(f), size(s), index_(i), encoder_(e) { } -CameraStream::~CameraStream() -{ - delete jpeg; -}; - /* * \struct Camera3RequestDescriptor * @@ -1278,20 +1273,21 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list) } StreamConfiguration &cfg = config_->at(index); - CameraStream &cameraStream = - streams_.emplace_back(formats::MJPEG, cfg.size, index); - jpegStream->priv = static_cast<void *>(&cameraStream); /* * Construct a software encoder for the MJPEG streams from the * chosen libcamera source stream. */ - cameraStream.jpeg = new EncoderLibJpeg(); - int ret = cameraStream.jpeg->configure(cfg); + Encoder *encoder = new EncoderLibJpeg(); + int ret = encoder->configure(cfg); if (ret) { LOG(HAL, Error) << "Failed to configure encoder"; + delete encoder; return ret; } + + streams_.emplace_back(formats::MJPEG, cfg.size, index, encoder); + jpegStream->priv = static_cast<void *>(&streams_.back()); } switch (config_->validate()) { @@ -1480,7 +1476,7 @@ void CameraDevice::requestComplete(Request *request) if (cameraStream->format != formats::MJPEG) continue; - Encoder *encoder = cameraStream->jpeg; + Encoder *encoder = cameraStream->encoder(); if (!encoder) { LOG(HAL, Error) << "Failed to identify encoder"; continue; diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 376d001e..49a2e7f3 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -29,16 +29,15 @@ class CameraMetadata; struct CameraStream { public: - CameraStream(libcamera::PixelFormat, libcamera::Size, unsigned int i); - ~CameraStream(); + CameraStream(libcamera::PixelFormat, libcamera::Size, unsigned int i, + Encoder *e = nullptr); unsigned int index() const { return index_; } + Encoder *encoder() const { return encoder_.get(); } libcamera::PixelFormat format; libcamera::Size size; - Encoder *jpeg; - private: /* * The index of the libcamera StreamConfiguration as added during @@ -46,6 +45,7 @@ private: * one or more streams to the Android framework. */ unsigned int index_; + std::unique_ptr<Encoder> encoder_; }; class CameraDevice : protected libcamera::Loggable |