QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
GStreamerHelpers.cc
Go to the documentation of this file.
1#include "GStreamerHelpers.h"
2
3#include <gst/rtsp/gstrtspurl.h>
4#include <QtCore/QString>
5#include <QtCore/QStringList>
6
7namespace GStreamer
8{
9
10gboolean
11is_valid_rtsp_uri(const gchar *uri_str)
12{
13 GstRTSPUrl *url = NULL;
14 GstRTSPResult res;
15
16 if (!gst_uri_is_valid(uri_str)) {
17 return FALSE;
18 }
19
20 res = gst_rtsp_url_parse(uri_str, &url);
21 if ((res != GST_RTSP_OK) || (url == NULL)) {
22 return FALSE;
23 }
24
25 gst_rtsp_url_free(url);
26 return TRUE;
27}
28
29bool is_hardware_decoder_factory(GstElementFactory *factory)
30{
31 if (!factory) {
32 return false;
33 }
34
35 const gchar *factoryName = gst_plugin_feature_get_name(GST_PLUGIN_FEATURE(factory));
36 if (!factoryName) {
37 return false;
38 }
39
40 // Exclude Android software decoders (OMXGoogle / C2Android)
41 QString name = QString::fromUtf8(factoryName).toLower();
42 if (name.startsWith("amcviddec-omxgoogle") || name.startsWith("amcviddec-c2android")) {
43 return false;
44 }
45
46 const auto containsHardware = [](const gchar *value) {
47 return value && (g_strrstr(value, "Hardware") != nullptr || g_strrstr(value, "hardware") != nullptr);
48 };
49
50 if (containsHardware(gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_KLASS))) {
51 return true;
52 }
53
54 if (containsHardware(gst_element_factory_get_klass(factory))) {
55 return true;
56 }
57
58 const QString nameLower = QString::fromUtf8(factoryName).toLower();
59 static const QStringList kHardwareTags = {
60 QStringLiteral("va"), // vaapi family
61 QStringLiteral("nv"), // nvidia nvcodec
62 QStringLiteral("qsv"), // intel quick sync
63 QStringLiteral("msdk"), // intel media sdk
64 QStringLiteral("vulkan"), // vulkan accelerated
65 QStringLiteral("d3d"), // direct3d
66 QStringLiteral("dxva"), // directx video accel
67 QStringLiteral("vtdec"), // apple video toolbox
68 QStringLiteral("metal") // metal-based decoders
69 };
70
71 for (const QString &tag : kHardwareTags) {
72 if (nameLower.contains(tag)) {
73 return true;
74 }
75 }
76
77 return false;
78}
79
80} // namespace GStreamer
gboolean is_valid_rtsp_uri(const gchar *uri_str)
bool is_hardware_decoder_factory(GstElementFactory *factory)