rpms/gstreamer-plugins-base/OLPC-2 gstplaybin-fix-leak-141-142.patch, NONE, 1.1 gstplaybin-handle-unknown-caps-143-144.patch, NONE, 1.1 gstplaybin-make-reuse-work-146-147.patch, NONE, 1.1 gstplaybin-stop-buffering-144-145.patch, NONE, 1.1 gstplaybin-stream-info-value-array-fix.patch, NONE, 1.1 gstplaybin-use-pushing-signal-142-143.patch, NONE, 1.1 gstreamer-plugins-base.spec, 1.28, 1.29
Daniel Williams (dcbw)
fedora-extras-commits at redhat.com
Sun Jul 22 04:42:37 UTC 2007
Author: dcbw
Update of /cvs/extras/rpms/gstreamer-plugins-base/OLPC-2
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv28541
Modified Files:
gstreamer-plugins-base.spec
Added Files:
gstplaybin-fix-leak-141-142.patch
gstplaybin-handle-unknown-caps-143-144.patch
gstplaybin-make-reuse-work-146-147.patch
gstplaybin-stop-buffering-144-145.patch
gstplaybin-stream-info-value-array-fix.patch
gstplaybin-use-pushing-signal-142-143.patch
Log Message:
* Sun Jul 22 2007 Dan Williams <dcbw at redhat.com> - 0.10.12-4.1
- Pile of fixes for playbin
gstplaybin-fix-leak-141-142.patch:
--- NEW FILE gstplaybin-fix-leak-141-142.patch ---
--- gst-plugins-base-0.10.12/gst/playback/gstplaybasebin.c 2007/03/04 23:39:51 1.141
+++ gst-plugins-base-0.10.12/gst/playback/gstplaybasebin.c 2007/04/05 10:27:06 1.142
@@ -912,6 +912,7 @@
g_value_init (&v, G_TYPE_OBJECT);
g_value_set_object (&v, info);
g_value_array_append (group->streaminfo_value_array, &v);
+ g_value_unset (&v);
group->streaminfo = g_list_append (group->streaminfo, info);
if (info->type > 0 && info->type <= NUM_TYPES) {
group->type[info->type - 1].npads++;
gstplaybin-handle-unknown-caps-143-144.patch:
--- NEW FILE gstplaybin-handle-unknown-caps-143-144.patch ---
--- gst-plugins-base-0.10.12/gst/playback/gstplaybasebin.c 2007/05/10 15:28:13 1.143
+++ gst-plugins-base-0.10.12/gst/playback/gstplaybasebin.c 2007/05/24 11:15:32 1.144
@@ -1248,11 +1248,12 @@
const gchar *mimetype;
GstCaps *caps;
GstStreamInfo *info;
- GstStreamType type;
+ GstStreamType type = GST_STREAM_TYPE_UNKNOWN;
GstPad *sinkpad;
GstPlayBaseGroup *group;
guint sig;
GstObject *parent;
+ gboolean first_pad;
GST_DEBUG ("play base: new decoded pad. Last: %d", last);
@@ -1280,18 +1281,32 @@
type = GST_STREAM_TYPE_VIDEO;
} else if (g_str_has_prefix (mimetype, "text/")) {
type = GST_STREAM_TYPE_TEXT;
- } else {
- type = GST_STREAM_TYPE_UNKNOWN;
}
gst_object_unref (parent);
info = gst_stream_info_new (GST_OBJECT_CAST (pad), type, NULL, caps);
- if (type > 0 && type <= NUM_TYPES) {
- /* first pad of each type gets a selector + preroll queue */
- if (group->type[type - 1].npads == 0) {
- GST_DEBUG ("play base: pad needs new preroll");
- gen_preroll_element (play_base_bin, group, type, pad, info);
- }
+ gst_caps_unref (caps);
+
+ if (type == GST_STREAM_TYPE_UNKNOWN) {
+ /* Unknown streams get added to the group, but the data
+ * just gets ignored */
+ add_stream (group, info);
+
+ GROUP_UNLOCK (play_base_bin);
+
+ /* signal the no more pads after adding the stream */
+ if (last)
+ no_more_pads_full (element, is_subs, play_base_bin);
+
+ return;
+ }
+
+ /* first pad of each type gets a selector + preroll queue */
+ first_pad = (group->type[type - 1].npads == 0);
+
+ if (first_pad) {
+ GST_DEBUG ("play base: pad needs new preroll");
+ gen_preroll_element (play_base_bin, group, type, pad, info);
}
/* add to stream selector */
@@ -1309,12 +1324,8 @@
gst_pad_link (pad, sinkpad);
gst_object_unref (sinkpad);
- /* add the stream to the list */
- gst_caps_unref (caps);
- info->origin = GST_OBJECT_CAST (pad);
-
/* select 1st for now - we'll select a preferred one after preroll */
- if (type == GST_STREAM_TYPE_UNKNOWN || group->type[type - 1].npads > 0) {
+ if (!first_pad) {
guint id;
GST_DEBUG ("Adding silence_stream data probe on type %d (npads %d)", type,
@@ -1325,6 +1336,7 @@
g_object_set_data (G_OBJECT (pad), "eat_probe", GINT_TO_POINTER (id));
}
+ /* add the stream to the list */
add_stream (group, info);
GROUP_UNLOCK (play_base_bin);
gstplaybin-make-reuse-work-146-147.patch:
--- NEW FILE gstplaybin-make-reuse-work-146-147.patch ---
--- gst-plugins-base-0.10.12/gst/playback/gstplaybasebin.c 2007/06/28 10:21:19 1.146
+++ gst-plugins-base-0.10.12/gst/playback/gstplaybasebin.c 2007/07/12 12:01:20 1.147
@@ -1051,11 +1051,13 @@
if (!g_object_get_data (G_OBJECT (element), "pending"))
return;
- GST_DEBUG_OBJECT (element, "remove pending");
-
g_object_set_data (G_OBJECT (element), "pending", NULL);
play_base_bin->pending--;
+
+ GST_DEBUG_OBJECT (element, "remove pending, now %d pending",
+ play_base_bin->pending);
+
if (play_base_bin->pending == 0) {
/* we can commit this group for playback now */
group_commit (play_base_bin, play_base_bin->is_stream, subs);
@@ -1988,6 +1990,9 @@
/* remove our previous preroll queues */
remove_groups (play_base_bin);
+ /* clear pending dynamic elements */
+ play_base_bin->pending = 0;
+
/* do subs */
if (subbin) {
GstElement *db;
@@ -2006,6 +2011,9 @@
g_object_set_data (G_OBJECT (db), "pending", "1");
play_base_bin->pending++;
+ GST_DEBUG_OBJECT (play_base_bin, "we have subtitles, %d pending",
+ play_base_bin->pending);
+
if (!play_base_bin->is_stream) {
GstStateChangeReturn sret;
gstplaybin-stop-buffering-144-145.patch:
--- NEW FILE gstplaybin-stop-buffering-144-145.patch ---
--- gst-plugins-base-0.10.12/gst/playback/gstplaybasebin.c 2007/05/24 11:15:32 1.144
+++ gst-plugins-base-0.10.12/gst/playback/gstplaybasebin.c 2007/05/29 13:38:35 1.145
@@ -597,25 +597,6 @@
}
}
-/* this signal will be fired when one of the queues with raw
- * data is filled. This means that the group building stage is over
- * and playback of the new queued group should start. This is a rather unusual
- * situation because normally the group is commited when the "no_more_pads"
- * signal is fired.
- */
-static void
-queue_overrun (GstElement * queue, GstPlayBaseBin * play_base_bin)
-{
- GST_DEBUG_OBJECT (play_base_bin, "queue %s overrun",
- GST_ELEMENT_NAME (queue));
-
- preroll_remove_overrun (queue, play_base_bin);
-
- group_commit (play_base_bin, FALSE,
- GST_OBJECT_PARENT (GST_OBJECT_CAST (queue)) ==
- GST_OBJECT_CAST (play_base_bin->subtitle));
-}
-
/* Used for time-based buffering in streaming mode and is called when a queue
* emits the running signal. This means that the high watermark threshold is
* reached and the buffering is completed. */
@@ -667,6 +648,28 @@
fill_buffer (play_base_bin, 100);
}
+/* this signal will be fired when one of the queues with raw
+ * data is filled. This means that the group building stage is over
+ * and playback of the new queued group should start. This is a rather unusual
+ * situation because normally the group is commited when the "no_more_pads"
+ * signal is fired.
+ */
+static void
+queue_overrun (GstElement * queue, GstPlayBaseBin * play_base_bin)
+{
+ GST_DEBUG_OBJECT (play_base_bin, "queue %s overrun",
+ GST_ELEMENT_NAME (queue));
+
+ preroll_remove_overrun (queue, play_base_bin);
+
+ group_commit (play_base_bin, FALSE,
+ GST_OBJECT_PARENT (GST_OBJECT_CAST (queue)) ==
+ GST_OBJECT_CAST (play_base_bin->subtitle));
+
+ /* notify end of buffering */
+ queue_threshold_reached (queue, play_base_bin);
+}
+
/* this signal is only added when in streaming mode to catch underruns
*/
static void
@@ -1048,6 +1051,8 @@
if (!g_object_get_data (G_OBJECT (element), "pending"))
return;
+ GST_DEBUG_OBJECT (element, "remove pending");
+
g_object_set_data (G_OBJECT (element), "pending", NULL);
play_base_bin->pending--;
gstplaybin-stream-info-value-array-fix.patch:
--- NEW FILE gstplaybin-stream-info-value-array-fix.patch ---
--- gst-plugins-base-0.10.12/gst/playback/gstplaybasebin.c.debug 2007-03-05 06:13:29.000000000 -0500
+++ gst-plugins-base-0.10.12/gst/playback/gstplaybasebin.c 2007-07-22 00:00:08.000000000 -0400
@@ -21,6 +21,8 @@
#include "config.h"
#endif
+#include <stdio.h>
+
#include <gst/gst-i18n-plugin.h>
#include <string.h>
#include "gstplaybasebin.h"
@@ -2504,6 +2506,7 @@ gst_play_base_bin_get_property (GObject
GValueArray *copy;
copy = gst_play_base_bin_get_streaminfo_value_array (play_base_bin);
+fprintf (stderr, "%s %s():%d copy is %p\n", __FILE__, __func__, __LINE__, copy);
g_value_take_boxed (value, copy);
break;
}
@@ -2611,12 +2614,14 @@ static GValueArray *
gst_play_base_bin_get_streaminfo_value_array (GstPlayBaseBin * play_base_bin)
{
GstPlayBaseGroup *group;
- GValueArray *array = NULL;
+ GValueArray *array = g_value_array_new (0);
GROUP_LOCK (play_base_bin);
group = get_active_group (play_base_bin);
+fprintf (stderr, "%s %s():%d group is %p\n", __FILE__, __func__, __LINE__, group);
if (group) {
array = g_value_array_copy (group->streaminfo_value_array);
+fprintf (stderr, "%s %s():%d array is %p\n", __FILE__, __func__, __LINE__, array);
}
GROUP_UNLOCK (play_base_bin);
gstplaybin-use-pushing-signal-142-143.patch:
--- NEW FILE gstplaybin-use-pushing-signal-142-143.patch ---
--- gst-plugins-base-0.10.12/gst/playback/gstplaybasebin.c 2007/04/05 10:27:06 1.142
+++ gst-plugins-base-0.10.12/gst/playback/gstplaybasebin.c 2007/05/10 15:28:13 1.143
@@ -496,6 +496,7 @@
static inline void
fill_buffer (GstPlayBaseBin * play_base_bin, gint percent)
{
+ GST_DEBUG_OBJECT (play_base_bin, "buffering %d", percent);
gst_element_post_message (GST_ELEMENT_CAST (play_base_bin),
gst_message_new_buffering (GST_OBJECT_CAST (play_base_bin), percent));
}
@@ -528,10 +529,12 @@
GstPlayBaseBin *play_base_bin = g_object_get_data (G_OBJECT (queue), "pbb");
guint64 level = 0;
- GST_DEBUG ("check queue triggered");
+ GST_DEBUG_OBJECT (queue, "check queue triggered");
g_object_get (G_OBJECT (queue), "current-level-time", &level, NULL);
- GST_DEBUG ("Queue size: %" GST_TIME_FORMAT, GST_TIME_ARGS (level));
+ GST_DEBUG_OBJECT (play_base_bin, "Queue size: %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (level));
+
if (play_base_bin->queue_threshold > 0) {
level = level * 99 / play_base_bin->queue_threshold;
if (level > 99)
@@ -678,7 +681,7 @@
* This signal could never be called because the queue max-size limits are set
* too low. We take care of this possible deadlock in the the overrun signal
* handler. */
- g_signal_connect (G_OBJECT (queue), "running",
+ g_signal_connect (G_OBJECT (queue), "pushing",
G_CALLBACK (queue_threshold_reached), play_base_bin);
GST_DEBUG_OBJECT (play_base_bin,
"setting min threshold time to %" G_GUINT64_FORMAT,
@@ -686,7 +689,7 @@
g_object_set (queue, "min-threshold-time",
(guint64) play_base_bin->queue_threshold, NULL);
- /* re-connect probe, this will five feedback about the percentage that we
+ /* re-connect probe, this will fire feedback about the percentage that we
* buffered and is posted in the BUFFERING message. */
if (!g_object_get_data (G_OBJECT (queue), "probe")) {
GstPad *sinkpad;
Index: gstreamer-plugins-base.spec
===================================================================
RCS file: /cvs/extras/rpms/gstreamer-plugins-base/OLPC-2/gstreamer-plugins-base.spec,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- gstreamer-plugins-base.spec 18 Jun 2007 18:52:50 -0000 1.28
+++ gstreamer-plugins-base.spec 22 Jul 2007 04:42:05 -0000 1.29
@@ -5,20 +5,26 @@
Name: %{gstreamer}-plugins-base
Version: 0.10.12
-Release: 4%{?dist}
+Release: 4.1%{?dist}
Summary: GStreamer streaming media framework base plug-ins
Group: Applications/Multimedia
License: LGPL
URL: http://gstreamer.freedesktop.org/
-Source: http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-%{version}.tar.bz2
-Patch2: gst-theora-alloc-right-buffer-size.patch
-Patch3: gst-theora-init-fix.patch
-Patch4: gstvideorate-145-146.patch
-Patch5: gstvideorate-146-147.patch
-Patch6: gstvideorate-147-148.patch
-Patch7: gstvideorate-148-149.patch
-Patch8: gstvideorate-leakfix.patch
+Source: http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-%{version}.tar.bz2
+Patch2: gst-theora-alloc-right-buffer-size.patch
+Patch3: gst-theora-init-fix.patch
+Patch4: gstvideorate-145-146.patch
+Patch5: gstvideorate-146-147.patch
+Patch6: gstvideorate-147-148.patch
+Patch7: gstvideorate-148-149.patch
+Patch8: gstvideorate-leakfix.patch
+Patch9: gstplaybin-stream-info-value-array-fix.patch
+Patch10: gstplaybin-fix-leak-141-142.patch
+Patch11: gstplaybin-use-pushing-signal-142-143.patch
+Patch12: gstplaybin-handle-unknown-caps-143-144.patch
+Patch13: gstplaybin-stop-buffering-144-145.patch
+Patch14: gstplaybin-make-reuse-work-146-147.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -60,6 +66,12 @@
%patch6 -p1 -b .147-148
%patch7 -p1 -b .148-149
%patch8 -p1 -b .leakfix
+%patch9 -p1 -b .stream-info-value-array-fix
+%patch10 -p1 -b .fix-leak
+%patch11 -p1 -b .use-pushing-signal
+%patch12 -p1 -b .handle-unknown-caps
+%patch13 -p1 -b .stop-buffering
+%patch14 -p1 -b .make-reuse-work
%build
@@ -219,6 +231,9 @@
%doc %{_datadir}/gtk-doc/html/gst-plugins-base-plugins-%{majorminor}
%changelog
+* Sun Jul 22 2007 Dan Williams <dcbw at redhat.com> - 0.10.12-4.1
+- Pile of fixes for playbin
+
* Mon Jun 18 2007 John (J5) Palmieri <johnp at redhat.com> - 0.10.12-4
- add patches for fixing video on the OLPC and rebuild
More information about the fedora-extras-commits
mailing list