From: <rb...@fr...> - 2005-02-24 17:21:03
|
CVS Root: /cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Thu Feb 24 2005 09:20:40 PST Branch: BRANCH-GSTREAMER-0_8 Log message: * configure.ac: * ext/Makefile.am: * ext/gconf/Makefile.am: * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_get_type), (gst_gconf_audio_sink_base_init), (gst_gconf_audio_sink_class_init), (gst_gconf_audio_sink_init), (gst_gconf_audio_sink_dispose), (cb_toggle_element), (gst_gconf_audio_sink_change_state): * ext/gconf/gstgconfaudiosink.h: * ext/gconf/gstgconfelements.c: (plugin_init): * ext/gconf/gstgconfelements.h: * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_get_type), (gst_gconf_video_sink_base_init), (gst_gconf_video_sink_class_init), (gst_gconf_video_sink_init), (gst_gconf_video_sink_dispose), (cb_toggle_element), (gst_gconf_video_sink_change_state): * ext/gconf/gstgconfvideosink.h: Add GConf video/audio sink handling elements. Automagically change contained element on GConf change. * gst/autodetect/Makefile.am: * gst/autodetect/gstautoaudiosink.c: (gst_auto_audio_sink_get_type), (gst_auto_audio_sink_base_init), (gst_auto_audio_sink_class_init), (gst_auto_audio_sink_init), (gst_auto_audio_sink_factory_filter), (gst_auto_audio_sink_compare_ranks), (gst_auto_audio_sink_find_best), (gst_auto_audio_sink_detect): * gst/autodetect/gstautoaudiosink.h: * gst/autodetect/gstautodetect.c: (plugin_init): * gst/autodetect/gstautodetect.h: * gst/autodetect/gstautovideosink.c: (gst_auto_video_sink_get_type), (gst_auto_video_sink_base_init), (gst_auto_video_sink_class_init), (gst_auto_video_sink_init), (gst_auto_video_sink_factory_filter), (gst_auto_video_sink_compare_ranks), (gst_auto_video_sink_find_best), (gst_auto_video_sink_detect): * gst/autodetect/gstautovideosink.h: Add video/audio output autodetection elements, based on ranks. No sound server handling in autoaudiosink yet. * ext/alsa/gstalsaplugin.c: (plugin_init): * sys/oss/gstossaudio.c: (plugin_init): Change ranks to prefer ALSA over OSS. Modified files: . : ChangeLog configure.ac ext : Makefile.am ext/alsa : gstalsaplugin.c sys/oss : gstossaudio.c Added files: ext/gconf : Makefile.am gstgconfaudiosink.c gstgconfaudiosink.h gstgconfelements.c gstgconfelements.h gstgconfvideosink.c gstgconfvideosink.h gst/autodetect : Makefile.am gstautoaudiosink.c gstautoaudiosink.h gstautodetect.c gstautodetect.h gstautovideosink.c gstautovideosink.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1641.2.6&r2=1.1641.2.7 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/configure.ac.diff?r1=1.524&r2=1.524.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/Makefile.am.diff?r1=1.122&r2=1.122.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/alsa/gstalsaplugin.c.diff?r1=1.10&r2=1.10.4.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/gconf/Makefile.am?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/gconf/gstgconfaudiosink.c?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/gconf/gstgconfaudiosink.h?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/gconf/gstgconfelements.c?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/gconf/gstgconfelements.h?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/gconf/gstgconfvideosink.c?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/gconf/gstgconfvideosink.h?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/autodetect/Makefile.am?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/autodetect/gstautoaudiosink.c?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/autodetect/gstautoaudiosink.h?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/autodetect/gstautodetect.c?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/autodetect/gstautodetect.h?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/autodetect/gstautovideosink.c?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/autodetect/gstautovideosink.h?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/sys/oss/gstossaudio.c.diff?r1=1.13&r2=1.13.6.1 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1641.2.6 retrieving revision 1.1641.2.7 diff -u -d -r1.1641.2.6 -r1.1641.2.7 --- ChangeLog 24 Feb 2005 10:55:51 -0000 1.1641.2.6 +++ ChangeLog 24 Feb 2005 17:20:27 -0000 1.1641.2.7 @@ -1,5 +1,49 @@ 2005-02-24 Ronald S. Bultje <rb...@ro...> + * configure.ac: + * ext/Makefile.am: + * ext/gconf/Makefile.am: + * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_get_type), + (gst_gconf_audio_sink_base_init), + (gst_gconf_audio_sink_class_init), (gst_gconf_audio_sink_init), + (gst_gconf_audio_sink_dispose), (cb_toggle_element), + (gst_gconf_audio_sink_change_state): + * ext/gconf/gstgconfaudiosink.h: + * ext/gconf/gstgconfelements.c: (plugin_init): + * ext/gconf/gstgconfelements.h: + * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_get_type), + (gst_gconf_video_sink_base_init), + (gst_gconf_video_sink_class_init), (gst_gconf_video_sink_init), + (gst_gconf_video_sink_dispose), (cb_toggle_element), + (gst_gconf_video_sink_change_state): + * ext/gconf/gstgconfvideosink.h: + Add GConf video/audio sink handling elements. Automagically + change contained element on GConf change. + * gst/autodetect/Makefile.am: + * gst/autodetect/gstautoaudiosink.c: + (gst_auto_audio_sink_get_type), (gst_auto_audio_sink_base_init), + (gst_auto_audio_sink_class_init), (gst_auto_audio_sink_init), + (gst_auto_audio_sink_factory_filter), + (gst_auto_audio_sink_compare_ranks), + (gst_auto_audio_sink_find_best), (gst_auto_audio_sink_detect): + * gst/autodetect/gstautoaudiosink.h: + * gst/autodetect/gstautodetect.c: (plugin_init): + * gst/autodetect/gstautodetect.h: + * gst/autodetect/gstautovideosink.c: + (gst_auto_video_sink_get_type), (gst_auto_video_sink_base_init), + (gst_auto_video_sink_class_init), (gst_auto_video_sink_init), + (gst_auto_video_sink_factory_filter), + (gst_auto_video_sink_compare_ranks), + (gst_auto_video_sink_find_best), (gst_auto_video_sink_detect): + * gst/autodetect/gstautovideosink.h: + Add video/audio output autodetection elements, based on ranks. + No sound server handling in autoaudiosink yet. + * ext/alsa/gstalsaplugin.c: (plugin_init): + * sys/oss/gstossaudio.c: (plugin_init): + Change ranks to prefer ALSA over OSS. + +2005-02-24 Ronald S. Bultje <rb...@ro...> * ext/ivorbis/vorbis.c: (plugin_init): Set rank to secondary, we always prefer oggdemux (for obvious reasons). Index: configure.ac RCS file: /cvs/gstreamer/gst-plugins/configure.ac,v retrieving revision 1.524 retrieving revision 1.524.2.1 diff -u -d -r1.524 -r1.524.2.1 --- configure.ac 21 Feb 2005 23:38:43 -0000 1.524 +++ configure.ac 24 Feb 2005 17:20:27 -0000 1.524.2.1 @@ -369,6 +369,7 @@ audioscale \ audiorate \ auparse \ + autodetect \ avi \ cdxaparse \ chart \ @@ -1951,6 +1952,7 @@ gst/audioscale/Makefile gst/audiorate/Makefile gst/auparse/Makefile +gst/autodetect/Makefile gst/avi/Makefile gst/cdxaparse/Makefile gst/chart/Makefile @@ -2061,6 +2063,7 @@ ext/faac/Makefile ext/faad/Makefile ext/flac/Makefile +ext/gconf/Makefile ext/gdk_pixbuf/Makefile ext/gnomevfs/Makefile ext/gsm/Makefile Index: Makefile.am RCS file: /cvs/gstreamer/gst-plugins/ext/Makefile.am,v retrieving revision 1.122 retrieving revision 1.122.2.1 diff -u -d -r1.122 -r1.122.2.1 --- Makefile.am 11 Feb 2005 22:01:19 -0000 1.122 +++ Makefile.am 24 Feb 2005 17:20:27 -0000 1.122.2.1 @@ -130,6 +130,12 @@ FLAC_DIR= endif +if USE_GCONF +GCONF_DIR = gconf +else +GCONF_DIR = +endif if USE_GDK_PIXBUF GDK_PIXBUF_DIR=gdk_pixbuf else @@ -418,6 +424,7 @@ $(FAAC_DIR) \ $(FAAD_DIR) \ $(FLAC_DIR) \ + $(GCONF_DIR) \ $(GDK_PIXBUF_DIR) \ $(GNOMEVFS_DIR) \ $(GSM_DIR) \ @@ -483,6 +490,7 @@ faac \ faad \ flac \ + gconf \ gdk_pixbuf \ gnomevfs \ gsm \ --- NEW FILE: Makefile.am --- plugin_LTLIBRARIES = libgstgconfelements.la libgstgconfelements_la_SOURCES = \ gstgconfaudiosink.c \ gstgconfelements.c \ gstgconfvideosink.c DIR_CFLAGS = -DGST_GCONF_DIR=\"/system/gstreamer/@GST_MAJORMINOR@\" libgstgconfelements_la_CFLAGS = $(GST_CFLAGS) $(GCONF_CFLAGS) $(DIR_CFLAGS) libgstgconfelements_la_LIBADD = $(GCONF_LIBS) \ $(top_builddir)/gst-libs/gst/gconf/libgstgconf-@GST_MAJORMINOR@.la libgstgconfelements_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) noinst_HEADERS = \ gstgconfaudiosink.h \ gstgconfelements.h \ gstgconfvideosink.h --- NEW FILE: gstgconfaudiosink.c --- /* GStreamer * (c) 2005 Ronald S. Bultje <rb...@ro...> * * 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 "gstgconfelements.h" #include "gstgconfaudiosink.h" static void gst_gconf_audio_sink_base_init (GstGConfAudioSinkClass * klass); static void gst_gconf_audio_sink_class_init (GstGConfAudioSinkClass * klass); static void gst_gconf_audio_sink_init (GstGConfAudioSink * sink); static void gst_gconf_audio_sink_dispose (GObject * object); static void cb_toggle_element (GConfClient * client, guint connection_id, GConfEntry * entry, gpointer data); static GstElementStateReturn gst_gconf_audio_sink_change_state (GstElement * element); static GstBinClass *parent_class = NULL; GType gst_gconf_audio_sink_get_type (void) { static GType gst_gconf_audio_sink_type = 0; if (!gst_gconf_audio_sink_type) { static const GTypeInfo gst_gconf_audio_sink_info = { sizeof (GstGConfAudioSinkClass), (GBaseInitFunc) gst_gconf_audio_sink_base_init, NULL, (GClassInitFunc) gst_gconf_audio_sink_class_init, sizeof (GstGConfAudioSink), 0, (GInstanceInitFunc) gst_gconf_audio_sink_init, }; gst_gconf_audio_sink_type = g_type_register_static (GST_TYPE_BIN, "GstGConfAudioSink", &gst_gconf_audio_sink_info, 0); } return gst_gconf_audio_sink_type; } static void gst_gconf_audio_sink_base_init (GstGConfAudioSinkClass * klass) GstElementClass *eklass = GST_ELEMENT_CLASS (klass); GstElementDetails gst_gconf_audio_sink_details = { "GConf audio sink", "Sink/Audio", "Audio sink embedding the GConf-settings for audio output", "Ronald Bultje <rb...@ro...>" }; GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS_ANY); gst_element_class_add_pad_template (eklass, gst_static_pad_template_get (&sink_template)); gst_element_class_set_details (eklass, &gst_gconf_audio_sink_details); gst_gconf_audio_sink_class_init (GstGConfAudioSinkClass * klass) GObjectClass *oklass = G_OBJECT_CLASS (klass); parent_class = g_type_class_ref (GST_TYPE_BIN); oklass->dispose = gst_gconf_audio_sink_dispose; eklass->change_state = gst_gconf_audio_sink_change_state; gst_gconf_audio_sink_init (GstGConfAudioSink * sink) sink->pad = NULL; sink->kid = NULL; sink->client = gconf_client_get_default (); gconf_client_add_dir (sink->client, GST_GCONF_DIR, GCONF_CLIENT_PRELOAD_RECURSIVE, NULL); gconf_client_notify_add (sink->client, GST_GCONF_DIR "/default/audiosink", cb_toggle_element, sink, NULL, NULL); cb_toggle_element (sink->client, 0, NULL, sink); sink->init = FALSE; gst_gconf_audio_sink_dispose (GObject * object) GstGConfAudioSink *sink = GST_GCONF_AUDIO_SINK (object); if (sink->client) { g_object_unref (G_OBJECT (sink->client)); sink->client = NULL; G_OBJECT_CLASS (parent_class)->dispose (object); cb_toggle_element (GConfClient * client, guint connection_id, GConfEntry * entry, gpointer data) GstGConfAudioSink *sink = GST_GCONF_AUDIO_SINK (data); GstPad *peer = NULL; GstElementState state = GST_STATE (sink); /* save ghostpad */ if (sink->pad) { gst_object_ref (GST_OBJECT (sink->pad)); peer = GST_PAD_PEER (GST_PAD_REALIZE (sink->pad)); if (peer) gst_pad_unlink (peer, sink->pad); /* kill old element */ if (sink->kid) { GST_DEBUG_OBJECT (sink, "Removing old kid"); gst_bin_remove (GST_BIN (sink), sink->kid); sink->kid = NULL; GST_DEBUG_OBJECT (sink, "Creating new kid (%ssink)", entry ? "audio" : "fake"); sink->kid = entry ? gst_gconf_get_default_audio_sink () : gst_element_factory_make ("fakesink", "temporary-element"); if (!sink->kid) { GST_ELEMENT_ERROR (sink, LIBRARY, SETTINGS, (NULL), ("Failed to render audio sink from GConf")); return; gst_bin_add (GST_BIN (sink), sink->kid); /* re-attach ghostpad */ GST_DEBUG_OBJECT (sink, "Re-doing existing ghostpad"); gst_pad_add_ghost_pad (gst_element_get_pad (sink->kid, "sink"), sink->pad); } else { GST_DEBUG_OBJECT (sink, "Creating new ghostpad"); sink->pad = gst_ghost_pad_new ("sink", gst_element_get_pad (sink->kid, "sink")); gst_element_add_pad (GST_ELEMENT (sink), sink->pad); if (peer) { GST_DEBUG_OBJECT (sink, "Linking..."); gst_pad_link (peer, sink->pad); GST_DEBUG_OBJECT (sink, "Syncing state"); gst_element_set_state (GST_ELEMENT (sink), state); GST_DEBUG_OBJECT (sink, "done changing gconf audio sink"); sink->init = TRUE; gst_gconf_audio_sink_change_state (GstElement * element) GstGConfAudioSink *sink = GST_GCONF_AUDIO_SINK (element); if (GST_STATE_TRANSITION (element) == GST_STATE_NULL_TO_READY && !sink->init) { cb_toggle_element (sink->client, 0, gconf_client_get_entry (sink->client, GST_GCONF_DIR "/default/audiosink", NULL, TRUE, NULL), sink); if (!sink->init) return GST_STATE_FAILURE; return GST_ELEMENT_CLASS (parent_class)->change_state (element); --- NEW FILE: gstgconfaudiosink.h --- #ifndef __GST_GCONF_AUDIO_SINK_H__ #define __GST_GCONF_AUDIO_SINK_H__ #include <gst/gst.h> #include <gconf/gconf-client.h> G_BEGIN_DECLS #define GST_TYPE_GCONF_AUDIO_SINK \ (gst_gconf_audio_sink_get_type ()) #define GST_GCONF_AUDIO_SINK(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GCONF_AUDIO_SINK, \ GstGConfAudioSink)) #define GST_GCONF_AUDIO_SINK_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GCONF_AUDIO_SINK, \ GstGConfAudioSink)) #define GST_IS_GCONF_AUDIO_SINK(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GCONF_AUDIO_SINK)) #define GST_IS_GCONF_AUDIO_SINK_CLASS(obj) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GCONF_AUDIO_SINK)) typedef struct _GstGConfAudioSink { GstBin parent; /* explicit pointers to stuff used */ GConfClient *client; GstElement *kid; GstPad *pad; gboolean init; } GstGConfAudioSink; typedef struct _GstGConfAudioSinkClass { GstBinClass parent_class; } GstGConfAudioSinkClass; GType gst_gconf_audio_sink_get_type (void); G_END_DECLS #endif /* __GST_GCONF_AUDIO_SINK_H__ */ --- NEW FILE: gstgconfelements.c --- #include "gstgconfvideosink.h" GST_DEBUG_CATEGORY (gconf_debug); static gboolean plugin_init (GstPlugin * plugin) GST_DEBUG_CATEGORY_INIT (gconf_debug, "gconf", 0, "GConf/GStreamer audio/video output wrapper elements"); return gst_element_register (plugin, "gconfvideosink", GST_RANK_NONE, GST_TYPE_GCONF_VIDEO_SINK) && gst_element_register (plugin, "gconfaudiosink", GST_RANK_NONE, GST_TYPE_GCONF_AUDIO_SINK); GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, GST_VERSION_MINOR, "gconfelements", "Plugin contains plugins wrapping the GStreamer/GConf audio/video output settings", plugin_init, VERSION, GST_LICENSE, GST_PACKAGE, GST_ORIGIN) --- NEW FILE: gstgconfelements.h --- #ifndef __GST_GCONF_ELEMENTS_H__ #define __GST_GCONF_ELEMENTS_H__ #include <gst/gconf/gconf.h> GST_DEBUG_CATEGORY_EXTERN (gconf_debug); #define GST_CAT_DEFAULT gconf_debug #endif /* __GST_GCONF_ELEMENTS_H__ */ --- NEW FILE: gstgconfvideosink.c --- static void gst_gconf_video_sink_base_init (GstGConfVideoSinkClass * klass); static void gst_gconf_video_sink_class_init (GstGConfVideoSinkClass * klass); static void gst_gconf_video_sink_init (GstGConfVideoSink * sink); static void gst_gconf_video_sink_dispose (GObject * object); gst_gconf_video_sink_change_state (GstElement * element); gst_gconf_video_sink_get_type (void) static GType gst_gconf_video_sink_type = 0; if (!gst_gconf_video_sink_type) { static const GTypeInfo gst_gconf_video_sink_info = { sizeof (GstGConfVideoSinkClass), (GBaseInitFunc) gst_gconf_video_sink_base_init, (GClassInitFunc) gst_gconf_video_sink_class_init, sizeof (GstGConfVideoSink), (GInstanceInitFunc) gst_gconf_video_sink_init, gst_gconf_video_sink_type = g_type_register_static (GST_TYPE_BIN, "GstGConfVideoSink", &gst_gconf_video_sink_info, 0); return gst_gconf_video_sink_type; gst_gconf_video_sink_base_init (GstGConfVideoSinkClass * klass) GstElementDetails gst_gconf_video_sink_details = { "GConf video sink", "Sink/Video", "Video sink embedding the GConf-settings for video output", gst_element_class_set_details (eklass, &gst_gconf_video_sink_details); gst_gconf_video_sink_class_init (GstGConfVideoSinkClass * klass) oklass->dispose = gst_gconf_video_sink_dispose; eklass->change_state = gst_gconf_video_sink_change_state; gst_gconf_video_sink_init (GstGConfVideoSink * sink) gconf_client_notify_add (sink->client, GST_GCONF_DIR "/default/videosink", gst_gconf_video_sink_dispose (GObject * object) GstGConfVideoSink *sink = GST_GCONF_VIDEO_SINK (object); GstGConfVideoSink *sink = GST_GCONF_VIDEO_SINK (data); entry ? "video" : "fake"); sink->kid = entry ? gst_gconf_get_default_video_sink () : ("Failed to render video sink from GConf")); GST_DEBUG_OBJECT (sink, "done changing gconf video sink"); gst_gconf_video_sink_change_state (GstElement * element) GstGConfVideoSink *sink = GST_GCONF_VIDEO_SINK (element); GST_GCONF_DIR "/default/videosink", NULL, TRUE, NULL), sink); --- NEW FILE: gstgconfvideosink.h --- #ifndef __GST_GCONF_VIDEO_SINK_H__ #define __GST_GCONF_VIDEO_SINK_H__ #define GST_TYPE_GCONF_VIDEO_SINK \ (gst_gconf_video_sink_get_type ()) #define GST_GCONF_VIDEO_SINK(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GCONF_VIDEO_SINK, \ GstGConfVideoSink)) #define GST_GCONF_VIDEO_SINK_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GCONF_VIDEO_SINK, \ GstGConfVideoSink)) #define GST_IS_GCONF_VIDEO_SINK(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GCONF_VIDEO_SINK)) #define GST_IS_GCONF_VIDEO_SINK_CLASS(obj) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GCONF_VIDEO_SINK)) typedef struct _GstGConfVideoSink { } GstGConfVideoSink; typedef struct _GstGConfVideoSinkClass { } GstGConfVideoSinkClass; GType gst_gconf_video_sink_get_type (void); #endif /* __GST_GCONF_VIDEO_SINK_H__ */ plugin_LTLIBRARIES = libgstautodetect.la libgstautodetect_la_SOURCES = \ gstautoaudiosink.c \ gstautodetect.c \ gstautovideosink.c libgstautodetect_la_CFLAGS = $(GST_CFLAGS) $(GCONF_CFLAGS) libgstautodetect_la_LIBADD = $(GCONF_LIBS) libgstautodetect_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) gstautoaudiosink.h \ gstautodetect.h \ gstautovideosink.h --- NEW FILE: gstautoaudiosink.c --- #include <string.h> #include "gstautoaudiosink.h" #include "gstautodetect.h" static void gst_auto_audio_sink_base_init (GstAutoAudioSinkClass * klass); static void gst_auto_audio_sink_class_init (GstAutoAudioSinkClass * klass); static void gst_auto_audio_sink_init (GstAutoAudioSink * sink); static void gst_auto_audio_sink_detect (GstAutoAudioSink * sink); gst_auto_audio_sink_get_type (void) static GType gst_auto_audio_sink_type = 0; if (!gst_auto_audio_sink_type) { static const GTypeInfo gst_auto_audio_sink_info = { sizeof (GstAutoAudioSinkClass), (GBaseInitFunc) gst_auto_audio_sink_base_init, (GClassInitFunc) gst_auto_audio_sink_class_init, sizeof (GstAutoAudioSink), (GInstanceInitFunc) gst_auto_audio_sink_init, gst_auto_audio_sink_type = g_type_register_static (GST_TYPE_BIN, "GstAutoAudioSink", &gst_auto_audio_sink_info, 0); return gst_auto_audio_sink_type; gst_auto_audio_sink_base_init (GstAutoAudioSinkClass * klass) GstElementDetails gst_auto_audio_sink_details = { "Auto audio sink", "Audio sink embedding the Auto-settings for audio output", gst_element_class_set_details (eklass, &gst_auto_audio_sink_details); gst_auto_audio_sink_class_init (GstAutoAudioSinkClass * klass) gst_auto_audio_sink_init (GstAutoAudioSink * sink) gst_auto_audio_sink_detect (sink); gst_auto_audio_sink_factory_filter (GstPluginFeature * feature, gpointer data) guint rank; const gchar *klass; /* we only care about element factories */ if (!GST_IS_ELEMENT_FACTORY (feature)) return FALSE; /* audio sinks */ klass = gst_element_factory_get_klass (GST_ELEMENT_FACTORY (feature)); if (strcmp (klass, "Sink/Audio") != 0) /* only select elements with autoplugging rank */ rank = gst_plugin_feature_get_rank (feature); if (rank < GST_RANK_MARGINAL) return TRUE; static gint gst_auto_audio_sink_compare_ranks (GstPluginFeature * f1, GstPluginFeature * f2) gint diff; diff = gst_plugin_feature_get_rank (f2) - gst_plugin_feature_get_rank (f1); if (diff != 0) return diff; return strcmp (gst_plugin_feature_get_name (f2), gst_plugin_feature_get_name (f1)); static GstElement * gst_auto_audio_sink_find_best (GstAutoAudioSink * sink) GList *list; list = gst_registry_pool_feature_filter ( (GstPluginFeatureFilter) gst_auto_audio_sink_factory_filter, FALSE, sink); list = g_list_sort (list, (GCompareFunc) gst_auto_audio_sink_compare_ranks); /* FIXME: * - soundservers have no priority yet. * - soundserversinks should only be chosen if already running, or if * the user explicitely wants this to run... That is not easy. */ for (; list != NULL; list = list->next) { GstElementFactory *f = GST_ELEMENT_FACTORY (list->data); GstElement *el; if ((el = gst_element_factory_create (f, "actual-sink"))) { if (gst_element_set_state (el, GST_STATE_READY) == GST_STATE_SUCCESS) { gst_element_set_state (el, GST_STATE_NULL); return el; } gst_object_unref (GST_OBJECT (el)); } return NULL; gst_auto_audio_sink_detect (GstAutoAudioSink * sink) GstElement *esink; /* find element */ if (!(esink = gst_auto_audio_sink_find_best (sink))) { GST_ELEMENT_ERROR (sink, LIBRARY, INIT, (NULL), ("Failed to find a supported audio sink")); /* attach ghost pad */ gst_bin_add (GST_BIN (sink), esink); gst_element_add_ghost_pad (GST_ELEMENT (sink), gst_element_get_pad (esink, "sink"), "sink"); --- NEW FILE: gstautoaudiosink.h --- #ifndef __GST_AUTO_AUDIO_SINK_H__ #define __GST_AUTO_AUDIO_SINK_H__ #define GST_TYPE_AUTO_AUDIO_SINK \ (gst_auto_audio_sink_get_type ()) #define GST_AUTO_AUDIO_SINK(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_AUTO_AUDIO_SINK, \ GstAutoAudioSink)) #define GST_AUTO_AUDIO_SINK_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_AUTO_AUDIO_SINK, \ GstAutoAudioSink)) #define GST_IS_AUTO_AUDIO_SINK(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_AUTO_AUDIO_SINK)) #define GST_IS_AUTO_AUDIO_SINK_CLASS(obj) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_AUTO_AUDIO_SINK)) typedef struct _GstAutoAudioSink { } GstAutoAudioSink; typedef struct _GstAutoAudioSinkClass { } GstAutoAudioSinkClass; GType gst_auto_audio_sink_get_type (void); #endif /* __GST_AUTO_AUDIO_SINK_H__ */ --- NEW FILE: gstautodetect.c --- #include "gstautovideosink.h" GST_DEBUG_CATEGORY (autodetect_debug); GST_DEBUG_CATEGORY_INIT (autodetect_debug, "autodetect", 0, "Autodetection audio/video output wrapper elements"); return gst_element_register (plugin, "autovideosink", GST_RANK_NONE, GST_TYPE_AUTO_VIDEO_SINK) && gst_element_register (plugin, "autoaudiosink", GST_RANK_NONE, GST_TYPE_AUTO_AUDIO_SINK); "autodetect", "Plugin contains auto-detection plugins for video/audio outputs", --- NEW FILE: gstautodetect.h --- #ifndef __GST_AUTO_DETECT_H__ #define __GST_AUTO_DETECT_H__ GST_DEBUG_CATEGORY_EXTERN (autodetect_debug); #define GST_CAT_DEFAULT autodetect_debug #endif /* __GST_AUTO_DETECT_H__ */ --- NEW FILE: gstautovideosink.c --- static void gst_auto_video_sink_base_init (GstAutoVideoSinkClass * klass); static void gst_auto_video_sink_class_init (GstAutoVideoSinkClass * klass); static void gst_auto_video_sink_init (GstAutoVideoSink * sink); static void gst_auto_video_sink_detect (GstAutoVideoSink * sink); gst_auto_video_sink_get_type (void) static GType gst_auto_video_sink_type = 0; if (!gst_auto_video_sink_type) { static const GTypeInfo gst_auto_video_sink_info = { sizeof (GstAutoVideoSinkClass), (GBaseInitFunc) gst_auto_video_sink_base_init, (GClassInitFunc) gst_auto_video_sink_class_init, sizeof (GstAutoVideoSink), (GInstanceInitFunc) gst_auto_video_sink_init, gst_auto_video_sink_type = g_type_register_static (GST_TYPE_BIN, "GstAutoVideoSink", &gst_auto_video_sink_info, 0); return gst_auto_video_sink_type; gst_auto_video_sink_base_init (GstAutoVideoSinkClass * klass) GstElementDetails gst_auto_video_sink_details = { "Auto video sink", "Video sink embedding the Auto-settings for video output", gst_element_class_set_details (eklass, &gst_auto_video_sink_details); gst_auto_video_sink_class_init (GstAutoVideoSinkClass * klass) gst_auto_video_sink_init (GstAutoVideoSink * sink) gst_auto_video_sink_detect (sink); gst_auto_video_sink_factory_filter (GstPluginFeature * feature, gpointer data) /* video sinks */ if (strcmp (klass, "Sink/Video") != 0) gst_auto_video_sink_compare_ranks (GstPluginFeature * f1, GstPluginFeature * f2) gst_auto_video_sink_find_best (GstAutoVideoSink * sink) (GstPluginFeatureFilter) gst_auto_video_sink_factory_filter, FALSE, sink); list = g_list_sort (list, (GCompareFunc) gst_auto_video_sink_compare_ranks); gst_auto_video_sink_detect (GstAutoVideoSink * sink) if (!(esink = gst_auto_video_sink_find_best (sink))) { ("Failed to find a supported video sink")); --- NEW FILE: gstautovideosink.h --- #ifndef __GST_AUTO_VIDEO_SINK_H__ #define __GST_AUTO_VIDEO_SINK_H__ #define GST_TYPE_AUTO_VIDEO_SINK \ (gst_auto_video_sink_get_type ()) #define GST_AUTO_VIDEO_SINK(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_AUTO_VIDEO_SINK, \ GstAutoVideoSink)) #define GST_AUTO_VIDEO_SINK_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_AUTO_VIDEO_SINK, \ GstAutoVideoSink)) #define GST_IS_AUTO_VIDEO_SINK(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_AUTO_VIDEO_SINK)) #define GST_IS_AUTO_VIDEO_SINK_CLASS(obj) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_AUTO_VIDEO_SINK)) typedef struct _GstAutoVideoSink { } GstAutoVideoSink; typedef struct _GstAutoVideoSinkClass { } GstAutoVideoSinkClass; GType gst_auto_video_sink_get_type (void); #endif /* __GST_AUTO_VIDEO_SINK_H__ */ Index: gstalsaplugin.c RCS file: /cvs/gstreamer/gst-plugins/ext/alsa/gstalsaplugin.c,v retrieving revision 1.10 retrieving revision 1.10.4.1 diff -u -d -r1.10 -r1.10.4.1 --- gstalsaplugin.c 25 Nov 2004 20:36:28 -0000 1.10 +++ gstalsaplugin.c 24 Feb 2005 17:20:28 -0000 1.10.4.1 @@ -59,13 +59,13 @@ if (!gst_library_load ("gstaudio")) return FALSE; - if (!gst_element_register (plugin, "alsamixer", GST_RANK_NONE, + if (!gst_element_register (plugin, "alsamixer", GST_RANK_PRIMARY, GST_TYPE_ALSA_MIXER)) - if (!gst_element_register (plugin, "alsasrc", GST_RANK_NONE, + if (!gst_element_register (plugin, "alsasrc", GST_RANK_PRIMARY, GST_TYPE_ALSA_SRC)) - if (!gst_element_register (plugin, "alsasink", GST_RANK_NONE, + if (!gst_element_register (plugin, "alsasink", GST_RANK_PRIMARY, GST_TYPE_ALSA_SINK)) Index: gstossaudio.c RCS file: /cvs/gstreamer/gst-plugins/sys/oss/gstossaudio.c,v retrieving revision 1.13 retrieving revision 1.13.6.1 diff -u -d -r1.13 -r1.13.6.1 --- gstossaudio.c 15 Mar 2004 19:32:26 -0000 1.13 +++ gstossaudio.c 24 Feb 2005 17:20:28 -0000 1.13.6.1 @@ -37,11 +37,11 @@ - if (!gst_element_register (plugin, "ossmixer", GST_RANK_PRIMARY, + if (!gst_element_register (plugin, "ossmixer", GST_RANK_SECONDARY, GST_TYPE_OSSELEMENT) || - !gst_element_register (plugin, "osssrc", GST_RANK_PRIMARY, + !gst_element_register (plugin, "osssrc", GST_RANK_SECONDARY, GST_TYPE_OSSSRC) || - !gst_element_register (plugin, "osssink", GST_RANK_PRIMARY, + !gst_element_register (plugin, "osssink", GST_RANK_SECONDARY, GST_TYPE_OSSSINK)) { } |