Added the diceTV plugin
[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   { NULL, 0 },
33 };
34
35
36 GstPadTemplate* 
37 gst_effectv_src_factory (void)
38 {
39   static GstPadTemplate *templ = NULL;
40   if (!templ) {
41     templ = GST_PAD_TEMPLATE_NEW ( 
42                 "src",
43                 GST_PAD_SRC,
44                 GST_PAD_ALWAYS,
45                 GST_CAPS_NEW (
46                   "effectv_src",
47                   "video/raw",
48                     "format",         GST_PROPS_FOURCC (GST_STR_FOURCC ("RGB ")),
49                     "bpp",            GST_PROPS_INT (32),
50                     "depth",          GST_PROPS_INT (32),
51                     "endianness",     GST_PROPS_INT (G_BYTE_ORDER),
52                     "red_mask",       GST_PROPS_INT (0xff0000),
53                     "green_mask",     GST_PROPS_INT (0xff00),
54                     "blue_mask",      GST_PROPS_INT (0xff),
55                     "width",          GST_PROPS_INT_RANGE (16, 4096),
56                     "height",         GST_PROPS_INT_RANGE (16, 4096)
57                 )
58              );
59   }
60   return templ;
61 }
62
63 GstPadTemplate* 
64 gst_effectv_sink_factory (void)
65 {
66   static GstPadTemplate *templ = NULL;
67   if (!templ) {
68     templ = GST_PAD_TEMPLATE_NEW ( 
69                 "sink",
70                 GST_PAD_SINK,
71                 GST_PAD_ALWAYS,
72                 GST_CAPS_NEW (
73                   "effectv_sink",
74                   "video/raw",
75                     "format",         GST_PROPS_FOURCC (GST_STR_FOURCC ("RGB ")),
76                     "bpp",            GST_PROPS_INT (32),
77                     "depth",          GST_PROPS_INT (32),
78                     "endianness",     GST_PROPS_INT (G_BYTE_ORDER),
79                     "red_mask",       GST_PROPS_INT (0xff0000),
80                     "green_mask",     GST_PROPS_INT (0xff00),
81                     "blue_mask",      GST_PROPS_INT (0xff),
82                     "width",          GST_PROPS_INT_RANGE (16, 4096),
83                     "height",         GST_PROPS_INT_RANGE (16, 4096)
84                 )
85              );
86   }
87   return templ;
88 }
89
90 static gboolean
91 plugin_init (GModule * module, GstPlugin * plugin)
92 {
93   GstElementFactory *factory;
94   gint i = 0;
95
96   while (_elements[i].name) {
97     factory = gst_element_factory_new (_elements[i].name,
98                                       (_elements[i].type) (),
99                                        _elements[i].details);
100
101     if (!factory) {
102       g_warning ("gst_effecttv_new failed for `%s'",
103                  _elements[i].name);
104       continue;
105     }
106     gst_element_factory_add_pad_template (factory, gst_effectv_src_factory ());
107     gst_element_factory_add_pad_template (factory, gst_effectv_sink_factory ());
108
109     gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (factory));
110     if (_elements[i].factoryinit) {
111       _elements[i].factoryinit (factory);
112     }
113     i++;
114   }
115
116   return TRUE;
117 }
118
119 GstPluginDesc plugin_desc = {
120   GST_VERSION_MAJOR,
121   GST_VERSION_MINOR,
122   "effectv",
123   plugin_init
124 };