[libcamera-devel] [PATCH 2/2] test: gstreamer: Check availability of cameras before running
Jacopo Mondi
jacopo at jmondi.org
Thu Jul 21 16:23:42 CEST 2022
Hi Umang,
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.
> + */
> + 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>
Thanks
j
> +{
> + 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_;
> +private:
> + bool satisfyCameraStreams(unsigned int numStreams);
> };
> --
> 2.31.1
>
More information about the libcamera-devel
mailing list