@@ -17,7 +17,8 @@ interface IPASoftInterface {
libcamera.SharedFD fdStats,
libcamera.SharedFD fdParams,
libcamera.IPACameraSensorInfo sensorInfo,
- libcamera.ControlInfoMap sensorControls)
+ libcamera.ControlInfoMap sensorControls,
+ bool gpuIspEnabled)
=> (int32 ret, libcamera.ControlInfoMap ipaControls, bool ccmEnabled);
start() => (int32 ret);
stop();
@@ -104,6 +104,7 @@ struct IPAContext {
ControlInfoMap::Map ctrlMap;
bool ccmEnabled = false;
bool selfInitialising = false;
+ bool gpuIspEnabled = false;
};
} /* namespace ipa::soft */
@@ -55,6 +55,7 @@ public:
const SharedFD &fdParams,
const IPACameraSensorInfo &sensorInfo,
const ControlInfoMap &sensorControls,
+ bool gpuIspEnabled,
ControlInfoMap *ipaControls,
bool *ccmEnabled) override;
int configure(const IPAConfigInfo &configInfo) override;
@@ -95,6 +96,7 @@ int IPASoftSimple::init(const IPASettings &settings,
const SharedFD &fdParams,
const IPACameraSensorInfo &sensorInfo,
const ControlInfoMap &sensorControls,
+ bool gpuIspEnabled,
ControlInfoMap *ipaControls,
bool *ccmEnabled)
{
@@ -106,6 +108,7 @@ int IPASoftSimple::init(const IPASettings &settings,
}
context_.sensorInfo = sensorInfo;
+ context_.gpuIspEnabled = gpuIspEnabled;
/* Load the tuning data file */
File file(settings.configurationFile);
@@ -121,6 +121,8 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,
}
stats->statsReady.connect(this, &SoftwareIsp::statsReady);
+ bool gpuIspEnabled;
+
#if HAVE_DEBAYER_EGL
std::optional<std::string> softISPMode = configuration.envOption("LIBCAMERA_SOFTISP_MODE", { "software_isp", "mode" });
if (softISPMode) {
@@ -137,10 +139,13 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,
LOG(SoftwareIsp, Error) << "Failed to instantiate GPUISP";
return;
}
+ gpuIspEnabled = true;
}
#endif
- if (!debayer_)
+ if (!debayer_) {
debayer_ = std::make_unique<DebayerCpu>(std::move(stats), configuration);
+ gpuIspEnabled = false;
+ }
if (!debayer_) {
LOG(SoftwareIsp, Error) << "Failed to create Debayer object";
@@ -177,6 +182,7 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,
sharedParams_.fd(),
sensorInfo,
sensor->controls(),
+ gpuIspEnabled,
ipaControls,
&ccmEnabled_);
if (ret) {