Vertigo is another cool one
[platform/upstream/gst-plugins-good.git] / gst / effectv / gsteffectv.c
1 /* GStreamer
2  * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
3  *
4  * EffecTV:
5  * Copyright (C) 2001 FUKUCHI Kentarou
6  *
7  * EffecTV is free software. We release this product under the terms of the
8  * GNU General Public License version 2. The license is included in the file
9  * COPYING.
10  *
11  * This program is distributed in the hope that it will be useful, but WITHOUT ANY
12  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13  * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
14  */
15
16 #include <string.h>
17 #include <gst/gst.h>
18 #include "gsteffectv.h"
19
20
21 struct _elements_entry {
22   gchar *name;
23   GType (*type) (void);
24   GstElementDetails *details;
25   gboolean (*factoryinit) (GstElementFactory *factory);
26 };
27
28 static struct _elements_entry _elements[] = {
29   { "edgeTV",           gst_edgetv_get_type,            &gst_edgetv_details,            NULL },
30   { "agingTV",          gst_agingtv_get_type,           &gst_agingtv_details,           NULL },
31   { "diceTV",           gst_dicetv_get_type,            &gst_dicetv_details,            NULL },
32   { "warpTV",           gst_warptv_get_type,            &gst_warptv_details,            NULL },
33   { "shagadelicTV",     gst_shagadelictv_get_type,      &gst_shagadelictv_details,      NULL },
34   { "vertigoTV",        gst_vertigotv_get_type,         &gst_vertigotv_details,         NULL },
35   { NULL, 0 },
36 };
37
38
39 GstPadTemplate* 
40 gst_effectv_src_factory (void)
41 {
42   static GstPadTemplate *templ = NULL;
43   if (!templ) {
44     templ = GST_PAD_TEMPLATE_NEW ( 
45                 "src",
46                 GST_PAD_SRC,
47                 GST_PAD_ALWAYS,
48                 GST_CAPS_NEW (
49                   "effectv_src",
50                   "video/raw",
51                     "format",         GST_PROPS_FOURCC (GST_STR_FOURCC ("RGB ")),
52                     "bpp",            GST_PROPS_INT (32),
53                     "depth",          GST_PROPS_INT (32),
54                     "endianness",     GST_PROPS_INT (G_BYTE_ORDER),
55                     "red_mask",       GST_PROPS_INT (0xff0000),
56                     "green_mask",     GST_PROPS_INT (0xff00),
57                     "blue_mask",      GST_PROPS_INT (0xff),
58                     "width",          GST_PROPS_INT_RANGE (16, 4096),
59                     "height",         GST_PROPS_INT_RANGE (16, 4096)
60                 )
61              );
62   }
63   return templ;
64 }
65
66 GstPadTemplate* 
67 gst_effectv_sink_factory (void)
68 {
69   static GstPadTemplate *templ = NULL;
70   if (!templ) {
71     templ = GST_PAD_TEMPLATE_NEW ( 
72                 "sink",
73                 GST_PAD_SINK,
74                 GST_PAD_ALWAYS,
75                 GST_CAPS_NEW (
76                   "effectv_sink",
77                   "video/raw",
78                     "format",         GST_PROPS_FOURCC (GST_STR_FOURCC ("RGB ")),
79                     "bpp",            GST_PROPS_INT (32),
80                     "depth",          GST_PROPS_INT (32),
81                     "endianness",     GST_PROPS_INT (G_BYTE_ORDER),
82                     "red_mask",       GST_PROPS_INT (0xff0000),
83                     "green_mask",     GST_PROPS_INT (0xff00),
84                     "blue_mask",      GST_PROPS_INT (0xff),
85                     "width",          GST_PROPS_INT_RANGE (16, 4096),
86                     "height",         GST_PROPS_INT_RANGE (16, 4096)
87                 )
88              );
89   }
90   return templ;
91 }
92
93 static gboolean
94 plugin_init (GModule * module, GstPlugin * plugin)
95 {
96   GstElementFactory *factory;
97   gint i = 0;
98
99   while (_elements[i].name) {
100     factory = gst_element_factory_new (_elements[i].name,
101                                       (_elements[i].type) (),
102                                        _elements[i].details);
103
104     if (!factory) {
105       g_warning ("gst_effecttv_new failed for `%s'",
106                  _elements[i].name);
107       continue;
108     }
109     gst_element_factory_add_pad_template (factory, gst_effectv_src_factory ());
110     gst_element_factory_add_pad_template (factory, gst_effectv_sink_factory ());
111
112     gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (factory));
113     if (_elements[i].factoryinit) {
114       _elements[i].factoryinit (factory);
115     }
116     i++;
117   }
118
119   return TRUE;
120 }
121
122 GstPluginDesc plugin_desc = {
123   GST_VERSION_MAJOR,
124   GST_VERSION_MINOR,
125   "effectv",
126   plugin_init
127 };