Merge branch 'plugin-move-rtp-opus'
[platform/upstream/gst-plugins-good.git] / gst / law / alaw.c
index 3d56f44..64f7e06 100644 (file)
+/* GStreamer PCM/A-Law conversions
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/audio/audio.h>
+
 #include "alaw-encode.h"
 #include "alaw-decode.h"
 
-/* elementfactory information */
-static GstElementDetails alawenc_details = {
-  "PCM to A Law conversion",
-  "Filter/Audio/Conversion",
-  "LGPL",
-  "Convert 16bit PCM to 8bit A law",
-  VERSION,
-  "Zaheer Merali <zaheer@bellworldwide.net>",
-  "(C) 2001"
-};
+GstStaticPadTemplate alaw_dec_src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "format = (string) " GST_AUDIO_NE (S16) ", "
+        "layout = (string) interleaved, "
+        "rate = (int) [ 8000, 192000 ], " "channels = (int) [ 1, 2 ]")
+    );
 
-/* elementfactory information */
-static GstElementDetails alawdec_details = {
-  "A Law to PCM conversion",
-  "Filter/Audio/Conversion",
-  "LGPL",
-  "Convert 8bit A law to 16bit PCM",
-  VERSION,
-  "Zaheer Merali <zaheer@bellworldwide.net>",
-  "(C) 2001"
-};
-
-static GstCaps*
-alaw_factory (void)
-{
-  return
-   gst_caps_new (
-       "test_src",
-       "audio/raw",
-       gst_props_new (
-         "format",  GST_PROPS_STRING ("int"),
-           "law",   GST_PROPS_INT (2),
-           "width", GST_PROPS_INT(8),
-           "depth", GST_PROPS_INT(8),
-           "signed", GST_PROPS_BOOLEAN(FALSE),
-           NULL));
-}
+GstStaticPadTemplate alaw_dec_sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-alaw, "
+        "rate = [ 8000 , 192000 ], " "channels = [ 1 , 2 ]")
+    );
 
-static GstCaps*
-linear_factory (void)
-{
-  return
-   gst_caps_new (
-       "test_sink",
-       "audio/raw",
-       gst_props_new (
-         "format",     GST_PROPS_STRING ("int"),
-           "law",      GST_PROPS_INT(0),
-           "width",    GST_PROPS_INT(16),
-           "depth",    GST_PROPS_INT(16),
-           "signed",   GST_PROPS_BOOLEAN(TRUE),
-           NULL));
-}
+GstStaticPadTemplate alaw_enc_sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "format = (string) " GST_AUDIO_NE (S16) ", "
+        "layout = (string) interleaved, "
+        "rate = (int) [ 8000, 192000 ], " "channels = (int) [ 1, 2 ]")
+    );
 
-GstPadTemplate *alawenc_src_template, *alawenc_sink_template; 
-GstPadTemplate *alawdec_src_template, *alawdec_sink_template;
+GstStaticPadTemplate alaw_enc_src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-alaw, "
+        "rate = [ 8000 , 192000 ], " "channels = [ 1 , 2 ]")
+    );
 
 static gboolean
-plugin_init (GModule *module, GstPlugin *plugin)
+plugin_init (GstPlugin * plugin)
 {
-  GstElementFactory *alawenc_factory, *alawdec_factory;
-  GstCaps* alaw_caps, *linear_caps;
-
-  alawenc_factory = gst_element_factory_new("alawenc",GST_TYPE_ALAWENC,
-                                            &alawenc_details);
-  g_return_val_if_fail(alawenc_factory != NULL, FALSE);
-  alawdec_factory = gst_element_factory_new("alawdec",GST_TYPE_ALAWDEC,
-                                           &alawdec_details);
-  g_return_val_if_fail(alawdec_factory != NULL, FALSE);
-  gst_element_factory_set_rank (alawdec_factory, GST_ELEMENT_RANK_PRIMARY);
-
-  alaw_caps = alaw_factory ();
-  linear_caps = linear_factory ();
-  alawenc_src_template = gst_pad_template_new ("src",GST_PAD_SRC,GST_PAD_ALWAYS,alaw_caps, NULL);
-  alawenc_sink_template = gst_pad_template_new ("sink",GST_PAD_SINK,GST_PAD_ALWAYS,linear_caps, NULL);
-  gst_element_factory_add_pad_template (alawenc_factory, alawenc_src_template);
-  gst_element_factory_add_pad_template (alawenc_factory, alawenc_sink_template);
-
-  alawdec_src_template = gst_pad_template_new ("src",GST_PAD_SRC,GST_PAD_ALWAYS,linear_caps, NULL);
-  alawdec_sink_template = gst_pad_template_new ("sink",GST_PAD_SINK,GST_PAD_ALWAYS,alaw_caps, NULL);
-  
-  gst_element_factory_add_pad_template (alawdec_factory, alawdec_src_template);
-  gst_element_factory_add_pad_template (alawdec_factory, alawdec_sink_template);
-  gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (alawenc_factory));
-  gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (alawdec_factory));
+  if (!gst_element_register (plugin, "alawenc",
+          GST_RANK_PRIMARY, GST_TYPE_ALAW_ENC) ||
+      !gst_element_register (plugin, "alawdec",
+          GST_RANK_PRIMARY, GST_TYPE_ALAW_DEC))
+    return FALSE;
 
   return TRUE;
 }
 
-GstPluginDesc plugin_desc = {
-  GST_VERSION_MAJOR,
-  GST_VERSION_MINOR,
-  "alaw",
-  plugin_init
-};
-
+/* FIXME 0.11: merge alaw and mulaw into one plugin? */
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    alaw,
+    "ALaw audio conversion routines",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)