Re: making Python GStreamer plugins work




On Apr 29, 2005, at 8:53 PM, Benjamin Otte wrote:

- And here's the crux of the patch and where the most nastiness comes
  from: Allow classes that are derived in Python to be created with
  g_object_new from all C code. And handle the refcounting issues, too.
  It works, but it's ugly. See the patch for implementation details.

I believe the object creation and destruction process for this kind of
objects requires some support from GObject to work nicely that currently
just does not exist.

I don't claim to recall or understand the details of how pygtk creates objects, but i don't agree that there's support missing from GObject for C-driven creation of instances implemented by a scripting language.

In gtk2-perl, all perl-derived GObject types are created by calling Glib::Object::new(), a no-frills wrapper for g_object_new(). The GType system does its work, normally, and when it gets to the instance-init function for the perl-derived type(s), the standard function for marshaling a GObject to perl creates the initial wrapper and bolts it to the C object. This ensures that the wrapper exists in your INIT_INSTANCE so you can add data to the instance.

See gperl_new_object() (the wrapper setup and management) and the binding for g_object_new() in GObject.xs: http://cvs.sourceforge.net/viewcvs.py/gtk2-perl/gtk2-perl-xs/Glib/ GObject.xs?rev=1.47&view=auto

and gperl_type_instance_init() in GType.xs:
http://cvs.sourceforge.net/viewcvs.py/gtk2-perl/gtk2-perl-xs/Glib/ GType.xs?rev=1.67&view=auto


gtk2-perl also also supports base-init functions; we originally added them to support the GStreamer bindings. ;-)

See gperl_type_base_init(), also in GType.xs. It uses a trick with a seen-instance hash to make sure we don't base-init the same class on a given instance twice.


Don't know if this will be helpful, but it can't hurt to offer. Besides, i got several of the ideas from reading pygtk's sources, and feel i should give something back. :-)



(for the uninitiated --- xs is a meta-language that is like a combination of python's .defs and .overrides files, with embedded documentation and C code snippets. keywords like CODE and OUTPUT expand to a lot of boilerplate that isn't generally very interesting.)


--
"Ears! They help us -- Ears! They help us hear th-- Ea--E--E--E--Ears!"
  -- A Sesame Street singing toy, with Yvonne gleefully pressing
    the button over and over and over and over and...




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]