Message ID | 20210323143610.787760-2-naush@raspberrypi.com |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
Hi Naush, On Tue, Mar 23, 2021 at 02:36:04PM +0000, Naushir Patuck wrote: > Pass the sensor model string to the IPA init() method through the > IPASettings structure. > > Signed-off-by: Naushir Patuck <naush@raspberrypi.com> > Tested-by: David Plowman <david.plowman@raspberrypi.com> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > include/libcamera/ipa/core.mojom | 8 ++++++++ > src/libcamera/pipeline/ipu3/ipu3.cpp | 3 ++- > src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 3 ++- > src/libcamera/pipeline/vimc/vimc.cpp | 2 +- > test/ipa/ipa_interface_test.cpp | 2 +- > 5 files changed, 14 insertions(+), 4 deletions(-) > > diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom > index 5236a672461c..5363f1c5b48b 100644 > --- a/include/libcamera/ipa/core.mojom > +++ b/include/libcamera/ipa/core.mojom > @@ -145,8 +145,16 @@ struct IPABuffer { > * This field may be an empty string if the IPA doesn't require a configuration > * file. > */ > + > + /** > + * \var IPASettings::sensorModel > + * \brief The sensor model name > + * > + * Provides the sensor model name to the IPA. > + */ > struct IPASettings { > string configurationFile; > + string sensorModel; > }; > > /** > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp > index 2ea13ec9e1b9..c27120710323 100644 > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp > @@ -1144,7 +1144,8 @@ int IPU3CameraData::loadIPA() > > ipa_->queueFrameAction.connect(this, &IPU3CameraData::queueFrameAction); > > - ipa_->init(IPASettings{}); > + CameraSensor *sensor = cio2_.sensor(); > + ipa_->init(IPASettings{ "", sensor->model() }); > > return 0; > } > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp > index 00fa62c972ed..2c8ae31a28ad 100644 > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp > @@ -1227,7 +1227,8 @@ int RPiCameraData::loadIPA() > ipa_->setIspControls.connect(this, &RPiCameraData::setIspControls); > ipa_->setDelayedControls.connect(this, &RPiCameraData::setDelayedControls); > > - IPASettings settings(ipa_->configurationFile(sensor_->model() + ".json")); > + IPASettings settings(ipa_->configurationFile(sensor_->model() + ".json"), > + sensor_->model()); > > return ipa_->init(settings); > } > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp > index 57c65b021c46..2dfb63ecf2ef 100644 > --- a/src/libcamera/pipeline/vimc/vimc.cpp > +++ b/src/libcamera/pipeline/vimc/vimc.cpp > @@ -425,7 +425,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator) > data->ipa_ = IPAManager::createIPA<ipa::vimc::IPAProxyVimc>(this, 0, 0); > if (data->ipa_ != nullptr) { > std::string conf = data->ipa_->configurationFile("vimc.conf"); > - data->ipa_->init(IPASettings{ conf }); > + data->ipa_->init(IPASettings{ conf, data->sensor_->model() }); > } else { > LOG(VIMC, Warning) << "no matching IPA found"; > } This crashes, as data->sensor_ is null here :-S This fixes it. diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp index 2dfb63ecf2ef..8f5f4ba30953 100644 --- a/src/libcamera/pipeline/vimc/vimc.cpp +++ b/src/libcamera/pipeline/vimc/vimc.cpp @@ -422,6 +422,10 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator) std::unique_ptr<VimcCameraData> data = std::make_unique<VimcCameraData>(this, media); + /* Locate and open the capture video node. */ + if (data->init()) + return false; + data->ipa_ = IPAManager::createIPA<ipa::vimc::IPAProxyVimc>(this, 0, 0); if (data->ipa_ != nullptr) { std::string conf = data->ipa_->configurationFile("vimc.conf"); @@ -430,10 +434,6 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator) LOG(VIMC, Warning) << "no matching IPA found"; } - /* Locate and open the capture video node. */ - if (data->init()) - return false; - /* Create and register the camera. */ std::set<Stream *> streams{ &data->stream_ }; std::shared_ptr<Camera> camera = Could you run "ninja test" on future patch series ? It requires the vimc, vivid and vim2m modules to be loaded, and you can do so on an x86 machine. I'll fold this fix in when merging. > diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp > index 4b88806f8f67..d6ca6f5137b0 100644 > --- a/test/ipa/ipa_interface_test.cpp > +++ b/test/ipa/ipa_interface_test.cpp > @@ -104,7 +104,7 @@ protected: > > /* Test initialization of IPA module. */ > std::string conf = ipa_->configurationFile("vimc.conf"); > - int ret = ipa_->init(IPASettings{ conf }); > + int ret = ipa_->init(IPASettings{ conf, "vimc" }); > if (ret < 0) { > cerr << "IPA interface init() failed" << endl; > return TestFail;
Hi Laurent, On Tue, 23 Mar 2021 at 16:36, Laurent Pinchart < laurent.pinchart@ideasonboard.com> wrote: > Hi Naush, > > On Tue, Mar 23, 2021 at 02:36:04PM +0000, Naushir Patuck wrote: > > Pass the sensor model string to the IPA init() method through the > > IPASettings structure. > > > > Signed-off-by: Naushir Patuck <naush@raspberrypi.com> > > Tested-by: David Plowman <david.plowman@raspberrypi.com> > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > --- > > include/libcamera/ipa/core.mojom | 8 ++++++++ > > src/libcamera/pipeline/ipu3/ipu3.cpp | 3 ++- > > src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 3 ++- > > src/libcamera/pipeline/vimc/vimc.cpp | 2 +- > > test/ipa/ipa_interface_test.cpp | 2 +- > > 5 files changed, 14 insertions(+), 4 deletions(-) > > > > diff --git a/include/libcamera/ipa/core.mojom > b/include/libcamera/ipa/core.mojom > > index 5236a672461c..5363f1c5b48b 100644 > > --- a/include/libcamera/ipa/core.mojom > > +++ b/include/libcamera/ipa/core.mojom > > @@ -145,8 +145,16 @@ struct IPABuffer { > > * This field may be an empty string if the IPA doesn't require a > configuration > > * file. > > */ > > + > > + /** > > + * \var IPASettings::sensorModel > > + * \brief The sensor model name > > + * > > + * Provides the sensor model name to the IPA. > > + */ > > struct IPASettings { > > string configurationFile; > > + string sensorModel; > > }; > > > > /** > > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp > b/src/libcamera/pipeline/ipu3/ipu3.cpp > > index 2ea13ec9e1b9..c27120710323 100644 > > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp > > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp > > @@ -1144,7 +1144,8 @@ int IPU3CameraData::loadIPA() > > > > ipa_->queueFrameAction.connect(this, > &IPU3CameraData::queueFrameAction); > > > > - ipa_->init(IPASettings{}); > > + CameraSensor *sensor = cio2_.sensor(); > > + ipa_->init(IPASettings{ "", sensor->model() }); > > > > return 0; > > } > > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp > b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp > > index 00fa62c972ed..2c8ae31a28ad 100644 > > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp > > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp > > @@ -1227,7 +1227,8 @@ int RPiCameraData::loadIPA() > > ipa_->setIspControls.connect(this, &RPiCameraData::setIspControls); > > ipa_->setDelayedControls.connect(this, > &RPiCameraData::setDelayedControls); > > > > - IPASettings settings(ipa_->configurationFile(sensor_->model() + > ".json")); > > + IPASettings settings(ipa_->configurationFile(sensor_->model() + > ".json"), > > + sensor_->model()); > > > > return ipa_->init(settings); > > } > > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp > b/src/libcamera/pipeline/vimc/vimc.cpp > > index 57c65b021c46..2dfb63ecf2ef 100644 > > --- a/src/libcamera/pipeline/vimc/vimc.cpp > > +++ b/src/libcamera/pipeline/vimc/vimc.cpp > > @@ -425,7 +425,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator > *enumerator) > > data->ipa_ = IPAManager::createIPA<ipa::vimc::IPAProxyVimc>(this, > 0, 0); > > if (data->ipa_ != nullptr) { > > std::string conf = > data->ipa_->configurationFile("vimc.conf"); > > - data->ipa_->init(IPASettings{ conf }); > > + data->ipa_->init(IPASettings{ conf, data->sensor_->model() > }); > > } else { > > LOG(VIMC, Warning) << "no matching IPA found"; > > } > > This crashes, as data->sensor_ is null here :-S This fixes it. > Sorry for breaking that :( > > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp > b/src/libcamera/pipeline/vimc/vimc.cpp > index 2dfb63ecf2ef..8f5f4ba30953 100644 > --- a/src/libcamera/pipeline/vimc/vimc.cpp > +++ b/src/libcamera/pipeline/vimc/vimc.cpp > @@ -422,6 +422,10 @@ bool PipelineHandlerVimc::match(DeviceEnumerator > *enumerator) > > std::unique_ptr<VimcCameraData> data = > std::make_unique<VimcCameraData>(this, media); > > + /* Locate and open the capture video node. */ > + if (data->init()) > + return false; > + > data->ipa_ = IPAManager::createIPA<ipa::vimc::IPAProxyVimc>(this, > 0, 0); > if (data->ipa_ != nullptr) { > std::string conf = > data->ipa_->configurationFile("vimc.conf"); > @@ -430,10 +434,6 @@ bool PipelineHandlerVimc::match(DeviceEnumerator > *enumerator) > LOG(VIMC, Warning) << "no matching IPA found"; > } > > - /* Locate and open the capture video node. */ > - if (data->init()) > - return false; > - > /* Create and register the camera. */ > std::set<Stream *> streams{ &data->stream_ }; > std::shared_ptr<Camera> camera = > > Could you run "ninja test" on future patch series ? It requires the > vimc, vivid and vim2m modules to be loaded, and you can do so on an x86 > machine. > I'll be sure to run through these tests before submitting next time. Regards, Naush > > I'll fold this fix in when merging. > > > diff --git a/test/ipa/ipa_interface_test.cpp > b/test/ipa/ipa_interface_test.cpp > > index 4b88806f8f67..d6ca6f5137b0 100644 > > --- a/test/ipa/ipa_interface_test.cpp > > +++ b/test/ipa/ipa_interface_test.cpp > > @@ -104,7 +104,7 @@ protected: > > > > /* Test initialization of IPA module. */ > > std::string conf = ipa_->configurationFile("vimc.conf"); > > - int ret = ipa_->init(IPASettings{ conf }); > > + int ret = ipa_->init(IPASettings{ conf, "vimc" }); > > if (ret < 0) { > > cerr << "IPA interface init() failed" << endl; > > return TestFail; > > -- > Regards, > > Laurent Pinchart >
Hi Naush, On Tue, Mar 23, 2021 at 04:44:35PM +0000, Naushir Patuck wrote: > On Tue, 23 Mar 2021 at 16:36, Laurent Pinchart wrote: > > On Tue, Mar 23, 2021 at 02:36:04PM +0000, Naushir Patuck wrote: > > > Pass the sensor model string to the IPA init() method through the > > > IPASettings structure. > > > > > > Signed-off-by: Naushir Patuck <naush@raspberrypi.com> > > > Tested-by: David Plowman <david.plowman@raspberrypi.com> > > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > > --- > > > include/libcamera/ipa/core.mojom | 8 ++++++++ > > > src/libcamera/pipeline/ipu3/ipu3.cpp | 3 ++- > > > src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 3 ++- > > > src/libcamera/pipeline/vimc/vimc.cpp | 2 +- > > > test/ipa/ipa_interface_test.cpp | 2 +- > > > 5 files changed, 14 insertions(+), 4 deletions(-) > > > > > > diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom > > > index 5236a672461c..5363f1c5b48b 100644 > > > --- a/include/libcamera/ipa/core.mojom > > > +++ b/include/libcamera/ipa/core.mojom > > > @@ -145,8 +145,16 @@ struct IPABuffer { > > > * This field may be an empty string if the IPA doesn't require a configuration > > > * file. > > > */ > > > + > > > + /** > > > + * \var IPASettings::sensorModel > > > + * \brief The sensor model name > > > + * > > > + * Provides the sensor model name to the IPA. > > > + */ > > > struct IPASettings { > > > string configurationFile; > > > + string sensorModel; > > > }; > > > > > > /** > > > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp > > > index 2ea13ec9e1b9..c27120710323 100644 > > > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp > > > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp > > > @@ -1144,7 +1144,8 @@ int IPU3CameraData::loadIPA() > > > > > > ipa_->queueFrameAction.connect(this, &IPU3CameraData::queueFrameAction); > > > > > > - ipa_->init(IPASettings{}); > > > + CameraSensor *sensor = cio2_.sensor(); > > > + ipa_->init(IPASettings{ "", sensor->model() }); > > > > > > return 0; > > > } > > > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp > > > index 00fa62c972ed..2c8ae31a28ad 100644 > > > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp > > > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp > > > @@ -1227,7 +1227,8 @@ int RPiCameraData::loadIPA() > > > ipa_->setIspControls.connect(this, &RPiCameraData::setIspControls); > > > ipa_->setDelayedControls.connect(this, &RPiCameraData::setDelayedControls); > > > > > > - IPASettings settings(ipa_->configurationFile(sensor_->model() + ".json")); > > > + IPASettings settings(ipa_->configurationFile(sensor_->model() + ".json"), > > > + sensor_->model()); > > > > > > return ipa_->init(settings); > > > } > > > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp > > > index 57c65b021c46..2dfb63ecf2ef 100644 > > > --- a/src/libcamera/pipeline/vimc/vimc.cpp > > > +++ b/src/libcamera/pipeline/vimc/vimc.cpp > > > @@ -425,7 +425,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator) > > > data->ipa_ = IPAManager::createIPA<ipa::vimc::IPAProxyVimc>(this, 0, 0); > > > if (data->ipa_ != nullptr) { > > > std::string conf = data->ipa_->configurationFile("vimc.conf"); > > > - data->ipa_->init(IPASettings{ conf }); > > > + data->ipa_->init(IPASettings{ conf, data->sensor_->model() }); > > > } else { > > > LOG(VIMC, Warning) << "no matching IPA found"; > > > } > > > > This crashes, as data->sensor_ is null here :-S This fixes it. > > Sorry for breaking that :( No worries, the breakage was caught before it got upstream :-) > > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp > > b/src/libcamera/pipeline/vimc/vimc.cpp > > index 2dfb63ecf2ef..8f5f4ba30953 100644 > > --- a/src/libcamera/pipeline/vimc/vimc.cpp > > +++ b/src/libcamera/pipeline/vimc/vimc.cpp > > @@ -422,6 +422,10 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator) > > > > std::unique_ptr<VimcCameraData> data = std::make_unique<VimcCameraData>(this, media); > > > > + /* Locate and open the capture video node. */ > > + if (data->init()) > > + return false; > > + > > data->ipa_ = IPAManager::createIPA<ipa::vimc::IPAProxyVimc>(this, 0, 0); > > if (data->ipa_ != nullptr) { > > std::string conf = data->ipa_->configurationFile("vimc.conf"); > > @@ -430,10 +434,6 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator) > > LOG(VIMC, Warning) << "no matching IPA found"; > > } > > > > - /* Locate and open the capture video node. */ > > - if (data->init()) > > - return false; > > - > > /* Create and register the camera. */ > > std::set<Stream *> streams{ &data->stream_ }; > > std::shared_ptr<Camera> camera = > > > > Could you run "ninja test" on future patch series ? It requires the > > vimc, vivid and vim2m modules to be loaded, and you can do so on an x86 > > machine. > > I'll be sure to run through these tests before submitting next time. Eventually we'll have automated tests that will do this all for you. In the meantime, thanks for your help. > > I'll fold this fix in when merging. > > > > > diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp > > > index 4b88806f8f67..d6ca6f5137b0 100644 > > > --- a/test/ipa/ipa_interface_test.cpp > > > +++ b/test/ipa/ipa_interface_test.cpp > > > @@ -104,7 +104,7 @@ protected: > > > > > > /* Test initialization of IPA module. */ > > > std::string conf = ipa_->configurationFile("vimc.conf"); > > > - int ret = ipa_->init(IPASettings{ conf }); > > > + int ret = ipa_->init(IPASettings{ conf, "vimc" }); > > > if (ret < 0) { > > > cerr << "IPA interface init() failed" << endl; > > > return TestFail;
diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom index 5236a672461c..5363f1c5b48b 100644 --- a/include/libcamera/ipa/core.mojom +++ b/include/libcamera/ipa/core.mojom @@ -145,8 +145,16 @@ struct IPABuffer { * This field may be an empty string if the IPA doesn't require a configuration * file. */ + + /** + * \var IPASettings::sensorModel + * \brief The sensor model name + * + * Provides the sensor model name to the IPA. + */ struct IPASettings { string configurationFile; + string sensorModel; }; /** diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index 2ea13ec9e1b9..c27120710323 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -1144,7 +1144,8 @@ int IPU3CameraData::loadIPA() ipa_->queueFrameAction.connect(this, &IPU3CameraData::queueFrameAction); - ipa_->init(IPASettings{}); + CameraSensor *sensor = cio2_.sensor(); + ipa_->init(IPASettings{ "", sensor->model() }); return 0; } diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp index 00fa62c972ed..2c8ae31a28ad 100644 --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp @@ -1227,7 +1227,8 @@ int RPiCameraData::loadIPA() ipa_->setIspControls.connect(this, &RPiCameraData::setIspControls); ipa_->setDelayedControls.connect(this, &RPiCameraData::setDelayedControls); - IPASettings settings(ipa_->configurationFile(sensor_->model() + ".json")); + IPASettings settings(ipa_->configurationFile(sensor_->model() + ".json"), + sensor_->model()); return ipa_->init(settings); } diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp index 57c65b021c46..2dfb63ecf2ef 100644 --- a/src/libcamera/pipeline/vimc/vimc.cpp +++ b/src/libcamera/pipeline/vimc/vimc.cpp @@ -425,7 +425,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator) data->ipa_ = IPAManager::createIPA<ipa::vimc::IPAProxyVimc>(this, 0, 0); if (data->ipa_ != nullptr) { std::string conf = data->ipa_->configurationFile("vimc.conf"); - data->ipa_->init(IPASettings{ conf }); + data->ipa_->init(IPASettings{ conf, data->sensor_->model() }); } else { LOG(VIMC, Warning) << "no matching IPA found"; } diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp index 4b88806f8f67..d6ca6f5137b0 100644 --- a/test/ipa/ipa_interface_test.cpp +++ b/test/ipa/ipa_interface_test.cpp @@ -104,7 +104,7 @@ protected: /* Test initialization of IPA module. */ std::string conf = ipa_->configurationFile("vimc.conf"); - int ret = ipa_->init(IPASettings{ conf }); + int ret = ipa_->init(IPASettings{ conf, "vimc" }); if (ret < 0) { cerr << "IPA interface init() failed" << endl; return TestFail;