/* GStreamer * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu> * * 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 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., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /*#define GST_DEBUG_ENABLED */ #include <string.h> #include "gstaviaudiodecoder.h" /* elementfactory information */ static GstElementDetails gst_avi_audio_decoder_details = { ".avi parser", "Parser/Video", "Parse a .avi file into audio and video", VERSION, "Erik Walthinsen <omega@cse.ogi.edu>\n" "Wim Taymans <wim.taymans@tvd.be>", "(C) 1999", }; /* AviAudioDecoder signals and args */ enum { /* FILL ME */ LAST_SIGNAL }; enum { ARG_0, /* FILL ME */ }; GST_PAD_TEMPLATE_FACTORY (sink_templ, "sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_CAPS_NEW ( "avidecoder_sink", "video/avi", "format", GST_PROPS_STRING ("strf_auds") ) ) GST_PAD_TEMPLATE_FACTORY (src_audio_templ, "src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_CAPS_NEW ( "src_audio", "audio/raw", "format", GST_PROPS_STRING ("int"), "law", GST_PROPS_INT (0), "endianness", GST_PROPS_INT (G_BYTE_ORDER), "signed", GST_PROPS_BOOLEAN (TRUE), "width", GST_PROPS_INT (16), "depth", GST_PROPS_INT (16), "rate", GST_PROPS_INT_RANGE (11025, 44100), "channels", GST_PROPS_INT_RANGE (1, 2) ) ) static void gst_avi_audio_decoder_class_init (GstAviAudioDecoderClass *klass); static void gst_avi_audio_decoder_init (GstAviAudioDecoder *avi_audio_decoder); static void gst_avi_audio_decoder_chain (GstPad *pad, GstBuffer *buf); static void gst_avi_audio_decoder_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static GstElementClass *parent_class = NULL; /*static guint gst_avi_audio_decoder_signals[LAST_SIGNAL] = { 0 }; */ GType gst_avi_audio_decoder_get_type(void) { static GType avi_audio_decoder_type = 0; if (!avi_audio_decoder_type) { static const GTypeInfo avi_audio_decoder_info = { sizeof(GstAviAudioDecoderClass), NULL, NULL, (GClassInitFunc)gst_avi_audio_decoder_class_init, NULL, NULL, sizeof(GstAviAudioDecoder), 0, (GInstanceInitFunc)gst_avi_audio_decoder_init, }; avi_audio_decoder_type = g_type_register_static(GST_TYPE_ELEMENT, "GstAviAudioDecoder", &avi_audio_decoder_info, 0); } return avi_audio_decoder_type; } static void gst_avi_audio_decoder_class_init (GstAviAudioDecoderClass *klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; gobject_class = (GObjectClass*)klass; gstelement_class = (GstElementClass*)klass; parent_class = g_type_class_ref (GST_TYPE_BIN); gobject_class->get_property = gst_avi_audio_decoder_get_property; } static void gst_avi_audio_decoder_init (GstAviAudioDecoder *avi_audio_decoder) { } static void gst_avi_audio_decoder_chain (GstPad *pad, GstBuffer *buf) { GstAviAudioDecoder *avi_audio_decoder; guchar *data; gulong size; g_return_if_fail (pad != NULL); g_return_if_fail (GST_IS_PAD(pad)); g_return_if_fail (buf != NULL); g_return_if_fail (GST_BUFFER_DATA(buf) != NULL); avi_audio_decoder = GST_AVI_AUDIO_DECODER (gst_pad_get_parent (pad)); GST_DEBUG (0,"gst_avi_audio_decoder_chain: got buffer in %u", GST_BUFFER_OFFSET (buf)); g_print ("gst_avi_audio_decoder_chain: got buffer in %u\n", GST_BUFFER_OFFSET (buf)); data = (guchar *)GST_BUFFER_DATA (buf); size = GST_BUFFER_SIZE (buf); gst_buffer_unref (buf); } static void gst_avi_audio_decoder_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GstAviAudioDecoder *src; g_return_if_fail (GST_IS_AVI_AUDIO_DECODER (object)); src = GST_AVI_AUDIO_DECODER (object); switch(prop_id) { default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static gboolean plugin_init (GModule *module, GstPlugin *plugin) { GstElementFactory *factory; /* create an elementfactory for the avi_audio_decoder element */ factory = gst_element_factory_new ("aviaudiodecoder",GST_TYPE_AVI_AUDIO_DECODER, &gst_avi_audio_decoder_details); g_return_val_if_fail (factory != NULL, FALSE); gst_element_factory_add_pad_template (factory, GST_PAD_TEMPLATE_GET (sink_templ)); gst_element_factory_add_pad_template (factory, GST_PAD_TEMPLATE_GET (src_audio_templ)); gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (factory)); return TRUE; } GstPluginDesc plugin_desc = { GST_VERSION_MAJOR, GST_VERSION_MINOR, "aviaudiodecoder", plugin_init };