Message ID | 20250815135253.2231076-2-barnabas.pocze@ideasonboard.com |
---|---|
State | New |
Headers | show |
Series |
|
Related | show |
Quoting Barnabás Pőcze (2025-08-15 22:52:53) > Most `DeviceMatch` objects are constructed from static data and used > once, then thrown away. Instead of doing that, give them static lifetime > and reuse them on subsequent invocations. > > Tests using `DeviceMatch` are also converted if possible. > > Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> > --- > src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 9 ++-- > src/libcamera/pipeline/ipu3/ipu3.cpp | 49 ++++++++++---------- > src/libcamera/pipeline/mali-c55/mali-c55.cpp | 13 +++--- > src/libcamera/pipeline/rkisp1/rkisp1.cpp | 20 ++++---- > src/libcamera/pipeline/rpi/pisp/pisp.cpp | 30 ++++++------ > src/libcamera/pipeline/rpi/vc4/vc4.cpp | 4 +- > src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 2 +- > src/libcamera/pipeline/vimc/vimc.cpp | 22 ++++----- > test/camera-sensor.cpp | 2 +- > test/delayed_controls.cpp | 5 +- > test/libtest/buffer_source.cpp | 7 +-- > test/media_device/media_device_test.cpp | 2 +- > test/v4l2_subdevice/v4l2_subdevice_test.cpp | 2 +- > test/v4l2_videodevice/v4l2_m2mdevice.cpp | 7 +-- > 14 files changed, 93 insertions(+), 81 deletions(-) > > diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp > index 72e055e40..d93c9c2ff 100644 > --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp > +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp > @@ -952,10 +952,11 @@ int PipelineHandlerISI::queueRequestDevice(Camera *camera, Request *request) > > bool PipelineHandlerISI::match(DeviceEnumerator *enumerator) > { > - DeviceMatch dm("mxc-isi"); > - dm.add("crossbar"); > - dm.add("mxc_isi.0"); > - dm.add("mxc_isi.0.capture"); > + static const DeviceMatch dm("mxc-isi", { > + "crossbar", > + "mxc_isi.0", > + "mxc_isi.0.capture", > + }); > > isiDev_ = acquireMediaDevice(enumerator, dm); > if (!isiDev_) > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp > index ad20810e6..49554a705 100644 > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp > @@ -845,31 +845,32 @@ int PipelineHandlerIPU3::queueRequestDevice(Camera *camera, Request *request) > > bool PipelineHandlerIPU3::match(DeviceEnumerator *enumerator) > { > - int ret; > + static const DeviceMatch cio2_dm("ipu3-cio2", { > + "ipu3-csi2 0", > + "ipu3-cio2 0", > + "ipu3-csi2 1", > + "ipu3-cio2 1", > + "ipu3-csi2 2", > + "ipu3-cio2 2", > + "ipu3-csi2 3", > + "ipu3-cio2 3", > + }); > + static const DeviceMatch imgu_dm("ipu3-imgu", { > + "ipu3-imgu 0", > + "ipu3-imgu 0 input", > + "ipu3-imgu 0 parameters", > + "ipu3-imgu 0 output", > + "ipu3-imgu 0 viewfinder", > + "ipu3-imgu 0 3a stat", > + "ipu3-imgu 1", > + "ipu3-imgu 1 input", > + "ipu3-imgu 1 parameters", > + "ipu3-imgu 1 output", > + "ipu3-imgu 1 viewfinder", > + "ipu3-imgu 1 3a stat", > + }); > > - DeviceMatch cio2_dm("ipu3-cio2"); > - cio2_dm.add("ipu3-csi2 0"); > - cio2_dm.add("ipu3-cio2 0"); > - cio2_dm.add("ipu3-csi2 1"); > - cio2_dm.add("ipu3-cio2 1"); > - cio2_dm.add("ipu3-csi2 2"); > - cio2_dm.add("ipu3-cio2 2"); > - cio2_dm.add("ipu3-csi2 3"); > - cio2_dm.add("ipu3-cio2 3"); > - > - DeviceMatch imgu_dm("ipu3-imgu"); > - imgu_dm.add("ipu3-imgu 0"); > - imgu_dm.add("ipu3-imgu 0 input"); > - imgu_dm.add("ipu3-imgu 0 parameters"); > - imgu_dm.add("ipu3-imgu 0 output"); > - imgu_dm.add("ipu3-imgu 0 viewfinder"); > - imgu_dm.add("ipu3-imgu 0 3a stat"); > - imgu_dm.add("ipu3-imgu 1"); > - imgu_dm.add("ipu3-imgu 1 input"); > - imgu_dm.add("ipu3-imgu 1 parameters"); > - imgu_dm.add("ipu3-imgu 1 output"); > - imgu_dm.add("ipu3-imgu 1 viewfinder"); > - imgu_dm.add("ipu3-imgu 1 3a stat"); > + int ret; > > cio2MediaDev_ = acquireMediaDevice(enumerator, cio2_dm); > if (!cio2MediaDev_) > diff --git a/src/libcamera/pipeline/mali-c55/mali-c55.cpp b/src/libcamera/pipeline/mali-c55/mali-c55.cpp > index 76341ed3f..1d2d48d6d 100644 > --- a/src/libcamera/pipeline/mali-c55/mali-c55.cpp > +++ b/src/libcamera/pipeline/mali-c55/mali-c55.cpp > @@ -1630,12 +1630,13 @@ bool PipelineHandlerMaliC55::match(DeviceEnumerator *enumerator) > * The TPG and the downscale pipe are both optional blocks and may not > * be fitted. > */ > - DeviceMatch dm("mali-c55"); > - dm.add("mali-c55 isp"); > - dm.add("mali-c55 resizer fr"); > - dm.add("mali-c55 fr"); > - dm.add("mali-c55 3a stats"); > - dm.add("mali-c55 3a params"); > + static const DeviceMatch dm("mali-c55", { > + "mali-c55 isp", > + "mali-c55 resizer fr", > + "mali-c55 fr", > + "mali-c55 3a stats", > + "mali-c55 3a params", > + }); > > media_ = acquireMediaDevice(enumerator, dm); > if (!media_) > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp > index 81370f4cd..2dc396ed9 100644 > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp > @@ -1362,12 +1362,13 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor) > > bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator) > { > - DeviceMatch dm("rkisp1"); > - dm.add("rkisp1_isp"); > - dm.add("rkisp1_resizer_mainpath"); > - dm.add("rkisp1_mainpath"); > - dm.add("rkisp1_stats"); > - dm.add("rkisp1_params"); > + static const DeviceMatch dm("rkisp1", { > + "rkisp1_isp", > + "rkisp1_resizer_mainpath", > + "rkisp1_mainpath", > + "rkisp1_stats", > + "rkisp1_params", > + }); > > media_ = acquireMediaDevice(enumerator, dm); > if (!media_) > @@ -1409,9 +1410,10 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator) > param_->bufferReady.connect(this, &PipelineHandlerRkISP1::paramBufferReady); > > /* If dewarper is present, create its instance. */ > - DeviceMatch dwp("dw100"); > - dwp.add("dw100-source"); > - dwp.add("dw100-sink"); > + static const DeviceMatch dwp("dw100", { > + "dw100-source", > + "dw100-sink", > + }); > > std::shared_ptr<MediaDevice> dwpMediaDevice = enumerator->search(dwp); > if (dwpMediaDevice) { > diff --git a/src/libcamera/pipeline/rpi/pisp/pisp.cpp b/src/libcamera/pipeline/rpi/pisp/pisp.cpp > index 082724c5a..6f244c639 100644 > --- a/src/libcamera/pipeline/rpi/pisp/pisp.cpp > +++ b/src/libcamera/pipeline/rpi/pisp/pisp.cpp > @@ -880,10 +880,12 @@ bool PipelineHandlerPiSP::match(DeviceEnumerator *enumerator) > * device nodes due to a sensor subdevice failure. > */ > for (unsigned int i = 0; i < numCfeDevices; i++) { > - DeviceMatch cfe("rp1-cfe"); > - cfe.add("rp1-cfe-fe-image0"); > - cfe.add("rp1-cfe-fe-stats"); > - cfe.add("rp1-cfe-fe-config"); > + static const DeviceMatch cfe("rp1-cfe", { > + "rp1-cfe-fe-image0", > + "rp1-cfe-fe-stats", > + "rp1-cfe-fe-config", > + }); > + > MediaDevice *cfeDevice = acquireMediaDevice(enumerator, cfe); > > if (!cfeDevice) { > @@ -891,15 +893,17 @@ bool PipelineHandlerPiSP::match(DeviceEnumerator *enumerator) > break; > } > > - DeviceMatch isp("pispbe"); > - isp.add("pispbe-input"); > - isp.add("pispbe-config"); > - isp.add("pispbe-output0"); > - isp.add("pispbe-output1"); > - isp.add("pispbe-tdn_output"); > - isp.add("pispbe-tdn_input"); > - isp.add("pispbe-stitch_output"); > - isp.add("pispbe-stitch_input"); > + static const DeviceMatch isp("pispbe", { > + "pispbe-input", > + "pispbe-config", > + "pispbe-output0", > + "pispbe-output1", > + "pispbe-tdn_output", > + "pispbe-tdn_input", > + "pispbe-stitch_output", > + "pispbe-stitch_input", > + }); > + > MediaDevice *ispDevice = acquireMediaDevice(enumerator, isp); > > if (!ispDevice) { > diff --git a/src/libcamera/pipeline/rpi/vc4/vc4.cpp b/src/libcamera/pipeline/rpi/vc4/vc4.cpp > index 99d43bd0a..7d9e141b3 100644 > --- a/src/libcamera/pipeline/rpi/vc4/vc4.cpp > +++ b/src/libcamera/pipeline/rpi/vc4/vc4.cpp > @@ -172,7 +172,7 @@ bool PipelineHandlerVc4::match(DeviceEnumerator *enumerator) > * device nodes due to a sensor subdevice failure. > */ > for (unsigned int i = 0; i < numUnicamDevices; i++) { > - DeviceMatch unicam("unicam"); > + static const DeviceMatch unicam("unicam"); > MediaDevice *unicamDevice = acquireMediaDevice(enumerator, unicam); > > if (!unicamDevice) { > @@ -180,7 +180,7 @@ bool PipelineHandlerVc4::match(DeviceEnumerator *enumerator) > continue; > } > > - DeviceMatch isp("bcm2835-isp"); > + static const DeviceMatch isp("bcm2835-isp"); > MediaDevice *ispDevice = acquireMediaDevice(enumerator, isp); > > if (!ispDevice) { > diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp > index 4b5816dfd..fffbbcd2b 100644 > --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp > +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp > @@ -466,8 +466,8 @@ int PipelineHandlerUVC::queueRequestDevice(Camera *camera, Request *request) > > bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator) > { > + static const DeviceMatch dm("uvcvideo"); > MediaDevice *media; > - DeviceMatch dm("uvcvideo"); > > media = acquireMediaDevice(enumerator, dm); > if (!media) > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp > index 07273bd2b..b28a23a13 100644 > --- a/src/libcamera/pipeline/vimc/vimc.cpp > +++ b/src/libcamera/pipeline/vimc/vimc.cpp > @@ -464,17 +464,17 @@ int PipelineHandlerVimc::queueRequestDevice(Camera *camera, Request *request) > > bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator) > { > - DeviceMatch dm("vimc"); > - > - dm.add("Raw Capture 0"); > - dm.add("Raw Capture 1"); > - dm.add("RGB/YUV Capture"); > - dm.add("Sensor A"); > - dm.add("Sensor B"); > - dm.add("Debayer A"); > - dm.add("Debayer B"); > - dm.add("RGB/YUV Input"); > - dm.add("Scaler"); > + static const DeviceMatch dm("vimc", { > + "Raw Capture 0", > + "Raw Capture 1", > + "RGB/YUV Capture", > + "Sensor A", > + "Sensor B", > + "Debayer A", > + "Debayer B", > + "RGB/YUV Input", > + "Scaler", > + }); > > MediaDevice *media = acquireMediaDevice(enumerator, dm); > if (!media) > diff --git a/test/camera-sensor.cpp b/test/camera-sensor.cpp > index c30a2212e..77d6cf741 100644 > --- a/test/camera-sensor.cpp > +++ b/test/camera-sensor.cpp > @@ -39,7 +39,7 @@ protected: > return TestFail; > } > > - DeviceMatch dm("vimc"); > + static const DeviceMatch dm("vimc"); > media_ = enumerator_->search(dm); > if (!media_) { > cerr << "Unable to find \'vimc\' media device node" << endl; > diff --git a/test/delayed_controls.cpp b/test/delayed_controls.cpp > index 7bd30e7ae..4c6d7e226 100644 > --- a/test/delayed_controls.cpp > +++ b/test/delayed_controls.cpp > @@ -38,8 +38,9 @@ protected: > return TestFail; > } > > - DeviceMatch dm("vivid"); > - dm.add("vivid-000-vid-cap"); > + static const DeviceMatch dm("vivid", { > + "vivid-000-vid-cap", > + }); > > media_ = enumerator_->search(dm); > if (!media_) { > diff --git a/test/libtest/buffer_source.cpp b/test/libtest/buffer_source.cpp > index dde11f365..52bae498d 100644 > --- a/test/libtest/buffer_source.cpp > +++ b/test/libtest/buffer_source.cpp > @@ -29,7 +29,7 @@ BufferSource::~BufferSource() > int BufferSource::allocate(const StreamConfiguration &config) > { > /* Locate and open the video device. */ > - std::string videoDeviceName = "vivid-000-vid-out"; > + static const std::string videoDeviceName = "vivid-000-vid-out"; > > std::unique_ptr<DeviceEnumerator> enumerator = > DeviceEnumerator::create(); > @@ -43,8 +43,9 @@ int BufferSource::allocate(const StreamConfiguration &config) > return TestFail; > } > > - DeviceMatch dm("vivid"); > - dm.add(videoDeviceName); > + static const DeviceMatch dm("vivid", { > + videoDeviceName, > + }); > > media_ = enumerator->search(dm); > if (!media_) { > diff --git a/test/media_device/media_device_test.cpp b/test/media_device/media_device_test.cpp > index 3e41d0f04..286580450 100644 > --- a/test/media_device/media_device_test.cpp > +++ b/test/media_device/media_device_test.cpp > @@ -25,7 +25,7 @@ int MediaDeviceTest::init() > return TestFail; > } > > - DeviceMatch dm("vimc"); > + static const DeviceMatch dm("vimc"); > media_ = enumerator_->search(dm); > if (!media_) { > cerr << "No VIMC media device found: skip test" << endl; > diff --git a/test/v4l2_subdevice/v4l2_subdevice_test.cpp b/test/v4l2_subdevice/v4l2_subdevice_test.cpp > index c349c9e31..109965b4d 100644 > --- a/test/v4l2_subdevice/v4l2_subdevice_test.cpp > +++ b/test/v4l2_subdevice/v4l2_subdevice_test.cpp > @@ -39,7 +39,7 @@ int V4L2SubdeviceTest::init() > return TestFail; > } > > - DeviceMatch dm("vimc"); > + static const DeviceMatch dm("vimc"); > media_ = enumerator_->search(dm); > if (!media_) { > cerr << "Unable to find \'vimc\' media device node" << endl; > diff --git a/test/v4l2_videodevice/v4l2_m2mdevice.cpp b/test/v4l2_videodevice/v4l2_m2mdevice.cpp > index c45f581a8..36a3e3201 100644 > --- a/test/v4l2_videodevice/v4l2_m2mdevice.cpp > +++ b/test/v4l2_videodevice/v4l2_m2mdevice.cpp > @@ -65,9 +65,10 @@ protected: > return TestFail; > } > > - DeviceMatch dm("vim2m"); > - dm.add("vim2m-source"); > - dm.add("vim2m-sink"); > + static const DeviceMatch dm("vim2m", { > + "vim2m-source", > + "vim2m-sink", > + }); > > media_ = enumerator_->search(dm); > if (!media_) { > -- > 2.50.1 >
diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp index 72e055e40..d93c9c2ff 100644 --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp @@ -952,10 +952,11 @@ int PipelineHandlerISI::queueRequestDevice(Camera *camera, Request *request) bool PipelineHandlerISI::match(DeviceEnumerator *enumerator) { - DeviceMatch dm("mxc-isi"); - dm.add("crossbar"); - dm.add("mxc_isi.0"); - dm.add("mxc_isi.0.capture"); + static const DeviceMatch dm("mxc-isi", { + "crossbar", + "mxc_isi.0", + "mxc_isi.0.capture", + }); isiDev_ = acquireMediaDevice(enumerator, dm); if (!isiDev_) diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index ad20810e6..49554a705 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -845,31 +845,32 @@ int PipelineHandlerIPU3::queueRequestDevice(Camera *camera, Request *request) bool PipelineHandlerIPU3::match(DeviceEnumerator *enumerator) { - int ret; + static const DeviceMatch cio2_dm("ipu3-cio2", { + "ipu3-csi2 0", + "ipu3-cio2 0", + "ipu3-csi2 1", + "ipu3-cio2 1", + "ipu3-csi2 2", + "ipu3-cio2 2", + "ipu3-csi2 3", + "ipu3-cio2 3", + }); + static const DeviceMatch imgu_dm("ipu3-imgu", { + "ipu3-imgu 0", + "ipu3-imgu 0 input", + "ipu3-imgu 0 parameters", + "ipu3-imgu 0 output", + "ipu3-imgu 0 viewfinder", + "ipu3-imgu 0 3a stat", + "ipu3-imgu 1", + "ipu3-imgu 1 input", + "ipu3-imgu 1 parameters", + "ipu3-imgu 1 output", + "ipu3-imgu 1 viewfinder", + "ipu3-imgu 1 3a stat", + }); - DeviceMatch cio2_dm("ipu3-cio2"); - cio2_dm.add("ipu3-csi2 0"); - cio2_dm.add("ipu3-cio2 0"); - cio2_dm.add("ipu3-csi2 1"); - cio2_dm.add("ipu3-cio2 1"); - cio2_dm.add("ipu3-csi2 2"); - cio2_dm.add("ipu3-cio2 2"); - cio2_dm.add("ipu3-csi2 3"); - cio2_dm.add("ipu3-cio2 3"); - - DeviceMatch imgu_dm("ipu3-imgu"); - imgu_dm.add("ipu3-imgu 0"); - imgu_dm.add("ipu3-imgu 0 input"); - imgu_dm.add("ipu3-imgu 0 parameters"); - imgu_dm.add("ipu3-imgu 0 output"); - imgu_dm.add("ipu3-imgu 0 viewfinder"); - imgu_dm.add("ipu3-imgu 0 3a stat"); - imgu_dm.add("ipu3-imgu 1"); - imgu_dm.add("ipu3-imgu 1 input"); - imgu_dm.add("ipu3-imgu 1 parameters"); - imgu_dm.add("ipu3-imgu 1 output"); - imgu_dm.add("ipu3-imgu 1 viewfinder"); - imgu_dm.add("ipu3-imgu 1 3a stat"); + int ret; cio2MediaDev_ = acquireMediaDevice(enumerator, cio2_dm); if (!cio2MediaDev_) diff --git a/src/libcamera/pipeline/mali-c55/mali-c55.cpp b/src/libcamera/pipeline/mali-c55/mali-c55.cpp index 76341ed3f..1d2d48d6d 100644 --- a/src/libcamera/pipeline/mali-c55/mali-c55.cpp +++ b/src/libcamera/pipeline/mali-c55/mali-c55.cpp @@ -1630,12 +1630,13 @@ bool PipelineHandlerMaliC55::match(DeviceEnumerator *enumerator) * The TPG and the downscale pipe are both optional blocks and may not * be fitted. */ - DeviceMatch dm("mali-c55"); - dm.add("mali-c55 isp"); - dm.add("mali-c55 resizer fr"); - dm.add("mali-c55 fr"); - dm.add("mali-c55 3a stats"); - dm.add("mali-c55 3a params"); + static const DeviceMatch dm("mali-c55", { + "mali-c55 isp", + "mali-c55 resizer fr", + "mali-c55 fr", + "mali-c55 3a stats", + "mali-c55 3a params", + }); media_ = acquireMediaDevice(enumerator, dm); if (!media_) diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index 81370f4cd..2dc396ed9 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -1362,12 +1362,13 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor) bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator) { - DeviceMatch dm("rkisp1"); - dm.add("rkisp1_isp"); - dm.add("rkisp1_resizer_mainpath"); - dm.add("rkisp1_mainpath"); - dm.add("rkisp1_stats"); - dm.add("rkisp1_params"); + static const DeviceMatch dm("rkisp1", { + "rkisp1_isp", + "rkisp1_resizer_mainpath", + "rkisp1_mainpath", + "rkisp1_stats", + "rkisp1_params", + }); media_ = acquireMediaDevice(enumerator, dm); if (!media_) @@ -1409,9 +1410,10 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator) param_->bufferReady.connect(this, &PipelineHandlerRkISP1::paramBufferReady); /* If dewarper is present, create its instance. */ - DeviceMatch dwp("dw100"); - dwp.add("dw100-source"); - dwp.add("dw100-sink"); + static const DeviceMatch dwp("dw100", { + "dw100-source", + "dw100-sink", + }); std::shared_ptr<MediaDevice> dwpMediaDevice = enumerator->search(dwp); if (dwpMediaDevice) { diff --git a/src/libcamera/pipeline/rpi/pisp/pisp.cpp b/src/libcamera/pipeline/rpi/pisp/pisp.cpp index 082724c5a..6f244c639 100644 --- a/src/libcamera/pipeline/rpi/pisp/pisp.cpp +++ b/src/libcamera/pipeline/rpi/pisp/pisp.cpp @@ -880,10 +880,12 @@ bool PipelineHandlerPiSP::match(DeviceEnumerator *enumerator) * device nodes due to a sensor subdevice failure. */ for (unsigned int i = 0; i < numCfeDevices; i++) { - DeviceMatch cfe("rp1-cfe"); - cfe.add("rp1-cfe-fe-image0"); - cfe.add("rp1-cfe-fe-stats"); - cfe.add("rp1-cfe-fe-config"); + static const DeviceMatch cfe("rp1-cfe", { + "rp1-cfe-fe-image0", + "rp1-cfe-fe-stats", + "rp1-cfe-fe-config", + }); + MediaDevice *cfeDevice = acquireMediaDevice(enumerator, cfe); if (!cfeDevice) { @@ -891,15 +893,17 @@ bool PipelineHandlerPiSP::match(DeviceEnumerator *enumerator) break; } - DeviceMatch isp("pispbe"); - isp.add("pispbe-input"); - isp.add("pispbe-config"); - isp.add("pispbe-output0"); - isp.add("pispbe-output1"); - isp.add("pispbe-tdn_output"); - isp.add("pispbe-tdn_input"); - isp.add("pispbe-stitch_output"); - isp.add("pispbe-stitch_input"); + static const DeviceMatch isp("pispbe", { + "pispbe-input", + "pispbe-config", + "pispbe-output0", + "pispbe-output1", + "pispbe-tdn_output", + "pispbe-tdn_input", + "pispbe-stitch_output", + "pispbe-stitch_input", + }); + MediaDevice *ispDevice = acquireMediaDevice(enumerator, isp); if (!ispDevice) { diff --git a/src/libcamera/pipeline/rpi/vc4/vc4.cpp b/src/libcamera/pipeline/rpi/vc4/vc4.cpp index 99d43bd0a..7d9e141b3 100644 --- a/src/libcamera/pipeline/rpi/vc4/vc4.cpp +++ b/src/libcamera/pipeline/rpi/vc4/vc4.cpp @@ -172,7 +172,7 @@ bool PipelineHandlerVc4::match(DeviceEnumerator *enumerator) * device nodes due to a sensor subdevice failure. */ for (unsigned int i = 0; i < numUnicamDevices; i++) { - DeviceMatch unicam("unicam"); + static const DeviceMatch unicam("unicam"); MediaDevice *unicamDevice = acquireMediaDevice(enumerator, unicam); if (!unicamDevice) { @@ -180,7 +180,7 @@ bool PipelineHandlerVc4::match(DeviceEnumerator *enumerator) continue; } - DeviceMatch isp("bcm2835-isp"); + static const DeviceMatch isp("bcm2835-isp"); MediaDevice *ispDevice = acquireMediaDevice(enumerator, isp); if (!ispDevice) { diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp index 4b5816dfd..fffbbcd2b 100644 --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp @@ -466,8 +466,8 @@ int PipelineHandlerUVC::queueRequestDevice(Camera *camera, Request *request) bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator) { + static const DeviceMatch dm("uvcvideo"); MediaDevice *media; - DeviceMatch dm("uvcvideo"); media = acquireMediaDevice(enumerator, dm); if (!media) diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp index 07273bd2b..b28a23a13 100644 --- a/src/libcamera/pipeline/vimc/vimc.cpp +++ b/src/libcamera/pipeline/vimc/vimc.cpp @@ -464,17 +464,17 @@ int PipelineHandlerVimc::queueRequestDevice(Camera *camera, Request *request) bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator) { - DeviceMatch dm("vimc"); - - dm.add("Raw Capture 0"); - dm.add("Raw Capture 1"); - dm.add("RGB/YUV Capture"); - dm.add("Sensor A"); - dm.add("Sensor B"); - dm.add("Debayer A"); - dm.add("Debayer B"); - dm.add("RGB/YUV Input"); - dm.add("Scaler"); + static const DeviceMatch dm("vimc", { + "Raw Capture 0", + "Raw Capture 1", + "RGB/YUV Capture", + "Sensor A", + "Sensor B", + "Debayer A", + "Debayer B", + "RGB/YUV Input", + "Scaler", + }); MediaDevice *media = acquireMediaDevice(enumerator, dm); if (!media) diff --git a/test/camera-sensor.cpp b/test/camera-sensor.cpp index c30a2212e..77d6cf741 100644 --- a/test/camera-sensor.cpp +++ b/test/camera-sensor.cpp @@ -39,7 +39,7 @@ protected: return TestFail; } - DeviceMatch dm("vimc"); + static const DeviceMatch dm("vimc"); media_ = enumerator_->search(dm); if (!media_) { cerr << "Unable to find \'vimc\' media device node" << endl; diff --git a/test/delayed_controls.cpp b/test/delayed_controls.cpp index 7bd30e7ae..4c6d7e226 100644 --- a/test/delayed_controls.cpp +++ b/test/delayed_controls.cpp @@ -38,8 +38,9 @@ protected: return TestFail; } - DeviceMatch dm("vivid"); - dm.add("vivid-000-vid-cap"); + static const DeviceMatch dm("vivid", { + "vivid-000-vid-cap", + }); media_ = enumerator_->search(dm); if (!media_) { diff --git a/test/libtest/buffer_source.cpp b/test/libtest/buffer_source.cpp index dde11f365..52bae498d 100644 --- a/test/libtest/buffer_source.cpp +++ b/test/libtest/buffer_source.cpp @@ -29,7 +29,7 @@ BufferSource::~BufferSource() int BufferSource::allocate(const StreamConfiguration &config) { /* Locate and open the video device. */ - std::string videoDeviceName = "vivid-000-vid-out"; + static const std::string videoDeviceName = "vivid-000-vid-out"; std::unique_ptr<DeviceEnumerator> enumerator = DeviceEnumerator::create(); @@ -43,8 +43,9 @@ int BufferSource::allocate(const StreamConfiguration &config) return TestFail; } - DeviceMatch dm("vivid"); - dm.add(videoDeviceName); + static const DeviceMatch dm("vivid", { + videoDeviceName, + }); media_ = enumerator->search(dm); if (!media_) { diff --git a/test/media_device/media_device_test.cpp b/test/media_device/media_device_test.cpp index 3e41d0f04..286580450 100644 --- a/test/media_device/media_device_test.cpp +++ b/test/media_device/media_device_test.cpp @@ -25,7 +25,7 @@ int MediaDeviceTest::init() return TestFail; } - DeviceMatch dm("vimc"); + static const DeviceMatch dm("vimc"); media_ = enumerator_->search(dm); if (!media_) { cerr << "No VIMC media device found: skip test" << endl; diff --git a/test/v4l2_subdevice/v4l2_subdevice_test.cpp b/test/v4l2_subdevice/v4l2_subdevice_test.cpp index c349c9e31..109965b4d 100644 --- a/test/v4l2_subdevice/v4l2_subdevice_test.cpp +++ b/test/v4l2_subdevice/v4l2_subdevice_test.cpp @@ -39,7 +39,7 @@ int V4L2SubdeviceTest::init() return TestFail; } - DeviceMatch dm("vimc"); + static const DeviceMatch dm("vimc"); media_ = enumerator_->search(dm); if (!media_) { cerr << "Unable to find \'vimc\' media device node" << endl; diff --git a/test/v4l2_videodevice/v4l2_m2mdevice.cpp b/test/v4l2_videodevice/v4l2_m2mdevice.cpp index c45f581a8..36a3e3201 100644 --- a/test/v4l2_videodevice/v4l2_m2mdevice.cpp +++ b/test/v4l2_videodevice/v4l2_m2mdevice.cpp @@ -65,9 +65,10 @@ protected: return TestFail; } - DeviceMatch dm("vim2m"); - dm.add("vim2m-source"); - dm.add("vim2m-sink"); + static const DeviceMatch dm("vim2m", { + "vim2m-source", + "vim2m-sink", + }); media_ = enumerator_->search(dm); if (!media_) {
Most `DeviceMatch` objects are constructed from static data and used once, then thrown away. Instead of doing that, give them static lifetime and reuse them on subsequent invocations. Tests using `DeviceMatch` are also converted if possible. Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> --- src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 9 ++-- src/libcamera/pipeline/ipu3/ipu3.cpp | 49 ++++++++++---------- src/libcamera/pipeline/mali-c55/mali-c55.cpp | 13 +++--- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 20 ++++---- src/libcamera/pipeline/rpi/pisp/pisp.cpp | 30 ++++++------ src/libcamera/pipeline/rpi/vc4/vc4.cpp | 4 +- src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 2 +- src/libcamera/pipeline/vimc/vimc.cpp | 22 ++++----- test/camera-sensor.cpp | 2 +- test/delayed_controls.cpp | 5 +- test/libtest/buffer_source.cpp | 7 +-- test/media_device/media_device_test.cpp | 2 +- test/v4l2_subdevice/v4l2_subdevice_test.cpp | 2 +- test/v4l2_videodevice/v4l2_m2mdevice.cpp | 7 +-- 14 files changed, 93 insertions(+), 81 deletions(-)