summaryrefslogtreecommitdiff
path: root/Tools/gtk/patches/gstreamer-0001-protection-added-function-to-filter-system-ids.patch
blob: e72ef6c132c631402244f7262730d6db41381d8a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
From 7772eb350591682b6a315c8a87a58131f731f1d4 Mon Sep 17 00:00:00 2001
From: Xabier Rodriguez Calvar <calvaris@igalia.com>
Date: Wed, 19 Oct 2016 16:44:16 +0200
Subject: [PATCH] protection: added function to filter system ids

gst_protection_filter_systems_by_available_decryptors takes an array of
strings and returns a new array of strings filtered by the avaible
decryptors for them so the ones you get are the ones that you should be
able to decrypt.
---
 gst/gstprotection.c | 36 ++++++++++++++++++++++++++++++++++++
 gst/gstprotection.h |  2 ++
 2 files changed, 38 insertions(+)

diff --git a/gst/gstprotection.c b/gst/gstprotection.c
index 8ee52ea..2d7e5e0 100644
--- a/gst/gstprotection.c
+++ b/gst/gstprotection.c
@@ -191,6 +191,42 @@ gst_protection_select_system (const gchar ** system_identifiers)
   return retval;
 }
 
+gchar **
+gst_protection_filter_systems_by_available_decryptors (const gchar **
+    system_identifiers)
+{
+  GList *decryptors, *walk;
+  gchar **retval;
+  guint i = 0, decryptors_number;
+
+  decryptors =
+      gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_DECRYPTOR,
+      GST_RANK_MARGINAL);
+
+  decryptors_number = g_list_length (decryptors);
+  retval = g_new (gchar *, decryptors_number + 1);
+
+  GST_TRACE ("found %u decrytors", decryptors_number);
+
+  for (walk = decryptors; walk; walk = g_list_next (walk)) {
+    GstElementFactory *fact = (GstElementFactory *) walk->data;
+
+    const char *found_sys_id =
+        gst_protection_factory_check (fact, system_identifiers);
+    GST_TRACE ("factory %s is valid for %s", GST_OBJECT_NAME (fact),
+        found_sys_id);
+
+    if (found_sys_id) {
+      retval[i++] = g_strdup (found_sys_id);
+    }
+  }
+  retval[i] = NULL;
+
+  gst_plugin_feature_list_free (decryptors);
+
+  return retval;
+}
+
 static const gchar *
 gst_protection_factory_check (GstElementFactory * fact,
     const gchar ** system_identifiers)
diff --git a/gst/gstprotection.h b/gst/gstprotection.h
index f2f54c4..95976c5 100644
--- a/gst/gstprotection.h
+++ b/gst/gstprotection.h
@@ -66,6 +66,8 @@ GstProtectionMeta *gst_buffer_add_protection_meta (GstBuffer * buffer,
     GstStructure * info);
 
 const gchar *gst_protection_select_system (const gchar ** system_identifiers);
+gchar ** gst_protection_filter_systems_by_available_decryptors (
+    const gchar ** system_identifiers);
 
 G_END_DECLS
 #endif /* __GST_PROTECTION_META_H__ */
-- 
2.10.2