ext/libpng/: Added snapshot property to pngenc. removed g_print from pngdec
authorWim Taymans <wim.taymans@gmail.com>
Tue, 27 Jul 2004 09:59:17 +0000 (09:59 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Tue, 27 Jul 2004 09:59:17 +0000 (09:59 +0000)
Original commit message from CVS:
* ext/libpng/gstpngdec.c: (gst_pngdec_src_getcaps):
* ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
(gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
(gst_pngenc_set_property):
* ext/libpng/gstpngenc.h:
Added snapshot property to pngenc.
removed g_print from pngdec

ChangeLog
ext/libpng/gstpngdec.c
ext/libpng/gstpngenc.c
ext/libpng/gstpngenc.h

index 82d6b57..d169d9c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2004-07-27  Wim Taymans  <wim@fluendo.com>
+
+       * ext/libpng/gstpngdec.c: (gst_pngdec_src_getcaps):
+       * ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
+       (gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
+       (gst_pngenc_set_property):
+       * ext/libpng/gstpngenc.h:
+       Added snapshot property to pngenc.
+       removed g_print from pngdec
+
 2004-07-27  Steve Lhomme  <steve.lhomme@free.fr>
 
        * gst/ac3parse/ac3parse.vcproj
index 0916d23..da5e0e9 100644 (file)
@@ -210,7 +210,6 @@ gst_pngdec_src_getcaps (GstPad * pad)
   for (i = 0; i < gst_caps_get_size (caps); i++) {
     GstStructure *structure = gst_caps_get_structure (caps, i);
 
-    g_print ("%d %d\n", pngdec->width, pngdec->height);
     if (pngdec->width != -1) {
       gst_structure_set (structure, "width", G_TYPE_INT, pngdec->width, NULL);
     }
index a0df5e1..fcad7e8 100644 (file)
@@ -42,14 +42,21 @@ enum
   LAST_SIGNAL
 };
 
+#define DEFAULT_SNAPSHOT       TRUE
+
 enum
 {
-  ARG_0
+  ARG_0,
+  ARG_SNAPSHOT
 };
 
 static void gst_pngenc_base_init (gpointer g_class);
 static void gst_pngenc_class_init (GstPngEncClass * klass);
 static void gst_pngenc_init (GstPngEnc * pngenc);
+static void gst_pngenc_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_pngenc_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
 
 static void gst_pngenc_chain (GstPad * pad, GstData * _data);
 
@@ -141,6 +148,14 @@ gst_pngenc_class_init (GstPngEncClass * klass)
   gstelement_class = (GstElementClass *) klass;
 
   parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
+
+  g_object_class_install_property (gobject_class, ARG_SNAPSHOT,
+      g_param_spec_boolean ("snapshot", "Snapshot",
+          "Send EOS after encoding a frame, usefull for snapshots",
+          DEFAULT_SNAPSHOT, (GParamFlags) G_PARAM_READWRITE));
+
+  gstelement_class->get_property = gst_pngenc_get_property;
+  gstelement_class->set_property = gst_pngenc_set_property;
 }
 
 
@@ -182,9 +197,10 @@ gst_pngenc_init (GstPngEnc * pngenc)
   pngenc->png_struct_ptr = NULL;
   pngenc->png_info_ptr = NULL;
 
+  pngenc->snapshot = DEFAULT_SNAPSHOT;
 }
 
-void
+static void
 user_flush_data (png_structp png_ptr)
 {
   GstPngEnc *pngenc;
@@ -195,7 +211,7 @@ user_flush_data (png_structp png_ptr)
 }
 
 
-void
+static void
 user_write_data (png_structp png_ptr, png_bytep data, png_uint_32 length)
 {
   GstBuffer *buffer;
@@ -225,7 +241,6 @@ gst_pngenc_chain (GstPad * pad, GstData * _data)
   GstPngEnc *pngenc;
   gint row_index;
   png_byte *row_pointers[MAX_HEIGHT];
-  GstEvent *event;
 
   pngenc = GST_PNGENC (gst_pad_get_parent (pad));
 
@@ -283,12 +298,53 @@ gst_pngenc_chain (GstPad * pad, GstData * _data)
 
   png_destroy_info_struct (pngenc->png_struct_ptr, &pngenc->png_info_ptr);
   png_destroy_write_struct (&pngenc->png_struct_ptr, (png_infopp) NULL);
+  gst_buffer_unref (buf);
 
   gst_pad_push (pngenc->srcpad, GST_DATA (pngenc->buffer_out));
 
-  /* send EOS event, since a frame has been pushed out */
-  event = gst_event_new (GST_EVENT_EOS);
-  gst_pad_push (pngenc->srcpad, GST_DATA (event));
+  if (pngenc->snapshot) {
+    /* send EOS event, since a frame has been pushed out */
+    GstEvent *event = gst_event_new (GST_EVENT_EOS);
 
-  gst_buffer_unref (buf);
+    gst_pad_push (pngenc->srcpad, GST_DATA (event));
+    gst_element_set_eos (GST_ELEMENT (pngenc));
+  }
+}
+
+
+static void
+gst_pngenc_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec)
+{
+  GstPngEnc *pngenc;
+
+  pngenc = GST_PNGENC (object);
+
+  switch (prop_id) {
+    case ARG_SNAPSHOT:
+      g_value_set_boolean (value, pngenc->snapshot);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+
+static void
+gst_pngenc_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec)
+{
+  GstPngEnc *pngenc;
+
+  pngenc = GST_PNGENC (object);
+
+  switch (prop_id) {
+    case ARG_SNAPSHOT:
+      pngenc->snapshot = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
 }
index 59bc4ab..14836dc 100644 (file)
@@ -53,6 +53,8 @@ struct _GstPngEnc
   gint width;
   gint height;
   gint bpp;
+
+  gboolean snapshot;
 };
 
 struct _GstPngEncClass