test: gstreamer: Fix failure of gstreamer_multistream_test

Multistream test failed with the following logs, to run on Raspberry Pi 4 due
to a bug introduced in one of the recent patches refactoring the code
that fails to set the camera-name property with a valid camera id
string.

WARN libcamerasrc gstlibcamerasrc.cpp:347:gst_libcamera_src_open:<libcamera> error: Could not find a camera named ''.
WARN libcamerasrc gstlibcamerasrc.cpp:347:gst_libcamera_src_open:<libcamera> error: libcamera::CameraMananger::get() returned nullptr

This patch assigns the camera->id() to the variable cameraName_ that is
later used to set element property "camera-name" needed to call the
specific camera which supports multistreams. Move the code to set
element property "camera-name" to base class GstreamerTest.

Fixes: 5646849b59 ("test: gstreamer: Check availability of cameras before running")
Signed-off-by: Vedant Paranjape <vedantparanjape160201@gmail.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Tested-by: Rishikesh Donadkar <rishikeshdonadkar@gmail.com>
Reviewed-by: Rishikesh Donadkar <rishikeshdonadkar@gmail.com>
Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
This commit is contained in:
Vedant Paranjape 2022-09-10 12:07:42 +05:30 committed by Umang Jain
parent 046f83e8df
commit 46340ced12
3 changed files with 6 additions and 6 deletions

View file

@ -70,8 +70,6 @@ protected:
int run() override int run() override
{ {
g_object_set(libcameraSrc_, "camera-name", cameraName_.c_str(), NULL);
/* Build the pipeline */ /* Build the pipeline */
gst_bin_add_many(GST_BIN(pipeline_), libcameraSrc_, gst_bin_add_many(GST_BIN(pipeline_), libcameraSrc_,
stream0_, stream1_, NULL); stream0_, stream1_, NULL);
@ -106,7 +104,6 @@ protected:
} }
private: private:
std::string cameraName_;
GstElement *stream0_; GstElement *stream0_;
GstElement *stream1_; GstElement *stream1_;
}; };

View file

@ -73,7 +73,7 @@ GstreamerTest::GstreamerTest(unsigned int numStreams)
* Atleast one camera should be available with numStreams streams, * Atleast one camera should be available with numStreams streams,
* otherwise skip the test entirely. * otherwise skip the test entirely.
*/ */
if (!checkMinCameraStreams(numStreams)) { if (!checkMinCameraStreamsAndSetCameraName(numStreams)) {
status_ = TestSkip; status_ = TestSkip;
return; return;
} }
@ -81,7 +81,7 @@ GstreamerTest::GstreamerTest(unsigned int numStreams)
status_ = TestPass; status_ = TestPass;
} }
bool GstreamerTest::checkMinCameraStreams(unsigned int numStreams) bool GstreamerTest::checkMinCameraStreamsAndSetCameraName(unsigned int numStreams)
{ {
libcamera::CameraManager cm; libcamera::CameraManager cm;
bool cameraFound = false; bool cameraFound = false;
@ -93,6 +93,7 @@ bool GstreamerTest::checkMinCameraStreams(unsigned int numStreams)
continue; continue;
cameraFound = true; cameraFound = true;
cameraName_ = camera->id();
break; break;
} }
@ -121,6 +122,7 @@ int GstreamerTest::createPipeline()
return TestFail; return TestFail;
} }
g_object_set(libcameraSrc_, "camera-name", cameraName_.c_str(), NULL);
g_object_ref_sink(libcameraSrc_); g_object_ref_sink(libcameraSrc_);
return TestPass; return TestPass;

View file

@ -24,10 +24,11 @@ protected:
int processEvent(); int processEvent();
void printError(GstMessage *msg); void printError(GstMessage *msg);
std::string cameraName_;
GstElement *pipeline_; GstElement *pipeline_;
GstElement *libcameraSrc_; GstElement *libcameraSrc_;
int status_; int status_;
private: private:
bool checkMinCameraStreams(unsigned int numStreams); bool checkMinCameraStreamsAndSetCameraName(unsigned int numStreams);
}; };