From eb2aedc52327226f9b05401fe27f11e420c81f69 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Wed, 1 Jul 2009 12:29:22 +0200 Subject: [PATCH] gst.Message: Add overrides for new 0.10.24 messages --- gst/gstmessage.override | 95 +++++++++++++++++++++++++++++++++++++++ testsuite/test_message.py | 60 +++++++++++++++++++++++++ 2 files changed, 155 insertions(+) diff --git a/gst/gstmessage.override b/gst/gstmessage.override index a383fd01f8..2f83f69313 100644 --- a/gst/gstmessage.override +++ b/gst/gstmessage.override @@ -323,3 +323,98 @@ _wrap_gst_message_parse_buffering (PyGstMiniObject *self) return Py_BuildValue("i", percent); } +%% +override gst_message_parse_tag_full noargs +static PyObject * +_wrap_gst_message_parse_tag_full (PyGstMiniObject *self) +{ + GstPad *pad; + GstTagList *taglist; + PyObject *ptlist; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_TAG) { + PyErr_SetString(PyExc_TypeError, "Message is not an Tag message"); + return NULL; + } + + gst_message_parse_tag_full (GST_MESSAGE (self->obj), &pad, &taglist); + ptlist = pyg_boxed_new (GST_TYPE_TAG_LIST, taglist, TRUE, TRUE); + gst_tag_list_free (taglist); + + return Py_BuildValue("(OO)", + pygobject_new((GObject*) pad), + ptlist); +} +%% +override gst_message_parse_step_done noargs +static PyObject * +_wrap_gst_message_parse_step_done (PyGstMiniObject *self) +{ + GstFormat format; + guint64 amount, duration; + gdouble rate; + gboolean flush, intermediate, eos; + + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_STEP_DONE) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'step-done' message"); + return NULL; + } + + gst_message_parse_step_done (GST_MESSAGE (self->obj), &format, &amount, &rate, + &flush, &intermediate, &duration, &eos); + + return Py_BuildValue("OKdOOKO", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + amount, rate, + PyBool_FromLong(flush), + PyBool_FromLong(intermediate), + duration, + PyBool_FromLong(eos)); +} +%% +override gst_message_parse_step_start noargs +static PyObject * +_wrap_gst_message_parse_step_start (PyGstMiniObject *self) +{ + GstFormat format; + guint64 amount; + gdouble rate; + gboolean active, flush, intermediate; + + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_STEP_START) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'step-start' message"); + return NULL; + } + + gst_message_parse_step_start (GST_MESSAGE (self->obj), &active, &format, + &amount, &rate, &flush, &intermediate); + + return Py_BuildValue("OOKdOO", + PyBool_FromLong(active), + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + amount, rate, + PyBool_FromLong(flush), + PyBool_FromLong(intermediate)); +} +%% +override gst_message_parse_stream_status noargs +static PyObject * +_wrap_gst_message_parse_stream_status (PyGstMiniObject *self) +{ + GstStreamStatusType type; + GstElement *owner; + + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_STREAM_STATUS) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'stream-status' message"); + return NULL; + } + + gst_message_parse_stream_status (GST_MESSAGE (self->obj), &type, &owner); + + return Py_BuildValue("OO", + pyg_enum_from_gtype (GST_TYPE_STREAM_STATUS_TYPE, type), + pygobject_new((GObject*) owner)); +} diff --git a/testsuite/test_message.py b/testsuite/test_message.py index 3d7dbf4ec3..b2ad307d2c 100644 --- a/testsuite/test_message.py +++ b/testsuite/test_message.py @@ -105,6 +105,66 @@ class TestCreateMessages(TestCase): self.assertEquals(t2['something'], "else") self.assertEquals(t2['another'], 42) + def testTagFullMessage(self): + if hasattr(gst.Message, 'parse_tag_full'): + p = gst.Pad("blahblah", gst.PAD_SRC) + # Create a taglist + t = gst.TagList() + t['something'] = "else" + t['another'] = 42 + + # Create two messages using that same taglist + m1 = gst.message_new_tag_full(self.element, p, t) + assert m1 + m2 = gst.message_new_tag_full(self.element, p, t) + assert m2 + + # make sure the two messages have the same taglist + p1, t1 = m1.parse_tag_full() + assert t1 + keys = t1.keys() + keys.sort() + self.assertEquals(p1, p) + self.assertEquals(keys, ['another', 'something']) + self.assertEquals(t1['something'], "else") + self.assertEquals(t1['another'], 42) + p2, t2 = m2.parse_tag_full() + assert t2 + keys = t2.keys() + keys.sort() + self.assertEquals(p2, p) + self.assertEquals(keys, ['another', 'something']) + self.assertEquals(t2['something'], "else") + self.assertEquals(t2['another'], 42) + + def testStepStartMessage(self): + if hasattr(gst, 'message_new_step_start'): + m = gst.message_new_step_start(self.element, True, + gst.FORMAT_TIME, 42, 1.0, + True, True) + self.assertEquals(m.type, gst.MESSAGE_STEP_START) + active, format, amount, rate, flush, intermediate = m.parse_step_start() + self.assertEquals(active, True) + self.assertEquals(format, gst.FORMAT_TIME) + self.assertEquals(amount, 42) + self.assertEquals(rate, 1.0) + self.assertEquals(flush, True) + self.assertEquals(intermediate, True) + + def testStepDoneMessage(self): + if hasattr(gst, 'message_new_step_done'): + m = gst.message_new_step_done(self.element, gst.FORMAT_TIME, 42, + 1.0, True, True, 54, True) + self.assertEquals(m.type, gst.MESSAGE_STEP_DONE) + + fmt, am, rat, flu, inter, dur, eos = m.parse_step_done() + self.assertEquals(fmt, gst.FORMAT_TIME) + self.assertEquals(am, 42) + self.assertEquals(rat, 1.0) + self.assertEquals(flu, True) + self.assertEquals(inter, True) + self.assertEquals(dur, 54) + self.assertEquals(eos, True) if __name__ == "__main__": unittest.main()