Macro qtTrIdx() replaced by tr() and QT_TRANSLATE_NOOP()
[mafwsubrenderer] / gst-plugins-base-subtitles0.10 / tests / old / examples / capsfilter / capsfilter1.c
1 #include <string.h>
2 #include <gst/gst.h>
3
4 /* This app uses a filter to connect colorspace and videosink
5  * so that only RGB data can pass the connection, colorspace will use
6  * a converter to convert the I420 data to RGB. Without a filter, this
7  * connection would use the I420 format (assuming Xv is enabled) */
8
9 static void
10 new_pad_func (GstElement * element, GstPad * newpad, gpointer data)
11 {
12   GstElement *pipeline = (GstElement *) data;
13   GstElement *queue = gst_bin_get_by_name (GST_BIN (pipeline), "queue");
14
15   if (!strcmp (gst_pad_get_name (newpad), "video_00")) {
16     gst_element_set_state (pipeline, GST_STATE_PAUSED);
17     gst_pad_link (newpad, gst_element_get_pad (queue, "sink"));
18     gst_element_set_state (pipeline, GST_STATE_PLAYING);
19   }
20 }
21
22 gint
23 main (gint argc, gchar * argv[])
24 {
25   GstElement *pipeline;
26   GstElement *filesrc;
27   GstElement *demux;
28   GstElement *thread;
29   GstElement *queue;
30   GstElement *mpeg2dec;
31   GstElement *colorspace;
32   GstElement *videosink;
33   gboolean res;
34
35   gst_init (&argc, &argv);
36
37   if (argc < 2) {
38     g_print ("usage: %s <mpeg1 system stream>\n", argv[0]);
39     return (-1);
40   }
41
42   pipeline = gst_pipeline_new ("main_pipeline");
43   filesrc = gst_element_factory_make ("filesrc", "filesrc");
44   g_return_val_if_fail (filesrc, -1);
45   g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);
46   demux = gst_element_factory_make ("mpegdemux", "demux");
47   g_return_val_if_fail (demux, -1);
48   g_signal_connect (G_OBJECT (demux), "new_pad", G_CALLBACK (new_pad_func),
49       pipeline);
50
51   thread = gst_thread_new ("thread");
52   queue = gst_element_factory_make ("queue", "queue");
53   mpeg2dec = gst_element_factory_make ("mpeg2dec", "mpeg2dec");
54   g_return_val_if_fail (mpeg2dec, -1);
55   colorspace = gst_element_factory_make ("ffmpegcolorspace", "colorspace");
56   g_return_val_if_fail (colorspace, -1);
57   videosink = gst_element_factory_make (DEFAULT_VIDEOSINK, "videosink");
58   g_return_val_if_fail (videosink, -1);
59
60   gst_bin_add (GST_BIN (pipeline), filesrc);
61   gst_bin_add (GST_BIN (pipeline), demux);
62
63   gst_bin_add (GST_BIN (thread), queue);
64   gst_bin_add (GST_BIN (thread), mpeg2dec);
65   gst_bin_add (GST_BIN (thread), colorspace);
66   gst_bin_add (GST_BIN (thread), videosink);
67   gst_bin_add (GST_BIN (pipeline), thread);
68
69   gst_element_link_pads (filesrc, "src", demux, "sink");
70   gst_element_link_pads (queue, "src", mpeg2dec, "sink");
71   gst_element_link_pads (mpeg2dec, "src", colorspace, "sink");
72   /* force RGB data passing between colorspace and videosink */
73   res = gst_element_link_pads_filtered (colorspace, "src", videosink, "sink",
74       gst_caps_new_simple ("video/x-raw-rgb", NULL));
75   if (!res) {
76     g_print ("could not connect colorspace and videosink\n");
77     return -1;
78   }
79
80   gst_element_set_state (pipeline, GST_STATE_PLAYING);
81
82   while (gst_bin_iterate (GST_BIN (pipeline)));
83
84   gst_element_set_state (pipeline, GST_STATE_NULL);
85
86   return 0;
87 }