Initialize Tizen 2.3
[framework/multimedia/gstreamer0.10.git] / mobile / tests / examples / helloworld / helloworld.c
1 #include <gst/gst.h>
2
3 static gboolean
4 bus_call (GstBus * bus, GstMessage * msg, gpointer data)
5 {
6   GMainLoop *loop = (GMainLoop *) data;
7
8   switch (GST_MESSAGE_TYPE (msg)) {
9     case GST_MESSAGE_EOS:{
10       g_print ("End-of-stream\n");
11       g_main_loop_quit (loop);
12       break;
13     }
14     case GST_MESSAGE_ERROR:{
15       gchar *debug;
16       GError *err;
17
18       gst_message_parse_error (msg, &err, &debug);
19       g_free (debug);
20
21       g_print ("Error: %s\n", err->message);
22       g_error_free (err);
23
24       g_main_loop_quit (loop);
25
26       break;
27     }
28     default:
29       break;
30   }
31   return TRUE;
32 }
33
34 gint
35 main (gint argc, gchar * argv[])
36 {
37   GstElement *playbin;
38   GMainLoop *loop;
39   GstBus *bus;
40   gchar *uri;
41
42   gst_init (&argc, &argv);
43
44   if (argc < 2) {
45     g_print ("usage: %s <media file or uri>\n", argv[0]);
46     return 1;
47   }
48
49   playbin = gst_element_factory_make ("playbin2", NULL);
50   if (!playbin) {
51     g_print ("'playbin2' gstreamer plugin missing\n");
52     return 1;
53   }
54
55   /* take the commandline argument and ensure that it is a uri */
56   if (gst_uri_is_valid (argv[1]))
57     uri = g_strdup (argv[1]);
58   else
59     uri = gst_filename_to_uri (argv[1], NULL);
60   g_object_set (playbin, "uri", uri, NULL);
61   g_free (uri);
62
63   /* create and event loop and feed gstreamer bus mesages to it */
64   loop = g_main_loop_new (NULL, FALSE);
65
66   bus = gst_element_get_bus (playbin);
67   gst_bus_add_watch (bus, bus_call, loop);
68   g_object_unref (bus);
69
70   /* start play back and listed to events */
71   gst_element_set_state (playbin, GST_STATE_PLAYING);
72   g_main_loop_run (loop);
73
74   /* cleanup */
75   gst_element_set_state (playbin, GST_STATE_NULL);
76   g_object_unref (playbin);
77   g_main_loop_unref (loop);
78
79   return 0;
80 }