From: <wt...@ke...> - 2008-10-29 17:05:07
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Wed Oct 29 2008 17:05:04 UTC Log message: * gst/gstpipeline.c: (gst_pipeline_provide_clock_func): Some more comments. Modified files: . : ChangeLog gst : gstpipeline.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4125&r2=1.4126 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstpipeline.c.diff?r1=1.150&r2=1.151 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4125 retrieving revision 1.4126 diff -u -d -r1.4125 -r1.4126 --- ChangeLog 27 Oct 2008 15:02:46 -0000 1.4125 +++ ChangeLog 29 Oct 2008 17:04:47 -0000 1.4126 @@ -1,3 +1,8 @@ +2008-10-29 Wim Taymans <wim...@co...> + + * gst/gstpipeline.c: (gst_pipeline_provide_clock_func): + Some more comments. 2008-10-27 Wim Taymans <wim...@co...> * libs/gst/base/gstbasetransform.c: Index: gstpipeline.c RCS file: /cvs/gstreamer/gstreamer/gst/gstpipeline.c,v retrieving revision 1.150 retrieving revision 1.151 diff -u -d -r1.150 -r1.151 --- gstpipeline.c 8 Oct 2008 15:21:12 -0000 1.150 +++ gstpipeline.c 29 Oct 2008 17:04:50 -0000 1.151 @@ -68,7 +68,9 @@ * performed on it, the stream time is reset to 0. When the pipeline is * set from PLAYING to PAUSED, the current clock time is sampled and used to * configure the base time for the elements when the pipeline is set - * to PLAYING again. This default behaviour can be changed with the + * to PLAYING again. The effect is that the stream time (as the difference + * between the clock time and the base time) will count how much time was spent + * in the PLAYING state. This default behaviour can be changed with the * gst_pipeline_set_new_stream_time() method. * * When sending a flushing seek event to a GstPipeline (see @@ -545,6 +547,12 @@ } } +/* intercept the bus messages from our children. We watch for the ASYNC_START + * message with is posted by the elements (sinks) that require a reset of the + * running_time after a flush. ASYNC_START also brings the pipeline back into + * the PAUSED, pending PAUSED state. When the ASYNC_DONE message is received the + * pipeline will redistribute the new base_time and will bring the elements back + * to the desired state of the pipeline. */ static void gst_pipeline_handle_message (GstBin * bin, GstMessage * message) { @@ -671,8 +679,8 @@ GST_OBJECT_UNLOCK (pipeline); /* let the parent bin select a clock */ clock = - GST_ELEMENT_CLASS (parent_class)-> - provide_clock (GST_ELEMENT (pipeline)); + GST_ELEMENT_CLASS (parent_class)->provide_clock (GST_ELEMENT + (pipeline)); /* no clock, use a system clock */ if (!clock) { clock = gst_system_clock_obtain (); |
From: <wt...@ke...> - 2008-11-04 18:10:25
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Tue Nov 04 2008 18:10:18 UTC Log message: * gst/gstbin.c: (gst_bin_handle_message_func): Get the seqnum before we dispose the message. Modified files: . : ChangeLog gst : gstbin.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4139&r2=1.4140 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstbin.c.diff?r1=1.387&r2=1.388 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4139 retrieving revision 1.4140 diff -u -d -r1.4139 -r1.4140 --- ChangeLog 4 Nov 2008 16:10:02 -0000 1.4139 +++ ChangeLog 4 Nov 2008 18:10:01 -0000 1.4140 @@ -1,5 +1,10 @@ 2008-11-04 Wim Taymans <wim...@co...> + * gst/gstbin.c: (gst_bin_handle_message_func): + Get the seqnum before we dispose the message. + +2008-11-04 Wim Taymans <wim...@co...> * docs/design/part-TODO.txt: Refer to the framestepping document. Index: gstbin.c RCS file: /cvs/gstreamer/gstreamer/gst/gstbin.c,v retrieving revision 1.387 retrieving revision 1.388 diff -u -d -r1.387 -r1.388 --- gstbin.c 4 Nov 2008 15:56:54 -0000 1.387 +++ gstbin.c 4 Nov 2008 18:10:04 -0000 1.388 @@ -2817,6 +2817,7 @@ gint64 position; gst_message_parse_segment_done (message, &format, &position); + seqnum = gst_message_get_seqnum (message); GST_OBJECT_LOCK (bin); bin_replace_message (bin, message, GST_MESSAGE_SEGMENT_START); @@ -2832,7 +2833,6 @@ } GST_OBJECT_UNLOCK (bin); if (post) { - seqnum = gst_message_get_seqnum (message); tmessage = gst_message_new_segment_done (GST_OBJECT_CAST (bin), format, position); gst_message_set_seqnum (tmessage, seqnum); |
From: <wt...@ke...> - 2008-11-05 16:57:53
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Wed Nov 05 2008 16:57:49 UTC Log message: * gst/gststructure.c: (gst_structure_id_empty_new_with_size): No need to memset, we can clear the value ourselves. * gst/gstvalue.c: (gst_type_is_fixed), (gst_value_get_compare_func): Some optimisations from a few callgrind sessions: When checking if a type is fixed, check for trivial fundamental types first before checking types for which we need to get the type followed by the heavy duty type checks, this reduces the amount of g_type_fundamental() calls a lot. When getting the compare function, first check for our registered types. If that fails, do the heavy duty g_type_is_a() checks, reduces the amount of g_type_is_a() considerably. Modified files: . : ChangeLog gst : gststructure.c gstvalue.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4141&r2=1.4142 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gststructure.c.diff?r1=1.100&r2=1.101 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstvalue.c.diff?r1=1.145&r2=1.146 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4141 retrieving revision 1.4142 diff -u -d -r1.4141 -r1.4142 --- ChangeLog 5 Nov 2008 11:17:23 -0000 1.4141 +++ ChangeLog 5 Nov 2008 16:57:33 -0000 1.4142 @@ -1,5 +1,21 @@ 2008-11-05 Wim Taymans <wim...@co...> + * gst/gststructure.c: (gst_structure_id_empty_new_with_size): + No need to memset, we can clear the value ourselves. + + * gst/gstvalue.c: (gst_type_is_fixed), + (gst_value_get_compare_func): + Some optimisations from a few callgrind sessions: + When checking if a type is fixed, check for trivial fundamental types + first before checking types for which we need to get the type followed + by the heavy duty type checks, this reduces the amount of + g_type_fundamental() calls a lot. + When getting the compare function, first check for our registered types. + If that fails, do the heavy duty g_type_is_a() checks, reduces the + amount of g_type_is_a() considerably. +2008-11-05 Wim Taymans <wim...@co...> * docs/design/part-TODO.txt: Mumble something about removing GstXML. Index: gststructure.c RCS file: /cvs/gstreamer/gstreamer/gst/gststructure.c,v retrieving revision 1.100 retrieving revision 1.101 diff -u -d -r1.100 -r1.101 --- gststructure.c 31 Oct 2008 14:24:48 -0000 1.100 +++ gststructure.c 5 Nov 2008 16:57:35 -0000 1.101 @@ -113,9 +113,10 @@ { GstStructure *structure; - structure = g_slice_new0 (GstStructure); + structure = g_slice_new (GstStructure); structure->type = gst_structure_get_type (); structure->name = quark; + structure->parent_refcount = NULL; structure->fields = g_array_sized_new (FALSE, TRUE, sizeof (GstStructureField), prealloc); Index: gstvalue.c RCS file: /cvs/gstreamer/gstreamer/gst/gstvalue.c,v retrieving revision 1.145 retrieving revision 1.146 diff -u -d -r1.145 -r1.146 --- gstvalue.c 31 Oct 2008 14:24:49 -0000 1.145 +++ gstvalue.c 5 Nov 2008 16:57:35 -0000 1.146 @@ -148,20 +148,25 @@ * there. Do not export, since it doesn't work for types where the content * decides the fixedness (e.g. GST_TYPE_ARRAY). */ - static gboolean gst_type_is_fixed (GType type) + /* the basic int, string, double types */ + if (type <= G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_GLIB_LAST)) { + return TRUE; + } + /* our fundamental types that are certainly not fixed */ if (type == GST_TYPE_INT_RANGE || type == GST_TYPE_DOUBLE_RANGE || - type == GST_TYPE_LIST) { + type == GST_TYPE_LIST || type == GST_TYPE_FRACTION_RANGE) { return FALSE; } - if (G_TYPE_FUNDAMENTAL (type) <= - G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_GLIB_LAST)) { + /* other (boxed) types that are fixed */ + if (type == GST_TYPE_BUFFER) { return TRUE; - if (type == GST_TYPE_BUFFER || type == GST_TYPE_FOURCC - || type == GST_TYPE_ARRAY || type == GST_TYPE_FRACTION) { + /* heavy checks */ + if (G_TYPE_IS_FUNDAMENTAL (type) || G_TYPE_FUNDAMENTAL (type) <= + G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_GLIB_LAST)) { @@ -2795,15 +2800,22 @@ GstValueTable *table, *best = NULL; guint i; + /* this is a fast check */ for (i = 0; i < gst_value_table->len; i++) { table = &g_array_index (gst_value_table, GstValueTable, i); if (table->type == G_VALUE_TYPE (value1) && table->compare != NULL) { best = table; break; } - if (g_type_is_a (G_VALUE_TYPE (value1), table->type)) { - if (!best || g_type_is_a (table->type, best->type)) - best = table; + /* slower checks */ + if (!best) { + for (i = 0; i < gst_value_table->len; i++) { + table = &g_array_index (gst_value_table, GstValueTable, i); + if (g_type_is_a (G_VALUE_TYPE (value1), table->type)) { + if (!best || g_type_is_a (table->type, best->type)) + best = table; + } if (best) { |
From: <wt...@ke...> - 2008-11-06 12:03:38
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Thu Nov 06 2008 12:03:32 UTC Log message: * gst/gstevent.h: Add a SKIP seek flag for use with advanced trickmodes. API: GstSeekFlags::GST_SEEK_FLAG_SKIP Modified files: . : ChangeLog gst : gstevent.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4142&r2=1.4143 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstevent.h.diff?r1=1.108&r2=1.109 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4142 retrieving revision 1.4143 diff -u -d -r1.4142 -r1.4143 --- ChangeLog 5 Nov 2008 16:57:33 -0000 1.4142 +++ ChangeLog 6 Nov 2008 12:03:16 -0000 1.4143 @@ -1,3 +1,9 @@ +2008-11-06 Wim Taymans <wim...@co...> + + * gst/gstevent.h: + Add a SKIP seek flag for use with advanced trickmodes. + API: GstSeekFlags::GST_SEEK_FLAG_SKIP 2008-11-05 Wim Taymans <wim...@co...> * gst/gststructure.c: (gst_structure_id_empty_new_with_size): Index: gstevent.h RCS file: /cvs/gstreamer/gstreamer/gst/gstevent.h,v retrieving revision 1.108 retrieving revision 1.109 diff -u -d -r1.108 -r1.109 --- gstevent.h 4 Nov 2008 12:22:51 -0000 1.108 +++ gstevent.h 6 Nov 2008 12:03:17 -0000 1.109 @@ -257,6 +257,9 @@ * @GST_SEEK_FLAG_KEY_UNIT: seek to the nearest keyframe. This might be * faster but less accurate. * @GST_SEEK_FLAG_SEGMENT: perform a segment seek. + * @GST_SEEK_FLAG_SKIP: when doing fast foward or fast reverse playback, allow + * elements to skip frames instead of generating all + * frames. Since 0.10.22. * * Flags to be used with gst_element_seek() or gst_event_new_seek(). All flags * can be used together. @@ -274,16 +277,21 @@ * When this message is posted, it is possible to send a new seek event to * continue playback. With this seek method it is possible to perform seemless * looping or simple linear editing. + * + * When doing fast forward (rate > 1.0) or fast reverse (rate < -1.0) trickmode + * playback, the @GST_SEEK_FLAG_SKIP flag can be used to instruct decoders + * and demuxers to adjust the playback rate by skipping frames. This can improve + * performance and decrease CPU usage because not all frames need to be decoded. */ typedef enum { GST_SEEK_FLAG_NONE = 0, GST_SEEK_FLAG_FLUSH = (1 << 0), GST_SEEK_FLAG_ACCURATE = (1 << 1), GST_SEEK_FLAG_KEY_UNIT = (1 << 2), - GST_SEEK_FLAG_SEGMENT = (1 << 3) + GST_SEEK_FLAG_SEGMENT = (1 << 3), + GST_SEEK_FLAG_SKIP = (1 << 4) } GstSeekFlags; - /** * GstEvent: * @mini_object: the parent structure |
From: <wt...@ke...> - 2008-11-06 15:10:02
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Thu Nov 06 2008 15:09:48 UTC Log message: * gst/gstcaps.c: (gst_caps_copy), (_gst_caps_free), (gst_caps_merge_structure), (gst_caps_get_structure), (gst_caps_copy_nth), (gst_caps_set_simple), (gst_caps_set_simple_valist), (gst_caps_is_fixed), (gst_caps_is_equal_fixed), (gst_caps_intersect), (gst_caps_subtract), (gst_caps_normalize), (gst_caps_do_simplify), (gst_caps_to_string): Callgrind micro optimisations. Avoid array bounds checks and force inline of trivial function. * gst/gstobject.c: (gst_object_set_name_default): -1 is equivalent to letting glib to the strlen but then there is more room for optimisations and it's not our fault. * gst/gststructure.c: (gst_structure_id_empty_new_with_size): no need to clear the array, we're cool. * gst/gstvalue.c: (gst_type_is_fixed), (gst_value_is_fixed): The most common _is_fixed() check is done on fundamental glib base types so we check this first instead of doing a huge amount of useless GST_TYPE_ARRAY calls. Modified files: . : ChangeLog gst : gstcaps.c gstobject.c gststructure.c gstvalue.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4143&r2=1.4144 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstcaps.c.diff?r1=1.190&r2=1.191 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstobject.c.diff?r1=1.130&r2=1.131 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gststructure.c.diff?r1=1.101&r2=1.102 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstvalue.c.diff?r1=1.146&r2=1.147 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4143 retrieving revision 1.4144 diff -u -d -r1.4143 -r1.4144 --- ChangeLog 6 Nov 2008 12:03:16 -0000 1.4143 +++ ChangeLog 6 Nov 2008 15:09:31 -0000 1.4144 @@ -1,5 +1,29 @@ 2008-11-06 Wim Taymans <wim...@co...> + * gst/gstcaps.c: (gst_caps_copy), (_gst_caps_free), + (gst_caps_merge_structure), (gst_caps_get_structure), + (gst_caps_copy_nth), (gst_caps_set_simple), + (gst_caps_set_simple_valist), (gst_caps_is_fixed), + (gst_caps_is_equal_fixed), (gst_caps_intersect), + (gst_caps_subtract), (gst_caps_normalize), (gst_caps_do_simplify), + (gst_caps_to_string): + Callgrind micro optimisations. + Avoid array bounds checks and force inline of trivial function. + + * gst/gstobject.c: (gst_object_set_name_default): + -1 is equivalent to letting glib to the strlen but then there is more + room for optimisations and it's not our fault. + * gst/gststructure.c: (gst_structure_id_empty_new_with_size): + no need to clear the array, we're cool. + * gst/gstvalue.c: (gst_type_is_fixed), (gst_value_is_fixed): + The most common _is_fixed() check is done on fundamental glib base + types so we check this first instead of doing a huge amount of + useless GST_TYPE_ARRAY calls. +2008-11-06 Wim Taymans <wim...@co...> * gst/gstevent.h: Add a SKIP seek flag for use with advanced trickmodes. API: GstSeekFlags::GST_SEEK_FLAG_SKIP Index: gstcaps.c RCS file: /cvs/gstreamer/gstreamer/gst/gstcaps.c,v retrieving revision 1.190 retrieving revision 1.191 diff -u -d -r1.190 -r1.191 --- gstcaps.c 7 Aug 2008 12:28:27 -0000 1.190 +++ gstcaps.c 6 Nov 2008 15:09:33 -0000 1.191 @@ -91,6 +91,12 @@ #define IS_WRITABLE(caps) \ (g_atomic_int_get (&(caps)->refcount) == 1) +/* quick way to get a caps structure at an index without doing a type or array + * length check */ +#define gst_caps_get_structure_unchecked(caps, index) \ + ((GstStructure *)g_ptr_array_index ((caps)->structs, (index))) /* lock to protect multiple invocations of static caps to caps conversion */ G_LOCK_DEFINE_STATIC (static_caps_lock); @@ -272,7 +278,7 @@ newcaps->flags = caps->flags; for (i = 0; i < caps->structs->len; i++) { - structure = gst_caps_get_structure (caps, i); + structure = gst_caps_get_structure_unchecked (caps, i); gst_caps_append_structure (newcaps, gst_structure_copy (structure)); } @@ -289,7 +295,7 @@ * don't bother testing. */ - structure = (GstStructure *) gst_caps_get_structure (caps, i); + structure = (GstStructure *) gst_caps_get_structure_unchecked (caps, i); gst_structure_set_parent_refcount (structure, NULL); gst_structure_free (structure); @@ -743,7 +749,7 @@ #endif /* check each structure */ for (i = caps->structs->len - 1; i >= 0; i--) { - structure1 = gst_caps_get_structure (caps, i); + structure1 = gst_caps_get_structure_unchecked (caps, i); /* if structure is a subset of structure1, then skip it */ if (gst_caps_structure_is_subset (structure1, structure)) { unique = FALSE; @@ -797,7 +803,7 @@ g_return_val_if_fail (GST_IS_CAPS (caps), NULL); g_return_val_if_fail (index < caps->structs->len, NULL); - return g_ptr_array_index (caps->structs, index); + return gst_caps_get_structure_unchecked (caps, index); } /** @@ -822,7 +828,7 @@ if (caps->structs->len > nth) { - structure = gst_caps_get_structure (caps, nth); + structure = gst_caps_get_structure_unchecked (caps, nth); @@ -870,7 +876,7 @@ g_return_if_fail (caps->structs->len == 1); g_return_if_fail (IS_WRITABLE (caps)); - structure = gst_caps_get_structure (caps, 0); + structure = gst_caps_get_structure_unchecked (caps, 0); va_start (var_args, field); gst_structure_set_valist (structure, field, var_args); @@ -896,7 +902,7 @@ gst_structure_set_valist (structure, field, varargs); @@ -965,7 +971,7 @@ if (caps->structs->len != 1) return FALSE; return gst_structure_foreach (structure, gst_caps_is_fixed_foreach, NULL); @@ -988,8 +994,8 @@ g_return_val_if_fail (gst_caps_is_fixed (caps1), FALSE); g_return_val_if_fail (gst_caps_is_fixed (caps2), FALSE); - struct1 = gst_caps_get_structure (caps1, 0); - struct2 = gst_caps_get_structure (caps2, 0); + struct1 = gst_caps_get_structure_unchecked (caps1, 0); + struct2 = gst_caps_get_structure_unchecked (caps2, 0); if (struct1->name != struct2->name) { @@ -1257,8 +1263,8 @@ /* now run the diagonal line, end condition is the left or bottom * border */ while (k < caps2->structs->len) { - struct1 = gst_caps_get_structure (caps1, j); - struct2 = gst_caps_get_structure (caps2, k); + struct1 = gst_caps_get_structure_unchecked (caps1, j); + struct2 = gst_caps_get_structure_unchecked (caps2, k); istruct = gst_caps_structure_intersect (struct1, struct2); @@ -1371,14 +1377,14 @@ src = gst_caps_copy (minuend); for (i = 0; i < subtrahend->structs->len; i++) { - sub = gst_caps_get_structure (subtrahend, i); + sub = gst_caps_get_structure_unchecked (subtrahend, i); if (dest) { gst_caps_unref (src); src = dest; } dest = gst_caps_new_empty (); for (j = 0; j < src->structs->len; j++) { - min = gst_caps_get_structure (src, j); + min = gst_caps_get_structure_unchecked (src, j); if (gst_structure_get_name_id (min) == gst_structure_get_name_id (sub)) { GSList *list; @@ -1499,7 +1505,7 @@ nf.caps = newcaps; for (i = 0; i < newcaps->structs->len; i++) { - nf.structure = gst_caps_get_structure (newcaps, i); + nf.structure = gst_caps_get_structure_unchecked (newcaps, i); while (!gst_structure_foreach (nf.structure, gst_caps_normalize_foreach, &nf)); @@ -1660,14 +1666,15 @@ start = caps->structs->len - 1; for (i = caps->structs->len - 1; i >= 0; i--) { - simplify = gst_caps_get_structure (caps, i); + simplify = gst_caps_get_structure_unchecked (caps, i); if (gst_structure_get_name_id (simplify) != - gst_structure_get_name_id (gst_caps_get_structure (caps, start))) + gst_structure_get_name_id (gst_caps_get_structure_unchecked (caps, + start))) start = i; for (j = start; j >= 0; j--) { if (j == i) continue; - compare = gst_caps_get_structure (caps, j); + compare = gst_caps_get_structure_unchecked (caps, j); if (gst_structure_get_name_id (simplify) != gst_structure_get_name_id (compare)) { break; @@ -1806,7 +1813,9 @@ /* estimate a rough string length to avoid unnecessary reallocs in GString */ slen = 0; - slen += STRUCTURE_ESTIMATED_STRING_LEN (gst_caps_get_structure (caps, i)); + slen += + STRUCTURE_ESTIMATED_STRING_LEN (gst_caps_get_structure_unchecked (caps, + i)); s = g_string_sized_new (slen); @@ -1818,7 +1827,7 @@ g_string_append_c (s, ' '); priv_gst_structure_append_to_gstring (structure, s); if (s->len && s->str[s->len - 1] == ';') { Index: gstobject.c RCS file: /cvs/gstreamer/gstreamer/gst/gstobject.c,v retrieving revision 1.130 retrieving revision 1.131 diff -u -d -r1.130 -r1.131 --- gstobject.c 28 Aug 2008 20:12:54 -0000 1.130 +++ gstobject.c 6 Nov 2008 15:09:33 -0000 1.131 @@ -621,7 +621,7 @@ if (strncmp (type_name, "Gst", 3) == 0) type_name += 3; tmp = g_strdup_printf ("%s%d", type_name, count); - name = g_ascii_strdown (tmp, strlen (tmp)); + name = g_ascii_strdown (tmp, -1); g_free (tmp); result = gst_object_set_name (object, name); Index: gststructure.c RCS file: /cvs/gstreamer/gstreamer/gst/gststructure.c,v retrieving revision 1.101 retrieving revision 1.102 diff -u -d -r1.101 -r1.102 --- gststructure.c 5 Nov 2008 16:57:35 -0000 1.101 +++ gststructure.c 6 Nov 2008 15:09:34 -0000 1.102 @@ -118,7 +118,7 @@ structure->name = quark; structure->parent_refcount = NULL; structure->fields = - g_array_sized_new (FALSE, TRUE, sizeof (GstStructureField), prealloc); + g_array_sized_new (FALSE, FALSE, sizeof (GstStructureField), prealloc); return structure; Index: gstvalue.c RCS file: /cvs/gstreamer/gstreamer/gst/gstvalue.c,v retrieving revision 1.146 retrieving revision 1.147 diff -u -d -r1.146 -r1.147 --- gstvalue.c 5 Nov 2008 16:57:35 -0000 1.146 +++ gstvalue.c 6 Nov 2008 15:09:34 -0000 1.147 @@ -157,7 +157,8 @@ /* our fundamental types that are certainly not fixed */ if (type == GST_TYPE_INT_RANGE || type == GST_TYPE_DOUBLE_RANGE || - type == GST_TYPE_LIST || type == GST_TYPE_FRACTION_RANGE) { + type == GST_TYPE_LIST || type == GST_TYPE_FRACTION_RANGE || + type == GST_TYPE_ARRAY) { /* other (boxed) types that are fixed */ @@ -3341,6 +3342,9 @@ { GType type = G_VALUE_TYPE (value); + if (gst_type_is_fixed (type)) + return TRUE; if (type == GST_TYPE_ARRAY) { gint size, n; const GValue *kid; @@ -3355,7 +3359,7 @@ return TRUE; - return gst_type_is_fixed (type); + return FALSE; /************ |
From: <wt...@ke...> - 2008-11-06 15:37:36
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Thu Nov 06 2008 15:37:30 UTC Log message: * gst/gstvalue.c: (gst_type_is_fixed), (gst_value_is_fixed): Reorganize some more, be more conservative with the GST_TYPE_ARRAY not being fixed and inline the trivial check. Modified files: . : ChangeLog gst : gstvalue.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4144&r2=1.4145 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstvalue.c.diff?r1=1.147&r2=1.148 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4144 retrieving revision 1.4145 diff -u -d -r1.4144 -r1.4145 --- ChangeLog 6 Nov 2008 15:09:31 -0000 1.4144 +++ ChangeLog 6 Nov 2008 15:37:14 -0000 1.4145 @@ -1,5 +1,11 @@ 2008-11-06 Wim Taymans <wim...@co...> + * gst/gstvalue.c: (gst_type_is_fixed), (gst_value_is_fixed): + Reorganize some more, be more conservative with the GST_TYPE_ARRAY not + being fixed and inline the trivial check. + +2008-11-06 Wim Taymans <wim...@co...> * gst/gstcaps.c: (gst_caps_copy), (_gst_caps_free), (gst_caps_merge_structure), (gst_caps_get_structure), (gst_caps_copy_nth), (gst_caps_set_simple), Index: gstvalue.c RCS file: /cvs/gstreamer/gstreamer/gst/gstvalue.c,v retrieving revision 1.147 retrieving revision 1.148 diff -u -d -r1.147 -r1.148 --- gstvalue.c 6 Nov 2008 15:09:34 -0000 1.147 +++ gstvalue.c 6 Nov 2008 15:37:16 -0000 1.148 @@ -157,8 +157,7 @@ } /* our fundamental types that are certainly not fixed */ if (type == GST_TYPE_INT_RANGE || type == GST_TYPE_DOUBLE_RANGE || - type == GST_TYPE_LIST || type == GST_TYPE_FRACTION_RANGE || - type == GST_TYPE_ARRAY) { + type == GST_TYPE_LIST || type == GST_TYPE_FRACTION_RANGE) { return FALSE; /* other (boxed) types that are fixed */ @@ -3342,8 +3341,10 @@ { GType type = G_VALUE_TYPE (value); - if (gst_type_is_fixed (type)) + /* the most common types are just basic plain glib types */ + if (type <= G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_GLIB_LAST)) { return TRUE; + } if (type == GST_TYPE_ARRAY) { gint size, n; @@ -3358,8 +3359,7 @@ } - - return FALSE; + return gst_type_is_fixed (type); } /************ |
From: <wt...@ke...> - 2008-11-18 09:53:05
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Tue Nov 18 2008 09:52:55 UTC Log message: * gst/gstbuffer.h: Document the free_func. Modified files: . : ChangeLog gst : gstbuffer.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4158&r2=1.4159 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstbuffer.h.diff?r1=1.123&r2=1.124 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4158 retrieving revision 1.4159 diff -u -d -r1.4158 -r1.4159 --- ChangeLog 17 Nov 2008 21:43:05 -0000 1.4158 +++ ChangeLog 18 Nov 2008 09:52:38 -0000 1.4159 @@ -1,3 +1,8 @@ +2008-11-18 Wim Taymans <wim...@co...> + + * gst/gstbuffer.h: + Document the free_func. 2008-11-17 Sebastian Dröge <seb...@co...> * libs/gst/controller/gstinterpolation.c: Index: gstbuffer.h RCS file: /cvs/gstreamer/gstreamer/gst/gstbuffer.h,v retrieving revision 1.123 retrieving revision 1.124 diff -u -d -r1.123 -r1.124 --- gstbuffer.h 8 Oct 2008 08:54:55 -0000 1.123 +++ gstbuffer.h 18 Nov 2008 09:52:41 -0000 1.124 @@ -247,7 +247,9 @@ * @offset_end: the last offset contained in this buffer. It has the same * format as @offset. * @malloc_data: a pointer to the allocated memory associated with this buffer. - * When the buffer is freed, this data will freed with g_free(). + * When the buffer is freed, this data will freed with @free_func. + * @free_func: a custom function that will be called with @malloc_data, defaults + * to g_free(). Since 0.10.22. * * The structure of a #GstBuffer. Use the associated macros to access the public * variables. @@ -273,7 +275,7 @@ guint8 *malloc_data; - GFreeFunc free_func; + GFreeFunc free_func; /*< private >*/ gpointer _gst_reserved[GST_PADDING - 1]; |
From: <wt...@ke...> - 2008-11-19 12:06:59
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Wed Nov 19 2008 12:06:55 UTC Log message: * gst/gstbin.c: (_gst_boolean_accumulator), (gst_bin_class_init), (gst_bin_recalculate_latency), (gst_bin_do_latency_func), (gst_bin_change_state_func): * gst/gstbin.h: Add do-latency signal with the old default fallback implementation. This allows for custom latency calculations for when the default is not sufficient. API: GstBin::do-latency signal. Modified files: . : ChangeLog gst : gstbin.c gstbin.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4161&r2=1.4162 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstbin.c.diff?r1=1.389&r2=1.390 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstbin.h.diff?r1=1.99&r2=1.100 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4161 retrieving revision 1.4162 diff -u -d -r1.4161 -r1.4162 --- ChangeLog 18 Nov 2008 13:36:28 -0000 1.4161 +++ ChangeLog 19 Nov 2008 12:06:38 -0000 1.4162 @@ -1,3 +1,14 @@ +2008-11-19 Wim Taymans <wim...@co...> + + * gst/gstbin.c: (_gst_boolean_accumulator), (gst_bin_class_init), + (gst_bin_recalculate_latency), (gst_bin_do_latency_func), + (gst_bin_change_state_func): + * gst/gstbin.h: + Add do-latency signal with the old default fallback implementation. This + allows for custom latency calculations for when the default is not + sufficient. + API: GstBin::do-latency signal. 2008-11-18 Wim Taymans <wim...@co...> * win32/common/libgstreamer.def: Index: gstbin.c RCS file: /cvs/gstreamer/gstreamer/gst/gstbin.c,v retrieving revision 1.389 retrieving revision 1.390 diff -u -d -r1.389 -r1.390 --- gstbin.c 18 Nov 2008 09:58:33 -0000 1.389 +++ gstbin.c 19 Nov 2008 12:06:41 -0000 1.390 @@ -241,6 +241,8 @@ GstMessage * message, GstBin * bin); static gboolean gst_bin_query (GstElement * element, GstQuery * query); +static gboolean gst_bin_do_latency_func (GstBin * bin); #ifndef GST_DISABLE_LOADSAVE static xmlNodePtr gst_bin_save_thyself (GstObject * object, xmlNodePtr parent); static void gst_bin_restore_thyself (GstObject * object, xmlNodePtr self); @@ -259,6 +261,7 @@ { ELEMENT_ADDED, ELEMENT_REMOVED, + DO_LATENCY, LAST_SIGNAL }; @@ -378,6 +381,22 @@ iface->get_child_by_index = gst_bin_child_proxy_get_child_by_index; } +static gboolean +_gst_boolean_accumulator (GSignalInvocationHint * ihint, + GValue * return_accu, const GValue * handler_return, gpointer dummy) +{ + gboolean myboolean; + myboolean = g_value_get_boolean (handler_return); + if (!(ihint->run_type & G_SIGNAL_RUN_CLEANUP)) + g_value_set_boolean (return_accu, myboolean); + GST_DEBUG ("invocation %d, %d", ihint->run_type, myboolean); + /* stop emission */ + return FALSE; +} static void gst_bin_class_init (GstBinClass * klass) @@ -433,6 +452,29 @@ g_signal_new ("element-removed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GstBinClass, element_removed), NULL, NULL, gst_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GST_TYPE_ELEMENT); + /** + * GstBin::do-latency: + * @bin: the #GstBin + * + * Will be emitted when the bin needs to perform latency calculations. This + * signal is only emited for toplevel bins or when async-handling is + * enabled. + * Only one signal handler is invoked. If no signals are connected, the + * default handler is invoked, which will query and distribute the lowest + * possible latency to all sinks. + * Connect to this signal if the default latency calculations are not + * sufficient, like when you need different latencies for different sinks in + * the same pipeline. + * Since: 0.10.22 + */ + gst_bin_signals[DO_LATENCY] = + g_signal_new ("do-latency", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstBinClass, do_latency), + _gst_boolean_accumulator, NULL, gst_marshal_BOOLEAN__VOID, + G_TYPE_BOOLEAN, 0, G_TYPE_NONE); gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_bin_dispose); @@ -457,6 +499,8 @@ klass->remove_element = GST_DEBUG_FUNCPTR (gst_bin_remove_func); klass->handle_message = GST_DEBUG_FUNCPTR (gst_bin_handle_message_func); + klass->do_latency = GST_DEBUG_FUNCPTR (gst_bin_do_latency_func); GST_DEBUG ("creating bin thread pool"); err = NULL; klass->pool = @@ -2086,6 +2130,9 @@ * This method is typically called on the pipeline when a #GST_MESSAGE_LATENCY * is posted on the bus. * + * This function simply emits the 'do-latency' signal so any custom latency + * calculations will be performed. + * * Returns: %TRUE if the latency could be queried and reconfigured. * Since: 0.10.22. @@ -2093,6 +2140,17 @@ gboolean gst_bin_recalculate_latency (GstBin * bin) + gboolean res; + g_signal_emit (G_OBJECT (bin), gst_bin_signals[DO_LATENCY], 0, &res); + GST_DEBUG_OBJECT (bin, "latency returned %d", res); + return res; +gst_bin_do_latency_func (GstBin * bin) GstQuery *query; GstElement *element; GstClockTime min_latency, max_latency; Index: gstbin.h RCS file: /cvs/gstreamer/gstreamer/gst/gstbin.h,v retrieving revision 1.99 retrieving revision 1.100 diff -u -d -r1.99 -r1.100 --- gstbin.h 18 Nov 2008 09:58:33 -0000 1.99 +++ gstbin.h 19 Nov 2008 12:06:41 -0000 1.100 @@ -151,7 +151,11 @@ void (*handle_message) (GstBin *bin, GstMessage *message); /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; + /* signal added 0.10.22 */ + gboolean (*do_latency) (GstBin *bin); + /*< private >*/ + gpointer _gst_reserved[GST_PADDING-1]; GType gst_bin_get_type (void); |
From: <wt...@ke...> - 2008-11-20 10:36:15
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Thu Nov 20 2008 10:36:04 UTC Log message: * gst/gstquery.c: * gst/gstquery.h: Add GstQueryType for custom queries instead of having to use the not-so-very-convenient registration infrastructure to register new types. Modified files: . : ChangeLog gst : gstquery.c gstquery.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4163&r2=1.4164 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstquery.c.diff?r1=1.47&r2=1.48 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstquery.h.diff?r1=1.40&r2=1.41 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4163 retrieving revision 1.4164 diff -u -d -r1.4163 -r1.4164 --- ChangeLog 19 Nov 2008 12:20:01 -0000 1.4163 +++ ChangeLog 20 Nov 2008 10:35:47 -0000 1.4164 @@ -1,3 +1,11 @@ +2008-11-20 Wim Taymans <wim...@co...> + + * gst/gstquery.c: + * gst/gstquery.h: + Add GstQueryType for custom queries instead of having to use the + not-so-very-convenient registration infrastructure to register new + types. 2008-11-19 Sebastian Dröge <seb...@co...> Patch by: Andrew Feren <acferen at yahoo dot com> Index: gstquery.c RCS file: /cvs/gstreamer/gstreamer/gst/gstquery.c,v retrieving revision 1.47 retrieving revision 1.48 diff -u -d -r1.47 -r1.48 --- gstquery.c 27 Aug 2008 03:04:23 -0000 1.47 +++ gstquery.c 20 Nov 2008 10:35:50 -0000 1.48 @@ -92,6 +92,7 @@ {GST_QUERY_CONVERT, "convert", "Converting between formats", 0}, {GST_QUERY_FORMATS, "formats", "Supported formats for conversion", 0}, {GST_QUERY_BUFFERING, "buffering", "Buffering status", 0}, + {GST_QUERY_CUSTOM, "custom", "Custom query", 0}, {0, NULL, NULL, 0} }; Index: gstquery.h RCS file: /cvs/gstreamer/gstreamer/gst/gstquery.h,v retrieving revision 1.40 retrieving revision 1.41 diff -u -d -r1.40 -r1.41 --- gstquery.h 9 Apr 2008 13:15:33 -0000 1.40 +++ gstquery.h 20 Nov 2008 10:35:50 -0000 1.41 @@ -48,6 +48,8 @@ * @GST_QUERY_FORMATS: query supported formats for convert * @GST_QUERY_BUFFERING: query available media for efficient seeking. Since * 0.10.20. + * @GST_QUERY_CUSTOM: a custom application or element defined query. Since + * 0.10.22. * * Standard predefined Query types */ @@ -64,7 +66,8 @@ GST_QUERY_SEGMENT, GST_QUERY_CONVERT, GST_QUERY_FORMATS, - GST_QUERY_BUFFERING + GST_QUERY_BUFFERING, + GST_QUERY_CUSTOM } GstQueryType; /** |
From: <wt...@ke...> - 2008-11-21 16:49:06
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Fri Nov 21 2008 16:49:02 UTC Log message: * gst/gstpad.c: (gst_pad_accept_caps): Avoid getting the acceptcaps function too early. Modified files: . : ChangeLog gst : gstpad.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4168&r2=1.4169 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstpad.c.diff?r1=1.585&r2=1.586 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4168 retrieving revision 1.4169 diff -u -d -r1.4168 -r1.4169 --- ChangeLog 21 Nov 2008 08:08:56 -0000 1.4168 +++ ChangeLog 21 Nov 2008 16:48:45 -0000 1.4169 @@ -1,5 +1,10 @@ 2008-11-21 Wim Taymans <wim...@co...> + * gst/gstpad.c: (gst_pad_accept_caps): + Avoid getting the acceptcaps function too early. + +2008-11-21 Wim Taymans <wim...@co...> * tools/gst-launch.c: (event_loop): Make gst-launch handle LATENCY messages and make it recalculate the latency. Index: gstpad.c RCS file: /cvs/gstreamer/gstreamer/gst/gstpad.c,v retrieving revision 1.585 retrieving revision 1.586 diff -u -d -r1.585 -r1.586 --- gstpad.c 20 Oct 2008 13:32:07 -0000 1.585 +++ gstpad.c 21 Nov 2008 16:48:48 -0000 1.586 @@ -2311,13 +2311,13 @@ /* lock for checking the existing caps */ GST_OBJECT_LOCK (pad); - acceptfunc = GST_PAD_ACCEPTCAPSFUNC (pad); GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad, "accept caps of %p", caps); /* The current caps on a pad are trivially acceptable */ if (G_LIKELY ((existing = GST_PAD_CAPS (pad)))) { if (caps == existing || gst_caps_is_equal (caps, existing)) goto is_same_caps; } + acceptfunc = GST_PAD_ACCEPTCAPSFUNC (pad); GST_OBJECT_UNLOCK (pad); if (G_LIKELY (acceptfunc)) { |
From: <wt...@ke...> - 2008-11-27 11:12:49
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Thu Nov 27 2008 11:12:44 UTC Log message: Patch by: ì´ë¬¸í <iwings at gmail dot com> * gst/gstpoll.c: (gst_poll_fd_ctl_write), (gst_poll_fd_has_error): Adds support for FD_CONNECT event (win32). See #562258. Modified files: . : ChangeLog gst : gstpoll.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4177&r2=1.4178 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstpoll.c.diff?r1=1.10&r2=1.11 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4177 retrieving revision 1.4178 diff -u -d -r1.4177 -r1.4178 --- ChangeLog 24 Nov 2008 20:02:53 -0000 1.4177 +++ ChangeLog 27 Nov 2008 11:12:27 -0000 1.4178 @@ -1,3 +1,10 @@ +2008-11-27 Wim Taymans <wim...@co...> + + Patch by: ì´ë¬¸í <iwings at gmail dot com> + * gst/gstpoll.c: (gst_poll_fd_ctl_write), (gst_poll_fd_has_error): + Adds support for FD_CONNECT event (win32). See #562258. 2008-11-24 Stefan Kost <en...@us...> * libs/gst/base/gstbasesink.c: Index: gstpoll.c RCS file: /cvs/gstreamer/gstreamer/gst/gstpoll.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- gstpoll.c 13 Nov 2008 18:09:45 -0000 1.10 +++ gstpoll.c 27 Nov 2008 11:12:30 -0000 1.11 @@ -695,7 +695,8 @@ else pfd->events &= ~POLLOUT; #else - gst_poll_update_winsock_event_mask (set, idx, FD_WRITE, active); + gst_poll_update_winsock_event_mask (set, idx, FD_WRITE | FD_CONNECT, + active); #endif } @@ -873,7 +874,8 @@ res = (wfd->events.iErrorCode[FD_CLOSE_BIT] != 0) || (wfd->events.iErrorCode[FD_READ_BIT] != 0) || (wfd->events.iErrorCode[FD_WRITE_BIT] != 0) || - (wfd->events.iErrorCode[FD_ACCEPT_BIT] != 0); + (wfd->events.iErrorCode[FD_ACCEPT_BIT] != 0) || + (wfd->events.iErrorCode[FD_CONNECT_BIT] != 0); |
From: <wt...@ke...> - 2009-01-05 10:14:47
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Mon Jan 05 2009 10:14:43 UTC Log message: * gst/gstbin.c: (gst_bin_set_index_func), (gst_bin_set_clock_func), (gst_bin_change_state_func): Use an iterator to set the clock and the index so that we can release the object lock appropriately. Fixes #566393. Modified files: . : ChangeLog gst : gstbin.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4211&r2=1.4212 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstbin.c.diff?r1=1.390&r2=1.391 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4211 retrieving revision 1.4212 diff -u -d -r1.4211 -r1.4212 --- ChangeLog 3 Jan 2009 18:39:36 -0000 1.4211 +++ ChangeLog 5 Jan 2009 10:14:27 -0000 1.4212 @@ -1,3 +1,10 @@ +2009-01-05 Wim Taymans <wim...@co...> + + * gst/gstbin.c: (gst_bin_set_index_func), (gst_bin_set_clock_func), + (gst_bin_change_state_func): + Use an iterator to set the clock and the index so that we can release + the object lock appropriately. Fixes #566393. 2009-01-03 Edward Hervey <edw...@co...> * libs/gst/base/gstcollectpads.c: (gst_collect_pads_available): Index: gstbin.c RCS file: /cvs/gstreamer/gstreamer/gst/gstbin.c,v retrieving revision 1.390 retrieving revision 1.391 diff -u -d -r1.390 -r1.391 --- gstbin.c 19 Nov 2008 12:06:41 -0000 1.390 +++ gstbin.c 5 Jan 2009 10:14:28 -0000 1.391 @@ -624,17 +624,40 @@ gst_bin_set_index_func (GstElement * element, GstIndex * index) { GstBin *bin; - GList *children; + gboolean done; + GstIterator *it; bin = GST_BIN (element); - GST_OBJECT_LOCK (bin); - for (children = bin->children; children; children = g_list_next (children)) { - GstElement *child = GST_ELEMENT (children->data); + it = gst_bin_iterate_elements (bin); - gst_element_set_index (child, index); + done = FALSE; + while (!done) { + gpointer data; + switch (gst_iterator_next (it, &data)) { + case GST_ITERATOR_OK: + { + GstElement *child = GST_ELEMENT_CAST (data); + GST_DEBUG_OBJECT (bin, "setting index on %s", GST_ELEMENT_NAME (child)); + gst_element_set_index (child, index); + gst_object_unref (child); + break; + } + case GST_ITERATOR_RESYNC: + GST_DEBUG_OBJECT (bin, "iterator doing resync"); + gst_iterator_resync (it); + default: + case GST_ITERATOR_DONE: + GST_DEBUG_OBJECT (bin, "iterator done"); + done = TRUE; + } } - GST_OBJECT_UNLOCK (bin); + gst_iterator_free (it); } /* set the clock on all elements in this bin @@ -644,21 +667,42 @@ static gboolean gst_bin_set_clock_func (GstElement * element, GstClock * clock) gboolean res = TRUE; - if (element->clock != clock) { - for (children = bin->children; children; children = g_list_next (children)) { - GstElement *child = GST_ELEMENT (children->data); - res &= gst_element_set_clock (child, clock); + res &= gst_element_set_clock (child, clock); + res = TRUE; } return res; |
From: <wt...@ke...> - 2009-01-05 15:41:17
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Mon Jan 05 2009 15:41:15 UTC Log message: * gst/gstbus.c: (gst_bus_wakeup_main_context): The lock order should be maincontext > OBJECT_LOCK so we need to release the object lock when waking up the mainloop to avoid deadlocks. Modified files: . : ChangeLog gst : gstbus.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4212&r2=1.4213 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstbus.c.diff?r1=1.69&r2=1.70 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4212 retrieving revision 1.4213 diff -u -d -r1.4212 -r1.4213 --- ChangeLog 5 Jan 2009 10:14:27 -0000 1.4212 +++ ChangeLog 5 Jan 2009 15:40:58 -0000 1.4213 @@ -1,5 +1,11 @@ 2009-01-05 Wim Taymans <wim...@co...> + * gst/gstbus.c: (gst_bus_wakeup_main_context): + The lock order should be maincontext > OBJECT_LOCK so we need to release + the object lock when waking up the mainloop to avoid deadlocks. + +2009-01-05 Wim Taymans <wim...@co...> * gst/gstbin.c: (gst_bin_set_index_func), (gst_bin_set_clock_func), (gst_bin_change_state_func): Use an iterator to set the clock and the index so that we can release Index: gstbus.c RCS file: /cvs/gstreamer/gstreamer/gst/gstbus.c,v retrieving revision 1.69 retrieving revision 1.70 diff -u -d -r1.69 -r1.70 --- gstbus.c 27 Dec 2008 17:41:11 -0000 1.69 +++ gstbus.c 5 Jan 2009 15:41:00 -0000 1.70 @@ -298,9 +298,17 @@ static void gst_bus_wakeup_main_context (GstBus * bus) { + GMainContext *ctx; GST_OBJECT_LOCK (bus); - g_main_context_wakeup (bus->priv->main_context); + if ((ctx = bus->priv->main_context)) + g_main_context_ref (ctx); GST_OBJECT_UNLOCK (bus); + g_main_context_wakeup (ctx); + if (ctx) + g_main_context_unref (ctx); } |
From: <wt...@ke...> - 2009-01-15 10:05:02
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Thu Jan 15 2009 10:04:51 UTC Log message: Patch by: Jonas Holmberg <jonas dot holmberg at axis dot com> * gst/gstpad.h: A small documentation fix. Modified files: . : ChangeLog gst : gstpad.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.4221&r2=1.4222 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstpad.h.diff?r1=1.222&r2=1.223 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.4221 retrieving revision 1.4222 diff -u -d -r1.4221 -r1.4222 --- ChangeLog 11 Jan 2009 09:46:50 -0000 1.4221 +++ ChangeLog 15 Jan 2009 10:04:35 -0000 1.4222 @@ -1,3 +1,10 @@ +2009-01-15 Wim Taymans <wim...@co...> + + Patch by: Jonas Holmberg <jonas dot holmberg at axis dot com> + * gst/gstpad.h: + A small documentation fix. 2009-01-11 Sebastian Dröge <seb...@co...> * gst/gstutils.h: Index: gstpad.h RCS file: /cvs/gstreamer/gstreamer/gst/gstpad.h,v retrieving revision 1.222 retrieving revision 1.223 diff -u -d -r1.222 -r1.223 --- gstpad.h 1 Sep 2008 10:42:04 -0000 1.222 +++ gstpad.h 15 Jan 2009 10:04:37 -0000 1.223 @@ -225,7 +225,7 @@ * gst_buffer_unref() when the buffer is no longer needed. * * When a chain function detects an error in the data stream, it must post an - * error on the buffer and return an appropriate #GstFlowReturn value. + * error on the bus and return an appropriate #GstFlowReturn value. * Returns: #GST_FLOW_OK for success */ |