[gst-devel] Re: making Python GStreamer plugins work

muppet scott at asofyet.org
Mon May 2 02:56:13 CEST 2005


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...





More information about the gstreamer-devel mailing list