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

Umang Jain umang.jain at ideasonboard.com
Thu Jul 21 13:34:24 CEST 2022


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.

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