From: Benjamin O. <co...@us...> - 2002-02-24 13:38:33
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Sun Feb 24 2002 05:38:22 PST Log message: fixes: - g_free accepts NULL - indenting - last_message is readable, not writeable - warn on invalid property id Modified files: gst/elements : gsttee.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gsttee.c.diff?r1=1.17&r2=1.18 ====Begin Diffs==== Index: gsttee.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/gsttee.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- gsttee.c 12 Feb 2002 13:57:14 -0000 1.17 +++ gsttee.c 24 Feb 2002 13:38:10 -0000 1.18 @@ -204,13 +204,11 @@ name = NULL; } } - /* FIXME: thomas: does tee also have to notify a new pad ? */ - if (!tee->silent) { - if (tee->last_message) g_free (tee->last_message); - tee->last_message = g_strdup_printf ("new pad %s", name); - g_object_notify (G_OBJECT (tee), "last_message"); - } - /* g_object_notify (G_OBJECT (element), "new pad"); */ + if (!tee->silent) { + g_free (tee->last_message); + tee->last_message = g_strdup_printf ("new pad %s", name); + g_object_notify (G_OBJECT (tee), "last_message"); + } srcpad = gst_pad_new_from_template (templ, name); g_free (name); @@ -257,10 +255,8 @@ case ARG_SILENT: tee->silent = g_value_get_boolean (value); break; - case ARG_LAST_MESSAGE: - g_value_set_string ((GValue *) value, tee->last_message); - break; default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } @@ -282,7 +278,11 @@ case ARG_SILENT: g_value_set_boolean (value, tee->silent); break; + case ARG_LAST_MESSAGE: + g_value_set_string ((GValue *) value, tee->last_message); + break; default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } @@ -329,7 +329,7 @@ } if (!tee->silent) { - if (tee->last_message) g_free (tee->last_message); + g_free (tee->last_message); tee->last_message = g_strdup_printf ("chain ******* (%s:%s)t (%d bytes, %llu) %p", GST_DEBUG_PAD_NAME (outpad), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf), buf); g_object_notify (G_OBJECT (tee), "last_message"); |
From: Benjamin O. <co...@us...> - 2003-04-28 21:48:51
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Mon Apr 28 2003 14:48:49 PDT Log message: offsets may be negative (nobody ever seeked beackwards, hu?) Modified files: gst/elements : gstfilesrc.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstfilesrc.c.diff?r1=1.54&r2=1.55 ====Begin Diffs==== Index: gstfilesrc.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/gstfilesrc.c,v retrieving revision 1.54 retrieving revision 1.55 diff -u -d -r1.54 -r1.55 --- gstfilesrc.c 1 Feb 2003 20:29:23 -0000 1.54 +++ gstfilesrc.c 28 Apr 2003 21:48:37 -0000 1.55 @@ -779,7 +779,7 @@ switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEEK: { - guint64 offset; + gint64 offset; if (GST_EVENT_SEEK_FORMAT (event) != GST_FORMAT_BYTES) { goto error; |
From: Benjamin O. <co...@us...> - 2003-10-27 01:30:24
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Sun Oct 26 2003 17:28:00 PST Branch: TYPEFIND Log message: run parent's dispose before disposing bufferstore Modified files: gst/elements : gsttypefindelement.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gsttypefindelement.c.diff?r1=1.1.2.3&r2=1.1.2.4 ====Begin Diffs==== Index: gsttypefindelement.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/Attic/gsttypefindelement.c,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- gsttypefindelement.c 27 Oct 2003 00:39:18 -0000 1.1.2.3 +++ gsttypefindelement.c 27 Oct 2003 01:27:48 -0000 1.1.2.4 @@ -221,12 +221,12 @@ { GstTypeFindElement *typefind = GST_TYPE_FIND_ELEMENT (object); + G_OBJECT_CLASS (parent_class)->dispose (object); + if (typefind->store) { g_object_unref (typefind->store); typefind->store = NULL; } - - G_OBJECT_CLASS (parent_class)->dispose (object); } static void gst_type_find_element_set_property (GObject *object, guint prop_id, |
From: Benjamin O. <co...@us...> - 2003-10-27 01:44:02
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Sun Oct 26 2003 17:40:32 PST Branch: TYPEFIND Log message: work with non-seekable streams Modified files: gst/elements : gsttypefindelement.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gsttypefindelement.c.diff?r1=1.1.2.4&r2=1.1.2.5 ====Begin Diffs==== Index: gsttypefindelement.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/Attic/gsttypefindelement.c,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -u -d -r1.1.2.4 -r1.1.2.5 --- gsttypefindelement.c 27 Oct 2003 01:27:48 -0000 1.1.2.4 +++ gsttypefindelement.c 27 Oct 2003 01:40:20 -0000 1.1.2.5 @@ -571,7 +571,7 @@ if (gst_pad_send_event (GST_PAD_PEER (typefind->sink), event)) { /* done seeking */ break; - } else { + } else if (entry->requested_offset < 0) { /* impossible to seek */ GST_LOG_OBJECT (typefind, "'%s' was reset - couldn't seek to %"G_GINT64_FORMAT, GST_PLUGIN_FEATURE_NAME (entry->factory), entry->requested_offset); |
From: Benjamin O. <co...@us...> - 2003-10-27 19:05:28
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Mon Oct 27 2003 11:02:07 PST Branch: TYPEFIND Log message: bugfixes (don't remember them though ;) Modified files: gst/elements : gstbufferstore.c gstfakesrc.c gsttypefindelement.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstbufferstore.c.diff?r1=1.1.2.3&r2=1.1.2.4 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstfakesrc.c.diff?r1=1.64&r2=1.64.2.1 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gsttypefindelement.c.diff?r1=1.1.2.6&r2=1.1.2.7 ====Begin Diffs==== Index: gstbufferstore.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/Attic/gstbufferstore.c,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- gstbufferstore.c 27 Oct 2003 00:39:18 -0000 1.1.2.3 +++ gstbufferstore.c 27 Oct 2003 19:01:54 -0000 1.1.2.4 @@ -131,6 +131,8 @@ 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 @@ 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 @@ 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 @@ cur_offset = GST_BUFFER_OFFSET (current); } walk = g_list_next (walk); - if (cur_offset == offset && + if (cur_offset > offset) { + /* #include <windows.h> + 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); Index: gstfakesrc.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/gstfakesrc.c,v retrieving revision 1.64 retrieving revision 1.64.2.1 diff -u -d -r1.64 -r1.64.2.1 --- gstfakesrc.c 8 Oct 2003 16:06:02 -0000 1.64 +++ gstfakesrc.c 27 Oct 2003 19:01:54 -0000 1.64.2.1 @@ -487,7 +487,7 @@ 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; } } Index: gsttypefindelement.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/Attic/gsttypefindelement.c,v retrieving revision 1.1.2.6 retrieving revision 1.1.2.7 diff -u -d -r1.1.2.6 -r1.1.2.7 --- gsttypefindelement.c 27 Oct 2003 03:12:15 -0000 1.1.2.6 +++ gsttypefindelement.c 27 Oct 2003 19:01:55 -0000 1.1.2.7 @@ -144,6 +144,7 @@ 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 @@ 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 @@ } 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; |
From: Benjamin O. <co...@us...> - 2003-10-27 21:04:14
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Mon Oct 27 2003 13:00:45 PST Branch: TYPEFIND Log message: - reorganize debug levels - fix bug where offset in subbuffers wasn't set Modified files: gst/elements : gstbufferstore.c gsttypefindelement.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstbufferstore.c.diff?r1=1.1.2.4&r2=1.1.2.5 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gsttypefindelement.c.diff?r1=1.1.2.7&r2=1.1.2.8 ====Begin Diffs==== Index: gstbufferstore.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/Attic/gstbufferstore.c,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -u -d -r1.1.2.4 -r1.1.2.5 --- gstbufferstore.c 27 Oct 2003 19:01:54 -0000 1.1.2.4 +++ gstbufferstore.c 27 Oct 2003 21:00:32 -0000 1.1.2.5 @@ -183,6 +183,8 @@ gst_data_ref (GST_DATA (buffer)); } /* replace current buffer with new one */ + GST_INFO_OBJECT (store, "replacing buffer %p with buffer %p with offset %"G_GINT64_FORMAT" and size %u", + current_list->data, buffer, GST_BUFFER_OFFSET (buffer), GST_BUFFER_SIZE (buffer)); gst_data_unref (GST_DATA (current_list->data)); current_list->data = buffer; buffer = NULL; @@ -206,10 +208,13 @@ GstBuffer* sub = gst_buffer_create_sub (buffer, start_offset, MIN (GST_BUFFER_SIZE (buffer), GST_BUFFER_OFFSET (current) - start_offset - GST_BUFFER_OFFSET (buffer))); g_assert (sub); + GST_BUFFER_OFFSET (sub) = start_offset + GST_BUFFER_OFFSET (buffer); buffer = sub; } else { gst_data_ref (GST_DATA (buffer)); } + GST_INFO_OBJECT (store, "adding buffer %p with offset %"G_GINT64_FORMAT" and size %u", + buffer, GST_BUFFER_OFFSET (buffer), GST_BUFFER_SIZE (buffer)); store->buffers = g_list_insert_before (store->buffers, walk, buffer); buffer = NULL; break; @@ -218,6 +223,8 @@ } if (buffer) { gst_data_ref (GST_DATA (buffer)); + GST_INFO_OBJECT (store, "adding buffer %p with offset %"G_GINT64_FORMAT" and size %u", + buffer, GST_BUFFER_OFFSET (buffer), GST_BUFFER_SIZE (buffer)); if (current_list) { g_list_append (current_list, buffer); } else { Index: gsttypefindelement.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/Attic/gsttypefindelement.c,v retrieving revision 1.1.2.7 retrieving revision 1.1.2.8 diff -u -d -r1.1.2.7 -r1.1.2.8 --- gsttypefindelement.c 27 Oct 2003 19:01:55 -0000 1.1.2.7 +++ gsttypefindelement.c 27 Oct 2003 21:00:32 -0000 1.1.2.8 @@ -306,7 +306,7 @@ { g_assert (typefind->caps == NULL); - GST_LOG_OBJECT (typefind, "starting typefinding"); + GST_DEBUG_OBJECT (typefind, "starting typefinding"); typefind->mode = MODE_TYPEFIND; typefind->stream_length_available = TRUE; typefind->stream_length = 0; @@ -355,7 +355,7 @@ /* stop all typefinding and set mode back to normal */ gboolean push_cached_buffers = gst_element_get_state (GST_ELEMENT (typefind)) == GST_STATE_PLAYING; - GST_LOG_OBJECT (typefind, "stopping typefinding%s", push_cached_buffers ? " and pushing cached buffers" : ""); + GST_DEBUG_OBJECT (typefind, "stopping typefinding%s", push_cached_buffers ? " and pushing cached buffers" : ""); if (typefind->possibilities != NULL) { /* this can only happen on PAUSED => READY */ GST_LOG_OBJECT (typefind, "freeing remaining %u typefind functions", g_list_length (typefind->possibilities)); @@ -391,7 +391,7 @@ GstFormat format = GST_FORMAT_BYTES; if (!typefind->stream_length_available) { - GST_DEBUG_OBJECT (entry->self, "'%s' called get_length () but we know it's not available", + GST_LOG_OBJECT (entry->self, "'%s' called get_length () but we know it's not available", GST_PLUGIN_FEATURE_NAME (entry->factory)); return 0; } @@ -418,7 +418,7 @@ GstBuffer *buf; TypeFindEntry *entry = (TypeFindEntry *) data; - GST_DEBUG_OBJECT (entry->self, "'%s' called peek (%"G_GINT64_FORMAT", %u)", + GST_LOG_OBJECT (entry->self, "'%s' called peek (%"G_GINT64_FORMAT", %u)", GST_PLUGIN_FEATURE_NAME (entry->factory), offset, size); if (offset >= 0) { buf = gst_buffer_store_get_buffer (entry->self->store, offset, size); @@ -438,7 +438,7 @@ return GST_BUFFER_DATA (buf); } else { if (entry->requested_size == 0) { - GST_DEBUG_OBJECT (entry->self, "setting requested peek (%"G_GINT64_FORMAT", %u) on '%s'", + GST_LOG_OBJECT (entry->self, "setting requested peek (%"G_GINT64_FORMAT", %u) on '%s'", offset, size, GST_PLUGIN_FEATURE_NAME (entry->factory)); entry->requested_offset = offset; entry->requested_size = size; @@ -453,7 +453,7 @@ TypeFindEntry *entry = (TypeFindEntry *) data; str = gst_caps_to_string (caps); - GST_DEBUG_OBJECT (entry->self, "'%s' called suggest (%u, %s)", + GST_LOG_OBJECT (entry->self, "'%s' called suggest (%u, %s)", GST_PLUGIN_FEATURE_NAME (entry->factory), probability, str); g_free (str); if (((gint) probability) > entry->probability) { @@ -521,7 +521,7 @@ } /* call every typefind function once */ walk = entries = typefind->possibilities; - GST_DEBUG_OBJECT (typefind, "iterating %u typefinding functions", g_list_length (entries)); + GST_INFO_OBJECT (typefind, "iterating %u typefinding functions", g_list_length (entries)); typefind->possibilities = NULL; while (walk) { find.data = entry = (TypeFindEntry *) walk->data; @@ -532,7 +532,7 @@ gst_type_find_factory_call_function (entry->factory, &find); free_entry_buffers (entry); if (entry->probability == 0 && entry->requested_size == 0) { - GST_LOG_OBJECT (typefind, "'%s' was removed - no chance of being the right plugin", + GST_DEBUG_OBJECT (typefind, "'%s' was removed - no chance of being the right plugin", GST_PLUGIN_FEATURE_NAME (entry->factory)); free_entry (entry); } else if (entry->probability >= typefind->max_probability) { @@ -541,7 +541,7 @@ guint probability = entry->probability; gst_caps_ref (found_caps); - GST_DEBUG_OBJECT (typefind, "'%s' returned %u/%u probability, using it NOW", + GST_INFO_OBJECT (typefind, "'%s' returned %u/%u probability, using it NOW", GST_PLUGIN_FEATURE_NAME (entry->factory), probability, typefind->max_probability); while (walk) { free_entry ((TypeFindEntry *) walk->data); @@ -583,7 +583,7 @@ break; } else if (entry->requested_offset < 0) { /* impossible to seek */ - GST_LOG_OBJECT (typefind, "'%s' was reset - couldn't seek to %"G_GINT64_FORMAT, + GST_DEBUG_OBJECT (typefind, "'%s' was reset - couldn't seek to %"G_GINT64_FORMAT, GST_PLUGIN_FEATURE_NAME (entry->factory), entry->requested_offset); entry->requested_size = 0; entry->requested_offset = 0; @@ -597,7 +597,7 @@ entry = (TypeFindEntry *) walk->data; walk = g_list_next (walk); if (entry->requested_size == 0) { - GST_LOG_OBJECT (typefind, "'%s' was removed - higher possibilities available", + GST_DEBUG_OBJECT (typefind, "'%s' was removed - higher possibilities available", GST_PLUGIN_FEATURE_NAME (entry->factory)); free_entry (entry); typefind->possibilities = g_list_delete_link (typefind->possibilities, cur); @@ -606,7 +606,7 @@ if (g_list_next (typefind->possibilities) == NULL) { entry = (TypeFindEntry *) typefind->possibilities->data; if (entry->probability > 0) { - GST_LOG_OBJECT (typefind, "'%s' is the only typefind left, using it now (probability %u)", + GST_INFO_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); |
From: Benjamin O. <co...@us...> - 2003-10-27 21:51:19
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Mon Oct 27 2003 13:46:39 PST Branch: TYPEFIND Log message: buncha fixes to bufferstore and the typefind element - we now seek to the point where we need data, not somewhere before Modified files: gst/elements : gstbufferstore.c gsttypefindelement.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstbufferstore.c.diff?r1=1.1.2.5&r2=1.1.2.6 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gsttypefindelement.c.diff?r1=1.1.2.8&r2=1.1.2.9 ====Begin Diffs==== Index: gstbufferstore.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/Attic/gstbufferstore.c,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -u -d -r1.1.2.5 -r1.1.2.6 --- gstbufferstore.c 27 Oct 2003 21:00:32 -0000 1.1.2.5 +++ gstbufferstore.c 27 Oct 2003 21:46:26 -0000 1.1.2.6 @@ -173,6 +173,7 @@ } if (needed_size <= GST_BUFFER_SIZE (current)) { buffer = NULL; + break; } else { if (needed_size < GST_BUFFER_SIZE (buffer)) { /* need to create subbuffer to not have overlapping data */ @@ -215,7 +216,7 @@ } GST_INFO_OBJECT (store, "adding buffer %p with offset %"G_GINT64_FORMAT" and size %u", buffer, GST_BUFFER_OFFSET (buffer), GST_BUFFER_SIZE (buffer)); - store->buffers = g_list_insert_before (store->buffers, walk, buffer); + store->buffers = g_list_insert_before (store->buffers, current_list, buffer); buffer = NULL; break; } @@ -232,6 +233,14 @@ store->buffers = g_list_prepend (NULL, buffer); } } + { + GList *walk = store->buffers; + while (walk) { + g_print (" %llu - %u\n", GST_BUFFER_OFFSET (walk->data), GST_BUFFER_SIZE (walk->data)); + walk = g_list_next (walk); + } + g_print ("\n"); + } return TRUE; } } @@ -363,12 +372,12 @@ while (size) { if (walk == NULL || (have_offset && - cur_offset + GST_BUFFER_SIZE (current) != GST_BUFFER_OFFSET (walk->data))) { - GST_DEBUG_OBJECT (store, "not all data for offset %"G_GUINT64_FORMAT" and size %u available, aborting", + GST_BUFFER_OFFSET (current) + GST_BUFFER_SIZE (current) != GST_BUFFER_OFFSET (walk->data))) { + GST_DEBUG_OBJECT (store, "not all data for offset %"G_GUINT64_FORMAT" and remaining size %u available, aborting", offset, size); gst_data_unref (GST_DATA (ret)); ret = NULL; - break; + goto out; } current = GST_BUFFER (walk->data); walk = g_list_next (walk); @@ -381,6 +390,7 @@ cur_offset += GST_BUFFER_SIZE (current); } } +out: return ret; } Index: gsttypefindelement.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/Attic/gsttypefindelement.c,v retrieving revision 1.1.2.8 retrieving revision 1.1.2.9 diff -u -d -r1.1.2.8 -r1.1.2.9 --- gsttypefindelement.c 27 Oct 2003 21:00:32 -0000 1.1.2.8 +++ gsttypefindelement.c 27 Oct 2003 21:46:26 -0000 1.1.2.9 @@ -576,15 +576,22 @@ walk = g_list_next (walk); if (entry->requested_size > 0) { /* FIXME: need heuristic to find out if we should seek */ - GstEvent *event = gst_event_new_seek (GST_FORMAT_BYTES | (entry->requested_offset > 0 ? - GST_SEEK_METHOD_SET : GST_SEEK_METHOD_END), entry->requested_offset); + gint64 seek_offset; + GstEvent *event; + + seek_offset = entry->requested_offset > 0 ? entry->requested_offset : + find_element_get_length (entry) + entry->requested_offset; + seek_offset += gst_buffer_store_get_size (typefind->store, seek_offset); + event = gst_event_new_seek (GST_FORMAT_BYTES | GST_SEEK_METHOD_SET, seek_offset); if (gst_pad_send_event (GST_PAD_PEER (typefind->sink), event)) { /* done seeking */ + GST_DEBUG_OBJECT (typefind, "'%s' was reset - seeked to %"G_GINT64_FORMAT, + GST_PLUGIN_FEATURE_NAME (entry->factory), seek_offset); break; } else if (entry->requested_offset < 0) { /* impossible to seek */ GST_DEBUG_OBJECT (typefind, "'%s' was reset - couldn't seek to %"G_GINT64_FORMAT, - GST_PLUGIN_FEATURE_NAME (entry->factory), entry->requested_offset); + GST_PLUGIN_FEATURE_NAME (entry->factory), seek_offset); entry->requested_size = 0; entry->requested_offset = 0; } |
From: Benjamin O. <co...@us...> - 2003-10-27 22:36:36
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Mon Oct 27 2003 14:32:49 PST Branch: TYPEFIND Log message: oops, left debugging output in code Modified files: gst/elements : gstbufferstore.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstbufferstore.c.diff?r1=1.1.2.6&r2=1.1.2.7 ====Begin Diffs==== Index: gstbufferstore.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/Attic/gstbufferstore.c,v retrieving revision 1.1.2.6 retrieving revision 1.1.2.7 diff -u -d -r1.1.2.6 -r1.1.2.7 --- gstbufferstore.c 27 Oct 2003 21:46:26 -0000 1.1.2.6 +++ gstbufferstore.c 27 Oct 2003 22:32:37 -0000 1.1.2.7 @@ -233,14 +233,6 @@ store->buffers = g_list_prepend (NULL, buffer); } } - { - GList *walk = store->buffers; - while (walk) { - g_print (" %llu - %u\n", GST_BUFFER_OFFSET (walk->data), GST_BUFFER_SIZE (walk->data)); - walk = g_list_next (walk); - } - g_print ("\n"); - } return TRUE; } } |
From: Benjamin O. <co...@us...> - 2003-10-28 00:34:52
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Mon Oct 27 2003 16:32:58 PST Branch: TYPEFIND Log message: various fixes like in/valid buffer handling in bufferstore and handling small streams in typefind Modified files: gst/elements : gstbufferstore.c gsttypefindelement.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstbufferstore.c.diff?r1=1.1.2.7&r2=1.1.2.8 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gsttypefindelement.c.diff?r1=1.1.2.9&r2=1.1.2.10 ====Begin Diffs==== Index: gstbufferstore.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/Attic/gstbufferstore.c,v retrieving revision 1.1.2.7 retrieving revision 1.1.2.8 diff -u -d -r1.1.2.7 -r1.1.2.8 --- gstbufferstore.c 27 Oct 2003 22:32:37 -0000 1.1.2.7 +++ gstbufferstore.c 28 Oct 2003 00:32:46 -0000 1.1.2.8 @@ -140,7 +140,7 @@ GST_DEBUG_OBJECT (store, "attempting to add buffer %p with invalid offset to store with valid offset, abort", buffer); return FALSE; - } else if (store->buffers && !GST_BUFFER_OFFSET_IS_VALID (store->buffers->data)) { + } else if (!store->buffers || !GST_BUFFER_OFFSET_IS_VALID (store->buffers->data)) { /* the starting buffer had an invalid offset, in that case we assume continuous buffers */ GST_LOG_OBJECT (store, "adding buffer %p with invalid offset and size %u", buffer, GST_BUFFER_SIZE (buffer)); @@ -287,6 +287,11 @@ g_return_val_if_fail (GST_IS_BUFFER_STORE (store), FALSE); g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE); + if (store->buffers && + GST_BUFFER_OFFSET_IS_VALID (store->buffers->data) && + !GST_BUFFER_OFFSET_IS_VALID (buffer)) + return FALSE; + g_signal_emit (store, gst_buffer_store_signals [BUFFER_ADDED], 0, buffer, &ret); return ret; Index: gsttypefindelement.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/Attic/gsttypefindelement.c,v retrieving revision 1.1.2.9 retrieving revision 1.1.2.10 diff -u -d -r1.1.2.9 -r1.1.2.10 --- gsttypefindelement.c 27 Oct 2003 21:46:26 -0000 1.1.2.9 +++ gsttypefindelement.c 28 Oct 2003 00:32:46 -0000 1.1.2.10 @@ -301,28 +301,6 @@ } return gst_pad_event_default (pad, event); } -static void -start_typefinding (GstTypeFindElement *typefind) -{ - g_assert (typefind->caps == NULL); - - GST_DEBUG_OBJECT (typefind, "starting typefinding"); - typefind->mode = MODE_TYPEFIND; - typefind->stream_length_available = TRUE; - typefind->stream_length = 0; -} -static void -gst_type_find_element_handle_event (GstPad *pad, GstEvent *event) -{ - GstTypeFindElement *typefind = GST_TYPE_FIND_ELEMENT (GST_PAD_PARENT (pad)); - - if (typefind->mode == MODE_TYPEFIND) { - /* need to do more? */ - gst_data_unref (GST_DATA (event)); - } else { - gst_pad_event_default (pad, event); - } -} typedef struct { GstTypeFindFactory * factory; gint probability; @@ -350,6 +328,16 @@ g_free (entry); } static void +start_typefinding (GstTypeFindElement *typefind) +{ + g_assert (typefind->caps == NULL); + + GST_DEBUG_OBJECT (typefind, "starting typefinding"); + typefind->mode = MODE_TYPEFIND; + typefind->stream_length_available = TRUE; + typefind->stream_length = 0; +} +static void stop_typefinding (GstTypeFindElement *typefind) { /* stop all typefinding and set mode back to normal */ @@ -357,9 +345,8 @@ GST_DEBUG_OBJECT (typefind, "stopping typefinding%s", push_cached_buffers ? " and pushing cached buffers" : ""); if (typefind->possibilities != NULL) { - /* this can only happen on PAUSED => READY */ + /* this should only happen on PAUSED => READY or EOS */ GST_LOG_OBJECT (typefind, "freeing remaining %u typefind functions", g_list_length (typefind->possibilities)); - g_assert (push_cached_buffers == FALSE); g_list_foreach (typefind->possibilities, (GFunc) free_entry, NULL); g_list_free (typefind->possibilities); typefind->possibilities = NULL; @@ -412,6 +399,34 @@ return entry->self->stream_length; } +static void +gst_type_find_element_handle_event (GstPad *pad, GstEvent *event) +{ + TypeFindEntry *entry; + GstTypeFindElement *typefind = GST_TYPE_FIND_ELEMENT (GST_PAD_PARENT (pad)); + + if (typefind->mode == MODE_TYPEFIND) { + /* need to do more? */ + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_EOS: + /* this should only happen when we got all available data */ + entry = (TypeFindEntry *) typefind->possibilities ? typefind->possibilities->data : NULL; + if (entry && entry->probability >= typefind->min_probability) { + GST_INFO_OBJECT (typefind, "'%s' is the best typefind left after we got all data, 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); + } + stop_typefinding (typefind); + gst_pad_event_default (pad, event); + break; + default: + gst_data_unref (GST_DATA (event)); + break; + } + } else { + gst_pad_event_default (pad, event); + } +} static guint8 * find_peek (gpointer data, gint64 offset, guint size) { @@ -612,7 +627,7 @@ } if (g_list_next (typefind->possibilities) == NULL) { entry = (TypeFindEntry *) typefind->possibilities->data; - if (entry->probability > 0) { + if (entry->probability > typefind->min_probability) { GST_INFO_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); |
From: Benjamin O. <co...@us...> - 2003-10-28 12:14:06
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Tue Oct 28 2003 04:13:07 PST Branch: TYPEFIND Log message: update debugging to current system Modified files: gst/elements : gstfilesrc.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstfilesrc.c.diff?r1=1.62&r2=1.62.2.1 ====Begin Diffs==== Index: gstfilesrc.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/gstfilesrc.c,v retrieving revision 1.62 retrieving revision 1.62.2.1 diff -u -d -r1.62 -r1.62.2.1 --- gstfilesrc.c 8 Oct 2003 16:06:02 -0000 1.62 +++ gstfilesrc.c 28 Oct 2003 12:12:55 -0000 1.62.2.1 @@ -88,18 +88,6 @@ #define DEFAULT_BLOCKSIZE 4*1024 #define DEFAULT_MMAPSIZE 4*1024*1024 -#ifdef G_HAVE_ISO_VARARGS - -/* #define fs_print(...) g_print(__VA_ARGS__) */ -#define fs_print(...) - -#elif defined(G_HAVE_GNUC_VARARGS) - -/* #define fs_print(format,args...) g_print(format, ## args) */ -#define fs_print(format,args...) - -#endif - /* FileSrc signals and args */ enum { /* FILL ME */ @@ -305,7 +293,7 @@ src->mapsize = g_value_get_ulong (value); g_object_notify (G_OBJECT (src), "mmapsize"); } else { - GST_INFO ( "invalid mapsize, must a multiple of pagesize, which is %d", + GST_INFO_OBJECT (src, "invalid mapsize, must a multiple of pagesize, which is %d", src->pagesize); } break; @@ -355,8 +343,8 @@ { GstFileSrc *src = GST_FILESRC (GST_BUFFER_POOL_PRIVATE (buf)); - fs_print ("freeing mmap()d buffer at %d+%d\n", - GST_BUFFER_OFFSET (buf), GST_BUFFER_SIZE (buf)); + GST_LOG_OBJECT (src, "freeing mmap()d buffer at %"G_GUINT64_FORMAT"+%u", + GST_BUFFER_OFFSET (buf), GST_BUFFER_SIZE (buf)); /* remove the buffer from the list of available mmap'd regions */ g_mutex_lock (src->map_regions_lock); @@ -375,7 +363,7 @@ munmap (GST_BUFFER_DATA (buf), GST_BUFFER_MAXSIZE (buf)); /* cast to unsigned long, since there's no gportable way to print * guint64 as hex */ - GST_DEBUG ( "unmapped region %08lx+%08lx at %p", + GST_LOG_OBJECT (src, "unmapped region %08lx+%08lx at %p", (unsigned long) GST_BUFFER_OFFSET (buf), (unsigned long) GST_BUFFER_MAXSIZE (buf), GST_BUFFER_DATA (buf)); @@ -394,7 +382,7 @@ g_return_val_if_fail (offset >= 0, NULL); - fs_print ("mapping region %08llx+%08lx from file into memory\n",offset,(unsigned long)size); + GST_LOG_OBJECT (src, "mapping region %08llx+%08lx from file into memory",offset,(unsigned long)size); mmapregion = mmap (NULL, size, PROT_READ, MAP_SHARED, src->fd, offset); if (mmapregion == NULL) { @@ -402,11 +390,11 @@ return NULL; } else if (mmapregion == MAP_FAILED) { - GST_DEBUG ("mmap (0x%08lx, %d, 0x%llx) : %s", + GST_WARNING_OBJECT (src, "mmap (0x%08lx, %d, 0x%llx) failed: %s", (unsigned long)size, src->fd, offset, strerror (errno)); return NULL; } - GST_DEBUG ( "mapped region %08lx+%08lx from file into memory at %p", + GST_LOG_OBJECT (src, "mapped region %08lx+%08lx from file into memory at %p", (unsigned long)offset, (unsigned long)size, mmapregion); /* time to allocate a new mapbuf */ @@ -522,7 +510,7 @@ /* if the end is before the mapend, the buffer is in current mmap region... */ /* ('cause by definition if readend is in the buffer, so's readstart) */ if (readend <= mapend) { - fs_print ("read buf %llu+%d lives in current mapbuf %lld+%d, creating subbuffer of mapbuf\n", + GST_LOG_OBJECT (src, "read buf %llu+%d lives in current mapbuf %lld+%d, creating subbuffer of mapbuf", src->curoffset, readsize, mapstart, mapsize); buf = gst_buffer_create_sub (src->mapbuf, src->curoffset - mapstart, readsize); @@ -530,8 +518,8 @@ /* if the start actually is within the current mmap region, map an overlap buffer */ } else if (src->curoffset < mapend) { - fs_print ("read buf %llu+%d starts in mapbuf %d+%d but ends outside, creating new mmap\n", - src->curoffset, readsize, mapstart, mapsize); + GST_LOG_OBJECT (src, "read buf %llu+%d starts in mapbuf %d+%d but ends outside, creating new mmap", + (unsigned long long) src->curoffset, (gint) readsize, (gint) mapstart, (gint) mapsize); buf = gst_filesrc_map_small_region (src, src->curoffset, readsize); if (buf == NULL) return NULL; @@ -545,8 +533,8 @@ /* either the read buffer overlaps the start of the mmap region */ /* or the read buffer fully contains the current mmap region */ /* either way, it's really not relevant, we just create a new region anyway*/ - fs_print ("read buf %llu+%d starts before mapbuf %d+%d, but overlaps it\n", - src->curoffset,readsize, mapstart, mapsize); + GST_LOG_OBJECT (src, "read buf %llu+%d starts before mapbuf %d+%d, but overlaps it", + (unsigned long long) src->curoffset, (gint) readsize, (gint) mapstart, (gint) mapsize); buf = gst_filesrc_map_small_region (src, src->curoffset, readsize); if (buf == NULL) return NULL; @@ -555,7 +543,7 @@ /* then deal with the case where the read buffer is totally outside */ if (buf == NULL) { /* first check to see if there's a map that covers the right region already */ - fs_print ("searching for mapbuf to cover %llu+%d\n",src->curoffset,readsize); + GST_LOG_OBJECT (src, "searching for mapbuf to cover %llu+%d",src->curoffset,readsize); region.offset = src->curoffset; region.size = readsize; map = g_tree_search (src->map_regions, @@ -564,7 +552,8 @@ /* if we found an exact match, subbuffer it */ if (map != NULL) { - fs_print ("found mapbuf at %d+%d, creating subbuffer\n",GST_BUFFER_OFFSET(map),GST_BUFFER_SIZE(map)); + GST_LOG_OBJECT (src, "found mapbuf at %"G_GUINT64_FORMAT"+%u, creating subbuffer", + GST_BUFFER_OFFSET (map), GST_BUFFER_SIZE (map)); buf = gst_buffer_create_sub (map, src->curoffset - GST_BUFFER_OFFSET(map), readsize); GST_BUFFER_OFFSET (buf) = src->curoffset; @@ -572,7 +561,7 @@ } else { /* if the read buffer crosses a mmap region boundary, create a one-off region */ if ((src->curoffset / src->mapsize) != (readend / src->mapsize)) { - fs_print ("read buf %llu+%d crosses a %d-byte boundary, creating a one-off\n", + GST_LOG_OBJECT (src, "read buf %llu+%d crosses a %d-byte boundary, creating a one-off", src->curoffset,readsize,src->mapsize); buf = gst_filesrc_map_small_region (src, src->curoffset, readsize); if (buf == NULL) @@ -583,7 +572,7 @@ size_t mapsize; off_t nextmap = src->curoffset - (src->curoffset % src->mapsize); - fs_print ("read buf %llu+%d in new mapbuf at %llu+%d, mapping and subbuffering\n", + GST_LOG_OBJECT (src, "read buf %llu+%d in new mapbuf at %llu+%d, mapping and subbuffering", src->curoffset, readsize, nextmap, src->mapsize); /* first, we're done with the old mapbuf */ gst_buffer_unref(src->mapbuf); @@ -591,7 +580,7 @@ /* double the mapsize as long as the readsize is smaller */ while (readsize - (src->curoffset - nextmap) > mapsize) { - fs_print ("readsize smaller then mapsize %08x %d\n", readsize, mapsize); + GST_LOG_OBJECT (src, "readsize smaller then mapsize %08x %d", readsize, mapsize); mapsize <<=1; } /* create a new one */ @@ -664,7 +653,7 @@ GstEvent *event; src->seek_happened = FALSE; - GST_DEBUG ("filesrc sending discont"); + GST_DEBUG_OBJECT (src, "sending discont"); event = gst_event_new_discontinuous (FALSE, GST_FORMAT_BYTES, src->curoffset, NULL); src->need_flush = FALSE; return GST_DATA (event); @@ -672,13 +661,13 @@ /* check for flush */ if (src->need_flush) { src->need_flush = FALSE; - GST_DEBUG ("filesrc sending flush"); + GST_DEBUG_OBJECT (src, "sending flush"); return GST_DATA (gst_event_new_flush ()); } /* check for EOF */ if (src->curoffset == src->filelen) { - GST_DEBUG ("filesrc eos %" G_GINT64_FORMAT" %" G_GINT64_FORMAT, + GST_DEBUG_OBJECT (src, "eos %" G_GINT64_FORMAT" %" G_GINT64_FORMAT, src->curoffset, src->filelen); gst_element_set_eos (GST_ELEMENT (src)); return GST_DATA (gst_event_new (GST_EVENT_EOS)); @@ -697,7 +686,7 @@ { g_return_val_if_fail (!GST_FLAG_IS_SET (src ,GST_FILESRC_OPEN), FALSE); - GST_DEBUG ( "opening file %s",src->filename); + GST_INFO_OBJECT (src, "opening file %s",src->filename); /* open the file */ src->fd = open (src->filename, O_RDONLY); @@ -829,7 +818,7 @@ { GstFileSrc *src = GST_FILESRC (GST_PAD_PARENT (pad)); - GST_DEBUG ( "event %d", GST_EVENT_TYPE (event)); + GST_DEBUG_OBJECT (src, "event %d", GST_EVENT_TYPE (event)); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEEK: @@ -847,19 +836,19 @@ if (offset > src->filelen) goto error; src->curoffset = offset; - GST_DEBUG ( "seek set pending to %" G_GINT64_FORMAT, src->curoffset); + GST_DEBUG_OBJECT (src, "seek set pending to %" G_GINT64_FORMAT, src->curoffset); break; case GST_SEEK_METHOD_CUR: if (offset + src->curoffset > src->filelen) goto error; src->curoffset += offset; - GST_DEBUG ( "seek cur pending to %" G_GINT64_FORMAT, src->curoffset); + GST_DEBUG_OBJECT (src, "seek cur pending to %" G_GINT64_FORMAT, src->curoffset); break; case GST_SEEK_METHOD_END: if (ABS (offset) > src->filelen) goto error; src->curoffset = src->filelen - ABS (offset); - GST_DEBUG ( "seek end pending to %" G_GINT64_FORMAT, src->curoffset); + GST_DEBUG_OBJECT (src, "seek end pending to %" G_GINT64_FORMAT, src->curoffset); break; default: goto error; |
From: Benjamin O. <co...@us...> - 2003-10-28 12:21:33
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Tue Oct 28 2003 04:18:14 PST Branch: TYPEFIND Log message: fix issue in buffer_store_get_size spanning multiple buffers, include more checks/debugging while doing so Modified files: gst/elements : gstbufferstore.c gsttypefindelement.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstbufferstore.c.diff?r1=1.1.2.8&r2=1.1.2.9 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gsttypefindelement.c.diff?r1=1.1.2.10&r2=1.1.2.11 ====Begin Diffs==== Index: gstbufferstore.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/Attic/gstbufferstore.c,v retrieving revision 1.1.2.8 retrieving revision 1.1.2.9 diff -u -d -r1.1.2.8 -r1.1.2.9 --- gstbufferstore.c 28 Oct 2003 00:32:46 -0000 1.1.2.8 +++ gstbufferstore.c 28 Oct 2003 12:18:01 -0000 1.1.2.9 @@ -51,6 +51,18 @@ static GObjectClass *parent_class = NULL; static guint gst_buffer_store_signals[LAST_SIGNAL] = { 0 }; +G_GNUC_UNUSED static void +debug_buffers (GstBufferStore *store) +{ + GList *walk = store->buffers; + + g_printerr ("BUFFERS in store:\n"); + while (walk) { + g_print ("%15"G_GUINT64_FORMAT" - %7u\n", GST_BUFFER_OFFSET (walk->data), GST_BUFFER_SIZE (walk->data)); + walk = g_list_next (walk); + } + g_printerr ("\n"); +} GType gst_buffer_store_get_type (void) { @@ -424,11 +436,11 @@ cur_offset = 0; } while (walk) { - current = GST_BUFFER (walk->data); if (have_offset && counting && cur_offset + GST_BUFFER_SIZE (current) != GST_BUFFER_OFFSET (walk->data)) { break; } + current = GST_BUFFER (walk->data); if (have_offset) { cur_offset = GST_BUFFER_OFFSET (current); } @@ -451,5 +463,3 @@ return ret; } - - Index: gsttypefindelement.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/Attic/gsttypefindelement.c,v retrieving revision 1.1.2.10 retrieving revision 1.1.2.11 diff -u -d -r1.1.2.10 -r1.1.2.11 --- gsttypefindelement.c 28 Oct 2003 00:32:46 -0000 1.1.2.10 +++ gsttypefindelement.c 28 Oct 2003 12:18:01 -0000 1.1.2.11 @@ -331,6 +331,7 @@ start_typefinding (GstTypeFindElement *typefind) { g_assert (typefind->caps == NULL); + g_assert (typefind->possibilities == NULL); GST_DEBUG_OBJECT (typefind, "starting typefinding"); typefind->mode = MODE_TYPEFIND; |
From: Benjamin O. <co...@us...> - 2003-10-28 16:02:31
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Tue Oct 28 2003 08:01:39 PST Branch: TYPEFIND Log message: filesrc needs to be reffed by buffers that use its mmaped data directly Modified files: gst/elements : gstfilesrc.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstfilesrc.c.diff?r1=1.62.2.1&r2=1.62.2.2 ====Begin Diffs==== Index: gstfilesrc.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/gstfilesrc.c,v retrieving revision 1.62.2.1 retrieving revision 1.62.2.2 diff -u -d -r1.62.2.1 -r1.62.2.2 --- gstfilesrc.c 28 Oct 2003 12:12:55 -0000 1.62.2.1 +++ gstfilesrc.c 28 Oct 2003 16:01:26 -0000 1.62.2.2 @@ -370,6 +370,7 @@ GST_BUFFER_DATA (buf) = NULL; + g_object_unref (src); gst_buffer_default_free (buf); } @@ -414,6 +415,7 @@ GST_BUFFER_OFFSET (buf) = offset; GST_BUFFER_TIMESTAMP (buf) = GST_CLOCK_TIME_NONE; GST_BUFFER_POOL_PRIVATE (buf) = src; + g_object_ref (src); GST_BUFFER_FREE_FUNC (buf) = (GstDataFreeFunction) gst_filesrc_free_parent_mmap; g_mutex_lock (src->map_regions_lock); |
From: Benjamin O. <co...@us...> - 2003-10-30 19:54:42
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Thu Oct 30 2003 11:54:41 PST Log message: declaration order fixes Modified files: gst/elements : gstbufferstore.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstbufferstore.c.diff?r1=1.3&r2=1.4 ====Begin Diffs==== Index: gstbufferstore.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/gstbufferstore.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gstbufferstore.c 29 Oct 2003 04:11:11 -0000 1.3 +++ gstbufferstore.c 30 Oct 2003 19:54:29 -0000 1.4 @@ -328,8 +328,8 @@ GList *walk; guint8 *data; guint tmp; - guint64 cur_offset = 0; gboolean have_offset; + guint64 cur_offset = 0; GstBuffer *ret = NULL; g_return_val_if_fail (GST_IS_BUFFER_STORE (store), NULL); @@ -341,7 +341,6 @@ have_offset = TRUE; } else { have_offset = FALSE; - cur_offset = 0; } while (walk) { current = GST_BUFFER (walk->data); @@ -418,9 +417,9 @@ gst_buffer_store_get_size (GstBufferStore *store, guint64 offset) { GList *walk; - guint64 cur_offset = 0; gboolean have_offset; gboolean counting = FALSE; + guint64 cur_offset = 0; GstBuffer *current = NULL; guint ret = 0; @@ -433,7 +432,6 @@ have_offset = TRUE; } else { have_offset = FALSE; - cur_offset = 0; } while (walk) { if (have_offset && counting && |
From: Benjamin O. <co...@us...> - 2003-11-05 01:40:42
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Tue Nov 04 2003 17:40:41 PST Log message: set chainfunction on request pads (FIXME: do we even support chainbased elements with multiple sinkpads?) Modified files: gst/elements : gstfakesink.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstfakesink.c.diff?r1=1.52&r2=1.53 ====Begin Diffs==== Index: gstfakesink.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/gstfakesink.c,v retrieving revision 1.52 retrieving revision 1.53 diff -u -d -r1.52 -r1.53 --- gstfakesink.c 31 Oct 2003 19:32:45 -0000 1.52 +++ gstfakesink.c 5 Nov 2003 01:40:29 -0000 1.53 @@ -233,6 +233,7 @@ sinkpad = gst_pad_new_from_template (templ, name); g_free (name); + gst_pad_set_chain_function (sinkpad, GST_DEBUG_FUNCPTR (gst_fakesink_chain)); gst_element_add_pad (GST_ELEMENT (fakesink), sinkpad); |
From: Ronald B. <rb...@ro...> - 2003-11-05 08:28:35
|
Hi, On Wed, 2003-11-05 at 02:40, Benjamin Otte wrote: > (FIXME: do we even support chainbased elements with > multiple sinkpads?) No, we don't. I tried that some time ago and it didn't work (as in: the whole concept prooved to be impossible to work correctly). All such elements should be loop-based. Ronald -- Ronald Bultje <rb...@ro...> Linux Video/Multimedia developer |
From: Benjamin O. <co...@us...> - 2003-11-17 01:12:26
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Sun Nov 16 2003 17:11:45 PST Log message: always check file length before making decisions based on it Modified files: gst/elements : gstfilesrc.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstfilesrc.c.diff?r1=1.64&r2=1.65 ====Begin Diffs==== Index: gstfilesrc.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/gstfilesrc.c,v retrieving revision 1.64 retrieving revision 1.65 diff -u -d -r1.64 -r1.65 --- gstfilesrc.c 31 Oct 2003 19:32:45 -0000 1.64 +++ gstfilesrc.c 17 Nov 2003 01:11:32 -0000 1.65 @@ -128,6 +128,7 @@ static void gst_filesrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); +static gboolean gst_filesrc_check_filesize (GstFileSrc *src); static GstData * gst_filesrc_get (GstPad *pad); static gboolean gst_filesrc_srcpad_event (GstPad *pad, GstEvent *event); static gboolean gst_filesrc_srcpad_query (GstPad *pad, GstQueryType type, @@ -506,8 +507,10 @@ /* check to see if we're going to overflow the end of the file */ if (readend > src->filelen) { - readsize = src->filelen - src->curoffset; - readend = src->curoffset + readsize; + if (!gst_filesrc_check_filesize (src) || readend > src->filelen) { + readsize = src->filelen - src->curoffset; + readend = src->curoffset + readsize; + } } GST_LOG ("attempting to read %08lx, %08lx, %08lx, %08lx", @@ -626,7 +629,9 @@ readsize = src->block_size; if (src->curoffset + readsize > src->filelen) { - readsize = src->filelen - src->curoffset; + if (!gst_filesrc_check_filesize (src) || src->curoffset + readsize > src->filelen) { + readsize = src->filelen - src->curoffset; + } } buf = gst_buffer_new_and_alloc (readsize); @@ -675,11 +680,14 @@ } /* check for EOF */ + g_assert (src->curoffset <= src->filelen); if (src->curoffset == src->filelen) { - GST_DEBUG_OBJECT (src, "eos %" G_GINT64_FORMAT" %" G_GINT64_FORMAT, - src->curoffset, src->filelen); - gst_element_set_eos (GST_ELEMENT (src)); - return GST_DATA (gst_event_new (GST_EVENT_EOS)); + if (!gst_filesrc_check_filesize (src) || src->curoffset >= src->filelen) { + GST_DEBUG_OBJECT (src, "eos %" G_GINT64_FORMAT" %" G_GINT64_FORMAT, + src->curoffset, src->filelen); + gst_element_set_eos (GST_ELEMENT (src)); + return GST_DATA (gst_event_new (GST_EVENT_EOS)); + } } if (src->using_mmap){ @@ -689,6 +697,22 @@ } } +/* TRUE if the filesize of the file was updated */ +static gboolean +gst_filesrc_check_filesize (GstFileSrc *src) +{ + struct stat stat_results; + + g_return_val_if_fail (GST_FLAG_IS_SET (src ,GST_FILESRC_OPEN), FALSE); + + fstat(src->fd, &stat_results); + GST_DEBUG_OBJECT (src, "checked filesize on %s (was %"G_GUINT64_FORMAT", is %"G_GUINT64_FORMAT")", + src->filename, src->filelen, (guint64) stat_results.st_size); + if (src->filelen == (guint64) stat_results.st_size) + return FALSE; + src->filelen = stat_results.st_size; + return TRUE; +} /* open the file and mmap it, necessary to go to READY state */ static gboolean gst_filesrc_open_file (GstFileSrc *src) @@ -799,6 +823,7 @@ if (*format != GST_FORMAT_BYTES) { return FALSE; } + gst_filesrc_check_filesize (src); *value = src->filelen; break; case GST_QUERY_POSITION: @@ -842,20 +867,25 @@ switch (GST_EVENT_SEEK_METHOD (event)) { case GST_SEEK_METHOD_SET: - if (offset > src->filelen) - goto error; + if (offset > src->filelen && (!gst_filesrc_check_filesize (src) || offset > src->filelen)) { + goto error; + } src->curoffset = offset; GST_DEBUG_OBJECT (src, "seek set pending to %" G_GINT64_FORMAT, src->curoffset); break; case GST_SEEK_METHOD_CUR: if (offset + src->curoffset > src->filelen) - goto error; + if (!gst_filesrc_check_filesize (src) || offset + src->curoffset > src->filelen) + goto error; src->curoffset += offset; GST_DEBUG_OBJECT (src, "seek cur pending to %" G_GINT64_FORMAT, src->curoffset); break; case GST_SEEK_METHOD_END: - if (ABS (offset) > src->filelen) + if (ABS (offset) > src->filelen) { + if (!gst_filesrc_check_filesize (src) || ABS (offset) > src->filelen) + goto error; goto error; + } src->curoffset = src->filelen - ABS (offset); GST_DEBUG_OBJECT (src, "seek end pending to %" G_GINT64_FORMAT, src->curoffset); break; |
From: Benjamin O. <co...@us...> - 2003-11-24 21:37:13
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Mon Nov 24 2003 13:37:11 PST Log message: send correct buffer offset after seek Modified files: gst/elements : gstfilesrc.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstfilesrc.c.diff?r1=1.66&r2=1.67 ====Begin Diffs==== Index: gstfilesrc.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/gstfilesrc.c,v retrieving revision 1.66 retrieving revision 1.67 diff -u -d -r1.66 -r1.67 --- gstfilesrc.c 24 Nov 2003 03:21:53 -0000 1.66 +++ gstfilesrc.c 24 Nov 2003 21:36:59 -0000 1.67 @@ -623,7 +623,7 @@ /* subbuffer it */ buf = gst_buffer_create_sub (src->mapbuf, src->curoffset - nextmap, readsize); - GST_BUFFER_OFFSET (buf) = mapstart + src->curoffset - nextmap; + GST_BUFFER_OFFSET (buf) = GST_BUFFER_OFFSET (src->mapbuf) + src->curoffset - nextmap; } } } @@ -637,6 +637,8 @@ } /* we're done, return the buffer */ + g_assert (src->curoffset == GST_BUFFER_OFFSET (buf)); + g_print ("offset %u %u\n", (guint) src->curoffset, (guint) GST_BUFFER_OFFSET (buf)); src->curoffset += GST_BUFFER_SIZE(buf); return buf; } |
From: Benjamin O. <co...@us...> - 2003-11-24 21:39:07
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Mon Nov 24 2003 13:39:06 PST Log message: and remove that debugging g_print - sheesh Modified files: gst/elements : gstfilesrc.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstfilesrc.c.diff?r1=1.67&r2=1.68 ====Begin Diffs==== Index: gstfilesrc.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/gstfilesrc.c,v retrieving revision 1.67 retrieving revision 1.68 diff -u -d -r1.67 -r1.68 --- gstfilesrc.c 24 Nov 2003 21:36:59 -0000 1.67 +++ gstfilesrc.c 24 Nov 2003 21:38:54 -0000 1.68 @@ -638,7 +638,6 @@ /* we're done, return the buffer */ g_assert (src->curoffset == GST_BUFFER_OFFSET (buf)); - g_print ("offset %u %u\n", (guint) src->curoffset, (guint) GST_BUFFER_OFFSET (buf)); src->curoffset += GST_BUFFER_SIZE(buf); return buf; } |
From: Benjamin O. <co...@us...> - 2003-12-07 19:02:43
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: company Date: Sun Dec 07 2003 11:02:43 PST Log message: finish everything typefinding related (like seeking to correct offset) _before_ pushing the first buffer Modified files: gst/elements : gsttypefindelement.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gsttypefindelement.c.diff?r1=1.3&r2=1.4 ====Begin Diffs==== Index: gsttypefindelement.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/elements/gsttypefindelement.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gsttypefindelement.c 31 Oct 2003 19:32:46 -0000 1.3 +++ gsttypefindelement.c 7 Dec 2003 19:02:30 -0000 1.4 @@ -366,15 +366,16 @@ if (push_cached_buffers) { GstBuffer *buffer; guint size = gst_buffer_store_get_size (typefind->store, 0); - if (size && (buffer = gst_buffer_store_get_buffer (typefind->store, 0, size))) { - gst_pad_push (typefind->src, GST_DATA (buffer)); - } else { - size = 0; - } + GST_LOG_OBJECT (typefind, "seeking back to current position %u", size); if (!gst_pad_send_event (GST_PAD_PEER (typefind->sink), gst_event_new_seek (GST_SEEK_METHOD_SET | GST_FORMAT_BYTES, size))) { GST_WARNING_OBJECT (typefind, "could not seek to required position %u, hope for the best", size); + } + if (size && (buffer = gst_buffer_store_get_buffer (typefind->store, 0, size))) { + gst_pad_push (typefind->src, GST_DATA (buffer)); + } else { + size = 0; } } gst_buffer_store_clear (typefind->store); |