diff options
Diffstat (limited to 'ext/tarkin/gsttarkinenc.c')
-rw-r--r-- | ext/tarkin/gsttarkinenc.c | 62 |
1 files changed, 57 insertions, 5 deletions
diff --git a/ext/tarkin/gsttarkinenc.c b/ext/tarkin/gsttarkinenc.c index beddd876..5c918a4e 100644 --- a/ext/tarkin/gsttarkinenc.c +++ b/ext/tarkin/gsttarkinenc.c @@ -26,18 +26,15 @@ #include "gsttarkinenc.h" -extern GstPadTemplate *enc_src_template, *enc_sink_template; +static GstPadTemplate *enc_src_template, *enc_sink_template; /* elementfactory information */ GstElementDetails tarkinenc_details = { "Ogg Tarkin encoder", "Filter/Video/Encoder", - "LGPL", "Encodes video in OGG Tarkin format", - VERSION, "Monty <monty@xiph.org>, " "Wim Taymans <wim.taymans@chello.be>", - "(C) 2002", }; /* TarkinEnc signals and args */ @@ -55,6 +52,7 @@ enum ARG_A_MOMENTS, }; +static void gst_tarkinenc_base_init (gpointer g_class); static void gst_tarkinenc_class_init (TarkinEncClass *klass); static void gst_tarkinenc_init (TarkinEnc *arkinenc); @@ -77,7 +75,7 @@ tarkinenc_get_type (void) if (!tarkinenc_type) { static const GTypeInfo tarkinenc_info = { sizeof (TarkinEncClass), - NULL, + gst_tarkinenc_base_init, NULL, (GClassInitFunc) gst_tarkinenc_class_init, NULL, @@ -92,6 +90,60 @@ tarkinenc_get_type (void) return tarkinenc_type; } +static GstCaps* +tarkin_caps_factory (void) +{ + return + gst_caps_new ( + "tarkin_tarkin", + "application/ogg", + NULL); +} + +static GstCaps* +raw_caps_factory (void) +{ + return + GST_CAPS_NEW ( + "tarkin_raw", + "video/x-raw-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), + "framerate", GST_PROPS_FLOAT_RANGE (0, G_MAXFLOAT) + ); +} + +static void +gst_tarkinenc_base_init (gpointer g_class) +{ + GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GstCaps *raw_caps, *tarkin_caps; + + raw_caps = raw_caps_factory (); + tarkin_caps = tarkin_caps_factory (); + + enc_sink_template = gst_pad_template_new ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + raw_caps, + NULL); + enc_src_template = gst_pad_template_new ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + tarkin_caps, + NULL); + gst_element_class_add_pad_template (element_class, enc_sink_template); + gst_element_class_add_pad_template (element_class, enc_src_template); + + gst_element_class_set_details (element_class, &tarkinenc_details); +} + static void gst_tarkinenc_class_init (TarkinEncClass *klass) { |