| Message ID | 20251202134544.662446-16-bryan.odonoghue@linaro.org |
|---|---|
| State | Superseded |
| Headers | show |
| Series |
|
| Related | show |
Bryan O'Donoghue <bryan.odonoghue@linaro.org> writes: > If GPUISP support is available make it so an environment variable can > switch it on. > > Given we don't have full feature parity with CPUISP just yet on pixel > format output, we should default to CPUISP mode giving the user the option > to switch on GPUISP by setting LIBCAMERA_SOFTISP_MODE=gpu > > Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> > --- > src/libcamera/software_isp/software_isp.cpp | 24 ++++++++++++++++++++- > 1 file changed, 23 insertions(+), 1 deletion(-) > > diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp > index 638d9a6e6..125a5dd81 100644 > --- a/src/libcamera/software_isp/software_isp.cpp > +++ b/src/libcamera/software_isp/software_isp.cpp > @@ -15,6 +15,7 @@ > > #include <libcamera/base/log.h> > #include <libcamera/base/thread.h> > +#include <libcamera/base/utils.h> > > #include <libcamera/controls.h> > #include <libcamera/formats.h> > @@ -25,6 +26,9 @@ > #include "libcamera/internal/software_isp/debayer_params.h" > > #include "debayer_cpu.h" > +#if HAVE_DEBAYER_EGL > +#include "debayer_egl.h" > +#endif > > /** > * \file software_isp.cpp > @@ -117,7 +121,25 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor, > } > stats->statsReady.connect(this, &SoftwareIsp::statsReady); > > - debayer_ = std::make_unique<DebayerCpu>(std::move(stats), configuration); > +#if HAVE_DEBAYER_EGL > + const char *softISPMode = utils::secure_getenv("LIBCAMERA_SOFTISP_MODE"); > + > + if (softISPMode && !strcmp(softISPMode, "gpu")) { > + debayer_ = std::make_unique<DebayerEGL>(std::move(stats), configuration); > + if (!debayer_) { > + LOG(SoftwareIsp, Error) << "Failed to instantiate GPUISP"; > + return; > + } > + } > +#endif > + if (!debayer_) > + debayer_ = std::make_unique<DebayerCpu>(std::move(stats), configuration); > + > + if (!debayer_) { > + LOG(SoftwareIsp, Error) << "Failed to create Debayer object"; > + return; > + } > + > debayer_->inputBufferReady.connect(this, &SoftwareIsp::inputReady); > debayer_->outputBufferReady.connect(this, &SoftwareIsp::outputReady); As already pointed out, there should be also a configuration file option for a more persistent setting. For example: std::optional<std::string> softIspMode = configuration.envOption("LIBCAMERA_SOFTISP_MODE", { "software_isp", "mode" }); if (softIspMode && softIspMode == "gpu") { ... In any case, the environment variable/option should be documented in Documentation/runtime_configuration.rst.
diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp index 638d9a6e6..125a5dd81 100644 --- a/src/libcamera/software_isp/software_isp.cpp +++ b/src/libcamera/software_isp/software_isp.cpp @@ -15,6 +15,7 @@ #include <libcamera/base/log.h> #include <libcamera/base/thread.h> +#include <libcamera/base/utils.h> #include <libcamera/controls.h> #include <libcamera/formats.h> @@ -25,6 +26,9 @@ #include "libcamera/internal/software_isp/debayer_params.h" #include "debayer_cpu.h" +#if HAVE_DEBAYER_EGL +#include "debayer_egl.h" +#endif /** * \file software_isp.cpp @@ -117,7 +121,25 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor, } stats->statsReady.connect(this, &SoftwareIsp::statsReady); - debayer_ = std::make_unique<DebayerCpu>(std::move(stats), configuration); +#if HAVE_DEBAYER_EGL + const char *softISPMode = utils::secure_getenv("LIBCAMERA_SOFTISP_MODE"); + + if (softISPMode && !strcmp(softISPMode, "gpu")) { + debayer_ = std::make_unique<DebayerEGL>(std::move(stats), configuration); + if (!debayer_) { + LOG(SoftwareIsp, Error) << "Failed to instantiate GPUISP"; + return; + } + } +#endif + if (!debayer_) + debayer_ = std::make_unique<DebayerCpu>(std::move(stats), configuration); + + if (!debayer_) { + LOG(SoftwareIsp, Error) << "Failed to create Debayer object"; + return; + } + debayer_->inputBufferReady.connect(this, &SoftwareIsp::inputReady); debayer_->outputBufferReady.connect(this, &SoftwareIsp::outputReady);
If GPUISP support is available make it so an environment variable can switch it on. Given we don't have full feature parity with CPUISP just yet on pixel format output, we should default to CPUISP mode giving the user the option to switch on GPUISP by setting LIBCAMERA_SOFTISP_MODE=gpu Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> --- src/libcamera/software_isp/software_isp.cpp | 24 ++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-)