Initial revision
[platform/upstream/gst-plugins-good.git] / gst / law / alaw.c
1 #include "alaw-encode.h"
2 #include "alaw-decode.h"
3
4 static GstElementDetails alawenc_details = {
5   "PCM to A Law conversion",
6   "Filter/Effect",
7   "Convert 16bit PCM to 8bit A law",
8   VERSION,
9   "Zaheer Merali <zaheer@bellworldwide.net>",
10   "(C) 2001"
11 };
12
13 static GstElementDetails alawdec_details = {
14   "A Law to PCM conversion",
15   "Filter/Effect",
16   "Convert 8bit A law to 16bit PCM",
17   VERSION,
18   "Zaheer Merali <zaheer@bellworldwide.net>",
19   "(C) 2001"
20 };
21
22 static GstCaps*
23 alaw_factory (void)
24 {
25   return
26    gst_caps_new (
27         "test_src",
28         "audio/raw",
29         gst_props_new (
30           "format",  GST_PROPS_STRING ("int"),
31             "law",   GST_PROPS_INT (2),
32             "width", GST_PROPS_INT(8),
33             "depth", GST_PROPS_INT(8),
34             "signed", GST_PROPS_BOOLEAN(FALSE),
35             NULL));
36 }
37
38 static GstCaps*
39 linear_factory (void)
40 {
41   return
42    gst_caps_new (
43         "test_sink",
44         "audio/raw",
45         gst_props_new (
46           "format",     GST_PROPS_STRING ("int"),
47             "law",      GST_PROPS_INT(0),
48             "width",    GST_PROPS_INT(16),
49             "depth",    GST_PROPS_INT(16),
50             "signed",   GST_PROPS_BOOLEAN(TRUE),
51             NULL));
52 }
53
54 GstPadTemplate *alawenc_src_template, *alawenc_sink_template; 
55 GstPadTemplate *alawdec_src_template, *alawdec_sink_template;
56
57 static gboolean
58 plugin_init (GModule *module, GstPlugin *plugin)
59 {
60   GstElementFactory *alawenc_factory, *alawdec_factory;
61   GstCaps* alaw_caps, *linear_caps;
62
63   alawenc_factory = gst_elementfactory_new("alawencode",GST_TYPE_ALAWENC,
64                                             &alawenc_details);
65   g_return_val_if_fail(alawenc_factory != NULL, FALSE);
66   alawdec_factory = gst_elementfactory_new("alawdecode",GST_TYPE_ALAWDEC,
67                                             &alawdec_details);
68   g_return_val_if_fail(alawdec_factory != NULL, FALSE);
69
70   alaw_caps = alaw_factory ();
71   linear_caps = linear_factory ();
72  
73   alawenc_src_template = gst_padtemplate_new ("src",GST_PAD_SRC,GST_PAD_ALWAYS,alaw_caps, NULL);
74   alawenc_sink_template = gst_padtemplate_new ("sink",GST_PAD_SINK,GST_PAD_ALWAYS,linear_caps, NULL);
75   gst_elementfactory_add_padtemplate (alawenc_factory, alawenc_src_template);
76   gst_elementfactory_add_padtemplate (alawenc_factory, alawenc_sink_template);
77
78   alawdec_src_template = gst_padtemplate_new ("src",GST_PAD_SRC,GST_PAD_ALWAYS,linear_caps, NULL);
79   alawdec_sink_template = gst_padtemplate_new ("sink",GST_PAD_SINK,GST_PAD_ALWAYS,alaw_caps, NULL);
80   
81   gst_elementfactory_add_padtemplate (alawdec_factory, alawdec_src_template);
82   gst_elementfactory_add_padtemplate (alawdec_factory, alawdec_sink_template);
83   gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (alawenc_factory));
84   gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (alawdec_factory));
85
86   return TRUE;
87 }
88
89 GstPluginDesc plugin_desc = {
90   GST_VERSION_MAJOR,
91   GST_VERSION_MINOR,
92   "alaw",
93   plugin_init
94 };
95