[libcamera-devel] [PATCH] test: gstreamer_single_stream: Check for cameras before running

Jacopo Mondi jacopo at jmondi.org
Thu Jul 21 13:39:30 CEST 2022


Hi Umang

On Thu, Jul 21, 2022 at 05:04:24PM +0530, Umang Jain wrote:
> Hi Jacopo,
>
> On 7/21/22 16:16, Jacopo Mondi wrote:
> > Hi Umang,
> >
> > On Thu, Jul 21, 2022 at 04:00:20PM +0530, Umang Jain via libcamera-devel wrote:
> > > Before running or setting up the pipeline, check for cameras availablity
> > > first. If no cameras are available, skip the test.
> > >
> > > Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
> > Is this to fix the recurring failing test on rpi ?
>
>
> Yes,  I tested on Rpi that no cameras will fail the test in the same way as
> https://buildbot.libcamera.org/#/builders/16/builds/168
>
> Having a camera passes the test, so the test assumes that a camera is
> present on the system.
>
> >
> > Nit: could you add a Fixes tag ? I also used Reported-by: with a link
> > to a failing build from buildbot. Not that we use it now, but it's
> > nice for statistics ?
> >
> > > ---
> > >   test/gstreamer/gstreamer_single_stream_test.cpp | 13 +++++++++++++
> > >   1 file changed, 13 insertions(+)
> > >
> > > diff --git a/test/gstreamer/gstreamer_single_stream_test.cpp b/test/gstreamer/gstreamer_single_stream_test.cpp
> > > index a0dd12cf..1e0801e8 100644
> > > --- a/test/gstreamer/gstreamer_single_stream_test.cpp
> > > +++ b/test/gstreamer/gstreamer_single_stream_test.cpp
> > > @@ -8,6 +8,8 @@
> > >   #include <iostream>
> > >   #include <unistd.h>
> > >
> > > +#include <libcamera/libcamera.h>
> > > +
> > >   #include <gst/gst.h>
> > >
> > >   #include "gstreamer_test.h"
> > > @@ -29,6 +31,17 @@ protected:
> > >   		if (status_ != TestPass)
> > >   			return status_;
> > >
> > > +		libcamera::CameraManager cm;
> > > +		cm.start();
> > > +
> > > +		bool cameraFound = cm.cameras().size() > 1 ? true : false;
> > > +		if (!cameraFound) {
> > > +			cm.stop();
> > > +			return TestSkip;
> > > +		}
> > > +
> > > +		cm.stop();
> > > +
> > The multistream test has a very similar:
> >
> > 		/* Check if platform supports multistream capture */
> > 		libcamera::CameraManager cm;
> > 		cm.start();
> > 		bool cameraFound = false;
> > 		for (auto &camera : cm.cameras()) {
> > 			if (camera->streams().size() > 1) {
> > 				cameraName_ = camera->id();
> > 				cameraFound = true;
> > 				cm.stop();
> > 				break;
> > 			}
> > 		}
> >
> > 		if (!cameraFound) {
> > 			cm.stop();
> > 			return TestSkip;
> > 		}
> >
> > Is this something that should go in the base class ?
>
>
> I did contemplate putting in the base class itself. That approach might end
> up with multiple cameraManager's start()/stop() cycles (which  I think is
> Okay?).
>
> For e.g. in the multistream test, the base class would start() -> find
> cameras ->stop() and the multistream class would start() -> finding cameras
> with multistream support -> stop(). Then the actual test starts with
> libcamerasrc element. So there's additional one cycle in this case.
>
> whereas single stream test wouldn't need to have any start() -> stop()
> sequence as base class would handle it.
>

Isn't it just a numStream parameter to the base class init() function ?

> Probably it's worth to do it in the base class ... Let me see and get back
> to you
>
> > >   		const gchar *streamDescription = "videoconvert ! fakesink";
> > >   		g_autoptr(GError) error0 = NULL;
> > >   		stream0_ = gst_parse_bin_from_description_full(streamDescription, TRUE,
> > > --
> > > 2.31.1
> > >


More information about the libcamera-devel mailing list