summaryrefslogtreecommitdiffstats
path: root/ext
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2004-07-27 09:59:17 +0000
committerWim Taymans <wim.taymans@gmail.com>2004-07-27 09:59:17 +0000
commitc754da7a4cccdba6ad6f0f6559e1c9b0218dbda2 (patch)
treedcf1b3c8e71f7e95f5f313a28672958df084d937 /ext
parent5e4e09cd5c4842cdb8c7de350340b5b296501275 (diff)
ext/libpng/: Added snapshot property to pngenc. removed g_print from pngdec
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
Diffstat (limited to 'ext')
-rw-r--r--ext/libpng/gstpngdec.c1
-rw-r--r--ext/libpng/gstpngenc.c72
-rw-r--r--ext/libpng/gstpngenc.h2
3 files changed, 66 insertions, 9 deletions
diff --git a/ext/libpng/gstpngdec.c b/ext/libpng/gstpngdec.c
index 0916d237..da5e0e99 100644
--- a/ext/libpng/gstpngdec.c
+++ b/ext/libpng/gstpngdec.c
@@ -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);
}
diff --git a/ext/libpng/gstpngenc.c b/ext/libpng/gstpngenc.c
index a0df5e1f..fcad7e87 100644
--- a/ext/libpng/gstpngenc.c
+++ b/ext/libpng/gstpngenc.c
@@ -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;
+ }
}
diff --git a/ext/libpng/gstpngenc.h b/ext/libpng/gstpngenc.h
index 59bc4ab4..14836dc8 100644
--- a/ext/libpng/gstpngenc.h
+++ b/ext/libpng/gstpngenc.h
@@ -53,6 +53,8 @@ struct _GstPngEnc
gint width;
gint height;
gint bpp;
+
+ gboolean snapshot;
};
struct _GstPngEncClass