Macro qtTrIdx() replaced by tr() and QT_TRANSLATE_NOOP()
[mafwsubrenderer] / gst-plugins-base-subtitles0.10 / tests / examples / seek / stepping.c
1 /* GStreamer
2  *
3  * stepping.c: stepping sample application
4  *
5  * Copyright (C) 2009 Wim Taymans <wim.taymans@gmail.com>
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public
18  * License along with this library; if not, write to the
19  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20  * Boston, MA 02111-1307, USA.
21  */
22
23 #include <stdlib.h>
24 #include <math.h>
25
26 #include <gst/gst.h>
27
28 static GMainLoop *loop;
29
30 static gdouble period = 0.0;
31
32 static gboolean
33 do_step (GstElement * bin)
34 {
35   gdouble length;
36
37   length = sin (period);
38
39   period += M_PI / 40;
40
41   length += 1.1;
42   length *= 100 * GST_MSECOND;
43
44   gst_element_send_event (bin,
45       gst_event_new_step (GST_FORMAT_TIME, length, 1.0, TRUE, FALSE));
46
47   return FALSE;
48 }
49
50 static gboolean
51 handle_message (GstBus * bus, GstMessage * message, gpointer data)
52 {
53   GstElement *bin = GST_ELEMENT_CAST (data);
54
55   switch (message->type) {
56     case GST_MESSAGE_EOS:
57       g_message ("got EOS");
58       g_main_loop_quit (loop);
59       break;
60     case GST_MESSAGE_WARNING:
61     case GST_MESSAGE_ERROR:
62     {
63       GError *gerror;
64       gchar *debug;
65
66       if (message->type == GST_MESSAGE_ERROR)
67         gst_message_parse_error (message, &gerror, &debug);
68       else
69         gst_message_parse_warning (message, &gerror, &debug);
70
71       gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
72       g_error_free (gerror);
73       g_free (debug);
74       g_main_loop_quit (loop);
75       break;
76     }
77     case GST_MESSAGE_ASYNC_DONE:
78       g_timeout_add (40, (GSourceFunc) do_step, bin);
79       break;
80     default:
81       break;
82   }
83   return TRUE;
84 }
85
86 int
87 main (int argc, char *argv[])
88 {
89   GstElement *bin;
90   GstBus *bus;
91
92   gst_init (&argc, &argv);
93
94   if (argc < 2) {
95     g_print ("usage: %s <uri>\n", argv[0]);
96     return -1;
97   }
98
99   /* create a new bin to hold the elements */
100   bin = gst_element_factory_make ("playbin2", "bin");
101   g_assert (bin);
102   g_object_set (bin, "uri", argv[1], NULL);
103
104   bus = gst_pipeline_get_bus (GST_PIPELINE (bin));
105   gst_bus_add_watch (bus, handle_message, bin);
106
107   /* go to the PAUSED state and wait for preroll */
108   g_message ("prerolling first frame");
109   gst_element_set_state (bin, GST_STATE_PAUSED);
110   gst_element_get_state (bin, NULL, NULL, -1);
111
112   loop = g_main_loop_new (NULL, TRUE);
113   g_main_loop_run (loop);
114
115   g_message ("finished");
116
117   /* stop the bin */
118   gst_element_set_state (bin, GST_STATE_NULL);
119
120   g_main_loop_unref (loop);
121   gst_object_unref (bus);
122
123   exit (0);
124 }