tests: gstreamer: Test cameras' enumeration from GstDeviceProvider

Test the enumeration of the cameras through GstDeviceProvider against
the libcamera camera manager.

Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
This commit is contained in:
Umang Jain 2023-07-04 22:07:00 +02:00
parent d06ed87d49
commit adb1bbb748
2 changed files with 78 additions and 0 deletions

View file

@ -0,0 +1,77 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (C) 2023, Umang Jain <umang.jain@ideasonboard.com>
*
* gstreamer_single_stream_test.cpp - GStreamer single stream capture test
*/
#include <vector>
#include <libcamera/libcamera.h>
#include <gst/gst.h>
#include "gstreamer_test.h"
#include "test.h"
using namespace std;
class GstreamerDeviceProviderTest : public GstreamerTest, public Test
{
public:
GstreamerDeviceProviderTest()
: GstreamerTest()
{
}
protected:
int init() override
{
if (status_ != TestPass)
return status_;
return TestPass;
}
int run() override
{
g_autoptr(GstDeviceProvider) provider;
GList *devices, *l;
std::vector<std::string> cameraNames;
std::unique_ptr<libcamera::CameraManager> cm;
cm = std::make_unique<libcamera::CameraManager>();
cm->start();
for (auto &camera : cm->cameras())
cameraNames.push_back(camera->id());
cm->stop();
cm.reset();
provider = gst_device_provider_factory_get_by_name("libcameraprovider");
devices = gst_device_provider_get_devices(provider);
for (l = devices; l != NULL; l = g_list_next(l)) {
GstDevice *device = GST_DEVICE(l->data);
g_autofree gchar *gst_name;
bool matched = false;
g_autoptr(GstElement) element = gst_device_create_element(device, NULL);
g_object_get(element, "camera-name", &gst_name, NULL);
for (auto name : cameraNames) {
if (strcmp(name.c_str(), gst_name) == 0) {
matched = true;
break;
}
}
if (!matched)
return TestFail;
}
g_list_free_full(devices, (GDestroyNotify)gst_object_unref);
return TestPass;
}
};
TEST_REGISTER(GstreamerDeviceProviderTest)

View file

@ -7,6 +7,7 @@ endif
gstreamer_tests = [ gstreamer_tests = [
{'name': 'single_stream_test', 'sources': ['gstreamer_single_stream_test.cpp']}, {'name': 'single_stream_test', 'sources': ['gstreamer_single_stream_test.cpp']},
{'name': 'multi_stream_test', 'sources': ['gstreamer_multi_stream_test.cpp']}, {'name': 'multi_stream_test', 'sources': ['gstreamer_multi_stream_test.cpp']},
{'name': 'device_provider_test', 'sources': ['gstreamer_device_provider_test.cpp']},
] ]
gstreamer_dep = dependency('gstreamer-1.0', required: true) gstreamer_dep = dependency('gstreamer-1.0', required: true)