@@ -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_)
@@ -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_)
@@ -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_)
@@ -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) {
@@ -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) {
@@ -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) {
@@ -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)
@@ -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)
@@ -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;
@@ -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_) {
@@ -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_) {
@@ -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;
@@ -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;
@@ -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(-)