gst/arg-types.py: GstMiniObject used as virtual methods parameters should be unreffed before calling the method and t...

Original commit message from CVS:
* gst/arg-types.py:
GstMiniObject used as virtual methods parameters should be unreffed
before calling the method and the ref-ed.
Added Params and Returns for const-gchar*, GType and gulong so the
code generator can generate more virtual methods handlers/proxys.
* gst/gst-types.defs:
* gst/gst.defs:
* gst/interfaces.defs:
Added vtable and virtual method definition for interfaces so we can properly use virtual
methods from those interfaces in python.
This commit is contained in:
Edward Hervey 2006-04-28 15:07:41 +00:00
parent a0da01acaa
commit 31033595e4
5 changed files with 271 additions and 6 deletions

View file

@ -1,3 +1,16 @@
2006-04-28 Edward Hervey <edward@fluendo.com>
* gst/arg-types.py:
GstMiniObject used as virtual methods parameters should be unreffed
before calling the method and the ref-ed.
Added Params and Returns for const-gchar*, GType and gulong so the
code generator can generate more virtual methods handlers/proxys.
* gst/gst-types.defs:
* gst/gst.defs:
* gst/interfaces.defs:
Added vtable and virtual method definition for interfaces so we can properly use virtual
methods from those interfaces in python.
2006-04-28 Edward Hervey <edward@fluendo.com>
* gst/gstmodule.c: (init_gst):

View file

@ -23,7 +23,7 @@
# Author: David I. Lehn <dlehn@users.sourceforge.net>
from argtypes import UInt64Arg, Int64Arg, PointerArg, ArgMatcher, ArgType, matcher
from reversewrapper import Parameter, ReturnType, GBoxedParam, GBoxedReturn
from reversewrapper import Parameter, ReturnType, GBoxedParam, GBoxedReturn, IntParam, IntReturn
class XmlNodeArg(ArgType):
"""libxml2 node generator"""
@ -147,14 +147,15 @@ class GstMiniObjectParam(Parameter):
def convert_c2py(self):
self.wrapper.add_declaration("PyObject *py_%s = NULL;" % self.name)
self.wrapper.write_code(code=("if (%s)\n"
self.wrapper.write_code(code=("if (%s) {\n"
" py_%s = pygstminiobject_new((GstMiniObject *) %s);\n"
"else {\n"
" gst_mini_object_unref ((GstMiniObject *) %s);\n"
"} else {\n"
" Py_INCREF(Py_None);\n"
" py_%s = Py_None;\n"
"}"
% (self.name, self.name, self.name, self.name)),
cleanup=("Py_DECREF(py_%s);" % self.name))
% (self.name, self.name, self.name, self.name, self.name)),
cleanup=("gst_mini_object_ref ((GstMiniObject *) %s);\nPy_DECREF(py_%s);" % (self.name, self.name)))
self.wrapper.add_pyargv_item("py_%s" % self.name)
matcher.register_reverse('GstMiniObject*', GstMiniObjectParam)
@ -266,6 +267,50 @@ class UInt64Return(ReturnType):
failure_expression="!PyLong_Check(py_retval)",
failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be an long");')
self.wrapper.write_code("retval = PyLong_AsUnsignedLongLongMask(py_retval);")
class ULongParam(Parameter):
def get_c_type(self):
return self.props.get('c_type', 'gulong')
def convert_c2py(self):
self.wrapper.add_declaration("PyObject *py_%s;" % self.name)
self.wrapper.write_code(code=("py_%s = PyLong_FromUnsignedLong(%s);" %
(self.name, self.name)),
cleanup=("Py_DECREF(py_%s);" % self.name))
self.wrapper.add_pyargv_item("py_%s" % self.name)
class ULongReturn(ReturnType):
def get_c_type(self):
return self.props.get('c_type', 'gulong')
def write_decl(self):
self.wrapper.add_declaration("%s retval;" % self.get_c_type())
def write_error_return(self):
self.wrapper.write_code("return -G_MAXINT;")
def write_conversion(self):
self.wrapper.write_code(
code=None,
failure_expression="!PyLong_Check(py_retval)",
failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be an long");')
self.wrapper.write_code("retval = PyLong_AsUnsignedLongMask(py_retval);")
class ConstStringReturn(ReturnType):
def get_c_type(self):
return "const gchar *"
def write_decl(self):
self.wrapper.add_declaration("const gchar *retval;")
def write_error_return(self):
self.wrapper.write_code("return NULL;")
def write_conversion(self):
self.wrapper.write_code(
code=None,
failure_expression="!PyString_Check(py_retval)",
failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be a string");')
self.wrapper.write_code("retval = g_strdup(PyString_AsString(py_retval));")
matcher.register('GstClockTime', UInt64Arg())
matcher.register('GstClockTimeDiff', Int64Arg())
@ -294,4 +339,12 @@ for typename in ["guint64", "GstClockTime"]:
matcher.register_reverse(typename, UInt64Param)
matcher.register_reverse_ret(typename, UInt64Return)
matcher.register_reverse_ret("const-gchar*", ConstStringReturn)
matcher.register_reverse("GType", IntParam)
matcher.register_reverse_ret("GType", IntReturn)
matcher.register_reverse("gulong", ULongParam)
matcher.register_reverse_ret("gulong", ULongReturn)
del arg

View file

@ -1028,6 +1028,7 @@
(in-module "Gst")
(c-name "GstURIHandler")
(gtype-id "GST_TYPE_URI_HANDLER")
(vtable "GstURIHandlerInterface")
)
(define-interface TagSetter
@ -1040,5 +1041,6 @@
(in-module "Gst")
(c-name "GstImplementsInterface")
(gtype-id "GST_TYPE_IMPLEMENTS_INTERFACE")
(vtable "GstImplementsInterfaceClass")
)

View file

@ -2599,6 +2599,14 @@
)
)
(define-virtual supported
(of-object "GstImplementsInterface")
(return-type "gboolean")
(parameters
'("GType" "iface_type")
)
)
;; From ../gstreamer/gst/gstiterator.h
(define-function iterator_new
@ -6212,6 +6220,29 @@
)
)
(define-virtual get_type
(of-object "GstURIHandler")
(return-type "guint")
)
(define-virtual get_protocols
(of-object "GstURIHandler")
(return-type "gchar**")
)
(define-virtual get_uri
(of-object "GstURIHandler")
(return-type "const-gchar*")
)
(define-virtual set_uri
(of-object "GstURIHandler")
(return-type "gboolean")
(parameters
'("const-gchar*" "uri")
)
)
;; From ../gstreamer/gst/gstutils.h
(define-function util_set_value_from_string

View file

@ -12,6 +12,7 @@
(in-module "Gst")
(c-name "GstColorBalance")
(gtype-id "GST_TYPE_COLOR_BALANCE")
(vtable "GstColorBalanceClass")
)
(define-object ColorBalanceChannel
@ -33,6 +34,7 @@
(fields
'("GstMixerType" "mixer_type")
)
(vtable "GstMixerClass")
)
(define-object MixerTrack
@ -60,18 +62,21 @@
(in-module "Gst")
(c-name "GstNavigation")
(gtype-id "GST_TYPE_NAVIGATION")
(vtable "GstNavigationInterface")
)
(define-interface PropertyProbe
(in-module "Gst")
(c-name "GstPropertyProbe")
(gtype-id "GST_TYPE_PROPERTY_PROBE")
(vtable "GstPropertyProbeInterface")
)
(define-interface Tuner
(in-module "Gst")
(c-name "GstTuner")
(gtype-id "GST_TYPE_TUNER")
(vtable "GstTunerClass")
)
(define-object TunerChannel
@ -189,6 +194,28 @@
)
)
(define-virtual list_channels
(of-object "GstColorBalance")
(return-type "const-GList*")
)
(define-virtual set_value
(of-object "GstColorBalance")
(return-type "none")
(parameters
'("GstColorBalanceChannel*" "channel")
'("gint" "value")
)
)
(define-virtual get_value
(of-object "GstColorBalance")
(return-type "gint")
(parameters
'("GstColorBalanceChannel*" "channel")
)
)
;; From /opt/gnome/include/gstreamer-0.7/gst/mixer/mixer.h
@ -303,6 +330,48 @@
)
)
(define-virtual list_tracks
(of-object "GstMixer")
(return-type "const-GList*")
)
(define-virtual set_volume
(of-object "GstMixer")
(return-type "none")
(parameters
'("GstMixerTrack*" "track")
'("gint*" "volumes")
)
)
(define-virtual get_volume
(of-object "GstMixer")
(return-type "none")
(parameters
'("GstMixerTrack*" "track")
'("gint*" "volumes")
)
)
(define-virtual set_mute
(of-object "GstMixer")
(return-type "none")
(parameters
'("GstMixerTrack*" "track")
'("gboolean" "mute")
)
)
(define-virtual set_record
(of-object "GstMixer")
(return-type "none")
(parameters
'("GstMixerTrack*" "track")
'("gboolean" "record")
)
)
;; From ../gst-plugins-base/gst-libs/gst/interfaces/mixeroptions.h
(define-function gst_mixer_options_get_type
@ -355,7 +424,13 @@
)
)
(define-virtual send_event
(of-object "GstNavigation")
(return-type "none")
(parameters
'("GstStructure*" "structure")
)
)
;; From /opt/gnome/include/gstreamer-0.7/gst/propertyprobe/propertyprobe.h
@ -451,6 +526,37 @@
)
)
(define-virtual get_properties
(of-object "GstPropertyProbe")
(return-type "const-GList*")
)
(define-virtual needs_probe
(of-object "GstPropertyProbe")
(return-type "gboolean")
(parameters
'("guint" "prop_id")
'("const-GParamSpec*" "pspec")
)
)
(define-virtual probe_property
(of-object "GstPropertyProbe")
(return-type "none")
(parameters
'("guint" "prop_id")
'("const-GParamSpec*" "pspec")
)
)
(define-virtual get_values
(of-object "GstPropertyProbe")
(return-type "GValueArray*")
(parameters
'("guint" "prop_id")
'("const-GParamSpec*" "pspec")
)
)
;; From /opt/gnome/include/gstreamer-0.7/gst/tuner/tuner.h
@ -586,6 +692,66 @@
)
)
(define-virtual list_channels
(of-object "GstTuner")
(return-type "const-GList*")
)
(define-virtual set_channel
(of-object "GstTuner")
(return-type "none")
(parameters
'("GstTunerChannel*" "channel")
)
)
(define-virtual get_channel
(of-object "GstTuner")
(return-type "GstTunerChannel*")
)
(define-virtual list_norms
(of-object "GstTuner")
(return-type "const-GList*")
)
(define-virtual set_norm
(of-object "GstTuner")
(return-type "none")
(parameters
'("GstTunerNorm*" "channel")
)
)
(define-virtual get_norm
(of-object "GstTuner")
(return-type "GstTunerNorm*")
)
(define-virtual set_frequency
(of-object "GstTuner")
(return-type "none")
(parameters
'("GstTunerChannel*" "channel")
'("gulong" "frequency")
)
)
(define-virtual get_frequency
(of-object "GstTuner")
(return-type "gulong")
(parameters
'("GstTunerChannel*" "channel")
)
)
(define-virtual signal_strength
(of-object "GstTuner")
(return-type "gint")
(parameters
'("GstTunerChannel*" "channel")
)
)