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
signature.asc
Description: This is a digitally signed message part

