diff -r 567bb019e3e3 -r 7e817e7e631c gst_plugins_base/gst/playback/gstplaybasebin.c --- a/gst_plugins_base/gst/playback/gstplaybasebin.c Tue Aug 31 15:30:33 2010 +0300 +++ b/gst_plugins_base/gst/playback/gstplaybasebin.c Wed Sep 01 12:16:41 2010 +0100 @@ -29,6 +29,10 @@ #include +#ifdef __SYMBIAN32__ +#include +#endif + GST_DEBUG_CATEGORY_STATIC (gst_play_base_bin_debug); #define GST_CAT_DEFAULT gst_play_base_bin_debug @@ -149,76 +153,68 @@ g_object_class_install_property (gobject_klass, ARG_URI, g_param_spec_string ("uri", "URI", "URI of the media to play", - NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + NULL, G_PARAM_READWRITE)); g_object_class_install_property (gobject_klass, ARG_SUBURI, g_param_spec_string ("suburi", ".sub-URI", "Optional URI of a subtitle", - NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + NULL, G_PARAM_READWRITE)); g_object_class_install_property (gobject_klass, ARG_QUEUE_SIZE, g_param_spec_uint64 ("queue-size", "Queue size", "Size of internal queues in nanoseconds", 0, G_MAXINT64, - DEFAULT_QUEUE_SIZE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + DEFAULT_QUEUE_SIZE, G_PARAM_READWRITE)); g_object_class_install_property (gobject_klass, ARG_QUEUE_THRESHOLD, g_param_spec_uint64 ("queue-threshold", "Queue threshold", "Buffering threshold of internal queues in nanoseconds", 0, - G_MAXINT64, DEFAULT_QUEUE_THRESHOLD, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + G_MAXINT64, DEFAULT_QUEUE_THRESHOLD, G_PARAM_READWRITE)); g_object_class_install_property (gobject_klass, ARG_QUEUE_MIN_THRESHOLD, g_param_spec_uint64 ("queue-min-threshold", "Queue min threshold", "Buffering low threshold of internal queues in nanoseconds", 0, - G_MAXINT64, DEFAULT_QUEUE_MIN_THRESHOLD, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + G_MAXINT64, DEFAULT_QUEUE_MIN_THRESHOLD, G_PARAM_READWRITE)); g_object_class_install_property (gobject_klass, ARG_NSTREAMS, g_param_spec_int ("nstreams", "NStreams", "number of streams", - 0, G_MAXINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + 0, G_MAXINT, 0, G_PARAM_READABLE)); g_object_class_install_property (gobject_klass, ARG_STREAMINFO, g_param_spec_pointer ("stream-info", "Stream info", "List of streaminfo", - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + G_PARAM_READABLE)); g_object_class_install_property (gobject_klass, ARG_STREAMINFO_VALUES, g_param_spec_value_array ("stream-info-value-array", "StreamInfo GValueArray", "value array of streaminfo", g_param_spec_object ("streaminfo", "StreamInfo", "Streaminfo object", - GST_TYPE_STREAM_INFO, G_PARAM_READABLE), - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + GST_TYPE_STREAM_INFO, G_PARAM_READABLE), G_PARAM_READABLE)); g_object_class_install_property (gobject_klass, ARG_SOURCE, g_param_spec_object ("source", "Source", "Source element", - GST_TYPE_ELEMENT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + GST_TYPE_ELEMENT, G_PARAM_READABLE)); g_object_class_install_property (gobject_klass, ARG_VIDEO, g_param_spec_int ("current-video", "Current video", "Currently playing video stream (-1 = none)", - -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + -1, G_MAXINT, -1, G_PARAM_READWRITE)); g_object_class_install_property (gobject_klass, ARG_AUDIO, g_param_spec_int ("current-audio", "Current audio", "Currently playing audio stream (-1 = none)", - -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + -1, G_MAXINT, -1, G_PARAM_READWRITE)); g_object_class_install_property (gobject_klass, ARG_TEXT, g_param_spec_int ("current-text", "Current text", "Currently playing text stream (-1 = none)", - -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + -1, G_MAXINT, -1, G_PARAM_READWRITE)); g_object_class_install_property (gobject_klass, ARG_SUBTITLE_ENCODING, g_param_spec_string ("subtitle-encoding", "subtitle encoding", "Encoding to assume if input subtitles are not in UTF-8 encoding. " "If not set, the GST_SUBTITLE_ENCODING environment variable will " "be checked for an encoding to use. If that is not set either, " - "ISO-8859-15 will be assumed.", NULL, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + "ISO-8859-15 will be assumed.", NULL, G_PARAM_READWRITE)); /** - * GstPlayBaseBin:connection-speed + * GstPlayBin::connection-speed * * Network connection speed in kbps (0 = unknown) - * - * Since version 0.10.10 in #GstPlayBin, at 0.10.15 moved to #GstPlayBaseBin - * * - * Since: 0.10.10 - */ + * Since: 0.10.10 at gstplaybin.c, 0.10.15 moved to gstplaybasebin + **/ g_object_class_install_property (gobject_klass, ARG_CONNECTION_SPEED, g_param_spec_uint ("connection-speed", "Connection Speed", "Network connection speed in kbps (0 = unknown)", - 0, G_MAXUINT, DEFAULT_CONNECTION_SPEED, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + 0, G_MAXUINT, DEFAULT_CONNECTION_SPEED, G_PARAM_READWRITE)); GST_DEBUG_CATEGORY_INIT (gst_play_base_bin_debug, "playbasebin", 0, "playbasebin"); @@ -490,9 +486,8 @@ setup_substreams (play_base_bin); GST_DEBUG_OBJECT (play_base_bin, "Emitting signal"); - res = - GST_PLAY_BASE_BIN_GET_CLASS (play_base_bin)->setup_output_pads - (play_base_bin, group); + res = GST_PLAY_BASE_BIN_GET_CLASS (play_base_bin)-> + setup_output_pads (play_base_bin, group); GST_DEBUG_OBJECT (play_base_bin, "done"); GROUP_UNLOCK (play_base_bin); @@ -636,7 +631,7 @@ GstPad *sinkpad; data = g_object_get_data (G_OBJECT (queue), "probe"); - sinkpad = gst_element_get_static_pad (queue, "sink"); + sinkpad = gst_element_get_pad (queue, "sink"); if (data) { GST_DEBUG_OBJECT (play_base_bin, @@ -760,7 +755,7 @@ GstPad *sinkpad; guint id; - sinkpad = gst_element_get_static_pad (queue, "sink"); + sinkpad = gst_element_get_pad (queue, "sink"); id = gst_pad_add_buffer_probe (sinkpad, G_CALLBACK (check_queue), queue); g_object_set_data (G_OBJECT (queue), "probe", GINT_TO_POINTER (id)); GST_DEBUG_OBJECT (play_base_bin, @@ -799,8 +794,6 @@ prename = "text"; else if (type == GST_STREAM_TYPE_AUDIO) prename = "audio"; - else if (type == GST_STREAM_TYPE_SUBPICTURE) - prename = "subpicture"; else g_return_if_reached (); @@ -830,22 +823,10 @@ * after the source that measures the datarate and scales this * queue of encoded data instead. */ - if (play_base_bin->raw_decoding_mode) { - if (type == GST_STREAM_TYPE_VIDEO) { - g_object_set (G_OBJECT (preroll), - "max-size-buffers", 2, "max-size-bytes", 0, - "max-size-time", (guint64) 0, NULL); - } else { - g_object_set (G_OBJECT (preroll), - "max-size-buffers", 0, "max-size-bytes", - 2 * 1024 * 1024, "max-size-time", play_base_bin->queue_size, NULL); - } - } else { - g_object_set (G_OBJECT (preroll), - "max-size-buffers", 0, "max-size-bytes", - ((type == GST_STREAM_TYPE_VIDEO) ? 25 : 2) * 1024 * 1024, - "max-size-time", play_base_bin->queue_size, NULL); - } + g_object_set (G_OBJECT (preroll), + "max-size-buffers", 0, "max-size-bytes", + ((type == GST_STREAM_TYPE_VIDEO) ? 25 : 2) * 1024 * 1024, + "max-size-time", play_base_bin->queue_size, NULL); /* the overrun signal is always attached and serves two purposes: * @@ -885,10 +866,11 @@ g_object_set_data (G_OBJECT (preroll), "pbb", play_base_bin); /* give updates on queue size */ - sinkpad = gst_element_get_static_pad (preroll, "sink"); + sinkpad = gst_element_get_pad (preroll, "sink"); id = gst_pad_add_buffer_probe (sinkpad, G_CALLBACK (check_queue), preroll); GST_DEBUG_OBJECT (play_base_bin, "Attaching probe to pad %s:%s (%p)", GST_DEBUG_PAD_NAME (sinkpad), sinkpad); + gst_object_unref (sinkpad); g_object_set_data (G_OBJECT (preroll), "probe", GINT_TO_POINTER (id)); /* catch eos and flush events so that we can ignore underruns */ @@ -896,8 +878,6 @@ preroll); g_object_set_data (G_OBJECT (preroll), "eos_probe", GINT_TO_POINTER (id)); - gst_object_unref (sinkpad); - /* When we connect this queue, it will start running and immediatly * fire an underrun. */ g_signal_connect (G_OBJECT (preroll), "underrun", @@ -907,7 +887,7 @@ } /* listen for EOS so we can switch groups when one ended. */ - preroll_pad = gst_element_get_static_pad (preroll, "src"); + preroll_pad = gst_element_get_pad (preroll, "src"); gst_pad_add_event_probe (preroll_pad, G_CALLBACK (probe_triggered), info); gst_object_unref (preroll_pad); @@ -1237,9 +1217,8 @@ setup_substreams (play_base_bin); GST_DEBUG ("switching to next group %p - emitting signal", group); /* and signal the new group */ - res = - GST_PLAY_BASE_BIN_GET_CLASS (play_base_bin)->setup_output_pads - (play_base_bin, group); + res = GST_PLAY_BASE_BIN_GET_CLASS (play_base_bin)-> + setup_output_pads (play_base_bin, group); GROUP_UNLOCK (play_base_bin); @@ -1270,11 +1249,11 @@ /* make a fakesrc that will just emit one EOS */ fakesrc = gst_element_factory_make ("fakesrc", NULL); - g_object_set (G_OBJECT (fakesrc), "num-buffers", 0, NULL); + g_object_set (G_OBJECT (fakesrc), "num_buffers", 0, NULL); GST_DEBUG ("patching unlinked pad %s:%s", GST_DEBUG_PAD_NAME (pad)); - srcpad = gst_element_get_static_pad (fakesrc, "src"); + srcpad = gst_element_get_pad (fakesrc, "src"); gst_bin_add (GST_BIN_CAST (play_base_bin), fakesrc); gst_pad_link (srcpad, pad); gst_object_unref (srcpad); @@ -1361,9 +1340,6 @@ if (g_str_has_prefix (mimetype, "audio/") && parent != GST_OBJECT_CAST (play_base_bin->subtitle)) { type = GST_STREAM_TYPE_AUDIO; - } else if (g_str_has_prefix (mimetype, "video/x-dvd-subpicture") && - parent != GST_OBJECT_CAST (play_base_bin->subtitle)) { - type = GST_STREAM_TYPE_SUBPICTURE; } else if (g_str_has_prefix (mimetype, "video/") && parent != GST_OBJECT_CAST (play_base_bin->subtitle)) { type = GST_STREAM_TYPE_VIDEO; @@ -1596,7 +1572,7 @@ /* mime types we consider raw media */ static const gchar *raw_mimes[] = { - "audio/x-raw", "video/x-raw", "video/x-dvd-subpicture", NULL + "audio/x-raw", "video/x-raw", NULL }; #define IS_STREAM_URI(uri) (array_has_value (stream_uris, uri)) @@ -1714,7 +1690,6 @@ /* if this is a pad with all raw caps, we can expose it */ if (has_all_raw_caps (pad, &is_raw) && is_raw) { - bin->raw_decoding_mode = TRUE; /* it's all raw, create output pads. */ new_decoded_pad_full (element, pad, FALSE, bin, FALSE); return; @@ -1964,19 +1939,6 @@ GstElement *decoder = GST_ELEMENT_CAST (walk->data); GST_DEBUG_OBJECT (bin, "removing old decoder element"); - /* Disconnect all the signal handlers we attached to the decodebin before - * we dispose of it */ - g_signal_handlers_disconnect_by_func (decoder, - (gpointer) (decodebin_element_added_cb), bin); - g_signal_handlers_disconnect_by_func (decoder, - (gpointer) (decodebin_element_removed_cb), bin); - g_signal_handlers_disconnect_by_func (decoder, - (gpointer) (new_decoded_pad), bin); - g_signal_handlers_disconnect_by_func (decoder, - (gpointer) (no_more_pads), bin); - g_signal_handlers_disconnect_by_func (decoder, - (gpointer) (unknown_type), bin); - gst_element_set_state (decoder, GST_STATE_NULL); gst_bin_remove (GST_BIN_CAST (bin), decoder); } @@ -2083,7 +2045,6 @@ if (!play_base_bin->need_rebuild) return TRUE; - play_base_bin->raw_decoding_mode = FALSE; GST_DEBUG_OBJECT (play_base_bin, "setup source"); @@ -2387,13 +2348,13 @@ gboolean active = !mute; GstPad *pad; - pad = gst_element_get_static_pad (group->type[type - 1].preroll, "src"); + pad = gst_element_get_pad (group->type[type - 1].preroll, "src"); gst_pad_set_active (pad, active); gst_object_unref (pad); - pad = gst_element_get_static_pad (group->type[type - 1].preroll, "sink"); + pad = gst_element_get_pad (group->type[type - 1].preroll, "sink"); gst_pad_set_active (pad, active); gst_object_unref (pad); - pad = gst_element_get_static_pad (group->type[type - 1].selector, "src"); + pad = gst_element_get_pad (group->type[type - 1].selector, "src"); gst_pad_set_active (pad, active); gst_object_unref (pad); @@ -2442,17 +2403,6 @@ klass->set_subtitles_visible (play_base_bin, visible); } -static void -set_audio_mute (GstPlayBaseBin * play_base_bin, gboolean mute) -{ - GstPlayBaseBinClass *klass = GST_PLAY_BASE_BIN_GET_CLASS (play_base_bin); - - /* we use a vfunc for this since we don't have a reference to the - * textoverlay element, but playbin does */ - if (klass != NULL && klass->set_audio_mute != NULL) - klass->set_audio_mute (play_base_bin, mute); -} - /* * Caller has group-lock held. */ @@ -2485,13 +2435,6 @@ set_subtitles_visible (play_base_bin, visible); if (!visible) return; - } else if (type == GST_STREAM_TYPE_AUDIO) { - gboolean mute = (source_num == -1); - - set_audio_mute (play_base_bin, mute); - - if (mute) - return; } sel = group->type[type - 1].selector;