From 57ce0321c8971f964008920003a3e8b19649df85 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sun, 3 Feb 2002 16:30:31 +0000 Subject: Added a tarkin encoder/decoder plugin. Original commit message from CVS: Added a tarkin encoder/decoder plugin. I moved the tarking CVS code in here temporarily until they have a library (hence this plugin is in ext) test with: ./gst-launch filesrc location=/opt/data/shihad.mpg ! mpegdemux video_00! { queue ! mpeg2dec ! colorspace ! tarkinenc bitrate=3000 ! disksink location=out.ogg } ./gst-launch filesrc location=out.ogg ! tarkindec ! colorspace ! xvideosink --- ext/tarkin/gsttarkin.c | 156 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 ext/tarkin/gsttarkin.c (limited to 'ext/tarkin/gsttarkin.c') diff --git a/ext/tarkin/gsttarkin.c b/ext/tarkin/gsttarkin.c new file mode 100644 index 00000000..7bfb78f3 --- /dev/null +++ b/ext/tarkin/gsttarkin.c @@ -0,0 +1,156 @@ +/* Gnome-Streamer + * Copyright (C) <1999> Erik Walthinsen + * + * 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. + */ + + +#include "gsttarkinenc.h" +#include "gsttarkindec.h" + +extern GstElementDetails tarkinenc_details; +extern GstElementDetails tarkindec_details; + +static GstCaps* tarkin_typefind (GstBuffer *buf, gpointer private); + +GstPadTemplate *enc_src_template, *enc_sink_template; +GstPadTemplate *dec_src_template, *dec_sink_template; + +static GstCaps* +tarkin_caps_factory (void) +{ + return + gst_caps_new ( + "tarkin_tarkin", + "video/x-ogg", + NULL); +} + +static GstCaps* +raw_caps_factory (void) +{ + return + GST_CAPS_NEW ( + "tarkin_raw", + "video/raw", + "format", GST_PROPS_FOURCC (GST_STR_FOURCC ("RGB ")), + "bpp", GST_PROPS_INT (24), + "depth", GST_PROPS_INT (24), + "endianness", GST_PROPS_INT (G_BYTE_ORDER), + "red_mask", GST_PROPS_INT (0xff0000), + "green_mask", GST_PROPS_INT (0xff00), + "blue_mask", GST_PROPS_INT (0xff), + "width", GST_PROPS_INT_RANGE (0, G_MAXINT), + "height", GST_PROPS_INT_RANGE (0, G_MAXINT) + ); +} + +static GstTypeDefinition tarkindefinition = +{ + "tarkin_video/x-ogg", + "video/x-ogg", + ".ogg", + tarkin_typefind, +}; + +static GstCaps* +tarkin_typefind (GstBuffer *buf, gpointer private) +{ + gulong head = GULONG_FROM_BE (*((gulong *)GST_BUFFER_DATA (buf))); + + /* FIXME */ + return NULL; + + if (head != 0x4F676753) + return NULL; + + return gst_caps_new ("tarkin_typefind", "video/x-ogg", NULL); +} + + +static gboolean +plugin_init (GModule *module, GstPlugin *plugin) +{ + GstElementFactory *enc, *dec; + GstTypeFactory *type; + GstCaps *raw_caps, *tarkin_caps; + + gst_plugin_set_longname (plugin, "The OGG Vorbis Codec"); + + /* create an elementfactory for the tarkinenc element */ + enc = gst_elementfactory_new ("tarkinenc", GST_TYPE_TARKINENC, + &tarkinenc_details); + g_return_val_if_fail (enc != NULL, FALSE); + + raw_caps = raw_caps_factory (); + tarkin_caps = tarkin_caps_factory (); + + /* register sink pads */ + enc_sink_template = gst_padtemplate_new ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + raw_caps, + NULL); + gst_elementfactory_add_padtemplate (enc, enc_sink_template); + + /* register src pads */ + enc_src_template = gst_padtemplate_new ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + tarkin_caps, + NULL); + gst_elementfactory_add_padtemplate (enc, enc_src_template); + + gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (enc)); + + /* create an elementfactory for the tarkindec element */ + dec = gst_elementfactory_new ("tarkindec", GST_TYPE_TARKINDEC, + &tarkindec_details); + g_return_val_if_fail (dec != NULL, FALSE); + + raw_caps = raw_caps_factory (); + tarkin_caps = tarkin_caps_factory (); + + /* register sink pads */ + dec_sink_template = gst_padtemplate_new ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + tarkin_caps, + NULL); + gst_elementfactory_add_padtemplate (dec, dec_sink_template); + + /* register src pads */ + dec_src_template = gst_padtemplate_new ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + raw_caps, + NULL); + gst_elementfactory_add_padtemplate (dec, dec_src_template); + + gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (dec)); + + type = gst_typefactory_new (&tarkindefinition); + gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (type)); + + return TRUE; +} + +GstPluginDesc plugin_desc = { + GST_VERSION_MAJOR, + GST_VERSION_MINOR, + "tarkin", + plugin_init +}; -- cgit v1.2.1