debian: package gst-play-event
[espeaktime] / src / gst-play-event.c
1 /*
2  * Play media file via gstreamer, optionally setting pulseaudio
3  * properties on it.  Inspired by qwerty12's code from:
4  * http://talk.maemo.org/showthread.php?t=50266&page=2
5  */
6
7 #include <gst/gst.h>
8 #include <pulse/pulseaudio.h>
9 #include <pulse/glib-mainloop.h>
10
11 static GMainLoop *loop;
12 static GstElement *sound_player, *pulsesink;
13
14 static gboolean bus_call(GstBus *bus, GstMessage *msg, gpointer data)
15 {
16         GMainLoop *loop = data;
17         gchar *debug;
18         GError *error;
19
20         switch (GST_MESSAGE_TYPE(msg)) {
21         case GST_MESSAGE_EOS:
22                 g_main_loop_quit(loop);
23                 break;
24         case GST_MESSAGE_ERROR:
25                 gst_message_parse_error(msg, &error, &debug);
26                 g_free (debug);
27
28                 g_printerr("Error: %s\n", error->message);
29                 g_error_free(error);
30                 g_main_loop_quit(loop);
31                 break;
32         default:
33                 break;
34         }
35
36         return TRUE;
37 }
38
39 int main(int argc, char *argv[])
40 {
41         GstBus *bus;
42         pa_proplist *proplist = NULL;
43
44         if (argc < 2) {
45                 g_printerr("Usage: %s <uri> [<event-id>]\n", argv[0]);
46                 return 1;
47         }
48
49         gst_init(&argc, &argv);
50         loop = g_main_loop_new(NULL, FALSE);
51
52         if (argc > 2) {
53                 proplist = pa_proplist_new();
54                 pa_proplist_sets(proplist, PA_PROP_EVENT_ID, argv[2]);
55                 pa_proplist_sets(proplist, "module-stream-restore.id", "x-maemo-applet-profiles");
56         }
57
58         sound_player = gst_element_factory_make("playbin2", "eSpeakTime");
59         pulsesink = gst_element_factory_make("pulsesink", NULL);
60         if (proplist)
61                 g_object_set(G_OBJECT(pulsesink), "proplist", proplist, NULL);
62
63         bus = gst_pipeline_get_bus(GST_PIPELINE(sound_player));
64         gst_bus_add_watch(bus, bus_call, loop);
65         gst_object_unref(bus);
66
67         g_object_set(sound_player, "audio-sink", pulsesink, "uri", argv[1], NULL);
68         gst_element_set_state(sound_player, GST_STATE_PLAYING);
69
70         g_main_loop_run(loop);
71         return 0;
72 }