From 23f3785d32b31aa634903d63091ff90049098a34 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 27 Oct 2003 19:01:55 +0000 Subject: [PATCH] bugfixes (don't remember them though ;) Original commit message from CVS: bugfixes (don't remember them though ;) --- gst/elements/gstbufferstore.c | 11 +++++++++-- gst/elements/gstfakesrc.c | 2 +- gst/elements/gsttypefind.c | 20 ++++++++++++-------- gst/elements/gsttypefindelement.c | 20 ++++++++++++-------- plugins/elements/gstbufferstore.c | 11 +++++++++-- plugins/elements/gstfakesrc.c | 2 +- plugins/elements/gsttypefind.c | 20 ++++++++++++-------- plugins/elements/gsttypefindelement.c | 20 ++++++++++++-------- 8 files changed, 68 insertions(+), 38 deletions(-) diff --git a/gst/elements/gstbufferstore.c b/gst/elements/gstbufferstore.c index 38e6c9e341..219592d49e 100644 --- a/gst/elements/gstbufferstore.c +++ b/gst/elements/gstbufferstore.c @@ -131,6 +131,8 @@ gst_buffer_store_dispose (GObject *object) static gboolean gst_buffer_store_add_buffer_func (GstBufferStore *store, GstBuffer *buffer) { + g_assert (buffer != NULL); + if (!GST_BUFFER_OFFSET_IS_VALID (buffer) && store->buffers && GST_BUFFER_OFFSET_IS_VALID (store->buffers->data)) { @@ -175,6 +177,7 @@ gst_buffer_store_add_buffer_func (GstBufferStore *store, GstBuffer *buffer) if (needed_size < GST_BUFFER_SIZE (buffer)) { /* need to create subbuffer to not have overlapping data */ GstBuffer *sub = gst_buffer_create_sub (buffer, 0, needed_size); + g_assert (sub); buffer = sub; } else { gst_data_ref (GST_DATA (buffer)); @@ -201,7 +204,8 @@ gst_buffer_store_add_buffer_func (GstBufferStore *store, GstBuffer *buffer) start_offset = GST_BUFFER_OFFSET (buffer) > start_offset ? 0 : start_offset - GST_BUFFER_OFFSET (buffer); GstBuffer* sub = gst_buffer_create_sub (buffer, start_offset, - MIN (GST_BUFFER_SIZE (buffer), GST_BUFFER_OFFSET (current) - start_offset)); + MIN (GST_BUFFER_SIZE (buffer), GST_BUFFER_OFFSET (current) - start_offset - GST_BUFFER_OFFSET (buffer))); + g_assert (sub); buffer = sub; } else { gst_data_ref (GST_DATA (buffer)); @@ -320,7 +324,10 @@ gst_buffer_store_get_buffer (GstBufferStore *store, guint64 offset, guint size) cur_offset = GST_BUFFER_OFFSET (current); } walk = g_list_next (walk); - if (cur_offset == offset && + if (cur_offset > offset) { + /* #include + do_nothing_loop (); */ + } else if (cur_offset == offset && GST_BUFFER_SIZE (current) == size) { GST_LOG_OBJECT (store, "found matching buffer %p for offset %"G_GUINT64_FORMAT" and size %u", current, offset, size); diff --git a/gst/elements/gstfakesrc.c b/gst/elements/gstfakesrc.c index e992ee50f9..14287e347e 100644 --- a/gst/elements/gstfakesrc.c +++ b/gst/elements/gstfakesrc.c @@ -487,7 +487,7 @@ gst_fakesrc_set_property (GObject *object, guint prop_id, const GValue *value, G src->pool = gst_buffer_pool_get_default (src->sizemax, 10); } else { if (src->pool) { - gst_buffer_pool_free (src->pool); + gst_buffer_pool_unref (src->pool); src->pool = NULL; } } diff --git a/gst/elements/gsttypefind.c b/gst/elements/gsttypefind.c index a973f5aa86..e39b29a6a8 100644 --- a/gst/elements/gsttypefind.c +++ b/gst/elements/gsttypefind.c @@ -144,6 +144,7 @@ gst_type_find_element_have_type (GstTypeFindElement *typefind, guint probability gchar *caps_str; g_assert (typefind->caps == NULL); + g_assert (caps != NULL); caps_str = gst_caps_to_string (caps); GST_INFO_OBJECT (typefind, "found caps %s", caps_str); @@ -318,8 +319,9 @@ gst_type_find_element_handle_event (GstPad *pad, GstEvent *event) if (typefind->mode == MODE_TYPEFIND) { /* need to do more? */ gst_data_unref (GST_DATA (event)); + } else { + gst_pad_event_default (pad, event); } - gst_pad_event_default (pad, event); } typedef struct { GstTypeFindFactory * factory; @@ -603,13 +605,15 @@ gst_type_find_element_chain (GstPad *pad, GstData *data) } if (g_list_next (typefind->possibilities) == NULL) { entry = (TypeFindEntry *) typefind->possibilities->data; - GST_LOG_OBJECT (typefind, "'%s' is the only typefind left, using it now (probability %u)", - GST_PLUGIN_FEATURE_NAME (entry->factory), entry->probability); - g_signal_emit (typefind, gst_type_find_element_signals[HAVE_TYPE], 0, entry->probability, entry->caps); - free_entry (entry); - g_list_free (typefind->possibilities); - typefind->possibilities = NULL; - stop_typefinding (typefind); + if (entry->probability > 0) { + GST_LOG_OBJECT (typefind, "'%s' is the only typefind left, using it now (probability %u)", + GST_PLUGIN_FEATURE_NAME (entry->factory), entry->probability); + g_signal_emit (typefind, gst_type_find_element_signals[HAVE_TYPE], 0, entry->probability, entry->caps); + free_entry (entry); + g_list_free (typefind->possibilities); + typefind->possibilities = NULL; + stop_typefinding (typefind); + } } } break; diff --git a/gst/elements/gsttypefindelement.c b/gst/elements/gsttypefindelement.c index a973f5aa86..e39b29a6a8 100644 --- a/gst/elements/gsttypefindelement.c +++ b/gst/elements/gsttypefindelement.c @@ -144,6 +144,7 @@ gst_type_find_element_have_type (GstTypeFindElement *typefind, guint probability gchar *caps_str; g_assert (typefind->caps == NULL); + g_assert (caps != NULL); caps_str = gst_caps_to_string (caps); GST_INFO_OBJECT (typefind, "found caps %s", caps_str); @@ -318,8 +319,9 @@ gst_type_find_element_handle_event (GstPad *pad, GstEvent *event) if (typefind->mode == MODE_TYPEFIND) { /* need to do more? */ gst_data_unref (GST_DATA (event)); + } else { + gst_pad_event_default (pad, event); } - gst_pad_event_default (pad, event); } typedef struct { GstTypeFindFactory * factory; @@ -603,13 +605,15 @@ gst_type_find_element_chain (GstPad *pad, GstData *data) } if (g_list_next (typefind->possibilities) == NULL) { entry = (TypeFindEntry *) typefind->possibilities->data; - GST_LOG_OBJECT (typefind, "'%s' is the only typefind left, using it now (probability %u)", - GST_PLUGIN_FEATURE_NAME (entry->factory), entry->probability); - g_signal_emit (typefind, gst_type_find_element_signals[HAVE_TYPE], 0, entry->probability, entry->caps); - free_entry (entry); - g_list_free (typefind->possibilities); - typefind->possibilities = NULL; - stop_typefinding (typefind); + if (entry->probability > 0) { + GST_LOG_OBJECT (typefind, "'%s' is the only typefind left, using it now (probability %u)", + GST_PLUGIN_FEATURE_NAME (entry->factory), entry->probability); + g_signal_emit (typefind, gst_type_find_element_signals[HAVE_TYPE], 0, entry->probability, entry->caps); + free_entry (entry); + g_list_free (typefind->possibilities); + typefind->possibilities = NULL; + stop_typefinding (typefind); + } } } break; diff --git a/plugins/elements/gstbufferstore.c b/plugins/elements/gstbufferstore.c index 38e6c9e341..219592d49e 100644 --- a/plugins/elements/gstbufferstore.c +++ b/plugins/elements/gstbufferstore.c @@ -131,6 +131,8 @@ gst_buffer_store_dispose (GObject *object) static gboolean gst_buffer_store_add_buffer_func (GstBufferStore *store, GstBuffer *buffer) { + g_assert (buffer != NULL); + if (!GST_BUFFER_OFFSET_IS_VALID (buffer) && store->buffers && GST_BUFFER_OFFSET_IS_VALID (store->buffers->data)) { @@ -175,6 +177,7 @@ gst_buffer_store_add_buffer_func (GstBufferStore *store, GstBuffer *buffer) if (needed_size < GST_BUFFER_SIZE (buffer)) { /* need to create subbuffer to not have overlapping data */ GstBuffer *sub = gst_buffer_create_sub (buffer, 0, needed_size); + g_assert (sub); buffer = sub; } else { gst_data_ref (GST_DATA (buffer)); @@ -201,7 +204,8 @@ gst_buffer_store_add_buffer_func (GstBufferStore *store, GstBuffer *buffer) start_offset = GST_BUFFER_OFFSET (buffer) > start_offset ? 0 : start_offset - GST_BUFFER_OFFSET (buffer); GstBuffer* sub = gst_buffer_create_sub (buffer, start_offset, - MIN (GST_BUFFER_SIZE (buffer), GST_BUFFER_OFFSET (current) - start_offset)); + MIN (GST_BUFFER_SIZE (buffer), GST_BUFFER_OFFSET (current) - start_offset - GST_BUFFER_OFFSET (buffer))); + g_assert (sub); buffer = sub; } else { gst_data_ref (GST_DATA (buffer)); @@ -320,7 +324,10 @@ gst_buffer_store_get_buffer (GstBufferStore *store, guint64 offset, guint size) cur_offset = GST_BUFFER_OFFSET (current); } walk = g_list_next (walk); - if (cur_offset == offset && + if (cur_offset > offset) { + /* #include + do_nothing_loop (); */ + } else if (cur_offset == offset && GST_BUFFER_SIZE (current) == size) { GST_LOG_OBJECT (store, "found matching buffer %p for offset %"G_GUINT64_FORMAT" and size %u", current, offset, size); diff --git a/plugins/elements/gstfakesrc.c b/plugins/elements/gstfakesrc.c index e992ee50f9..14287e347e 100644 --- a/plugins/elements/gstfakesrc.c +++ b/plugins/elements/gstfakesrc.c @@ -487,7 +487,7 @@ gst_fakesrc_set_property (GObject *object, guint prop_id, const GValue *value, G src->pool = gst_buffer_pool_get_default (src->sizemax, 10); } else { if (src->pool) { - gst_buffer_pool_free (src->pool); + gst_buffer_pool_unref (src->pool); src->pool = NULL; } } diff --git a/plugins/elements/gsttypefind.c b/plugins/elements/gsttypefind.c index a973f5aa86..e39b29a6a8 100644 --- a/plugins/elements/gsttypefind.c +++ b/plugins/elements/gsttypefind.c @@ -144,6 +144,7 @@ gst_type_find_element_have_type (GstTypeFindElement *typefind, guint probability gchar *caps_str; g_assert (typefind->caps == NULL); + g_assert (caps != NULL); caps_str = gst_caps_to_string (caps); GST_INFO_OBJECT (typefind, "found caps %s", caps_str); @@ -318,8 +319,9 @@ gst_type_find_element_handle_event (GstPad *pad, GstEvent *event) if (typefind->mode == MODE_TYPEFIND) { /* need to do more? */ gst_data_unref (GST_DATA (event)); + } else { + gst_pad_event_default (pad, event); } - gst_pad_event_default (pad, event); } typedef struct { GstTypeFindFactory * factory; @@ -603,13 +605,15 @@ gst_type_find_element_chain (GstPad *pad, GstData *data) } if (g_list_next (typefind->possibilities) == NULL) { entry = (TypeFindEntry *) typefind->possibilities->data; - GST_LOG_OBJECT (typefind, "'%s' is the only typefind left, using it now (probability %u)", - GST_PLUGIN_FEATURE_NAME (entry->factory), entry->probability); - g_signal_emit (typefind, gst_type_find_element_signals[HAVE_TYPE], 0, entry->probability, entry->caps); - free_entry (entry); - g_list_free (typefind->possibilities); - typefind->possibilities = NULL; - stop_typefinding (typefind); + if (entry->probability > 0) { + GST_LOG_OBJECT (typefind, "'%s' is the only typefind left, using it now (probability %u)", + GST_PLUGIN_FEATURE_NAME (entry->factory), entry->probability); + g_signal_emit (typefind, gst_type_find_element_signals[HAVE_TYPE], 0, entry->probability, entry->caps); + free_entry (entry); + g_list_free (typefind->possibilities); + typefind->possibilities = NULL; + stop_typefinding (typefind); + } } } break; diff --git a/plugins/elements/gsttypefindelement.c b/plugins/elements/gsttypefindelement.c index a973f5aa86..e39b29a6a8 100644 --- a/plugins/elements/gsttypefindelement.c +++ b/plugins/elements/gsttypefindelement.c @@ -144,6 +144,7 @@ gst_type_find_element_have_type (GstTypeFindElement *typefind, guint probability gchar *caps_str; g_assert (typefind->caps == NULL); + g_assert (caps != NULL); caps_str = gst_caps_to_string (caps); GST_INFO_OBJECT (typefind, "found caps %s", caps_str); @@ -318,8 +319,9 @@ gst_type_find_element_handle_event (GstPad *pad, GstEvent *event) if (typefind->mode == MODE_TYPEFIND) { /* need to do more? */ gst_data_unref (GST_DATA (event)); + } else { + gst_pad_event_default (pad, event); } - gst_pad_event_default (pad, event); } typedef struct { GstTypeFindFactory * factory; @@ -603,13 +605,15 @@ gst_type_find_element_chain (GstPad *pad, GstData *data) } if (g_list_next (typefind->possibilities) == NULL) { entry = (TypeFindEntry *) typefind->possibilities->data; - GST_LOG_OBJECT (typefind, "'%s' is the only typefind left, using it now (probability %u)", - GST_PLUGIN_FEATURE_NAME (entry->factory), entry->probability); - g_signal_emit (typefind, gst_type_find_element_signals[HAVE_TYPE], 0, entry->probability, entry->caps); - free_entry (entry); - g_list_free (typefind->possibilities); - typefind->possibilities = NULL; - stop_typefinding (typefind); + if (entry->probability > 0) { + GST_LOG_OBJECT (typefind, "'%s' is the only typefind left, using it now (probability %u)", + GST_PLUGIN_FEATURE_NAME (entry->factory), entry->probability); + g_signal_emit (typefind, gst_type_find_element_signals[HAVE_TYPE], 0, entry->probability, entry->caps); + free_entry (entry); + g_list_free (typefind->possibilities); + typefind->possibilities = NULL; + stop_typefinding (typefind); + } } } break;