mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 16:26:39 +00:00
e040bb2dbe
Original commit message from CVS: 2005-09-02 Andy Wingo <wingo@pobox.com> * gst/gstelement.h (GstState): Renamed from GstElementState, changed to be a normal enum instead of flags. (GstStateChangeReturn): Renamed from GstElementStateReturn, names munged to be GST_STATE_CHANGE_*. (GST_STATE_CHANGE): Renamed from GST_STATE_TRANSITION, updated to work with the new state representation. (GstStateChange): New enumeration of possible state transitions. Replaces GST_STATE_FOO_TO_BAR with GST_STATE_CHANGE_FOO_TO_BAR. (GstElementClass::change_state): Pass the GstStateChange along as an argument. Helps language bindings, so they don't have to use tricky lock-needing macros like GST_STATE_CHANGE (). * scripts/update-states (file): New script. Run it on a file to update it for state naming and API changes. Updates files in place. * All files updated for the new API.
134 lines
3.8 KiB
C
134 lines
3.8 KiB
C
/*
|
|
* Copyright (C) 2004 Benjamin Otte <otte@gnome.org>
|
|
* Copyright (C) 2005 Andy Wingo <wingo@pobox.com>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public
|
|
* License along with this library; if not, write to the Free
|
|
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
#include <gst/gst.h>
|
|
|
|
#define BUFFER_COUNT (1000)
|
|
#define SRC_ELEMENT "fakesrc"
|
|
#define SINK_ELEMENT "fakesink"
|
|
|
|
|
|
static GstClockTime
|
|
gst_get_current_time (void)
|
|
{
|
|
GTimeVal tv;
|
|
|
|
g_get_current_time (&tv);
|
|
return GST_TIMEVAL_TO_TIME (tv);
|
|
}
|
|
|
|
gint
|
|
main (gint argc, gchar * argv[])
|
|
{
|
|
GstElement *pipeline, *src, *e;
|
|
GSList *saved_src_list, *src_list, *new_src_list;
|
|
guint complexity_order, n_elements, i, j, max_this_level;
|
|
GstClockTime start, end;
|
|
gboolean all_srcs_linked;
|
|
|
|
gst_init (&argc, &argv);
|
|
|
|
if (argc != 3) {
|
|
g_print ("usage: %s COMPLEXITY_ORDER N_ELEMENTS\n", argv[0]);
|
|
return 1;
|
|
}
|
|
|
|
complexity_order = atoi (argv[1]);
|
|
n_elements = atoi (argv[2]);
|
|
|
|
start = gst_get_current_time ();
|
|
|
|
pipeline = gst_element_factory_make ("pipeline", NULL);
|
|
g_assert (pipeline);
|
|
|
|
e = gst_element_factory_make ("fakesrc", NULL);
|
|
g_object_set (e, "num-buffers", BUFFER_COUNT, NULL);
|
|
g_object_set (e, "silent", TRUE, NULL);
|
|
gst_bin_add (GST_BIN (pipeline), e);
|
|
src_list = saved_src_list = g_slist_append (NULL, e);
|
|
|
|
new_src_list = NULL;
|
|
|
|
max_this_level = 1;
|
|
j = 0;
|
|
i = 0;
|
|
all_srcs_linked = FALSE;
|
|
for (i = 0, j = 0; i < n_elements; i++, j++) {
|
|
if (j >= max_this_level) {
|
|
g_slist_free (saved_src_list);
|
|
saved_src_list = g_slist_reverse (new_src_list);
|
|
new_src_list = NULL;
|
|
j = 0;
|
|
all_srcs_linked = FALSE;
|
|
max_this_level *= complexity_order;
|
|
}
|
|
|
|
if (!src_list) {
|
|
if (j)
|
|
all_srcs_linked = TRUE;
|
|
src_list = saved_src_list;
|
|
}
|
|
|
|
src = (GstElement *) src_list->data;
|
|
src_list = src_list->next;
|
|
|
|
if (i + max_this_level < n_elements) {
|
|
e = gst_element_factory_make ("tee", NULL);
|
|
} else {
|
|
e = gst_element_factory_make ("fakesink", NULL);
|
|
g_object_set (e, "preroll-queue-len", 1, NULL);
|
|
}
|
|
g_object_set (e, "silent", TRUE, NULL);
|
|
new_src_list = g_slist_prepend (new_src_list, e);
|
|
|
|
gst_bin_add (GST_BIN (pipeline), e);
|
|
if (!gst_element_link (src, e))
|
|
g_assert_not_reached ();
|
|
}
|
|
|
|
g_slist_free (saved_src_list);
|
|
g_slist_free (new_src_list);
|
|
|
|
end = gst_get_current_time ();
|
|
g_print ("%" GST_TIME_FORMAT " - creating and linking %d elements\n",
|
|
GST_TIME_ARGS (end - start), i);
|
|
|
|
start = gst_get_current_time ();
|
|
if (gst_element_set_state (pipeline,
|
|
GST_STATE_PLAYING) != GST_STATE_CHANGE_SUCCESS)
|
|
g_assert_not_reached ();
|
|
end = gst_get_current_time ();
|
|
g_print ("%" GST_TIME_FORMAT " - setting pipeline to playing\n",
|
|
GST_TIME_ARGS (end - start));
|
|
|
|
start = gst_get_current_time ();
|
|
gst_bus_poll (gst_element_get_bus (pipeline),
|
|
GST_MESSAGE_EOS | GST_MESSAGE_ERROR, -1);
|
|
end = gst_get_current_time ();
|
|
g_print ("%" GST_TIME_FORMAT " - putting %u buffers through\n",
|
|
GST_TIME_ARGS (end - start), BUFFER_COUNT);
|
|
|
|
start = gst_get_current_time ();
|
|
g_object_unref (pipeline);
|
|
end = gst_get_current_time ();
|
|
g_print ("%" GST_TIME_FORMAT " - unreffing pipeline\n",
|
|
GST_TIME_ARGS (end - start));
|
|
|
|
return 0;
|
|
}
|