X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=gst-plugins-base-subtitles0.10%2Ftests%2Fexamples%2Fseek%2Fstepping2.c;fp=gst-plugins-base-subtitles0.10%2Ftests%2Fexamples%2Fseek%2Fstepping2.c;h=8cea180e3f2d5fdeef990788202caf3cdb999ddc;hb=57ba96e291a055f69dbfd4ae9f1ae2390e36986e;hp=0000000000000000000000000000000000000000;hpb=be2c98fb83895d10ac44af7b9a9c3e00ca54bf49;p=mafwsubrenderer diff --git a/gst-plugins-base-subtitles0.10/tests/examples/seek/stepping2.c b/gst-plugins-base-subtitles0.10/tests/examples/seek/stepping2.c new file mode 100644 index 0000000..8cea180 --- /dev/null +++ b/gst-plugins-base-subtitles0.10/tests/examples/seek/stepping2.c @@ -0,0 +1,142 @@ +/* GStreamer + * + * stepping.c: stepping sample application + * + * Copyright (C) 2009 Wim Taymans + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include +#include + +#include + +static GMainLoop *loop; + +static gdouble period = 0.0; + +static void +do_step (GstElement * bin) +{ + gdouble rate; + + rate = sin (period); + + period += M_PI / 150; + + rate += 1.2; + + gst_element_send_event (bin, + gst_event_new_step (GST_FORMAT_TIME, 40 * GST_MSECOND, rate, FALSE, + FALSE)); +} + +static void +handle_sync_message (GstBus * bus, GstMessage * message, gpointer data) +{ + GstElement *bin; + + bin = GST_ELEMENT_CAST (data); + + switch (message->type) { + case GST_MESSAGE_STEP_DONE: + do_step (bin); + break; + default: + break; + } +} + +static void +handle_message (GstBus * bus, GstMessage * message, gpointer data) +{ + switch (message->type) { + case GST_MESSAGE_EOS: + g_message ("got EOS"); + g_main_loop_quit (loop); + break; + case GST_MESSAGE_WARNING: + case GST_MESSAGE_ERROR: + { + GError *gerror; + gchar *debug; + + if (message->type == GST_MESSAGE_ERROR) + gst_message_parse_error (message, &gerror, &debug); + else + gst_message_parse_warning (message, &gerror, &debug); + + gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug); + g_error_free (gerror); + g_free (debug); + if (message->type == GST_MESSAGE_ERROR) + g_main_loop_quit (loop); + break; + } + default: + break; + } +} + +int +main (int argc, char *argv[]) +{ + GstElement *bin; + GstBus *bus; + + gst_init (&argc, &argv); + + if (argc < 2) { + g_print ("usage: %s \n", argv[0]); + return -1; + } + + /* create a new bin to hold the elements */ + bin = gst_element_factory_make ("playbin2", "bin"); + g_assert (bin); + g_object_set (bin, "uri", argv[1], NULL); + + bus = gst_pipeline_get_bus (GST_PIPELINE (bin)); + gst_bus_add_signal_watch (bus); + gst_bus_enable_sync_message_emission (bus); + + g_signal_connect (bus, "message", (GCallback) handle_message, bin); + g_signal_connect (bus, "sync-message", (GCallback) handle_sync_message, bin); + + /* go to the PAUSED state and wait for preroll */ + g_message ("prerolling first frame"); + gst_element_set_state (bin, GST_STATE_PAUSED); + gst_element_get_state (bin, NULL, NULL, -1); + + /* queue step */ + do_step (bin); + + gst_element_set_state (bin, GST_STATE_PLAYING); + + loop = g_main_loop_new (NULL, TRUE); + g_main_loop_run (loop); + + g_message ("finished"); + + /* stop the bin */ + gst_element_set_state (bin, GST_STATE_NULL); + + g_main_loop_unref (loop); + gst_object_unref (bus); + + exit (0); +}