[gst-cvs] gst-plugins-good: pngenc: Support 8 bit grayscale

Thiago Sousa Santos thiagoss at kemper.freedesktop.org
Tue Jun 1 05:35:46 PDT 2010


Module: gst-plugins-good
Branch: master
Commit: ca0652a572da999aa8a8bc0bd608b9b48929e83d
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=ca0652a572da999aa8a8bc0bd608b9b48929e83d

Author: Thiago Santos <thiago.sousa.santos at collabora.co.uk>
Date:   Tue May 18 19:42:58 2010 -0300

pngenc: Support 8 bit grayscale

Adds support to 8 bit grayscale input

---

 ext/libpng/gstpngenc.c |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/ext/libpng/gstpngenc.c b/ext/libpng/gstpngenc.c
index 655cadb..770d47e 100644
--- a/ext/libpng/gstpngenc.c
+++ b/ext/libpng/gstpngenc.c
@@ -67,7 +67,8 @@ 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)
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_RGBA ";" GST_VIDEO_CAPS_RGB ";"
+        GST_VIDEO_CAPS_GRAY8)
     );
 
 /* static GstElementClass *parent_class = NULL; */
@@ -160,6 +161,8 @@ gst_pngenc_setcaps (GstPad * pad, GstCaps * caps)
 
   if (pngenc->bpp == 32)
     pngenc->stride = pngenc->width * 4;
+  else if (pngenc->bpp == 8)
+    pngenc->stride = GST_ROUND_UP_4 (pngenc->width);
   else
     pngenc->stride = GST_ROUND_UP_4 (pngenc->width * 3);
 
@@ -235,6 +238,7 @@ gst_pngenc_chain (GstPad * pad, GstBuffer * buf)
 {
   GstPngEnc *pngenc;
   gint row_index;
+  gint color_type;
   png_byte *row_pointers[MAX_HEIGHT];
   GstFlowReturn ret = GST_FLOW_OK;
   GstBuffer *encoded_buf = NULL;
@@ -278,12 +282,19 @@ gst_pngenc_chain (GstPad * pad, GstBuffer * buf)
       PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE);
   png_set_compression_level (pngenc->png_struct_ptr, pngenc->compression_level);
 
+  if (pngenc->bpp == 32)
+    color_type = PNG_COLOR_TYPE_RGBA;
+  else if (pngenc->bpp == 8)
+    color_type = PNG_COLOR_TYPE_GRAY;
+  else
+    color_type = PNG_COLOR_TYPE_RGB;
+
   png_set_IHDR (pngenc->png_struct_ptr,
       pngenc->png_info_ptr,
       pngenc->width,
       pngenc->height,
       8,
-      (pngenc->bpp == 32) ? PNG_COLOR_TYPE_RGBA : PNG_COLOR_TYPE_RGB,
+      color_type,
       PNG_INTERLACE_NONE,
       PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
 





More information about the Gstreamer-commits mailing list