Revert "qtdemux: add context for a preferred protection"
This reverts commit 0ba62ba4805e2cdbed17fa9934762d685be42fd4.
This was pushed by mistake
diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c
index 8e9f5b9..ceef7bf 100644
--- a/gst/isomp4/qtdemux.c
+++ b/gst/isomp4/qtdemux.c
@@ -511,8 +511,6 @@
#endif
static GstStateChangeReturn gst_qtdemux_change_state (GstElement * element,
GstStateChange transition);
-static void gst_qtdemux_set_context (GstElement * element,
- GstContext * context);
static gboolean qtdemux_sink_activate (GstPad * sinkpad, GstObject * parent);
static gboolean qtdemux_sink_activate_mode (GstPad * sinkpad,
GstObject * parent, GstPadMode mode, gboolean active);
@@ -602,7 +600,6 @@
gstelement_class->set_index = GST_DEBUG_FUNCPTR (gst_qtdemux_set_index);
gstelement_class->get_index = GST_DEBUG_FUNCPTR (gst_qtdemux_get_index);
#endif
- gstelement_class->set_context = GST_DEBUG_FUNCPTR (gst_qtdemux_set_context);
gst_tag_register_musicbrainz_tags ();
@@ -661,7 +658,6 @@
qtdemux->cenc_aux_info_sizes = NULL;
qtdemux->cenc_aux_sample_count = 0;
qtdemux->protection_system_ids = NULL;
- qtdemux->preferred_protection_system_id = NULL;
g_queue_init (&qtdemux->protection_event_queue);
gst_segment_init (&qtdemux->segment, GST_FORMAT_TIME);
qtdemux->tag_list = gst_tag_list_new_empty ();
@@ -2125,10 +2121,6 @@
g_ptr_array_free (qtdemux->protection_system_ids, TRUE);
qtdemux->protection_system_ids = NULL;
}
- if (qtdemux->preferred_protection_system_id) {
- g_free (qtdemux->preferred_protection_system_id);
- qtdemux->preferred_protection_system_id = NULL;
- }
} else if (qtdemux->mss_mode) {
gst_flow_combiner_reset (qtdemux->flowcombiner);
for (n = 0; n < qtdemux->n_streams; n++)
@@ -2615,28 +2607,6 @@
}
static void
-gst_qtdemux_set_context (GstElement * element, GstContext * context)
-{
- GstQTDemux *qtdemux = GST_QTDEMUX (element);
-
- g_return_if_fail (GST_IS_CONTEXT (context));
-
- if (gst_context_has_context_type (context,
- "drm-preferred-decryption-system-id")) {
- const GstStructure *s;
-
- s = gst_context_get_structure (context);
- g_free (qtdemux->preferred_protection_system_id);
- qtdemux->preferred_protection_system_id =
- g_strdup (gst_structure_get_string (s, "decryption-system-id"));
- GST_DEBUG_OBJECT (element, "set preferred decryption system to %s",
- qtdemux->preferred_protection_system_id);
- }
-
- GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
-}
-
-static void
qtdemux_parse_ftyp (GstQTDemux * qtdemux, const guint8 * buffer, gint length)
{
/* counts as header data */
@@ -3877,8 +3847,6 @@
event = gst_event_new_protection (sysid_string, pssh,
(parent_box_type == FOURCC_moov) ? "isobmff/moov" : "isobmff/moof");
for (i = 0; i < qtdemux->n_streams; ++i) {
- GST_TRACE_OBJECT (qtdemux,
- "adding protection event for stream %d and system %s", i, sysid_string);
g_queue_push_tail (&qtdemux->streams[i]->protection_scheme_event_queue,
gst_event_ref (event));
}
@@ -5595,8 +5563,6 @@
GstEvent *event;
while ((event = g_queue_pop_head (&stream->protection_scheme_event_queue))) {
- GST_TRACE_OBJECT (stream->pad, "pushing protection event: %"
- GST_PTR_FORMAT, event);
gst_pad_push_event (stream->pad, event);
}
@@ -7790,141 +7756,11 @@
}
static gboolean
-pad_query (const GValue * item, GValue * value, gpointer user_data)
-{
- GstPad *pad = g_value_get_object (item);
- GstQuery *query = user_data;
- gboolean res;
-
- res = gst_pad_peer_query (pad, query);
-
- if (res) {
- g_value_set_boolean (value, TRUE);
- return FALSE;
- }
-
- GST_INFO_OBJECT (pad, "pad peer query failed");
- return TRUE;
-}
-
-static gboolean
-gst_qtdemux_run_query (GstElement * element, GstQuery * query,
- GstPadDirection direction)
-{
- GstIterator *it;
- GstIteratorFoldFunction func = pad_query;
- GValue res = { 0, };
-
- g_value_init (&res, G_TYPE_BOOLEAN);
- g_value_set_boolean (&res, FALSE);
-
- /* Ask neighbor */
- if (direction == GST_PAD_SRC)
- it = gst_element_iterate_src_pads (element);
- else
- it = gst_element_iterate_sink_pads (element);
-
- while (gst_iterator_fold (it, func, &res, query) == GST_ITERATOR_RESYNC)
- gst_iterator_resync (it);
-
- gst_iterator_free (it);
-
- return g_value_get_boolean (&res);
-}
-
-static void
-gst_qtdemux_request_protection_context (GstQTDemux * qtdemux,
- QtDemuxStream * stream)
-{
- GstQuery *query;
- GstContext *ctxt;
- GstElement *element = GST_ELEMENT (qtdemux);
- GstStructure *st;
- gchar **filtered_sys_ids;
- GValue event_list = G_VALUE_INIT;
- GList *walk;
-
- /* 1. Check if we already have the context. */
- if (qtdemux->preferred_protection_system_id != NULL) {
- GST_LOG_OBJECT (element,
- "already have the protection context, no need to request it again");
- return;
- }
-
- g_ptr_array_add (qtdemux->protection_system_ids, NULL);
- filtered_sys_ids = gst_protection_filter_systems_by_available_decryptors (
- (const gchar **) qtdemux->protection_system_ids->pdata);
- g_ptr_array_remove_index (qtdemux->protection_system_ids,
- qtdemux->protection_system_ids->len - 1);
- GST_TRACE_OBJECT (qtdemux, "detected %u protection systems, we have "
- "decryptors for %u of them, running context request",
- qtdemux->protection_system_ids->len, g_strv_length (filtered_sys_ids));
-
- if (stream->protection_scheme_event_queue.length) {
- GST_TRACE_OBJECT (qtdemux, "using stream event queue, length %u",
- stream->protection_scheme_event_queue.length);
- walk = stream->protection_scheme_event_queue.tail;
- } else {
- GST_TRACE_OBJECT (qtdemux, "using demuxer event queue, length %u",
- qtdemux->protection_event_queue.length);
- walk = qtdemux->protection_event_queue.tail;
- }
-
- g_value_init (&event_list, GST_TYPE_LIST);
- for (; walk; walk = g_list_previous (walk)) {
- GValue *event_value = g_new0 (GValue, 1);
- g_value_init (event_value, GST_TYPE_EVENT);
- g_value_set_boxed (event_value, walk->data);
- gst_value_list_append_and_take_value (&event_list, event_value);
- }
-
- /* 2a) Query downstream with GST_QUERY_CONTEXT for the context and
- * check if downstream already has a context of the specific type
- * 2b) Query upstream as above.
- */
- query = gst_query_new_context ("drm-preferred-decryption-system-id");
- st = gst_query_writable_structure (query);
- gst_structure_set (st, "track-id", G_TYPE_UINT, stream->track_id,
- "stream-encryption-systems", G_TYPE_STRV, filtered_sys_ids, NULL);
- gst_structure_set_value (st, "stream-encryption-events", &event_list);
- if (gst_qtdemux_run_query (element, query, GST_PAD_SRC)) {
- gst_query_parse_context (query, &ctxt);
- GST_INFO_OBJECT (element, "found context (%p) in downstream query", ctxt);
- gst_element_set_context (element, ctxt);
- } else if (gst_qtdemux_run_query (element, query, GST_PAD_SINK)) {
- gst_query_parse_context (query, &ctxt);
- GST_INFO_OBJECT (element, "found context (%p) in upstream query", ctxt);
- gst_element_set_context (element, ctxt);
- } else {
- /* 3) Post a GST_MESSAGE_NEED_CONTEXT message on the bus with
- * the required context type and afterwards check if a
- * usable context was set now as in 1). The message could
- * be handled by the parent bins of the element and the
- * application.
- */
- GstMessage *msg;
-
- GST_INFO_OBJECT (element, "posting need context message");
- msg = gst_message_new_need_context (GST_OBJECT_CAST (element),
- "drm-preferred-decryption-system-id");
- st = (GstStructure *) gst_message_get_structure (msg);
- gst_structure_set (st, "track-id", G_TYPE_UINT, stream->track_id,
- "stream-encryption-systems", G_TYPE_STRV, filtered_sys_ids, NULL);
- gst_structure_set_value (st, "stream-encryption-events", &event_list);
- gst_element_post_message (element, msg);
- }
-
- g_strfreev (filtered_sys_ids);
- g_value_unset (&event_list);
- gst_query_unref (query);
-}
-
-static gboolean
gst_qtdemux_configure_protected_caps (GstQTDemux * qtdemux,
QtDemuxStream * stream)
{
GstStructure *s;
- const gchar *selected_system = NULL;
+ const gchar *selected_system;
g_return_val_if_fail (qtdemux != NULL, FALSE);
g_return_val_if_fail (stream != NULL, FALSE);
@@ -7940,41 +7776,17 @@
"cenc protection system information has been found");
return FALSE;
}
-
- gst_qtdemux_request_protection_context (qtdemux, stream);
- if (qtdemux->preferred_protection_system_id != NULL) {
- const gchar *preferred_system_array[] =
- { qtdemux->preferred_protection_system_id, NULL };
-
- selected_system = gst_protection_select_system (preferred_system_array);
-
- if (selected_system) {
- GST_TRACE_OBJECT (qtdemux, "selected preferred system %s",
- qtdemux->preferred_protection_system_id);
- } else {
- GST_WARNING_OBJECT (qtdemux, "could not select preferred system %s "
- "because there is no available decryptor",
- qtdemux->preferred_protection_system_id);
- }
- }
-
- if (!selected_system) {
- g_ptr_array_add (qtdemux->protection_system_ids, NULL);
- selected_system = gst_protection_select_system ((const gchar **)
- qtdemux->protection_system_ids->pdata);
- g_ptr_array_remove_index (qtdemux->protection_system_ids,
- qtdemux->protection_system_ids->len - 1);
- }
-
+ g_ptr_array_add (qtdemux->protection_system_ids, NULL);
+ selected_system = gst_protection_select_system ((const gchar **)
+ qtdemux->protection_system_ids->pdata);
+ g_ptr_array_remove_index (qtdemux->protection_system_ids,
+ qtdemux->protection_system_ids->len - 1);
if (!selected_system) {
GST_ERROR_OBJECT (qtdemux, "stream is protected, but no "
"suitable decryptor element has been found");
return FALSE;
}
- GST_DEBUG_OBJECT (qtdemux, "selected protection system is %s",
- selected_system);
-
s = gst_caps_get_structure (CUR_STREAM (stream)->caps, 0);
if (!gst_structure_has_name (s, "application/x-cenc")) {
gst_structure_set (s,
diff --git a/gst/isomp4/qtdemux.h b/gst/isomp4/qtdemux.h
index 0793723..ad4da3e 100644
--- a/gst/isomp4/qtdemux.h
+++ b/gst/isomp4/qtdemux.h
@@ -151,7 +151,6 @@
guint64 cenc_aux_info_offset;
guint8 *cenc_aux_info_sizes;
guint32 cenc_aux_sample_count;
- gchar *preferred_protection_system_id;
/*