From: <wt...@fr...> - 2005-05-17 17:38:01
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Tue May 17 2005 10:37:55 PDT Log message: * gst/base/gstbasesink.c: (gst_basesink_finish_preroll), (gst_basesink_chain_unlocked), (gst_basesink_activate): * gst/gstminiobject.c: (gst_mini_object_get_type), (gst_mini_object_free): * gst/gstpad.c: (gst_pad_accept_caps), (gst_pad_query), (gst_pad_push), (gst_pad_push_event): * gst/gstqueue.c: (gst_queue_change_state): Don't queue buffers in basesink when we are flushing. Unref buffer when flushing in basesink. Flush queue when going to READY Unref buffer when _push() returns an error. Don't free MiniObject instance when refcount is incremented in _finalize() so that we can recover objects. Modified files: . : ChangeLog gst : gstminiobject.c gstpad.c gstqueue.c gst/base : gstbasesink.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.1080&r2=1.1081 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstminiobject.c.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstpad.c.diff?r1=1.383&r2=1.384 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstqueue.c.diff?r1=1.124&r2=1.125 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/base/gstbasesink.c.diff?r1=1.12&r2=1.13 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.1080 retrieving revision 1.1081 diff -u -d -r1.1080 -r1.1081 --- ChangeLog 17 May 2005 17:22:30 -0000 1.1080 +++ ChangeLog 17 May 2005 17:37:43 -0000 1.1081 @@ -1,3 +1,19 @@ +2005-05-17 Wim Taymans <wi...@fl...> + + * gst/base/gstbasesink.c: (gst_basesink_finish_preroll), + (gst_basesink_chain_unlocked), (gst_basesink_activate): + * gst/gstminiobject.c: (gst_mini_object_get_type), + (gst_mini_object_free): + * gst/gstpad.c: (gst_pad_accept_caps), (gst_pad_query), + (gst_pad_push), (gst_pad_push_event): + * gst/gstqueue.c: (gst_queue_change_state): + Don't queue buffers in basesink when we are flushing. + Unref buffer when flushing in basesink. + Flush queue when going to READY + Unref buffer when _push() returns an error. + Don't free MiniObject instance when refcount is incremented + in _finalize() so that we can recover objects. 2005-05-17 Thomas Vander Stichele <thomas at apestaart dot org> * docs/manual/advanced-schedulers.xml: Index: gstminiobject.c RCS file: /cvs/gstreamer/gstreamer/gst/gstminiobject.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gstminiobject.c 16 May 2005 21:05:21 -0000 1.2 +++ gstminiobject.c 17 May 2005 17:37:43 -0000 1.3 @@ -46,7 +46,7 @@ GType gst_mini_object_get_type (void) { - static GType _gst_mini_object_type; + static GType _gst_mini_object_type = 0; if (!_gst_mini_object_type) { GTypeValueTable value_table = { @@ -178,7 +178,10 @@ mo_class = GST_MINI_OBJECT_GET_CLASS (mini_object); mo_class->finalize (mini_object); - g_type_free_instance ((GTypeInstance *) mini_object); + /* if the refcount is still 0 we can really free the + * object, else the finalize method recycled the object */ + if (g_atomic_int_get (&mini_object->refcount) == 0) + g_type_free_instance ((GTypeInstance *) mini_object); } void Index: gstpad.c RCS file: /cvs/gstreamer/gstreamer/gst/gstpad.c,v retrieving revision 1.383 retrieving revision 1.384 diff -u -d -r1.383 -r1.384 --- gstpad.c 17 May 2005 14:11:32 -0000 1.383 +++ gstpad.c 17 May 2005 17:37:43 -0000 1.384 @@ -2902,6 +2902,7 @@ /* ERROR recovery here */ not_linked: { + gst_buffer_unref (buffer); GST_CAT_LOG_OBJECT (GST_CAT_SCHEDULING, pad, "pushing, but it was not linked"); GST_UNLOCK (pad); @@ -2909,6 +2910,7 @@ } not_active: "pushing, but it was inactive"); @@ -2916,6 +2918,7 @@ flushing: "pushing, but pad was flushing"); @@ -2923,12 +2926,14 @@ not_negotiated: "pushing buffer but peer did not accept"); return GST_FLOW_NOT_NEGOTIATED; no_function: "pushing, but not chainhandler"); GST_ELEMENT_ERROR (GST_PAD_PARENT (pad), CORE, PAD, (NULL), @@ -3132,6 +3137,7 @@ /* ERROR handling */ + gst_event_unref (event); return FALSE; Index: gstqueue.c RCS file: /cvs/gstreamer/gstreamer/gst/gstqueue.c,v retrieving revision 1.124 retrieving revision 1.125 diff -u -d -r1.124 -r1.125 --- gstqueue.c 16 May 2005 20:21:54 -0000 1.124 +++ gstqueue.c 17 May 2005 17:37:43 -0000 1.125 @@ -906,12 +906,12 @@ switch (GST_STATE_TRANSITION (element)) { case GST_STATE_NULL_TO_READY: + break; + case GST_STATE_READY_TO_PAUSED: GST_QUEUE_MUTEX_LOCK; gst_queue_locked_flush (queue); GST_QUEUE_MUTEX_UNLOCK; break; - case GST_STATE_READY_TO_PAUSED: - break; case GST_STATE_PAUSED_TO_PLAYING: default: Index: gstbasesink.c RCS file: /cvs/gstreamer/gstreamer/gst/base/gstbasesink.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- gstbasesink.c 12 May 2005 19:45:44 -0000 1.12 +++ gstbasesink.c 17 May 2005 17:37:43 -0000 1.13 @@ -446,14 +446,14 @@ gst_element_commit_state (GST_ELEMENT (basesink)); GST_STATE_UNLOCK (basesink); - gst_basesink_preroll_queue_push (basesink, pad, buffer); - GST_LOCK (pad); usable = !GST_RPAD_IS_FLUSHING (pad) && GST_RPAD_IS_ACTIVE (pad); GST_UNLOCK (pad); if (!usable) goto unusable; + gst_basesink_preroll_queue_push (basesink, pad, buffer); if (basesink->need_preroll) goto still_queueing; @@ -695,6 +695,7 @@ case PREROLL_PLAYING: return gst_basesink_handle_buffer (basesink, buf); case PREROLL_FLUSHING: + gst_buffer_unref (buf); return GST_FLOW_UNEXPECTED; g_assert_not_reached (); |