[libcamera-devel] [PATCH 2/2] test: gstreamer: Check availability of cameras before running
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Jul 21 17:02:33 CEST 2022
Hello,
On Thu, Jul 21, 2022 at 04:23:42PM +0200, Jacopo Mondi via libcamera-devel wrote:
> On Thu, Jul 21, 2022 at 07:15:31PM +0530, Umang Jain via libcamera-devel wrote:
> > Move the logic for checking the availability of cameras from
> > multi_stream_test to gstreamer test base class. Since
> > single_stream_class always assumes that a camera is available on the
> > system (which is not always the case for e.g. RPi in CI/CD environments)
> > it makes sense to have the availability check in the base class.
> > If no cameras are available, the behaviour should be to skip instead
> > of a failure.
> >
> > We currently have 2 tests for gstreamer differing based on number
> > of streams supported by the camera. Hence, the camera availability
> > is checked in conjunction with the number of the streams required by
> > the derived class.
> >
> > Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
> > ---
> > .../gstreamer/gstreamer_multi_stream_test.cpp | 20 +----------
> > test/gstreamer/gstreamer_test.cpp | 33 ++++++++++++++++++-
> > test/gstreamer/gstreamer_test.h | 4 ++-
> > 3 files changed, 36 insertions(+), 21 deletions(-)
> >
> > diff --git a/test/gstreamer/gstreamer_multi_stream_test.cpp b/test/gstreamer/gstreamer_multi_stream_test.cpp
> > index 112f1dee..b8387c10 100644
> > --- a/test/gstreamer/gstreamer_multi_stream_test.cpp
> > +++ b/test/gstreamer/gstreamer_multi_stream_test.cpp
> > @@ -29,7 +29,7 @@ class GstreamerMultiStreamTest : public GstreamerTest, public Test
> > {
> > public:
> > GstreamerMultiStreamTest()
> > - : GstreamerTest()
> > + : GstreamerTest(2)
>
> As this is a test, I think it's ok even if it's a tad rough
>
> > {
> > }
> >
> > @@ -39,24 +39,6 @@ protected:
> > if (status_ != TestPass)
> > return status_;
> >
> > - /* 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;
> > - }
> > -
> > const gchar *streamDescription = "queue ! fakesink";
> > g_autoptr(GError) error = NULL;
> >
> > diff --git a/test/gstreamer/gstreamer_test.cpp b/test/gstreamer/gstreamer_test.cpp
> > index cfb8afc6..4668aa00 100644
> > --- a/test/gstreamer/gstreamer_test.cpp
> > +++ b/test/gstreamer/gstreamer_test.cpp
> > @@ -5,6 +5,7 @@
> > * libcamera Gstreamer element API tests
> > */
> >
> > +#include <libcamera/libcamera.h>
>
> Empty line ?
>
> > #include <libcamera/base/utils.h>
> >
> > #include "gstreamer_test.h"
> > @@ -25,9 +26,10 @@ const char *__asan_default_options()
> > }
> > }
> >
> > -GstreamerTest::GstreamerTest()
> > +GstreamerTest::GstreamerTest(unsigned int numStreams)
> > : pipeline_(nullptr), libcameraSrc_(nullptr)
> > {
> > +
>
> No empty line :)
>
>
> > /*
> > * GStreamer by default spawns a process to run the
> > * gst-plugin-scanner helper. If libcamera is compiled with ASan
> > @@ -67,9 +69,38 @@ GstreamerTest::GstreamerTest()
> > return;
> > }
> >
> > + /*
> > + * Atleast one camera should be available with numStreams streams
> > + * otherwise, skip the test entirely.
* Atleast one camera should be available with numStreams streams,
* otherwise skip the test entirely.
> > + */
> > + if (!satisfyCameraStreams(numStreams)) {
> > + status_ = TestSkip;
> > + return;
> > + }
> > +
> > status_ = TestPass;
> > }
> >
> > +bool GstreamerTest::satisfyCameraStreams(unsigned int numStreams)
>
> Bikeshedding on the function name apart...
> And with Nicolas comment clarified
>
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
>
> > +{
> > + libcamera::CameraManager cm;
> > + bool cameraFound = false;
> > +
> > + cm.start();
> > +
> > + for (auto &camera : cm.cameras()) {
> > + if (camera->streams().size() < numStreams)
> > + continue;
> > +
> > + cameraFound = true;
> > + break;
> > + }
> > +
> > + cm.stop();
> > +
> > + return cameraFound;
> > +}
> > +
> > GstreamerTest::~GstreamerTest()
> > {
> > g_clear_object(&pipeline_);
> > diff --git a/test/gstreamer/gstreamer_test.h b/test/gstreamer/gstreamer_test.h
> > index 35adab0e..fa41721f 100644
> > --- a/test/gstreamer/gstreamer_test.h
> > +++ b/test/gstreamer/gstreamer_test.h
> > @@ -15,7 +15,7 @@
> > class GstreamerTest
> > {
> > public:
> > - GstreamerTest();
> > + GstreamerTest(unsigned int numStreams = 1);
> > virtual ~GstreamerTest();
> >
> > protected:
> > @@ -27,4 +27,6 @@ protected:
> > GstElement *pipeline_;
> > GstElement *libcameraSrc_;
> > int status_;
Blank line.
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > +private:
> > + bool satisfyCameraStreams(unsigned int numStreams);
> > };
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list