Initial import to Tizen
[profile/ivi/pocketsphinx.git] / test / unit / test_gst.c
1 #include <gst/gst.h>
2 #include <string.h>
3
4 #include "test_macros.h"
5
6 static gboolean
7 bus_call(GstBus *bus, GstMessage *msg, gpointer data)
8 {
9         GMainLoop *loop = (GMainLoop *)data;
10
11         switch (GST_MESSAGE_TYPE(msg)) {
12         case GST_MESSAGE_EOS:
13                 g_print("End-of-stream\n");
14                 g_main_loop_quit(loop);
15                 break;
16         case GST_MESSAGE_ERROR: {
17                 gchar *debug;
18                 GError *err;
19
20                 gst_message_parse_error(msg, &err, &debug);
21                 g_free(debug);
22                 g_print("Error: %s\n", err->message);
23                 g_error_free(err);
24                 g_main_loop_quit(loop);
25                 break;
26         }
27         default:
28                 break;
29         }
30
31         return TRUE;
32 }
33
34 int
35 main(int argc, char *argv[])
36 {
37         GMainLoop *loop;
38         GError *err;
39         GstElement *pipeline;
40         GstElement *src, *resamp, *filter, *vader, *sink;
41         GstCaps *caps;
42         GstBus *bus;
43         FILE *fh;
44         char line[256];
45
46         gst_init(&argc, &argv);
47         err = NULL;
48         gst_plugin_load_file("../../src/gst-plugin/.libs/libgstpocketsphinx.so", &err);
49         if (err) {
50                 g_print("Failed to load plugin: %s\n", err->message);
51                 return 1;
52         }
53         loop = g_main_loop_new(NULL, FALSE);
54
55         pipeline = gst_pipeline_new("test_gst");
56         src = gst_element_factory_make("filesrc", "file-source");
57         g_object_set(G_OBJECT(src), "location", DATADIR "/goforward.raw", NULL);
58         caps = gst_caps_from_string("audio/x-raw-int,channels=1,endianness=1234,width=16,depth=16,rate=16000,signed=(bool)true");
59         if (caps == NULL) {
60                 g_print("Failed to create caps!\n");
61                 return 1;
62         }
63         resamp = gst_element_factory_make("audioresample", "resampler");
64         vader = gst_element_factory_make("vader", "vad");
65         g_object_set(G_OBJECT(vader), "auto_threshold", TRUE, NULL);
66         filter = gst_element_factory_make("pocketsphinx", "asr");
67         g_object_set(G_OBJECT(filter), "hmm", MODELDIR "/hmm/en_US/hub4wsj_sc_8k", NULL);
68         g_object_set(G_OBJECT(filter), "lm", MODELDIR "/lm/en/turtle.DMP", NULL);
69         g_object_set(G_OBJECT(filter), "dict", MODELDIR "/lm/en/turtle.dic", NULL);
70         g_object_set(G_OBJECT(filter), "latdir", ".", NULL);
71         sink = gst_element_factory_make("filesink", "sink");
72         g_object_set(G_OBJECT(sink), "location", "test_gst.out", NULL);
73         gst_bin_add_many(GST_BIN(pipeline),
74                          src, resamp, vader, filter, sink, NULL);
75         gst_element_link_filtered(src, resamp, caps);
76         gst_element_link(resamp, vader);
77         gst_element_link(vader, filter);
78         gst_element_link(filter, sink);
79
80         bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
81         gst_bus_add_watch(bus, bus_call, loop);
82
83         gst_element_set_state(pipeline, GST_STATE_PLAYING);
84         g_main_loop_run(loop);
85
86         gst_element_set_state(pipeline, GST_STATE_NULL);
87         gst_object_unref(GST_OBJECT(pipeline));
88
89         TEST_ASSERT(fh = fopen("test_gst.out", "r"));
90         TEST_ASSERT(fgets(line, sizeof(line), fh));
91         TEST_EQUAL(0, strcmp(line, "go forward ten meters\n"));
92
93         return 0;
94 }