[libcamera-devel] [libcamera-devel, v3, 1/1] libcamera: converter: Check converter validity
Suhrid Subramaniam
suhridsubramaniam at gmail.com
Thu Mar 2 20:06:29 CET 2023
- In cases where ConverterFactoryBase::create returns a nullptr,
converter_->isValid() causes a segmentation fault.
- Solve this by checking if converter_ is a nullptr.
- Additionally, check for converter validity in the create function itself
and return a nullptr if the converter is invalid.
Signed-off-by: Suhrid Subramaniam <suhrid.subramaniam at mediatek.com>
---
src/libcamera/converter.cpp | 3 ++-
src/libcamera/pipeline/simple/simple.cpp | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/libcamera/converter.cpp b/src/libcamera/converter.cpp
index 3de39cff..38141da6 100644
--- a/src/libcamera/converter.cpp
+++ b/src/libcamera/converter.cpp
@@ -226,8 +226,9 @@ std::unique_ptr<Converter> ConverterFactoryBase::create(MediaDevice *media)
<< "Creating converter from "
<< factory->name_ << " factory with "
<< (it == compatibles.end() ? "no" : media->driver()) << " alias.";
+ std::unique_ptr<Converter> converter_ = factory->createInstance(media);
- return factory->createInstance(media);
+ return converter_->isValid() ? std::move(converter_) : nullptr;
}
return nullptr;
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 24ded4db..2423ec10 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -493,7 +493,7 @@ int SimpleCameraData::init()
MediaDevice *converter = pipe->converter();
if (converter) {
converter_ = ConverterFactoryBase::create(converter);
- if (!converter_->isValid()) {
+ if (!converter_) {
LOG(SimplePipeline, Warning)
<< "Failed to create converter, disabling format conversion";
converter_.reset();
--
2.39.0
More information about the libcamera-devel
mailing list