summaryrefslogtreecommitdiffstats
path: root/ext/libpng/gstpngenc.c
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-01-07 10:27:20 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-01-07 10:27:20 +0000
commit536f3d6c435814c2d8abe7c5011eb2f67f07e52f (patch)
tree295f1be11faa5a44b6dc74d697e7243861930334 /ext/libpng/gstpngenc.c
parent07156265234732992dd6794b013067ed750606b6 (diff)
ext/libpng/: mime fixage.
Original commit message from CVS: Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net> * ext/libpng/gstpngdec.c: * ext/libpng/gstpngenc.c: (gst_pngenc_base_init), (gst_pngenc_sinklink), (gst_pngenc_init), (gst_pngenc_chain): * ext/libpng/gstpngenc.h: Alpha support (encoder; #163161), mime fixage.
Diffstat (limited to 'ext/libpng/gstpngenc.c')
-rw-r--r--ext/libpng/gstpngenc.c58
1 files changed, 24 insertions, 34 deletions
diff --git a/ext/libpng/gstpngenc.c b/ext/libpng/gstpngenc.c
index 2ac8f677..e958dfef 100644
--- a/ext/libpng/gstpngenc.c
+++ b/ext/libpng/gstpngenc.c
@@ -61,11 +61,24 @@ static void gst_pngenc_get_property (GObject * object,
static void gst_pngenc_chain (GstPad * pad, GstData * _data);
-GstPadTemplate *pngenc_src_template, *pngenc_sink_template;
+static GstStaticPadTemplate pngenc_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("image/png, "
+ "width = (int) [ 16, 4096 ], "
+ "height = (int) [ 16, 4096 ], " "framerate = (double) [ 0.0, MAX ]")
+ );
+
+static GstStaticPadTemplate pngenc_sink_template =
+ GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_RGBA ";" GST_VIDEO_CAPS_RGB)
+ );
static GstElementClass *parent_class = NULL;
-
static void
user_error_fn (png_structp png_ptr, png_const_charp error_msg)
{
@@ -103,39 +116,15 @@ gst_pngenc_get_type (void)
return pngenc_type;
}
-static GstCaps *
-png_caps_factory (void)
-{
- return gst_caps_new_simple ("video/x-png",
- "width", GST_TYPE_INT_RANGE, 16, 4096,
- "height", GST_TYPE_INT_RANGE, 16, 4096,
- "framerate", GST_TYPE_DOUBLE_RANGE, 0.0, G_MAXDOUBLE, NULL);
-}
-
-
-static GstCaps *
-raw_caps_factory (void)
-{
- return gst_caps_from_string (GST_VIDEO_CAPS_RGB);
-}
-
static void
gst_pngenc_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- GstCaps *raw_caps, *png_caps;
-
- raw_caps = raw_caps_factory ();
- png_caps = png_caps_factory ();
-
- pngenc_sink_template = gst_pad_template_new ("sink", GST_PAD_SINK,
- GST_PAD_ALWAYS, raw_caps);
-
- pngenc_src_template = gst_pad_template_new ("src", GST_PAD_SRC,
- GST_PAD_ALWAYS, png_caps);
- gst_element_class_add_pad_template (element_class, pngenc_sink_template);
- gst_element_class_add_pad_template (element_class, pngenc_src_template);
+ gst_element_class_add_pad_template
+ (element_class, gst_static_pad_template_get (&pngenc_sink_template));
+ gst_element_class_add_pad_template
+ (element_class, gst_static_pad_template_get (&pngenc_src_template));
gst_element_class_set_details (element_class, &gst_pngenc_details);
}
@@ -180,7 +169,7 @@ gst_pngenc_sinklink (GstPad * pad, const GstCaps * caps)
gst_structure_get_double (structure, "framerate", &fps);
gst_structure_get_int (structure, "bpp", &pngenc->bpp);
- caps = gst_caps_new_simple ("video/x-png",
+ caps = gst_caps_new_simple ("image/png",
"framerate", G_TYPE_DOUBLE, fps,
"width", G_TYPE_INT, pngenc->width,
"height", G_TYPE_INT, pngenc->height, NULL);
@@ -191,7 +180,8 @@ gst_pngenc_sinklink (GstPad * pad, const GstCaps * caps)
static void
gst_pngenc_init (GstPngEnc * pngenc)
{
- pngenc->sinkpad = gst_pad_new_from_template (pngenc_sink_template, "sink");
+ pngenc->sinkpad = gst_pad_new_from_template
+ (gst_static_pad_template_get (&pngenc_sink_template), "sink");
gst_element_add_pad (GST_ELEMENT (pngenc), pngenc->sinkpad);
pngenc->srcpad = gst_pad_new ("src", GST_PAD_SRC);
@@ -285,8 +275,8 @@ gst_pngenc_chain (GstPad * pad, GstData * _data)
pngenc->png_info_ptr,
pngenc->width,
pngenc->height,
- pngenc->bpp / 3,
- PNG_COLOR_TYPE_RGB,
+ 8,
+ (pngenc->bpp == 32) ? PNG_COLOR_TYPE_RGBA : PNG_COLOR_TYPE_RGB,
PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);