plugins/elements/gsttypefindelement.c: Clean up on FLUSH_STOP and not FLUSH_START. Forward both events immediately.

Original commit message from CVS:
* plugins/elements/gsttypefindelement.c:
(gst_type_find_element_handle_event),
(gst_type_find_element_send_cached_events),
(gst_type_find_element_change_state):
Clean up on FLUSH_STOP and not FLUSH_START. Forward both events
immediately.
This commit is contained in:
Sebastian Dröge 2008-05-13 12:38:31 +00:00
parent 88c412bdc1
commit f2422145da
2 changed files with 12 additions and 9 deletions

View file

@ -1,3 +1,12 @@
2008-05-13 Sebastian Dröge <slomo@circular-chaos.org>
* plugins/elements/gsttypefindelement.c:
(gst_type_find_element_handle_event),
(gst_type_find_element_send_cached_events),
(gst_type_find_element_change_state):
Clean up on FLUSH_STOP and not FLUSH_START. Forward both events
immediately.
2008-05-13 Sebastian Dröge <slomo@circular-chaos.org> 2008-05-13 Sebastian Dröge <slomo@circular-chaos.org>
* plugins/elements/gsttypefindelement.c: * plugins/elements/gsttypefindelement.c:

View file

@ -517,23 +517,21 @@ gst_type_find_element_handle_event (GstPad * pad, GstEvent * event)
res = gst_pad_event_default (pad, event); res = gst_pad_event_default (pad, event);
break; break;
} }
case GST_EVENT_FLUSH_START: case GST_EVENT_FLUSH_STOP:
GST_OBJECT_LOCK (typefind);
g_list_foreach (typefind->cached_events, g_list_foreach (typefind->cached_events,
(GFunc) gst_mini_object_unref, NULL); (GFunc) gst_mini_object_unref, NULL);
g_list_free (typefind->cached_events); g_list_free (typefind->cached_events);
typefind->cached_events = NULL; typefind->cached_events = NULL;
GST_OBJECT_UNLOCK (typefind);
gst_buffer_replace (&typefind->store, NULL); gst_buffer_replace (&typefind->store, NULL);
/* fall through */
case GST_EVENT_FLUSH_START:
res = gst_pad_event_default (pad, event); res = gst_pad_event_default (pad, event);
break; break;
default: default:
GST_DEBUG_OBJECT (typefind, "Saving %s event to send later", GST_DEBUG_OBJECT (typefind, "Saving %s event to send later",
GST_EVENT_TYPE_NAME (event)); GST_EVENT_TYPE_NAME (event));
GST_OBJECT_LOCK (typefind);
typefind->cached_events = typefind->cached_events =
g_list_append (typefind->cached_events, event); g_list_append (typefind->cached_events, event);
GST_OBJECT_UNLOCK (typefind);
res = TRUE; res = TRUE;
break; break;
} }
@ -554,7 +552,6 @@ gst_type_find_element_send_cached_events (GstTypeFindElement * typefind)
{ {
GList *l; GList *l;
GST_OBJECT_LOCK (typefind);
for (l = typefind->cached_events; l != NULL; l = l->next) { for (l = typefind->cached_events; l != NULL; l = l->next) {
GstEvent *event = GST_EVENT (l->data); GstEvent *event = GST_EVENT (l->data);
@ -564,7 +561,6 @@ gst_type_find_element_send_cached_events (GstTypeFindElement * typefind)
} }
g_list_free (typefind->cached_events); g_list_free (typefind->cached_events);
typefind->cached_events = NULL; typefind->cached_events = NULL;
GST_OBJECT_UNLOCK (typefind);
} }
static gboolean static gboolean
@ -839,12 +835,10 @@ gst_type_find_element_change_state (GstElement * element,
case GST_STATE_CHANGE_READY_TO_NULL: case GST_STATE_CHANGE_READY_TO_NULL:
gst_caps_replace (&typefind->caps, NULL); gst_caps_replace (&typefind->caps, NULL);
GST_OBJECT_LOCK (typefind);
g_list_foreach (typefind->cached_events, g_list_foreach (typefind->cached_events,
(GFunc) gst_mini_object_unref, NULL); (GFunc) gst_mini_object_unref, NULL);
g_list_free (typefind->cached_events); g_list_free (typefind->cached_events);
typefind->cached_events = NULL; typefind->cached_events = NULL;
GST_OBJECT_UNLOCK (typefind);
break; break;
default: default:
break; break;