gstreamer/gst/playback/gststreamselector.c

267 lines
8.1 KiB
C
Raw Normal View History

2005-01-08 18:31:22 +00:00
/* GStreamer
* Copyright (C) 2003 Julien Moutte <julien@moutte.net>
* Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
*
* 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.
*/
/*
* !!!!!!!!!!!!!!!!! Big phat warning. !!!!!!!!!!!!!!!!!!!!!!
*
* The pads on the sinkside can be filled and the application is
* supposed to enable/disable them. The plugin will receive input
* data over the currently active pad and take care of data
* forwarding and negotiation. This plugin does nothing fancy. It
* exists to be light-weight and simple.
*
* This is not a generic switch element. This is not to be used for
* any such purpose. Patches to make it do that will be rejected.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "gststreamselector.h"
GST_DEBUG_CATEGORY_STATIC (stream_selector_debug);
#define GST_CAT_DEFAULT stream_selector_debug
static GstStaticPadTemplate gst_stream_selector_sink_factory =
GST_STATIC_PAD_TEMPLATE ("sink%d",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS_ANY);
static GstStaticPadTemplate gst_stream_selector_src_factory =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS_ANY);
static void gst_stream_selector_dispose (GObject * object);
static void gst_stream_selector_init (GstStreamSelector * sel);
static void gst_stream_selector_base_init (GstStreamSelectorClass * klass);
static void gst_stream_selector_class_init (GstStreamSelectorClass * klass);
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
static GstCaps *gst_stream_selector_getcaps (GstPad * pad);
2005-01-08 18:31:22 +00:00
static GList *gst_stream_selector_get_linked_pads (GstPad * pad);
static GstPad *gst_stream_selector_request_new_pad (GstElement * element,
GstPadTemplate * templ, const gchar * unused);
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
static GstFlowReturn gst_stream_selector_chain (GstPad * pad, GstBuffer * buf);
2005-01-08 18:31:22 +00:00
static GstElementClass *parent_class = NULL;
GType
gst_stream_selector_get_type (void)
{
static GType stream_selector_type = 0;
if (!stream_selector_type) {
static const GTypeInfo stream_selector_info = {
sizeof (GstStreamSelectorClass),
(GBaseInitFunc) gst_stream_selector_base_init,
NULL,
(GClassInitFunc) gst_stream_selector_class_init,
NULL,
NULL,
sizeof (GstStreamSelector),
0,
(GInstanceInitFunc) gst_stream_selector_init,
};
stream_selector_type =
g_type_register_static (GST_TYPE_ELEMENT,
"GstStreamSelector", &stream_selector_info, 0);
GST_DEBUG_CATEGORY_INIT (stream_selector_debug,
"streamselector", 0, "A stream-selector element");
}
return stream_selector_type;
}
static void
gst_stream_selector_base_init (GstStreamSelectorClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
static GstElementDetails gst_stream_selector_details =
GST_ELEMENT_DETAILS ("StreamSelector",
"Generic",
"N-to-1 input stream_selectoring",
"Julien Moutte <julien@moutte.net>\n"
"Ronald S. Bultje <rbultje@ronald.bitfreak.net>");
gst_element_class_set_details (element_class, &gst_stream_selector_details);
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_stream_selector_sink_factory));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_stream_selector_src_factory));
}
static void
gst_stream_selector_class_init (GstStreamSelectorClass * klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
gobject_class->dispose = gst_stream_selector_dispose;
gstelement_class->request_new_pad = gst_stream_selector_request_new_pad;
}
static void
gst_stream_selector_init (GstStreamSelector * sel)
{
sel->srcpad = gst_pad_new ("src", GST_PAD_SRC);
gst_pad_set_internal_link_function (sel->srcpad,
GST_DEBUG_FUNCPTR (gst_stream_selector_get_linked_pads));
gst_pad_set_getcaps_function (sel->srcpad,
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
GST_DEBUG_FUNCPTR (gst_stream_selector_getcaps));
2005-01-08 18:31:22 +00:00
gst_element_add_pad (GST_ELEMENT (sel), sel->srcpad);
/* sinkpad management */
sel->last_active_sinkpad = NULL;
sel->nb_sinkpads = 0;
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
renamed GST_FLAGS macros to GST_OBJECT_FLAGS moved bitshift from macro to enum definition Original commit message from CVS: * examples/indexing/indexmpeg.c: (main): * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_get), (cdparanoia_open), (cdparanoia_close), (cdparanoia_event), (cdparanoia_convert), (cdparanoia_query): * ext/cdparanoia/gstcdparanoia.h: * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_init), (gst_gnomevfssink_open_file), (gst_gnomevfssink_close_file), (gst_gnomevfssink_chain), (gst_gnomevfssink_change_state): * ext/ogg/gstoggmux.c: (gst_ogg_mux_init): * gst/audioscale/gstaudioscale.c: (gst_audioscale_init): * gst/playback/gststreamselector.c: (gst_stream_selector_init): * gst/tcp/gstmultifdsink.c: (gst_multifdsink_init), (gst_multifdsink_render), (gst_multifdsink_start), (gst_multifdsink_stop): * gst/tcp/gstmultifdsink.h: * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_init), (gst_tcpclientsink_render), (gst_tcpclientsink_start), (gst_tcpclientsink_stop): * gst/tcp/gsttcpclientsink.h: * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_init), (gst_tcpclientsrc_getcaps), (gst_tcpclientsrc_create), (gst_tcpclientsrc_start), (gst_tcpclientsrc_stop): * gst/tcp/gsttcpclientsrc.h: * gst/tcp/gsttcpserversink.h: * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_init), (gst_tcpserversrc_create), (gst_tcpserversrc_start), (gst_tcpserversrc_stop): * gst/tcp/gsttcpserversrc.h: * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_init): * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_init): * sys/ximage/ximagesink.c: (gst_ximagesink_init): renamed GST_FLAGS macros to GST_OBJECT_FLAGS moved bitshift from macro to enum definition
2005-10-12 14:32:29 +00:00
//GST_OBJECT_FLAG_SET (sel, GST_ELEMENT_WORK_IN_PLACE);
2005-01-08 18:31:22 +00:00
}
static void
gst_stream_selector_dispose (GObject * object)
{
GstStreamSelector *sel = GST_STREAM_SELECTOR (object);
sel->last_active_sinkpad = NULL;
G_OBJECT_CLASS (parent_class)->dispose (object);
}
static GstPad *
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
gst_stream_selector_get_linked_pad (GstPad * pad, gboolean strict)
2005-01-08 18:31:22 +00:00
{
GstStreamSelector *sel = GST_STREAM_SELECTOR (gst_pad_get_parent (pad));
GstPad *otherpad = NULL;
if (pad == sel->srcpad)
otherpad = sel->last_active_sinkpad;
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
else if (pad == sel->last_active_sinkpad || !strict)
2005-01-08 18:31:22 +00:00
otherpad = sel->srcpad;
gst_object_unref (sel);
2005-01-08 18:31:22 +00:00
return otherpad;
}
static GstCaps *
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
gst_stream_selector_getcaps (GstPad * pad)
2005-01-08 18:31:22 +00:00
{
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
GstPad *otherpad = gst_stream_selector_get_linked_pad (pad, FALSE);
GstObject *parent;
2005-01-08 18:31:22 +00:00
parent = gst_object_get_parent (GST_OBJECT (pad));
2005-01-08 18:31:22 +00:00
if (!otherpad) {
GST_DEBUG_OBJECT (parent,
"Pad %s:%s not linked, returning ANY", GST_DEBUG_PAD_NAME (pad));
2005-01-08 18:31:22 +00:00
gst_object_unref (parent);
2005-01-08 18:31:22 +00:00
return gst_caps_new_any ();
}
GST_DEBUG_OBJECT (parent,
"Pad %s:%s is linked (to %s:%s), returning allowed-caps",
GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (otherpad));
gst_object_unref (parent);
2005-01-08 18:31:22 +00:00
Raw and crude port of decodebin. Original commit message from CVS: * gst/playback/README: * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init), (compare_ranks), (print_feature), (gst_decode_bin_init), (dynamic_create), (dynamic_free), (find_compatibles), (mimetype_is_raw), (close_pad_link), (got_redirect), (try_to_link_1), (get_our_ghost_pad), (remove_element_chain), (new_pad), (no_more_pads), (unlinked), (close_link), (type_found), (gst_decode_bin_change_state): * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init), (gst_play_base_bin_init), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (unknown_type), (new_decoded_pad), (setup_subtitle), (gen_source_element), (got_redirect), (setup_source), (play_base_eos), (gst_play_base_bin_change_state), (gst_play_base_bin_add_element), (gst_play_base_bin_remove_element): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_dispose), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (remove_sinks), (gst_play_bin_send_event): * gst/playback/gststreaminfo.c: (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute): * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_caps), (gst_stream_selector_setcaps), (gst_stream_selector_request_new_pad), (gst_stream_selector_event), (gst_stream_selector_chain): * gst/playback/test.c: (gen_video_element), (gen_audio_element), (main): * sys/xvimage/xvimagesink.c: (gst_xvimagesink_getcaps), (gst_xvimagesink_setcaps), (gst_xvimagesink_get_times), (gst_xvimagesink_show_frame), (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc), (gst_xvimagesink_class_init): Raw and crude port of decodebin. Make playbin compile.
2005-04-12 10:48:58 +00:00
return gst_pad_peer_get_caps (otherpad);
2005-01-08 18:31:22 +00:00
}
static GList *
gst_stream_selector_get_linked_pads (GstPad * pad)
{
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
GstPad *otherpad = gst_stream_selector_get_linked_pad (pad, TRUE);
2005-01-08 18:31:22 +00:00
if (!otherpad)
return NULL;
return g_list_append (NULL, otherpad);
}
static GstPad *
gst_stream_selector_request_new_pad (GstElement * element,
GstPadTemplate * templ, const gchar * unused)
{
GstStreamSelector *sel = GST_STREAM_SELECTOR (element);
gchar *name = NULL;
GstPad *sinkpad = NULL;
g_return_val_if_fail (templ->direction == GST_PAD_SINK, NULL);
GST_LOG_OBJECT (sel, "Creating new pad %d", sel->nb_sinkpads);
name = g_strdup_printf ("sink%d", sel->nb_sinkpads++);
sinkpad = gst_pad_new_from_template (templ, name);
if (sel->nb_sinkpads == 1)
sel->last_active_sinkpad = sinkpad;
2005-01-08 18:31:22 +00:00
g_free (name);
gst_pad_set_getcaps_function (sinkpad,
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
GST_DEBUG_FUNCPTR (gst_stream_selector_getcaps));
2005-01-08 18:31:22 +00:00
gst_pad_set_chain_function (sinkpad,
GST_DEBUG_FUNCPTR (gst_stream_selector_chain));
gst_pad_set_internal_link_function (sinkpad,
GST_DEBUG_FUNCPTR (gst_stream_selector_get_linked_pads));
gst_element_add_pad (GST_ELEMENT (sel), sinkpad);
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
GST_STATE_LOCK (sel);
if (GST_STATE (sel) >= GST_STATE_PAUSED) {
gst_pad_set_active (sinkpad, GST_ACTIVATE_PUSH);
}
GST_STATE_UNLOCK (sel);
Raw and crude port of decodebin. Original commit message from CVS: * gst/playback/README: * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init), (compare_ranks), (print_feature), (gst_decode_bin_init), (dynamic_create), (dynamic_free), (find_compatibles), (mimetype_is_raw), (close_pad_link), (got_redirect), (try_to_link_1), (get_our_ghost_pad), (remove_element_chain), (new_pad), (no_more_pads), (unlinked), (close_link), (type_found), (gst_decode_bin_change_state): * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init), (gst_play_base_bin_init), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (unknown_type), (new_decoded_pad), (setup_subtitle), (gen_source_element), (got_redirect), (setup_source), (play_base_eos), (gst_play_base_bin_change_state), (gst_play_base_bin_add_element), (gst_play_base_bin_remove_element): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_dispose), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (remove_sinks), (gst_play_bin_send_event): * gst/playback/gststreaminfo.c: (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute): * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_caps), (gst_stream_selector_setcaps), (gst_stream_selector_request_new_pad), (gst_stream_selector_event), (gst_stream_selector_chain): * gst/playback/test.c: (gen_video_element), (gen_audio_element), (main): * sys/xvimage/xvimagesink.c: (gst_xvimagesink_getcaps), (gst_xvimagesink_setcaps), (gst_xvimagesink_get_times), (gst_xvimagesink_show_frame), (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc), (gst_xvimagesink_class_init): Raw and crude port of decodebin. Make playbin compile.
2005-04-12 10:48:58 +00:00
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
return sinkpad;
Raw and crude port of decodebin. Original commit message from CVS: * gst/playback/README: * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init), (compare_ranks), (print_feature), (gst_decode_bin_init), (dynamic_create), (dynamic_free), (find_compatibles), (mimetype_is_raw), (close_pad_link), (got_redirect), (try_to_link_1), (get_our_ghost_pad), (remove_element_chain), (new_pad), (no_more_pads), (unlinked), (close_link), (type_found), (gst_decode_bin_change_state): * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init), (gst_play_base_bin_init), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (unknown_type), (new_decoded_pad), (setup_subtitle), (gen_source_element), (got_redirect), (setup_source), (play_base_eos), (gst_play_base_bin_change_state), (gst_play_base_bin_add_element), (gst_play_base_bin_remove_element): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_dispose), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (remove_sinks), (gst_play_bin_send_event): * gst/playback/gststreaminfo.c: (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute): * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_caps), (gst_stream_selector_setcaps), (gst_stream_selector_request_new_pad), (gst_stream_selector_event), (gst_stream_selector_chain): * gst/playback/test.c: (gen_video_element), (gen_audio_element), (main): * sys/xvimage/xvimagesink.c: (gst_xvimagesink_getcaps), (gst_xvimagesink_setcaps), (gst_xvimagesink_get_times), (gst_xvimagesink_show_frame), (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc), (gst_xvimagesink_class_init): Raw and crude port of decodebin. Make playbin compile.
2005-04-12 10:48:58 +00:00
}
static GstFlowReturn
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
gst_stream_selector_chain (GstPad * pad, GstBuffer * buf)
Raw and crude port of decodebin. Original commit message from CVS: * gst/playback/README: * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init), (compare_ranks), (print_feature), (gst_decode_bin_init), (dynamic_create), (dynamic_free), (find_compatibles), (mimetype_is_raw), (close_pad_link), (got_redirect), (try_to_link_1), (get_our_ghost_pad), (remove_element_chain), (new_pad), (no_more_pads), (unlinked), (close_link), (type_found), (gst_decode_bin_change_state): * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init), (gst_play_base_bin_init), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (unknown_type), (new_decoded_pad), (setup_subtitle), (gen_source_element), (got_redirect), (setup_source), (play_base_eos), (gst_play_base_bin_change_state), (gst_play_base_bin_add_element), (gst_play_base_bin_remove_element): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_dispose), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (remove_sinks), (gst_play_bin_send_event): * gst/playback/gststreaminfo.c: (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute): * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_caps), (gst_stream_selector_setcaps), (gst_stream_selector_request_new_pad), (gst_stream_selector_event), (gst_stream_selector_chain): * gst/playback/test.c: (gen_video_element), (gen_audio_element), (main): * sys/xvimage/xvimagesink.c: (gst_xvimagesink_getcaps), (gst_xvimagesink_setcaps), (gst_xvimagesink_get_times), (gst_xvimagesink_show_frame), (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc), (gst_xvimagesink_class_init): Raw and crude port of decodebin. Make playbin compile.
2005-04-12 10:48:58 +00:00
{
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
GstStreamSelector *sel = GST_STREAM_SELECTOR (gst_pad_get_parent (pad));
GstFlowReturn res;
2005-01-08 18:31:22 +00:00
/* first, check if the active pad changed. If so, redo
* negotiation and fail if that fails. */
if (pad != sel->last_active_sinkpad) {
GST_LOG_OBJECT (sel, "stream change detected, switching from %s to %s:%s",
2005-01-08 18:31:22 +00:00
sel->last_active_sinkpad ?
GST_OBJECT_NAME (sel->last_active_sinkpad) : "none",
GST_DEBUG_PAD_NAME (pad));
2005-01-08 18:31:22 +00:00
sel->last_active_sinkpad = pad;
}
/* forward */
GST_DEBUG_OBJECT (sel, "Forwarding buffer %p from pad %s:%s",
buf, GST_DEBUG_PAD_NAME (pad));
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
res = gst_pad_push (sel->srcpad, buf);
gst_object_unref (sel);
gst/playback/: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important pla... Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type), (gst_play_base_bin_class_init), (gst_play_base_bin_finalize), (get_active_group), (get_building_group), (group_destroy), (group_commit), (check_queue), (queue_overrun), (queue_threshold_reached), (queue_out_of_data), (gen_preroll_element), (remove_groups), (unknown_type), (add_element_stream), (no_more_pads), (probe_triggered), (preroll_unlinked), (new_decoded_pad), (setup_subtitle), (setup_substreams), (setup_source), (finish_source), (prepare_output), (muted_group_change_state), (gst_play_base_bin_set_property), (gst_play_base_bin_get_property), (gst_play_base_bin_change_state): * gst/playback/gstplaybasebin.h: * gst/playback/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init), (gst_play_bin_set_property), (gen_video_element), (gen_text_element), (gen_audio_element), (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks), (gst_play_bin_change_state): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init), (cb_probe), (gst_stream_info_new), (gst_stream_info_dispose), (stream_info_change_state), (gst_stream_info_set_mute), (gst_stream_info_get_property): * gst/playback/gststreaminfo.h: * gst/playback/gststreamselector.c: (gst_stream_selector_init), (gst_stream_selector_get_linked_pad), (gst_stream_selector_getcaps), (gst_stream_selector_get_linked_pads), (gst_stream_selector_request_new_pad), (gst_stream_selector_chain): * gst/playback/gststreamselector.h: Rough port of playbin. Needs some more work, but is mostly done, and uses a few locks in important places, which should make stuff like chain-switches clean. Still uses GST_STATE() in a few places, which isn't all that good an idea, subtitles/elements disabled because no elements to test with and thus probably broken, query and event handling moved to GstBin, internal thread removed alltogether because the pipeline does that for us now. Can play Ogg/Vorbis files. Haven't tested anything else yet.
2005-05-12 15:22:05 +00:00
return res;
2005-01-08 18:31:22 +00:00
}