static GstCaps * gst_type_find_guess_by_extension (GstTypeFindElement * typefind, GstPad * pad, GstTypeFindProbability * probability) { gchar *ext; GstCaps *caps; ext = gst_type_find_get_extension (typefind, pad); if (!ext) return NULL; caps = gst_type_find_helper_for_extension (GST_OBJECT_CAST (typefind), ext); if (caps) *probability = GST_TYPE_FIND_MAXIMUM; g_free (ext); return caps; }
static GstCaps * gst_type_find_guess_by_extension (GstTypeFindElement * typefind, GstPad * pad, GstTypeFindProbability * probability) { GstQuery *query; gchar *uri; size_t len; gint find; GstCaps *caps; query = gst_query_new_uri (); /* try getting the caps with an uri query and from the extension */ if (!gst_pad_peer_query (pad, query)) goto peer_query_failed; gst_query_parse_uri (query, &uri); if (uri == NULL) goto no_uri; GST_DEBUG_OBJECT (typefind, "finding extension of %s", uri); /* find the extension on the uri, this is everything after a '.' */ len = strlen (uri); find = len - 1; while (find >= 0) { if (uri[find] == '.') break; find--; } if (find < 0) goto no_extension; GST_DEBUG_OBJECT (typefind, "found extension %s", &uri[find + 1]); caps = gst_type_find_helper_for_extension (GST_OBJECT_CAST (typefind), &uri[find + 1]); if (caps) *probability = GST_TYPE_FIND_MAXIMUM; gst_query_unref (query); return caps; /* ERRORS */ peer_query_failed: { GST_WARNING_OBJECT (typefind, "failed to query peer uri"); gst_query_unref (query); return NULL; } no_uri: { GST_WARNING_OBJECT (typefind, "could not parse the peer uri"); gst_query_unref (query); return NULL; } no_extension: { GST_WARNING_OBJECT (typefind, "could not find uri extension in %s", uri); gst_query_unref (query); return NULL; } }