summaryrefslogtreecommitdiffstats
path: root/ext/libmng/gstmngenc.c
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2008-06-17 10:05:55 +0000
committerWim Taymans <wim.taymans@gmail.com>2008-06-17 10:05:55 +0000
commit51eb9bea8fe8ef05edf4125e701c59f9cf8de167 (patch)
treeee38d8ae6924652d1eaa67b8e30894c178ef8367 /ext/libmng/gstmngenc.c
parenta5f813b90a933dcb638650ea9dc6656de334c0f7 (diff)
ext/libmng/: Somewhat port mngenc and mngdec to 0.10. Does not work yet and has many bits ifdeffed out still.
Original commit message from CVS: * ext/libmng/Makefile.am: * ext/libmng/gstmng.c: (plugin_init): * ext/libmng/gstmngdec.c: (gst_mng_dec_base_init), (gst_mng_dec_class_init), (gst_mng_dec_sink_setcaps), (gst_mng_dec_init), (gst_mng_dec_src_getcaps), (gst_mng_dec_loop), (gst_mng_dec_get_property), (gst_mng_dec_set_property), (mngdec_error), (mngdec_openstream), (mngdec_closestream), (gst_mng_dec_sink_event), (mngdec_readdata), (mngdec_settimer), (mngdec_processheader), (mngdec_getcanvasline), (mngdec_refresh), (gst_mng_dec_change_state): * ext/libmng/gstmngdec.h: * ext/libmng/gstmngenc.c: (gst_mng_enc_base_init), (gst_mng_enc_class_init), (gst_mng_enc_sink_setcaps), (gst_mng_enc_init), (gst_mng_enc_chain), (gst_mng_enc_get_property), (gst_mng_enc_set_property): * ext/libmng/gstmngenc.h: Somewhat port mngenc and mngdec to 0.10. Does not work yet and has many bits ifdeffed out still.
Diffstat (limited to 'ext/libmng/gstmngenc.c')
-rw-r--r--ext/libmng/gstmngenc.c117
1 files changed, 30 insertions, 87 deletions
diff --git a/ext/libmng/gstmngenc.c b/ext/libmng/gstmngenc.c
index c6e34326..1d60d792 100644
--- a/ext/libmng/gstmngenc.c
+++ b/ext/libmng/gstmngenc.c
@@ -26,8 +26,7 @@
#define MAX_HEIGHT 4096
-
-static const GstElementDetails gst_mngenc_details =
+static const GstElementDetails gst_mng_enc_details =
GST_ELEMENT_DETAILS ("MNG video encoder",
"Codec/Encoder/Video",
"Encode a video frame to an .mng video",
@@ -45,49 +44,19 @@ enum
enum
{
- ARG_0,
- ARG_SNAPSHOT,
- ARG_NEWMEDIA
+ ARG_0
};
-static void gst_mngenc_base_init (gpointer g_class);
-static void gst_mngenc_class_init (GstMngEncClass * klass);
-static void gst_mngenc_init (GstMngEnc * mngenc);
-static void gst_mngenc_set_property (GObject * object,
+static void gst_mng_enc_set_property (GObject * object,
guint prop_id, const GValue * value, GParamSpec * pspec);
-static void gst_mngenc_get_property (GObject * object,
+static void gst_mng_enc_get_property (GObject * object,
guint prop_id, GValue * value, GParamSpec * pspec);
-static void gst_mngenc_chain (GstPad * pad, GstData * _data);
+static GstFlowReturn gst_mng_enc_chain (GstPad * pad, GstBuffer * buf);
GstPadTemplate *mngenc_src_template, *mngenc_sink_template;
-static GstElementClass *parent_class = NULL;
-
-
-GType
-gst_mngenc_get_type (void)
-{
- static GType mngenc_type = 0;
-
- if (!mngenc_type) {
- static const GTypeInfo mngenc_info = {
- sizeof (GstMngEncClass),
- gst_mngenc_base_init,
- NULL,
- (GClassInitFunc) gst_mngenc_class_init,
- NULL,
- NULL,
- sizeof (GstMngEnc),
- 0,
- (GInstanceInitFunc) gst_mngenc_init,
- };
-
- mngenc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstMngEnc",
- &mngenc_info, 0);
- }
- return mngenc_type;
-}
+GST_BOILERPLATE (GstMngEnc, gst_mng_enc, GstElement, GST_TYPE_ELEMENT);
static GstCaps *
mng_caps_factory (void)
@@ -106,7 +75,7 @@ raw_caps_factory (void)
}
static void
-gst_mngenc_base_init (gpointer g_class)
+gst_mng_enc_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
GstCaps *raw_caps, *mng_caps;
@@ -122,11 +91,11 @@ gst_mngenc_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class, mngenc_sink_template);
gst_element_class_add_pad_template (element_class, mngenc_src_template);
- gst_element_class_set_details (element_class, &gst_mngenc_details);
+ gst_element_class_set_details (element_class, &gst_mng_enc_details);
}
static void
-gst_mngenc_class_init (GstMngEncClass * klass)
+gst_mng_enc_class_init (GstMngEncClass * klass)
{
GObjectClass *gobject_class;
GstElementClass *gstelement_class;
@@ -134,32 +103,18 @@ gst_mngenc_class_init (GstMngEncClass * klass)
gobject_class = (GObjectClass *) klass;
gstelement_class = (GstElementClass *) klass;
- parent_class = g_type_class_peek_parent (klass);
-
- g_object_class_install_property (gobject_class, ARG_SNAPSHOT,
- g_param_spec_boolean ("snapshot", "Snapshot",
- "Send EOS after encoding a frame, useful for snapshots",
- DEFAULT_SNAPSHOT, (GParamFlags) G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, ARG_NEWMEDIA,
- g_param_spec_boolean ("newmedia", "newmedia",
- "Send new media discontinuity after encoding each frame",
- FALSE, (GParamFlags) G_PARAM_READWRITE));
-
- gstelement_class->get_property = gst_mngenc_get_property;
- gstelement_class->set_property = gst_mngenc_set_property;
+ gobject_class->get_property = gst_mng_enc_get_property;
+ gobject_class->set_property = gst_mng_enc_set_property;
}
-
-static GstPadLinkReturn
-gst_mngenc_sinklink (GstPad * pad, const GstCaps * caps)
+static gboolean
+gst_mng_enc_sink_setcaps (GstPad * pad, GstCaps * caps)
{
GstMngEnc *mngenc;
gdouble fps;
GstStructure *structure;
- GstPadLinkReturn result;
- mngenc = GST_MNGENC (gst_pad_get_parent (pad));
+ mngenc = GST_MNG_ENC (gst_pad_get_parent (pad));
structure = gst_caps_get_structure (caps, 0);
gst_structure_get_int (structure, "width", &mngenc->width);
@@ -172,14 +127,16 @@ gst_mngenc_sinklink (GstPad * pad, const GstCaps * caps)
"width", G_TYPE_INT, mngenc->width,
"height", G_TYPE_INT, mngenc->height, NULL);
- result = gst_pad_try_set_caps (mngenc->srcpad, caps);
+ gst_pad_set_caps (mngenc->srcpad, caps);
+ gst_caps_unref (caps);
+
gst_object_unref (mngenc);
- return result;
+ return TRUE;
}
static void
-gst_mngenc_init (GstMngEnc * mngenc)
+gst_mng_enc_init (GstMngEnc * mngenc, GstMngEncClass * gclass)
{
mngenc->sinkpad = gst_pad_new_from_template (mngenc_sink_template, "sink");
gst_element_add_pad (GST_ELEMENT (mngenc), mngenc->sinkpad);
@@ -187,43 +144,35 @@ gst_mngenc_init (GstMngEnc * mngenc)
mngenc->srcpad = gst_pad_new ("src", GST_PAD_SRC);
gst_element_add_pad (GST_ELEMENT (mngenc), mngenc->srcpad);
- gst_pad_set_chain_function (mngenc->sinkpad, gst_mngenc_chain);
- gst_pad_set_link_function (mngenc->sinkpad, gst_mngenc_sinklink);
-
- mngenc->snapshot = DEFAULT_SNAPSHOT;
- mngenc->newmedia = FALSE;
+ gst_pad_set_chain_function (mngenc->sinkpad, gst_mng_enc_chain);
+ gst_pad_set_setcaps_function (mngenc->sinkpad, gst_mng_enc_sink_setcaps);
}
-static void
-gst_mngenc_chain (GstPad * pad, GstData * _data)
+static GstFlowReturn
+gst_mng_enc_chain (GstPad * pad, GstBuffer * buf)
{
- GstBuffer *buf = GST_BUFFER (_data);
GstMngEnc *mngenc;
- mngenc = GST_MNGENC (gst_pad_get_parent (pad));
+ mngenc = GST_MNG_ENC (gst_pad_get_parent (pad));
/* FIXME, do something here */
gst_buffer_unref (buf);
gst_object_unref (mngenc);
+
+ return GST_FLOW_NOT_SUPPORTED;
}
static void
-gst_mngenc_get_property (GObject * object,
+gst_mng_enc_get_property (GObject * object,
guint prop_id, GValue * value, GParamSpec * pspec)
{
GstMngEnc *mngenc;
- mngenc = GST_MNGENC (object);
+ mngenc = GST_MNG_ENC (object);
switch (prop_id) {
- case ARG_SNAPSHOT:
- g_value_set_boolean (value, mngenc->snapshot);
- break;
- case ARG_NEWMEDIA:
- g_value_set_boolean (value, mngenc->newmedia);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -232,20 +181,14 @@ gst_mngenc_get_property (GObject * object,
static void
-gst_mngenc_set_property (GObject * object,
+gst_mng_enc_set_property (GObject * object,
guint prop_id, const GValue * value, GParamSpec * pspec)
{
GstMngEnc *mngenc;
- mngenc = GST_MNGENC (object);
+ mngenc = GST_MNG_ENC (object);
switch (prop_id) {
- case ARG_SNAPSHOT:
- mngenc->snapshot = g_value_get_boolean (value);
- break;
- case ARG_NEWMEDIA:
- mngenc->newmedia = g_value_get_boolean (value);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;