diff options
author | Umang Jain <umang.jain@ideasonboard.com> | 2023-07-04 22:07:00 +0200 |
---|---|---|
committer | Umang Jain <umang.jain@ideasonboard.com> | 2023-07-06 10:05:27 +0200 |
commit | adb1bbb748a12eb2427f2d19a46fae55d99b623a (patch) | |
tree | b0981813dacce5343d78a642f2ce203c60ae27b0 /test/gstreamer/gstreamer_device_provider_test.cpp | |
parent | d06ed87d49ca3d734fd1c2f1409280abb499c625 (diff) |
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>
Diffstat (limited to 'test/gstreamer/gstreamer_device_provider_test.cpp')
-rw-r--r-- | test/gstreamer/gstreamer_device_provider_test.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/test/gstreamer/gstreamer_device_provider_test.cpp b/test/gstreamer/gstreamer_device_provider_test.cpp new file mode 100644 index 00000000..c8606b90 --- /dev/null +++ b/test/gstreamer/gstreamer_device_provider_test.cpp @@ -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) |