From 7ad1b84f50354023c6a75b8d649a80fa56db54e8 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Wed, 1 Jul 2009 13:54:57 +0200 Subject: [PATCH] gst.Message: Wrap remaining parse_*() methods. --- gst/gstmessage.override | 59 +++++++++++++++++++++++++++++++++++++++ testsuite/test_message.py | 32 +++++++++++++++++++++ 2 files changed, 91 insertions(+) diff --git a/gst/gstmessage.override b/gst/gstmessage.override index 2f83f69313..2fbc777c81 100644 --- a/gst/gstmessage.override +++ b/gst/gstmessage.override @@ -418,3 +418,62 @@ _wrap_gst_message_parse_stream_status (PyGstMiniObject *self) pyg_enum_from_gtype (GST_TYPE_STREAM_STATUS_TYPE, type), pygobject_new((GObject*) owner)); } +%% +override gst_message_parse_structure_change noargs +static PyObject * +_wrap_gst_message_parse_structure_change (PyGstMiniObject *self) +{ + GstStructureChangeType type; + GstElement *owner; + gboolean busy; + + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_STRUCTURE_CHANGE) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'structure_change' message"); + return NULL; + } + + gst_message_parse_structure_change (GST_MESSAGE (self->obj), &type, &owner, &busy); + + return Py_BuildValue("OOO", + pyg_enum_from_gtype (GST_TYPE_STRUCTURE_CHANGE_TYPE, type), + pygobject_new((GObject*) owner), + PyBool_FromLong(busy)); +} +%% +override gst_message_parse_request_state noargs +static PyObject * +_wrap_gst_message_parse_request_state (PyGstMiniObject *self) +{ + GstState state; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_REQUEST_STATE) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'request_state' message"); + return NULL; + } + + gst_message_parse_request_state (GST_MESSAGE (self->obj), &state); + + return pyg_enum_from_gtype(GST_TYPE_STATE, state); +} +%% +override gst_message_parse_buffering_stats noargs +static PyObject * +_wrap_gst_message_parse_buffering_stats (PyGstMiniObject *self) +{ + GstBufferingMode mode; + gint avg_in, avg_out; + gint64 buffering_left; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_BUFFERING) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'buffering' message"); + return NULL; + } + + gst_message_parse_buffering_stats (GST_MESSAGE (self->obj), &mode, &avg_in, &avg_out, + &buffering_left); + + return Py_BuildValue("OiiL", + pyg_enum_from_gtype (GST_TYPE_BUFFERING_MODE, mode), + avg_in, avg_out, buffering_left); +} diff --git a/testsuite/test_message.py b/testsuite/test_message.py index b2ad307d2c..8b2eac13d0 100644 --- a/testsuite/test_message.py +++ b/testsuite/test_message.py @@ -166,5 +166,37 @@ class TestCreateMessages(TestCase): self.assertEquals(dur, 54) self.assertEquals(eos, True) + def testStructureChangeMessage(self): + if hasattr(gst, 'message_new_structure_change'): + p = gst.Pad("blah", gst.PAD_SRC) + m = gst.message_new_structure_change(p, + gst.STRUCTURE_CHANGE_TYPE_PAD_LINK, + self.element, True) + + self.assertEquals(m.type, gst.MESSAGE_STRUCTURE_CHANGE) + sct, owner, busy = m.parse_structure_change() + self.assertEquals(sct, gst.STRUCTURE_CHANGE_TYPE_PAD_LINK) + self.assertEquals(owner, self.element) + self.assertEquals(busy, True) + + def testRequestStateMessage(self): + if hasattr(gst, 'message_new_request_state'): + m = gst.message_new_request_state(self.element, gst.STATE_NULL) + self.assertEquals(m.type, gst.MESSAGE_REQUEST_STATE) + self.assertEquals(m.parse_request_state(), gst.STATE_NULL) + + def testBufferingStatsMessage(self): + if hasattr(gst.Message, 'set_buffering_stats'): + gst.debug("Creating buffering message") + m = gst.message_new_buffering(self.element, 50) + gst.debug("Setting stats") + m.set_buffering_stats(gst.BUFFERING_LIVE, 30, 1024, 123456) + self.assertEquals(m.type, gst.MESSAGE_BUFFERING) + mode, ain, aout, left = m.parse_buffering_stats() + self.assertEquals(mode, gst.BUFFERING_LIVE) + self.assertEquals(ain, 30) + self.assertEquals(aout, 1024) + self.assertEquals(left, 123456) + if __name__ == "__main__": unittest.main()