From: <jd...@fr...> - 2004-11-29 12:14:18
|
CVS Root: /cvs/gstreamer Module: gst-python Changes by: jdahlin Date: Mon Nov 29 2004 04:14:39 PST Log message: * gst/gst.override: Apply patch from Brian Warner to throw a link error when element and pad linking fails. Modified files: . : ChangeLog gst : gst.override gstmodule.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-python/ChangeLog.diff?r1=1.146&r2=1.147 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-python/gst/gst.override.diff?r1=1.35&r2=1.36 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-python/gst/gstmodule.c.diff?r1=1.16&r2=1.17 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-python/ChangeLog,v retrieving revision 1.146 retrieving revision 1.147 diff -u -d -r1.146 -r1.147 --- ChangeLog 27 Nov 2004 09:41:17 -0000 1.146 +++ ChangeLog 29 Nov 2004 12:14:27 -0000 1.147 @@ -1,3 +1,9 @@ +2004-11-29 Johan Dahlin <jo...@gn...> + + * gst/gstmodule.c: + * gst/gst.override: Apply patch from Brian Warner to throw a link + error when element and pad linking fails. 2004-11-27 Martin Soto <mar...@us...> * gst/gst.override (_wrap_gst_event_new_any) Index: gst.override RCS file: /cvs/gstreamer/gst-python/gst/gst.override,v retrieving revision 1.35 retrieving revision 1.36 diff -u -d -r1.35 -r1.36 --- gst.override 27 Nov 2004 09:41:17 -0000 1.35 +++ gst.override 29 Nov 2004 12:14:27 -0000 1.36 @@ -36,6 +36,7 @@ #include <gst/gsttaginterface.h> extern gboolean pygst_data_from_pyobject (PyObject *object, GstData **data); +PyObject *PyGstExc_LinkError = NULL; GSList *mainloops = NULL; void @@ -312,8 +313,12 @@ i = 2; while (1) { - if (!gst_element_link(GST_ELEMENT(element->obj), GST_ELEMENT(element2->obj))) - return PyInt_FromLong(0); + if (!gst_element_link(GST_ELEMENT(element->obj), + GST_ELEMENT(element2->obj))) + { + PyErr_SetString(PyGstExc_LinkError, "link failed"); + return NULL; + } if (i >= len) break; @@ -326,6 +331,122 @@ return PyInt_FromLong(1); } +%% +override gst_element_link kwargs +static PyObject * +_wrap_gst_element_link(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "dest", NULL }; + PyGObject *dest; + int ret; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:GstElement.link", + kwlist, &PyGstElement_Type, &dest)) + return NULL; + ret = gst_element_link(GST_ELEMENT(self->obj), GST_ELEMENT(dest->obj)); + if (!ret) { + PyErr_SetString(PyGstExc_LinkError, "link failed"); + } + return PyBool_FromLong(ret); +} +override gst_element_link_filtered kwargs +_wrap_gst_element_link_filtered(PyGObject *self, PyObject *args, + PyObject *kwargs) + static char *kwlist[] = { "dest", "filtercaps", NULL }; + PyObject *py_filtercaps; + GstCaps *filtercaps = NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O!O:GstElement.link_filtered", + kwlist, &PyGstElement_Type, + &dest, &py_filtercaps)) + if (pyg_boxed_check(py_filtercaps, GST_TYPE_CAPS)) + filtercaps = pyg_boxed_get(py_filtercaps, GstCaps); + else { + PyErr_SetString(PyExc_TypeError, "filtercaps should be a GstCaps"); + ret = gst_element_link_filtered(GST_ELEMENT(self->obj), + GST_ELEMENT(dest->obj), + filtercaps); +override gst_element_link_pads kwargs +_wrap_gst_element_link_pads(PyGObject *self, PyObject *args, PyObject *kwargs) + static char *kwlist[] = { "srcpadname", "dest", "destpadname", NULL }; + char *srcpadname, *destpadname; + "sO!s:GstElement.link_pads", kwlist, + &srcpadname, &PyGstElement_Type, &dest, + &destpadname)) + ret = gst_element_link_pads(GST_ELEMENT(self->obj), srcpadname, + GST_ELEMENT(dest->obj), destpadname); +override gst_element_link_pads_filtered kwargs +_wrap_gst_element_link_pads_filtered(PyGObject *self, PyObject *args, + PyObject *kwargs) + static char *kwlist[] = { "srcpadname", "dest", "destpadname", + "filtercaps", NULL }; + "sO!sO:GstElement.link_pads_filtered", + kwlist, &srcpadname, &PyGstElement_Type, + &dest, &destpadname, &py_filtercaps)) + ret = gst_element_link_pads_filtered(GST_ELEMENT(self->obj), srcpadname, + GST_ELEMENT(dest->obj), destpadname, + filtercaps); %% override gst_element_unlink_many args static PyObject * @@ -371,8 +492,61 @@ Py_INCREF(Py_None); return Py_None; -override GstPad.get_negotiated_caps +override gst_pad_link kwargs +_wrap_gst_pad_link(PyGObject *self, PyObject *args, PyObject *kwargs) + static char *kwlist[] = { "sinkpad", NULL }; + PyGObject *sinkpad; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:GstPad.link", kwlist, + &PyGstPad_Type, &sinkpad)) + ret = gst_pad_link(GST_PAD(self->obj), GST_PAD(sinkpad->obj)); +override gst_pad_link_filtered kwargs +_wrap_gst_pad_link_filtered(PyGObject *self, PyObject *args, PyObject *kwargs) + static char *kwlist[] = { "sinkpad", "filtercaps", NULL }; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O:GstPad.link_filtered", + kwlist, &PyGstPad_Type, &sinkpad, + &py_filtercaps)) + ret = gst_pad_link_filtered(GST_PAD(self->obj), + GST_PAD(sinkpad->obj), + filtercaps); +override gst_pad_get_negotiated_caps _wrap_gst_pad_get_negotiated_caps(PyGObject *self) { Index: gstmodule.c RCS file: /cvs/gstreamer/gst-python/gst/gstmodule.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- gstmodule.c 23 Nov 2004 12:33:58 -0000 1.16 +++ gstmodule.c 29 Nov 2004 12:14:27 -0000 1.17 @@ -37,6 +37,7 @@ extern PyMethodDef pygst_functions[]; extern GSList *mainloops; extern void _pygst_main_quit(void); +extern PyObject *PyGstExc_LinkError; /* This is a timeout that gets added to the mainloop to handle SIGINT (Ctrl-C) @@ -133,7 +134,13 @@ PyModule_AddIntConstant(m, "SECOND", GST_SECOND); PyModule_AddIntConstant(m, "MSECOND", GST_MSECOND); PyModule_AddIntConstant(m, "NSECOND", GST_NSECOND); - + /* LinkError exception */ + PyGstExc_LinkError = PyErr_NewException("gst.LinkError", + PyExc_RuntimeError, + NULL); + PyDict_SetItemString(d, "LinkError", PyGstExc_LinkError); pygst_register_classes (d); pygst_add_constants (m, "GST_"); |