Little more info.

Using pdb I added a breakpoint at the end of __init_pipeline and another
right after the call to init_pipeline in _end.

At the end of __init_pipeline I get: 
        (Pdb) print self._vol_element
        /GstBin:bin0/GstVolume:volume0 (__main__.GstVolume)
        (Pdb) print self._vol_element.__gtype__
        <GType GstVolume (49977824)>
        (Pdb) print self._vol_element.__grefcount__
        1
        (Pdb) print self._vol_element.__gstrefcount__
        1
        (Pdb) print self._vol_element.get_property('volume')
        1.0
        (Pdb) print vol.__gtype__
        <GType GstVolume (49977824)>
Note that the local variable vol and self._vol_element apparently refer
to the same object, which has refcount == 1.

After the call to __init_pipeline in _end I get: 
        (Pdb) print self._vol_element
        /usr/lib/pymodules/python2.6/quodlibet/player/gstbe.py:1: Warning: 
invalid unclassed pointer in cast to `GstObject'
          # Copyright 2004-2009 Joe Wreschnig, Michael Urman, Steven Robertson
        /usr/lib/pymodules/python2.6/quodlibet/player/gstbe.py:1: Warning: 
g_object_ref: assertion `G_IS_OBJECT (object)' failed
          # Copyright 2004-2009 Joe Wreschnig, Michael Urman, Steven Robertson
        /0x4dfc0e0 (__main__.GstVolume)
        (Pdb) print self._vol_element.__gtype__
        <GType GstVolume (49977824)>
        (Pdb) print self._vol_element.__grefcount__
        0
        (Pdb) print self._vol_element.__gstrefcount__
        0
        (Pdb) print self._vol_element.get_property('volume')
        *** TypeError: object at 0x553d910 of type __main__.GstVolume is not 
initialized

So it looks very much like the object referenced by self._vol_element
has been unreferenced.

I added to the end of __init_pipeline:
        del vol
        del pipeline
        del bufbin
and it seems that it is bufbin going out of scope which causes the
issue: 
        > 
/usr/lib/pymodules/python2.6/quodlibet/player/gstbe.py(142)__init_pipeline()
        -> del vol
        (Pdb) print self._vol_element.get_property('volume')
        1.0
        (Pdb) next
        > 
/usr/lib/pymodules/python2.6/quodlibet/player/gstbe.py(143)__init_pipeline()
        -> del pipeline
        (Pdb) print self._vol_element.get_property('volume')
        1.0
        (Pdb) next
        > 
/usr/lib/pymodules/python2.6/quodlibet/player/gstbe.py(144)__init_pipeline()
        -> del bufbin
        (Pdb) print self._vol_element.get_property('volume')
        1.0
        (Pdb) next
        > 
/usr/lib/pymodules/python2.6/quodlibet/player/gstbe.py(164)__init_pipeline()
        -> return True
        (Pdb) print self._vol_element.get_property('volume')
        *** TypeError: object at 0x60a58c0 of type __main__.GstVolume is not 
initialized

Perhaps "self.bin.set_property('audio-sink', bufbin)" does not do
correct reference counting?

So I tried again with the breakpoints at the end of __init_pipeline and
just after the call in _end and in __init_pipeline I got: 
        (Pdb) print self.bin.get_property('audio-sink')
        /GstBin:bin0 (gst.Bin)
        (Pdb) print self.bin.get_property('audio-sink').__gtype__
        <GType GstBin (32838272)>
        (Pdb) print self.bin.get_property('audio-sink').__grefcount__
        1
and after the call in _end I get: 
        print self.bin.get_property('audio-sink')          
        /usr/lib/pymodules/python2.6/quodlibet/player/gstbe.py:1: Warning: 
g_object_ref: assertion `G_IS_OBJECT (object)' failed
          # Copyright 2004-2009 Joe Wreschnig, Michael Urman, Steven Robertson
        /usr/lib/pymodules/python2.6/quodlibet/player/gstbe.py:1: Warning: 
g_value_take_object: assertion `G_IS_OBJECT (v_object)' failed
          # Copyright 2004-2009 Joe Wreschnig, Michael Urman, Steven Robertson
        None

Ian. 

-- 
Ian Campbell

"The geeks shall inherit the earth."
                -- Karl Lehenbauer

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to