From f57a2a9d543639018123aa801f20edb4b6acab90 Mon Sep 17 00:00:00 2001 From: Iain Holmes Date: Sun, 2 Nov 2003 00:05:54 +0000 Subject: [PATCH] JPEG JPEG JPEG WHEEEE Original commit message from CVS: JPEG JPEG JPEG WHEEEE Fixyed. (Gah, I'm getting sleeeeeeeeepeeeeeeeee) --- ext/jpeg/gstjpeg.c | 97 ++++++++------------------------------------------- ext/jpeg/gstjpegdec.c | 57 ++++++++++++++++++++++++++---- ext/jpeg/gstjpegenc.c | 55 ++++++++++++++++++++++++++--- 3 files changed, 117 insertions(+), 92 deletions(-) diff --git a/ext/jpeg/gstjpeg.c b/ext/jpeg/gstjpeg.c index 48cfaaf..1e7f897 100644 --- a/ext/jpeg/gstjpeg.c +++ b/ext/jpeg/gstjpeg.c @@ -16,98 +16,31 @@ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ - +#include #include "gstjpegdec.h" #include "gstjpegenc.h" -#include - -/* elementfactory information */ -extern GstElementDetails gst_jpegdec_details; -extern GstElementDetails gst_jpegenc_details; - -GstPadTemplate *jpegdec_src_template, *jpegdec_sink_template; -GstPadTemplate *jpegenc_src_template, *jpegenc_sink_template; - -static GstCaps* -jpeg_caps_factory (void) -{ - return - gst_caps_new ( - "jpeg_jpeg", - "video/x-jpeg", - gst_props_new ( - "width", GST_PROPS_INT_RANGE (16, 4096), - "height", GST_PROPS_INT_RANGE (16, 4096), - "framerate", GST_PROPS_FLOAT_RANGE (0, G_MAXFLOAT), - NULL)); -} - -static GstCaps* -raw_caps_factory (void) -{ - return - gst_caps_new ( - "jpeg_raw", - "video/x-raw-yuv", - GST_VIDEO_YUV_PAD_TEMPLATE_PROPS ( - GST_PROPS_FOURCC (GST_MAKE_FOURCC ('I','4','2','0')))); -} static gboolean -plugin_init (GModule *module, GstPlugin *plugin) +plugin_init (GstPlugin *plugin) { - GstElementFactory *dec, *enc; - GstCaps *raw_caps, *jpeg_caps; - - /* create an elementfactory for the jpegdec element */ - enc = gst_element_factory_new("jpegenc",GST_TYPE_JPEGENC, - &gst_jpegenc_details); - g_return_val_if_fail(enc != NULL, FALSE); - - raw_caps = raw_caps_factory (); - jpeg_caps = jpeg_caps_factory (); - - /* register sink pads */ - jpegenc_sink_template = gst_pad_template_new ("sink", GST_PAD_SINK, - GST_PAD_ALWAYS, - raw_caps, NULL); - gst_element_factory_add_pad_template (enc, jpegenc_sink_template); - - /* register src pads */ - jpegenc_src_template = gst_pad_template_new ("src", GST_PAD_SRC, - GST_PAD_ALWAYS, - jpeg_caps, NULL); - gst_element_factory_add_pad_template (enc, jpegenc_src_template); - - gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (enc)); - - /* create an elementfactory for the jpegdec element */ - dec = gst_element_factory_new("jpegdec",GST_TYPE_JPEGDEC, - &gst_jpegdec_details); - g_return_val_if_fail(dec != NULL, FALSE); - gst_element_factory_set_rank (dec, GST_ELEMENT_RANK_PRIMARY); - - /* register sink pads */ - jpegdec_sink_template = gst_pad_template_new ("sink", GST_PAD_SINK, - GST_PAD_ALWAYS, - jpeg_caps, NULL); - gst_element_factory_add_pad_template (dec, jpegdec_sink_template); - - /* register src pads */ - jpegdec_src_template = gst_pad_template_new ("src", GST_PAD_SRC, - GST_PAD_ALWAYS, - raw_caps, NULL); - gst_element_factory_add_pad_template (dec, jpegdec_src_template); + if (!gst_element_register (plugin, "jpegenc", GST_RANK_NONE, GST_TYPE_JPEGENC)) + return FALSE; + + if (!gst_element_register (plugin, "jpegdec", GST_RANK_PRIMARY, GST_TYPE_JPEGDEC)) + return FALSE; - gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (dec)); - return TRUE; } -GstPluginDesc plugin_desc = { +GST_PLUGIN_DEFINE ( GST_VERSION_MAJOR, GST_VERSION_MINOR, "jpeg", - plugin_init -}; + "JPeg plugin library", + plugin_init, + VERSION, + "LGPL", + GST_COPYRIGHT, + GST_PACKAGE, + GST_ORIGIN) diff --git a/ext/jpeg/gstjpegdec.c b/ext/jpeg/gstjpegdec.c index 57cc666..5f64910 100644 --- a/ext/jpeg/gstjpegdec.c +++ b/ext/jpeg/gstjpegdec.c @@ -25,18 +25,16 @@ /*#define DEBUG_ENABLED*/ #include "gstjpegdec.h" +#include -extern GstPadTemplate *jpegdec_src_template, *jpegdec_sink_template; +static GstPadTemplate *jpegdec_src_template, *jpegdec_sink_template; /* elementfactory information */ GstElementDetails gst_jpegdec_details = { "jpeg image decoder", "Codec/Image", - "LGPL", ".jpeg", - VERSION, "Wim Taymans ", - "(C) 2000", }; /* JpegDec signals and args */ @@ -50,6 +48,7 @@ enum { /* FILL ME */ }; +static void gst_jpegdec_base_init (gpointer g_class); static void gst_jpegdec_class_init (GstJpegDec *klass); static void gst_jpegdec_init (GstJpegDec *jpegdec); @@ -63,10 +62,11 @@ static GstElementClass *parent_class = NULL; GType gst_jpegdec_get_type(void) { static GType jpegdec_type = 0; - + if (!jpegdec_type) { static const GTypeInfo jpegdec_info = { - sizeof(GstJpegDec), NULL, + sizeof(GstJpegDec), + gst_jpegdec_base_init, NULL, (GClassInitFunc)gst_jpegdec_class_init, NULL, @@ -80,6 +80,51 @@ gst_jpegdec_get_type(void) { return jpegdec_type; } +static GstCaps* +jpeg_caps_factory (void) +{ + return + gst_caps_new ( + "jpeg_jpeg", + "video/x-jpeg", + gst_props_new ( + "width", GST_PROPS_INT_RANGE (16, 4096), + "height", GST_PROPS_INT_RANGE (16, 4096), + "framerate", GST_PROPS_FLOAT_RANGE (0, G_MAXFLOAT), + NULL)); +} + +static GstCaps* +raw_caps_factory (void) +{ + return + gst_caps_new ( + "jpeg_raw", + "video/x-raw-yuv", + GST_VIDEO_YUV_PAD_TEMPLATE_PROPS ( + GST_PROPS_FOURCC (GST_MAKE_FOURCC ('I','4','2','0')))); +} + +static void +gst_jpegdec_base_init (gpointer g_class) +{ + GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GstCaps *raw_caps, *jpeg_caps; + + raw_caps = raw_caps_factory (); + jpeg_caps = jpeg_caps_factory (); + + jpegdec_sink_template = gst_pad_template_new ("sink", GST_PAD_SINK, + GST_PAD_ALWAYS, + jpeg_caps, NULL); + jpegdec_src_template = gst_pad_template_new ("src", GST_PAD_SRC, + GST_PAD_ALWAYS, + raw_caps, NULL); + gst_element_class_add_pad_template (element_class, jpegdec_sink_template); + gst_element_class_add_pad_template (element_class, jpegdec_src_template); + gst_element_class_set_details (element_class, &gst_jpegdec_details); +} + static void gst_jpegdec_class_init (GstJpegDec *klass) { diff --git a/ext/jpeg/gstjpegenc.c b/ext/jpeg/gstjpegenc.c index df94da9..e35885a 100644 --- a/ext/jpeg/gstjpegenc.c +++ b/ext/jpeg/gstjpegenc.c @@ -24,16 +24,14 @@ #include #include "gstjpegenc.h" +#include /* elementfactory information */ GstElementDetails gst_jpegenc_details = { "jpeg image encoder", "Codec/Image", - "LGPL", ".jpeg", - VERSION, "Wim Taymans ", - "(C) 2000", }; /* JpegEnc signals and args */ @@ -48,6 +46,7 @@ enum { /* FILL ME */ }; +static void gst_jpegenc_base_init (gpointer g_class); static void gst_jpegenc_class_init (GstJpegEnc *klass); static void gst_jpegenc_init (GstJpegEnc *jpegenc); @@ -60,6 +59,7 @@ static void gst_jpegenc_resync (GstJpegEnc *jpegenc); static GstElementClass *parent_class = NULL; static guint gst_jpegenc_signals[LAST_SIGNAL] = { 0 }; +static GstPadTemplate *jpegenc_src_template, *jpegenc_sink_template; GType gst_jpegenc_get_type (void) @@ -68,7 +68,8 @@ gst_jpegenc_get_type (void) if (!jpegenc_type) { static const GTypeInfo jpegenc_info = { - sizeof(GstJpegEnc), NULL, + sizeof(GstJpegEnc), + gst_jpegenc_base_init, NULL, (GClassInitFunc)gst_jpegenc_class_init, NULL, @@ -82,6 +83,52 @@ gst_jpegenc_get_type (void) return jpegenc_type; } +static GstCaps* +jpeg_caps_factory (void) +{ + return + gst_caps_new ( + "jpeg_jpeg", + "video/x-jpeg", + gst_props_new ( + "width", GST_PROPS_INT_RANGE (16, 4096), + "height", GST_PROPS_INT_RANGE (16, 4096), + "framerate", GST_PROPS_FLOAT_RANGE (0, G_MAXFLOAT), + NULL)); +} + +static GstCaps* +raw_caps_factory (void) +{ + return + gst_caps_new ( + "jpeg_raw", + "video/x-raw-yuv", + GST_VIDEO_YUV_PAD_TEMPLATE_PROPS ( + GST_PROPS_FOURCC (GST_MAKE_FOURCC ('I','4','2','0')))); +} + +static void +gst_jpegenc_base_init (gpointer g_class) +{ + GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GstCaps *raw_caps, *jpeg_caps; + + raw_caps = raw_caps_factory (); + jpeg_caps = jpeg_caps_factory (); + + jpegenc_sink_template = gst_pad_template_new ("sink", GST_PAD_SINK, + GST_PAD_ALWAYS, + raw_caps, NULL); + jpegenc_src_template = gst_pad_template_new ("src", GST_PAD_SRC, + GST_PAD_ALWAYS, + jpeg_caps, NULL); + + gst_element_class_add_pad_template (element_class, jpegenc_sink_template); + gst_element_class_add_pad_template (element_class, jpegenc_src_template); + gst_element_class_set_details (element_class, &gst_jpegenc_details); +} + static void gst_jpegenc_class_init (GstJpegEnc *klass) { -- 2.7.4