The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
/*
 * Copyright (C) 2005 by the gtk2-perl team
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 *
 * $Id$
 */

#include "gst2perl.h"

MODULE = GStreamer::ElementFactory	PACKAGE = GStreamer::ElementFactory	PREFIX = gst_element_factory_

# FIXME?
# gboolean gst_element_register (GstPlugin *plugin, const gchar *name, guint rank, GType type);

# GstElementFactory * gst_element_factory_find (const gchar *name);
GstElementFactory_ornull *
gst_element_factory_find (class, name)
	const gchar *name
    C_ARGS:
	name

# GType gst_element_factory_get_element_type (GstElementFactory *factory);
const char *
gst_element_factory_get_element_type (GstElementFactory *factory)
    CODE:
	RETVAL = gperl_package_from_type (gst_element_factory_get_element_type (factory));
    OUTPUT:
	RETVAL

const gchar * gst_element_factory_get_longname (GstElementFactory *factory);

const gchar * gst_element_factory_get_klass (GstElementFactory *factory);

const gchar * gst_element_factory_get_description (GstElementFactory *factory);

const gchar * gst_element_factory_get_author (GstElementFactory *factory);

# FIXME: Need GstStaticPadTemplate handlers.
# # guint gst_element_factory_get_num_pad_templates (GstElementFactory *factory);
# # const GList * gst_element_factory_get_static_pad_templates (GstElementFactory *factory);
# void
# gst_element_factory_get_static_pad_templates (factory)
# 	GstElementFactory *factory
#     PREINIT:
# 	GList *templates, *i;
#     PPCODE:
# 	templates = (GList *) gst_element_factory_get_static_pad_templates (factory);
# 	for (i = templates; i != NULL; i = i->next)
# 		XPUSHs (sv_2mortal (newSVGstPadTemplate (i->data)));

GstURIType gst_element_factory_get_uri_type (GstElementFactory *factory);

# gchar ** gst_element_factory_get_uri_protocols (GstElementFactory *factory);
void
gst_element_factory_get_uri_protocols (factory)
	GstElementFactory *factory
    PREINIT:
	gchar **uris;
    PPCODE:
	uris = gst_element_factory_get_uri_protocols (factory);
	if (uris) {
		gchar *uri;
		while ((uri = *(uris++)) != NULL)
		XPUSHs (sv_2mortal (newSVGChar (uri)));
	}

GstElement_ornull * gst_element_factory_create (GstElementFactory *factory, const gchar_ornull *name);

# GstElement * gst_element_factory_make (const gchar *factoryname, const gchar *name);
void
gst_element_factory_make (class, factoryname, name, ...);
	const gchar *factoryname
	const gchar *name
    PREINIT:
	int i;
    PPCODE:
	for (i = 1; i < items; i += 2)
		XPUSHs (
		  sv_2mortal (
		    newSVGstElement_ornull (
		      gst_element_factory_make (SvGChar (ST (i)),
		                                SvGChar (ST (i + 1))))));

# void __gst_element_factory_add_static_pad_template (GstElementFactory *elementfactory, GstStaticPadTemplate *templ);
# void __gst_element_factory_add_interface (GstElementFactory *elementfactory, const gchar *interfacename);

gboolean gst_element_factory_can_src_caps (GstElementFactory *factory, const GstCaps *caps);

gboolean gst_element_factory_can_sink_caps (GstElementFactory *factory, const GstCaps *caps);