gst/gstbin.c (sink_iterator_filter): Err... um...

Original commit message from CVS:
2005-05-16  Andy Wingo  <wingo@pobox.com>

* gst/gstbin.c (sink_iterator_filter): Err... um...

* check/gst/gstbin.c (test_ghost_pads): New test for the
ghosting-if-elements-not-in-same-bin behavior.
This commit is contained in:
Andy Wingo 2005-05-16 21:17:14 +00:00
parent b52ba4751a
commit 04312000d0
7 changed files with 83 additions and 310 deletions

View file

@ -1,3 +1,10 @@
2005-05-16 Andy Wingo <wingo@pobox.com>
* gst/gstbin.c (sink_iterator_filter): Err... um...
* check/gst/gstbin.c (test_ghost_pads): New test for the
ghosting-if-elements-not-in-same-bin behavior.
2005-05-16 David Schleef <ds@schleef.org>
* gst/gstminiobject.c: Use g_atomic_int_get() instead of

View file

@ -79,7 +79,38 @@ START_TEST (test_interface)
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_DONE);
gst_iterator_free (it);
g_object_unref (bin);
gst_object_unref (GST_OBJECT (bin));
}
END_TEST
START_TEST (test_ghost_pads)
{
GstElement *b1, *b2, *src, *i1, *sink;
b1 = gst_element_factory_make ("pipeline", NULL);
b2 = gst_element_factory_make ("bin", NULL);
src = gst_element_factory_make ("fakesrc", NULL);
i1 = gst_element_factory_make ("identity", NULL);
sink = gst_element_factory_make ("fakesink", NULL);
fail_unless (gst_bin_add (GST_BIN (b2), i1));
fail_unless (gst_bin_add (GST_BIN (b1), src));
fail_unless (gst_bin_add (GST_BIN (b1), b2));
fail_unless (gst_bin_add (GST_BIN (b1), sink));
fail_unless (gst_element_link_pads (src, NULL, i1, NULL));
fail_unless (gst_element_link_pads (i1, NULL, sink, NULL));
GST_LOCK (b2);
fail_unless (b2->numsinkpads == 1);
fail_unless (GST_IS_GHOST_PAD (b2->sinkpads->data));
fail_unless (b2->numsrcpads == 1);
fail_unless (GST_IS_GHOST_PAD (b2->srcpads->data));
GST_UNLOCK (b2);
fail_unless (gst_element_set_state (b1,
GST_STATE_PLAYING) == GST_STATE_SUCCESS);
fail_unless (gst_element_set_state (b1, GST_STATE_NULL) == GST_STATE_SUCCESS);
gst_object_unref (GST_OBJECT (b1));
}
END_TEST Suite * gst_bin_suite (void)
{
@ -88,6 +119,7 @@ END_TEST Suite * gst_bin_suite (void)
suite_add_tcase (s, tc_chain);
tcase_add_test (tc_chain, test_interface);
tcase_add_test (tc_chain, test_ghost_pads);
return s;
}

View file

@ -89,10 +89,9 @@ Last reviewed on August 12th, 2004 (0.8.5)
The basic structure of a buffer.
</para>
@data_type:
@mini_object:
@data:
@size:
@maxsize:
@timestamp:
@duration:
@caps:
@ -121,15 +120,13 @@ The basic structure of a buffer.
</para>
@GST_BUFFER_READONLY:
@GST_BUFFER_SUBBUFFER:
@GST_BUFFER_ORIGINAL:
@GST_BUFFER_DONTFREE:
@GST_BUFFER_PREROLL:
@GST_BUFFER_DISCONT:
@GST_BUFFER_IN_CAPS:
@GST_BUFFER_GAP:
@GST_BUFFER_DELTA_UNIT:
@GST_BUFFER_FLAG_READONLY:
@GST_BUFFER_FLAG_ORIGINAL:
@GST_BUFFER_FLAG_PREROLL:
@GST_BUFFER_FLAG_DISCONT:
@GST_BUFFER_FLAG_IN_CAPS:
@GST_BUFFER_FLAG_GAP:
@GST_BUFFER_FLAG_DELTA_UNIT:
@GST_BUFFER_FLAG_LAST:
<!-- ##### MACRO GST_BUFFER_FLAGS ##### -->
@ -194,14 +191,6 @@ Gets the size of the data in this buffer.
@buf: a #GstBuffer to get data size of.
<!-- ##### MACRO GST_BUFFER_MAXSIZE ##### -->
<para>
Gets the maximum size of this buffer.
</para>
@buf: a #GstBuffer to get maximum size of.
<!-- ##### MACRO GST_BUFFER_TIMESTAMP ##### -->
<para>
Gets the timestamp for this buffer.
@ -243,15 +232,6 @@ Increases the refcount of the given buffer by one.
@buf: a #GstBuffer to increase the refcount of.
<!-- ##### MACRO gst_buffer_ref_by_count ##### -->
<para>
Increases the refcount of the buffer by the given value.
</para>
@buf: a #GstBuffer to increase the refcount of.
@c: the value to add to the refcount.
<!-- ##### MACRO gst_buffer_unref ##### -->
<para>
Decreases the refcount of the buffer. If the refcount reaches 0, the buffer
@ -287,18 +267,6 @@ Tests if you can safely write data into a buffer's data array.
@buf: a #GstBuffer to check
<!-- ##### MACRO gst_buffer_copy_on_write ##### -->
<para>
This function returns a buffer that is safe to write to.
Copy the buffer if the refcount > 1 so that the newly
created buffer can be safely written to.
If the refcount is 1, this function just returns the original buffer.
</para>
@buf: a #GstBuffer to copy
@Returns: the #GstBuffer that can safely be written to.
<!-- ##### FUNCTION gst_buffer_create_sub ##### -->
<para>
@ -366,71 +334,6 @@ The name used for tracing memory allocations
<!-- ##### MACRO GST_BUFFER_REFCOUNT ##### -->
<para>
Gets a handle to the refcount structure of the buffer.
</para>
@buf: a #GstBuffer to get the refcount structure of.
<!-- ##### MACRO GST_BUFFER_REFCOUNT_VALUE ##### -->
<para>
Gets the current refcount value of the buffer.
</para>
@buf: a #GstBuffer to get the refcount value of.
<!-- ##### MACRO GST_BUFFER_COPY_FUNC ##### -->
<para>
Calls the buffer-specific copy function on the given buffer.
</para>
@buf: a #GstBuffer to copy.
<!-- ##### MACRO GST_BUFFER_FREE_FUNC ##### -->
<para>
Calls the buffer-specific free function on the given buffer.
</para>
@buf: a #GstBuffer to free.
<!-- ##### MACRO GST_BUFFER_FREE_DATA_FUNC ##### -->
<para>
A function that should be called if the buffer has no more references left.
Elements that utilize hardware memory could use this to re-queue
the buffer after it's been unreferenced. If no free_data_func has been
provided, the default will be used which simply deallocates the memory
region and the GstBuffer object. Manual implementations that want to
free their own memory but don't do anything special otherwise are
suggested to set the GST_BUFFER_DONTFREE flag on the buffer and call the
default data free function (gst_buffer_default_free()) from their manual
implementation.
</para>
@buf: the #GstBuffer this function belongs to
<!-- ##### USER_FUNCTION GstBufferFreeDataFunc ##### -->
<para>
the type for the GST_BUFFER_FREE_DATA_FUNC
</para>
@buffer: the #GstBuffer on which it will operate, when called
<!-- ##### MACRO GST_BUFFER_PRIVATE ##### -->
<para>
Private data for the buffer. This can be used to store a pointer to the
object that can then be retrieved in something like the BUFFER_FREE_DATA_FUNC.
</para>
@buf: the #GstBuffer this data belongs to
<!-- ##### MACRO GST_BUFFER_OFFSET_NONE ##### -->
<para>

View file

@ -16,195 +16,3 @@ GstData provides refcounting, freeing and copying for its child classes.
#GstBuffer, #GstBufferPool, #GstEvent
</para>
<!-- ##### MACRO GST_DATA ##### -->
<para>
Cast a pointer to a GstData
</para>
@data: The pointer to cast
<!-- ##### MACRO GST_DATA_TYPE ##### -->
<para>
Get the type of the GstData
</para>
@data: The data to get the type of
<!-- ##### MACRO GST_DATA_FLAGS ##### -->
<para>
Get the flags of this GstData
</para>
@data: The data to get the flags of
<!-- ##### MACRO GST_DATA_FLAG_SHIFT ##### -->
<para>
Shift a given flag so that it can be used in an or operation
</para>
@flag: The flag to shift
<!-- ##### MACRO GST_DATA_FLAG_UNSET ##### -->
<para>
Unset the given flag
</para>
@data: The data to unset the flag of
@flag: The flag to unset
<!-- ##### STRUCT GstData ##### -->
<para>
The base structure
</para>
@type: The type of this data.
@refcount: A refcount
@flags: The flags of this GstData
<!-- ##### USER_FUNCTION GstDataFreeFunction ##### -->
<para>
The signature of the free function. Subclasses should provide a free function
with this signature and pass it in the gst_data_init() function.
</para>
@data: The GstData to free
<!-- ##### USER_FUNCTION GstDataCopyFunction ##### -->
<para>
The signature of the copy function. Subclasses should provide a copy function
with this signature and pass it in the gst_data_init() function.
</para>
@data: The GstData to copy
@Returns: A new GstData that is a copy of data
<!-- ##### ENUM GstDataFlags ##### -->
<para>
Various flags that can be set on a GstData
</para>
@GST_DATA_READONLY: The data is readonly
@GST_DATA_FLAG_LAST: Subclasses can add additional flags starting from this offset
<!-- ##### MACRO GST_DATA_REFCOUNT ##### -->
<para>
Get access to the refcount field of the GstData
</para>
@data: The GstData to get the refcount field of
<!-- ##### MACRO GST_DATA_REFCOUNT_VALUE ##### -->
<para>
Get the current refcount value
</para>
@data: The GstData to query
<!-- ##### MACRO GST_DATA_COPY_FUNC ##### -->
<para>
Get access to the copy function of the data
</para>
@data: The data to query
<!-- ##### MACRO GST_DATA_FREE_FUNC ##### -->
<para>
Get access to the free function of the data
</para>
@data: The data to query
<!-- ##### FUNCTION gst_data_init ##### -->
<para>
</para>
@data:
@type:
@flags:
@free:
@copy:
<!-- ##### FUNCTION gst_data_dispose ##### -->
<para>
</para>
@data:
<!-- ##### FUNCTION gst_data_copy_into ##### -->
<para>
</para>
@data:
@target:
<!-- ##### FUNCTION gst_data_copy ##### -->
<para>
</para>
@data:
@Returns:
<!-- ##### FUNCTION gst_data_is_writable ##### -->
<para>
</para>
@data:
@Returns:
<!-- ##### FUNCTION gst_data_copy_on_write ##### -->
<para>
</para>
@data:
@Returns:
<!-- ##### FUNCTION gst_data_ref ##### -->
<para>
</para>
@data:
@Returns:
<!-- ##### FUNCTION gst_data_ref_by_count ##### -->
<para>
</para>
@data:
@count:
@Returns:
<!-- ##### FUNCTION gst_data_unref ##### -->
<para>
</para>
@data:

View file

@ -32,7 +32,7 @@ gst_event_new_flush() creates a new flush event.
</para>
@data:
@mini_object:
@type:
@timestamp:
@src:
@ -319,15 +319,6 @@ Increase the refcount of this event
@ev: The event to refcount
<!-- ##### MACRO gst_event_ref_by_count ##### -->
<para>
Increase the refcount of the event with the given value
</para>
@ev: The event to refcount
@c: The value to add to the refcount
<!-- ##### MACRO gst_event_unref ##### -->
<para>
Decrease the refcount of an event, freeing it if the refcount reaches 0

View file

@ -709,7 +709,7 @@ bin_element_is_sink (GstElement * child, GstBin * bin)
static gint
sink_iterator_filter (GstElement * child, GstBin * bin)
{
if (bin_element_is_sink (child, bin)) {
if (bin_element_is_sink (child, bin) == 0) {
/* returns 0 because this is a GCompareFunc */
return 0;
} else {

View file

@ -79,7 +79,38 @@ START_TEST (test_interface)
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_DONE);
gst_iterator_free (it);
g_object_unref (bin);
gst_object_unref (GST_OBJECT (bin));
}
END_TEST
START_TEST (test_ghost_pads)
{
GstElement *b1, *b2, *src, *i1, *sink;
b1 = gst_element_factory_make ("pipeline", NULL);
b2 = gst_element_factory_make ("bin", NULL);
src = gst_element_factory_make ("fakesrc", NULL);
i1 = gst_element_factory_make ("identity", NULL);
sink = gst_element_factory_make ("fakesink", NULL);
fail_unless (gst_bin_add (GST_BIN (b2), i1));
fail_unless (gst_bin_add (GST_BIN (b1), src));
fail_unless (gst_bin_add (GST_BIN (b1), b2));
fail_unless (gst_bin_add (GST_BIN (b1), sink));
fail_unless (gst_element_link_pads (src, NULL, i1, NULL));
fail_unless (gst_element_link_pads (i1, NULL, sink, NULL));
GST_LOCK (b2);
fail_unless (b2->numsinkpads == 1);
fail_unless (GST_IS_GHOST_PAD (b2->sinkpads->data));
fail_unless (b2->numsrcpads == 1);
fail_unless (GST_IS_GHOST_PAD (b2->srcpads->data));
GST_UNLOCK (b2);
fail_unless (gst_element_set_state (b1,
GST_STATE_PLAYING) == GST_STATE_SUCCESS);
fail_unless (gst_element_set_state (b1, GST_STATE_NULL) == GST_STATE_SUCCESS);
gst_object_unref (GST_OBJECT (b1));
}
END_TEST Suite * gst_bin_suite (void)
{
@ -88,6 +119,7 @@ END_TEST Suite * gst_bin_suite (void)
suite_add_tcase (s, tc_chain);
tcase_add_test (tc_chain, test_interface);
tcase_add_test (tc_chain, test_ghost_pads);
return s;
}