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