mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-16 19:25:18 +00:00
testsuite/registry/: A little program that looks through the registry to find elements of a given type. Not particul...
Original commit message from CVS: * testsuite/registry/Makefile.am: * testsuite/registry/gst-print-formats.c: (print_pad_templates_info), (print_element_list), (print_typefind_list), (list_sort_func), (get_typefind_mime_list), (g_list_uniqify), (get_pad_templates_info), (get_element_mime_list), (print_mime_list), (main): A little program that looks through the registry to find elements of a given type. Not particularly interesting as a test, except that there's no other test covering the same area.
This commit is contained in:
parent
d84d463b1d
commit
927b5ed9ac
5 changed files with 720 additions and 0 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
|||
2005-01-05 David Schleef <ds@schleef.org>
|
||||
|
||||
* testsuite/registry/Makefile.am:
|
||||
* testsuite/registry/gst-print-formats.c:
|
||||
(print_pad_templates_info), (print_element_list),
|
||||
(print_typefind_list), (list_sort_func), (get_typefind_mime_list),
|
||||
(g_list_uniqify), (get_pad_templates_info),
|
||||
(get_element_mime_list), (print_mime_list), (main): A little
|
||||
program that looks through the registry to find elements of
|
||||
a given type. Not particularly interesting as a test, except
|
||||
that there's no other test covering the same area.
|
||||
|
||||
2005-01-05 David Schleef <ds@schleef.org>
|
||||
|
||||
* tools/gst-launch.c: (idle_func), (fault_handler_sighandler),
|
||||
|
|
7
tests/old/testsuite/registry/Makefile.am
Normal file
7
tests/old/testsuite/registry/Makefile.am
Normal file
|
@ -0,0 +1,7 @@
|
|||
include ../Rules
|
||||
|
||||
tests_pass = gst-print-formats
|
||||
tests_fail =
|
||||
tests_ignore =
|
||||
|
||||
|
347
tests/old/testsuite/registry/gst-print-formats.c
Normal file
347
tests/old/testsuite/registry/gst-print-formats.c
Normal file
|
@ -0,0 +1,347 @@
|
|||
/* GStreamer
|
||||
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
|
||||
* 2000 Wim Taymans <wtay@chello.be>
|
||||
* 2004 Thomas Vander Stichele <thomas@apestaart.org>
|
||||
*
|
||||
* gst-inspect.c: tool to inspect the GStreamer registry
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gst/gst.h>
|
||||
|
||||
#include "gst/gst-i18n-app.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <locale.h>
|
||||
#include <glib/gprintf.h>
|
||||
|
||||
#define static
|
||||
|
||||
static void
|
||||
print_pad_templates_info (GstElement * element, GstElementFactory * factory,
|
||||
GstPadDirection dir)
|
||||
{
|
||||
GstElementClass *gstelement_class;
|
||||
const GList *pads;
|
||||
GstPadTemplate *padtemplate;
|
||||
|
||||
if (!factory->numpadtemplates) {
|
||||
return;
|
||||
}
|
||||
|
||||
gstelement_class = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS (element));
|
||||
|
||||
pads = factory->padtemplates;
|
||||
while (pads) {
|
||||
padtemplate = (GstPadTemplate *) (pads->data);
|
||||
pads = g_list_next (pads);
|
||||
|
||||
if (padtemplate->direction == dir) {
|
||||
if (padtemplate->caps) {
|
||||
GstStructure *structure;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < gst_caps_get_size (padtemplate->caps); i++) {
|
||||
structure = gst_caps_get_structure (padtemplate->caps, i);
|
||||
g_print (" %s\n", gst_structure_get_name (structure));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
print_element_list (const char *klass, GstPadDirection dir)
|
||||
{
|
||||
GList *plugins;
|
||||
|
||||
g_print ("Elements in %s:\n", klass);
|
||||
for (plugins = gst_registry_pool_plugin_list (); plugins;
|
||||
plugins = g_list_next (plugins)) {
|
||||
GList *features;
|
||||
GstPlugin *plugin;
|
||||
|
||||
plugin = (GstPlugin *) (plugins->data);
|
||||
|
||||
features = gst_plugin_get_feature_list (plugin);
|
||||
while (features) {
|
||||
GstPluginFeature *feature;
|
||||
|
||||
feature = GST_PLUGIN_FEATURE (features->data);
|
||||
|
||||
if (GST_IS_ELEMENT_FACTORY (feature)) {
|
||||
GstElementFactory *factory;
|
||||
GstElement *element;
|
||||
|
||||
factory = GST_ELEMENT_FACTORY (feature);
|
||||
if (strncmp (factory->details.klass, klass, strlen (klass)) == 0) {
|
||||
g_print (" %s: %s (%d)\n", GST_PLUGIN_FEATURE_NAME (factory),
|
||||
factory->details.longname, gst_plugin_feature_get_rank (feature));
|
||||
element = gst_element_factory_create (factory, NULL);
|
||||
print_pad_templates_info (element, factory, dir);
|
||||
gst_object_unref (GST_OBJECT (element));
|
||||
}
|
||||
}
|
||||
|
||||
features = g_list_next (features);
|
||||
}
|
||||
}
|
||||
g_print ("\n");
|
||||
}
|
||||
|
||||
static void
|
||||
print_typefind_list (void)
|
||||
{
|
||||
GList *plugins;
|
||||
|
||||
g_print ("Typefind list:\n");
|
||||
for (plugins = gst_registry_pool_plugin_list (); plugins;
|
||||
plugins = g_list_next (plugins)) {
|
||||
GList *features;
|
||||
GstPlugin *plugin;
|
||||
|
||||
plugin = (GstPlugin *) (plugins->data);
|
||||
|
||||
features = gst_plugin_get_feature_list (plugin);
|
||||
while (features) {
|
||||
GstPluginFeature *feature;
|
||||
|
||||
feature = GST_PLUGIN_FEATURE (features->data);
|
||||
|
||||
if (GST_IS_TYPE_FIND_FACTORY (feature)) {
|
||||
GstTypeFindFactory *factory;
|
||||
char *s;
|
||||
|
||||
gst_plugin_load_file (plugin->filename, NULL);
|
||||
|
||||
factory = GST_TYPE_FIND_FACTORY (feature);
|
||||
g_print (" %s: (%d)\n", GST_PLUGIN_FEATURE_NAME (factory),
|
||||
gst_plugin_feature_get_rank (feature));
|
||||
s = gst_caps_to_string (gst_type_find_factory_get_caps (factory));
|
||||
g_print (" %s\n", s);
|
||||
g_free (s);
|
||||
}
|
||||
|
||||
features = g_list_next (features);
|
||||
}
|
||||
}
|
||||
g_print ("\n");
|
||||
}
|
||||
|
||||
static int
|
||||
list_sort_func (gconstpointer a, gconstpointer b)
|
||||
{
|
||||
return strcmp ((const char *) a, (const char *) b);
|
||||
}
|
||||
|
||||
static GList *
|
||||
get_typefind_mime_list (void)
|
||||
{
|
||||
GList *plugins;
|
||||
GList *mime_list = NULL;
|
||||
|
||||
for (plugins = gst_registry_pool_plugin_list (); plugins;
|
||||
plugins = g_list_next (plugins)) {
|
||||
GList *features;
|
||||
GstPlugin *plugin;
|
||||
|
||||
plugin = (GstPlugin *) (plugins->data);
|
||||
|
||||
features = gst_plugin_get_feature_list (plugin);
|
||||
while (features) {
|
||||
GstPluginFeature *feature;
|
||||
|
||||
feature = GST_PLUGIN_FEATURE (features->data);
|
||||
|
||||
if (GST_IS_TYPE_FIND_FACTORY (feature)) {
|
||||
GstTypeFindFactory *factory;
|
||||
char *s;
|
||||
int i;
|
||||
const GstCaps *caps;
|
||||
|
||||
factory = GST_TYPE_FIND_FACTORY (feature);
|
||||
caps = gst_type_find_factory_get_caps (factory);
|
||||
|
||||
if (gst_plugin_feature_get_rank (feature) > 0 && caps != NULL) {
|
||||
for (i = 0; i < gst_caps_get_size (caps); i++) {
|
||||
const GstStructure *structure = gst_caps_get_structure (caps, i);
|
||||
|
||||
s = g_strdup (gst_structure_get_name (structure));
|
||||
mime_list = g_list_prepend (mime_list, s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
features = g_list_next (features);
|
||||
}
|
||||
}
|
||||
|
||||
return mime_list;
|
||||
}
|
||||
|
||||
GList *
|
||||
g_list_uniqify (GList * list)
|
||||
{
|
||||
GList *item;
|
||||
|
||||
for (item = g_list_first (list); item; item = g_list_next (item)) {
|
||||
GList *next_item = g_list_next (item);
|
||||
|
||||
while (next_item && strcmp (item->data, next_item->data) == 0) {
|
||||
g_free (next_item->data);
|
||||
list = g_list_delete_link (list, next_item);
|
||||
next_item = g_list_next (item);
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
static GList *
|
||||
get_pad_templates_info (GstElement * element, GstElementFactory * factory,
|
||||
GstPadDirection dir)
|
||||
{
|
||||
GstElementClass *gstelement_class;
|
||||
const GList *pads;
|
||||
GstPadTemplate *padtemplate;
|
||||
GList *mime_list = NULL;
|
||||
|
||||
if (!factory->numpadtemplates) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gstelement_class = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS (element));
|
||||
|
||||
pads = factory->padtemplates;
|
||||
while (pads) {
|
||||
padtemplate = (GstPadTemplate *) (pads->data);
|
||||
pads = g_list_next (pads);
|
||||
|
||||
if (padtemplate->direction == dir) {
|
||||
if (padtemplate->caps) {
|
||||
GstStructure *structure;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < gst_caps_get_size (padtemplate->caps); i++) {
|
||||
structure = gst_caps_get_structure (padtemplate->caps, i);
|
||||
mime_list = g_list_prepend (mime_list,
|
||||
g_strdup (gst_structure_get_name (structure)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return mime_list;
|
||||
}
|
||||
|
||||
static GList *
|
||||
get_element_mime_list (const char *klass, GstPadDirection dir)
|
||||
{
|
||||
GList *mime_list = NULL;
|
||||
GList *plugins;
|
||||
|
||||
for (plugins = gst_registry_pool_plugin_list (); plugins;
|
||||
plugins = g_list_next (plugins)) {
|
||||
GList *features;
|
||||
GstPlugin *plugin;
|
||||
|
||||
plugin = (GstPlugin *) (plugins->data);
|
||||
|
||||
features = gst_plugin_get_feature_list (plugin);
|
||||
while (features) {
|
||||
GstPluginFeature *feature;
|
||||
|
||||
feature = GST_PLUGIN_FEATURE (features->data);
|
||||
|
||||
if (GST_IS_ELEMENT_FACTORY (feature)) {
|
||||
GstElementFactory *factory;
|
||||
GstElement *element;
|
||||
|
||||
factory = GST_ELEMENT_FACTORY (feature);
|
||||
if (strncmp (factory->details.klass, klass, strlen (klass)) == 0) {
|
||||
if (gst_plugin_feature_get_rank (feature) > 0) {
|
||||
GList *list;
|
||||
|
||||
element = gst_element_factory_create (factory, NULL);
|
||||
list = get_pad_templates_info (element, factory, dir);
|
||||
mime_list = g_list_concat (mime_list, list);
|
||||
gst_object_unref (GST_OBJECT (element));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
features = g_list_next (features);
|
||||
}
|
||||
}
|
||||
|
||||
return mime_list;
|
||||
}
|
||||
|
||||
static void
|
||||
print_mime_list (void)
|
||||
{
|
||||
GList *list;
|
||||
GList *typefind_list;
|
||||
GList *item;
|
||||
GList *item2;
|
||||
|
||||
typefind_list = get_typefind_mime_list ();
|
||||
typefind_list = g_list_sort (typefind_list, list_sort_func);
|
||||
typefind_list = g_list_uniqify (typefind_list);
|
||||
|
||||
list = get_element_mime_list ("Codec/Demuxer", GST_PAD_SINK);
|
||||
list = g_list_concat (list, get_element_mime_list ("Codec/Decoder",
|
||||
GST_PAD_SINK));
|
||||
list = g_list_sort (list, list_sort_func);
|
||||
list = g_list_uniqify (list);
|
||||
|
||||
g_print ("MIME media type list:\n");
|
||||
for (item = g_list_first (list); item; item = g_list_next (item)) {
|
||||
for (item2 = g_list_first (typefind_list); item2;
|
||||
item2 = g_list_next (item2)) {
|
||||
if (strcmp ((char *) item->data, (char *) item2->data) == 0) {
|
||||
g_print (" %s\n", (char *) item->data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
|
||||
#ifdef GETTEXT_PACKAGE
|
||||
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
||||
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||
textdomain (GETTEXT_PACKAGE);
|
||||
#endif
|
||||
|
||||
gst_init (&argc, &argv);
|
||||
|
||||
print_element_list ("Codec/Demuxer", GST_PAD_SINK);
|
||||
print_element_list ("Codec/Decoder", GST_PAD_SINK);
|
||||
print_element_list ("Codec/Muxer", GST_PAD_SRC);
|
||||
print_element_list ("Codec/Encoder", GST_PAD_SRC);
|
||||
print_typefind_list ();
|
||||
print_mime_list ();
|
||||
|
||||
return 0;
|
||||
}
|
7
testsuite/registry/Makefile.am
Normal file
7
testsuite/registry/Makefile.am
Normal file
|
@ -0,0 +1,7 @@
|
|||
include ../Rules
|
||||
|
||||
tests_pass = gst-print-formats
|
||||
tests_fail =
|
||||
tests_ignore =
|
||||
|
||||
|
347
testsuite/registry/gst-print-formats.c
Normal file
347
testsuite/registry/gst-print-formats.c
Normal file
|
@ -0,0 +1,347 @@
|
|||
/* GStreamer
|
||||
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
|
||||
* 2000 Wim Taymans <wtay@chello.be>
|
||||
* 2004 Thomas Vander Stichele <thomas@apestaart.org>
|
||||
*
|
||||
* gst-inspect.c: tool to inspect the GStreamer registry
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gst/gst.h>
|
||||
|
||||
#include "gst/gst-i18n-app.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <locale.h>
|
||||
#include <glib/gprintf.h>
|
||||
|
||||
#define static
|
||||
|
||||
static void
|
||||
print_pad_templates_info (GstElement * element, GstElementFactory * factory,
|
||||
GstPadDirection dir)
|
||||
{
|
||||
GstElementClass *gstelement_class;
|
||||
const GList *pads;
|
||||
GstPadTemplate *padtemplate;
|
||||
|
||||
if (!factory->numpadtemplates) {
|
||||
return;
|
||||
}
|
||||
|
||||
gstelement_class = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS (element));
|
||||
|
||||
pads = factory->padtemplates;
|
||||
while (pads) {
|
||||
padtemplate = (GstPadTemplate *) (pads->data);
|
||||
pads = g_list_next (pads);
|
||||
|
||||
if (padtemplate->direction == dir) {
|
||||
if (padtemplate->caps) {
|
||||
GstStructure *structure;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < gst_caps_get_size (padtemplate->caps); i++) {
|
||||
structure = gst_caps_get_structure (padtemplate->caps, i);
|
||||
g_print (" %s\n", gst_structure_get_name (structure));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
print_element_list (const char *klass, GstPadDirection dir)
|
||||
{
|
||||
GList *plugins;
|
||||
|
||||
g_print ("Elements in %s:\n", klass);
|
||||
for (plugins = gst_registry_pool_plugin_list (); plugins;
|
||||
plugins = g_list_next (plugins)) {
|
||||
GList *features;
|
||||
GstPlugin *plugin;
|
||||
|
||||
plugin = (GstPlugin *) (plugins->data);
|
||||
|
||||
features = gst_plugin_get_feature_list (plugin);
|
||||
while (features) {
|
||||
GstPluginFeature *feature;
|
||||
|
||||
feature = GST_PLUGIN_FEATURE (features->data);
|
||||
|
||||
if (GST_IS_ELEMENT_FACTORY (feature)) {
|
||||
GstElementFactory *factory;
|
||||
GstElement *element;
|
||||
|
||||
factory = GST_ELEMENT_FACTORY (feature);
|
||||
if (strncmp (factory->details.klass, klass, strlen (klass)) == 0) {
|
||||
g_print (" %s: %s (%d)\n", GST_PLUGIN_FEATURE_NAME (factory),
|
||||
factory->details.longname, gst_plugin_feature_get_rank (feature));
|
||||
element = gst_element_factory_create (factory, NULL);
|
||||
print_pad_templates_info (element, factory, dir);
|
||||
gst_object_unref (GST_OBJECT (element));
|
||||
}
|
||||
}
|
||||
|
||||
features = g_list_next (features);
|
||||
}
|
||||
}
|
||||
g_print ("\n");
|
||||
}
|
||||
|
||||
static void
|
||||
print_typefind_list (void)
|
||||
{
|
||||
GList *plugins;
|
||||
|
||||
g_print ("Typefind list:\n");
|
||||
for (plugins = gst_registry_pool_plugin_list (); plugins;
|
||||
plugins = g_list_next (plugins)) {
|
||||
GList *features;
|
||||
GstPlugin *plugin;
|
||||
|
||||
plugin = (GstPlugin *) (plugins->data);
|
||||
|
||||
features = gst_plugin_get_feature_list (plugin);
|
||||
while (features) {
|
||||
GstPluginFeature *feature;
|
||||
|
||||
feature = GST_PLUGIN_FEATURE (features->data);
|
||||
|
||||
if (GST_IS_TYPE_FIND_FACTORY (feature)) {
|
||||
GstTypeFindFactory *factory;
|
||||
char *s;
|
||||
|
||||
gst_plugin_load_file (plugin->filename, NULL);
|
||||
|
||||
factory = GST_TYPE_FIND_FACTORY (feature);
|
||||
g_print (" %s: (%d)\n", GST_PLUGIN_FEATURE_NAME (factory),
|
||||
gst_plugin_feature_get_rank (feature));
|
||||
s = gst_caps_to_string (gst_type_find_factory_get_caps (factory));
|
||||
g_print (" %s\n", s);
|
||||
g_free (s);
|
||||
}
|
||||
|
||||
features = g_list_next (features);
|
||||
}
|
||||
}
|
||||
g_print ("\n");
|
||||
}
|
||||
|
||||
static int
|
||||
list_sort_func (gconstpointer a, gconstpointer b)
|
||||
{
|
||||
return strcmp ((const char *) a, (const char *) b);
|
||||
}
|
||||
|
||||
static GList *
|
||||
get_typefind_mime_list (void)
|
||||
{
|
||||
GList *plugins;
|
||||
GList *mime_list = NULL;
|
||||
|
||||
for (plugins = gst_registry_pool_plugin_list (); plugins;
|
||||
plugins = g_list_next (plugins)) {
|
||||
GList *features;
|
||||
GstPlugin *plugin;
|
||||
|
||||
plugin = (GstPlugin *) (plugins->data);
|
||||
|
||||
features = gst_plugin_get_feature_list (plugin);
|
||||
while (features) {
|
||||
GstPluginFeature *feature;
|
||||
|
||||
feature = GST_PLUGIN_FEATURE (features->data);
|
||||
|
||||
if (GST_IS_TYPE_FIND_FACTORY (feature)) {
|
||||
GstTypeFindFactory *factory;
|
||||
char *s;
|
||||
int i;
|
||||
const GstCaps *caps;
|
||||
|
||||
factory = GST_TYPE_FIND_FACTORY (feature);
|
||||
caps = gst_type_find_factory_get_caps (factory);
|
||||
|
||||
if (gst_plugin_feature_get_rank (feature) > 0 && caps != NULL) {
|
||||
for (i = 0; i < gst_caps_get_size (caps); i++) {
|
||||
const GstStructure *structure = gst_caps_get_structure (caps, i);
|
||||
|
||||
s = g_strdup (gst_structure_get_name (structure));
|
||||
mime_list = g_list_prepend (mime_list, s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
features = g_list_next (features);
|
||||
}
|
||||
}
|
||||
|
||||
return mime_list;
|
||||
}
|
||||
|
||||
GList *
|
||||
g_list_uniqify (GList * list)
|
||||
{
|
||||
GList *item;
|
||||
|
||||
for (item = g_list_first (list); item; item = g_list_next (item)) {
|
||||
GList *next_item = g_list_next (item);
|
||||
|
||||
while (next_item && strcmp (item->data, next_item->data) == 0) {
|
||||
g_free (next_item->data);
|
||||
list = g_list_delete_link (list, next_item);
|
||||
next_item = g_list_next (item);
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
static GList *
|
||||
get_pad_templates_info (GstElement * element, GstElementFactory * factory,
|
||||
GstPadDirection dir)
|
||||
{
|
||||
GstElementClass *gstelement_class;
|
||||
const GList *pads;
|
||||
GstPadTemplate *padtemplate;
|
||||
GList *mime_list = NULL;
|
||||
|
||||
if (!factory->numpadtemplates) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gstelement_class = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS (element));
|
||||
|
||||
pads = factory->padtemplates;
|
||||
while (pads) {
|
||||
padtemplate = (GstPadTemplate *) (pads->data);
|
||||
pads = g_list_next (pads);
|
||||
|
||||
if (padtemplate->direction == dir) {
|
||||
if (padtemplate->caps) {
|
||||
GstStructure *structure;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < gst_caps_get_size (padtemplate->caps); i++) {
|
||||
structure = gst_caps_get_structure (padtemplate->caps, i);
|
||||
mime_list = g_list_prepend (mime_list,
|
||||
g_strdup (gst_structure_get_name (structure)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return mime_list;
|
||||
}
|
||||
|
||||
static GList *
|
||||
get_element_mime_list (const char *klass, GstPadDirection dir)
|
||||
{
|
||||
GList *mime_list = NULL;
|
||||
GList *plugins;
|
||||
|
||||
for (plugins = gst_registry_pool_plugin_list (); plugins;
|
||||
plugins = g_list_next (plugins)) {
|
||||
GList *features;
|
||||
GstPlugin *plugin;
|
||||
|
||||
plugin = (GstPlugin *) (plugins->data);
|
||||
|
||||
features = gst_plugin_get_feature_list (plugin);
|
||||
while (features) {
|
||||
GstPluginFeature *feature;
|
||||
|
||||
feature = GST_PLUGIN_FEATURE (features->data);
|
||||
|
||||
if (GST_IS_ELEMENT_FACTORY (feature)) {
|
||||
GstElementFactory *factory;
|
||||
GstElement *element;
|
||||
|
||||
factory = GST_ELEMENT_FACTORY (feature);
|
||||
if (strncmp (factory->details.klass, klass, strlen (klass)) == 0) {
|
||||
if (gst_plugin_feature_get_rank (feature) > 0) {
|
||||
GList *list;
|
||||
|
||||
element = gst_element_factory_create (factory, NULL);
|
||||
list = get_pad_templates_info (element, factory, dir);
|
||||
mime_list = g_list_concat (mime_list, list);
|
||||
gst_object_unref (GST_OBJECT (element));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
features = g_list_next (features);
|
||||
}
|
||||
}
|
||||
|
||||
return mime_list;
|
||||
}
|
||||
|
||||
static void
|
||||
print_mime_list (void)
|
||||
{
|
||||
GList *list;
|
||||
GList *typefind_list;
|
||||
GList *item;
|
||||
GList *item2;
|
||||
|
||||
typefind_list = get_typefind_mime_list ();
|
||||
typefind_list = g_list_sort (typefind_list, list_sort_func);
|
||||
typefind_list = g_list_uniqify (typefind_list);
|
||||
|
||||
list = get_element_mime_list ("Codec/Demuxer", GST_PAD_SINK);
|
||||
list = g_list_concat (list, get_element_mime_list ("Codec/Decoder",
|
||||
GST_PAD_SINK));
|
||||
list = g_list_sort (list, list_sort_func);
|
||||
list = g_list_uniqify (list);
|
||||
|
||||
g_print ("MIME media type list:\n");
|
||||
for (item = g_list_first (list); item; item = g_list_next (item)) {
|
||||
for (item2 = g_list_first (typefind_list); item2;
|
||||
item2 = g_list_next (item2)) {
|
||||
if (strcmp ((char *) item->data, (char *) item2->data) == 0) {
|
||||
g_print (" %s\n", (char *) item->data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
|
||||
#ifdef GETTEXT_PACKAGE
|
||||
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
||||
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||
textdomain (GETTEXT_PACKAGE);
|
||||
#endif
|
||||
|
||||
gst_init (&argc, &argv);
|
||||
|
||||
print_element_list ("Codec/Demuxer", GST_PAD_SINK);
|
||||
print_element_list ("Codec/Decoder", GST_PAD_SINK);
|
||||
print_element_list ("Codec/Muxer", GST_PAD_SRC);
|
||||
print_element_list ("Codec/Encoder", GST_PAD_SRC);
|
||||
print_typefind_list ();
|
||||
print_mime_list ();
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in a new issue