Gst.debug_add_log_function() and GST_DEBUG=*:5 causes assertion error in pygobject_register_wrapper
I'm trying to use GST_DEBUG to track down a problem I'm having with a Python program I have using pygobject.
If I set GST_DEBUG to have level 5 (DEBUG) or above, and I try to use Gst.debug_add_log_function() so I can grab the messages to put in a python logging module logger, I eventually get something like this:
2020-01-02 17:51:38,197: root: (GST_LEVEL_WARNING) ../gstreamer-1.16.2/gst/gststructure.c:priv_gst_structure_append_to_gstring:1861:,No value transform to serialize field 'pool' of type 'GArray'
0:00:53.135628400 79124 32cf610 WARN structure gststructure.c:1861:priv_gst_structure_append_to_gstring: No value transform to serialize field 'pool' of type 'GArray'
2020-01-02 17:51:38,197: root: (GST_LEVEL_WARNING) ../gstreamer-1.16.2/gst/gststructure.c:priv_gst_structure_append_to_gstring:1861:,No value transform to serialize field 'allocator' of type 'GArray'
0:00:53.136467600 79124 32cf610 WARN structure gststructure.c:1861:priv_gst_structure_append_to_gstring: No value transform to serialize field 'allocator' of type 'GArray'
2020-01-02 17:51:38,197: root: (GST_LEVEL_DEBUG) ../gstreamer-1.16.2/libs/gst/base/gstbasetransform.c:gst_base_transform_do_bufferpool:955:,ALLOCATION (1) params: allocation query: 0000000006e6d190, GstQueryAllocation, caps=(GstCaps)"video/x-raw\,\ format\=\(string\)RGBA\,\ width\=\(int\)320\,\ height\=\(int\)240\,\ framerate\=\(fraction\)30/1\,\ multiview-mode\=\(string\)mono\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ interlace-mode\=\(string\)progressive", need-pool=(boolean)true, meta=(GArray)NULL, pool=(GArray)NULL, allocator=(GArray)NULL;
0:00:53.137375200 79124 32cf610 DEBUG basetransform gstbasetransform.c:955:gst_base_transform_do_bufferpool:<zoom-videocrop> ALLOCATION (1) params: allocation query: 0000000006e6d190, GstQueryAllocation, caps=(GstCaps)"video/x-raw\,\ format\=\(string\)RGBA\,\ width\=\(int\)320\,\ height\=\(int\)240\,\ framerate\=\(fraction\)30/1\,\ multiview-mode\=\(string\)mono\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ interlace-mode\=\(string\)progressive", need-pool=(boolean)true, meta=(GArray)NULL, pool=(GArray)NULL, allocator=(GArray)NULL;
2020-01-02 17:51:38,197: root: (GST_LEVEL_DEBUG) ../gstreamer-1.16.2/libs/gst/base/gstbasetransform.c:gst_base_transform_do_bufferpool:964:,no doing passthrough, delay bufferpool
0:00:53.139734600 79124 32cf610 DEBUG basetransform gstbasetransform.c:964:gst_base_transform_do_bufferpool:<zoom-videocrop> no doing passthrough, delay bufferpool
sys:1: Warning: g_object_ref_sink: assertion 'g_atomic_int_get (&object->ref_count) >= 1' failed
**
ERROR:gi/pygobject-object.c:722:pygobject_register_wrapper: assertion failed: (gself->obj->ref_count >= 1)
Bail out! ERROR:gi/pygobject-object.c:722:pygobject_register_wrapper: assertion failed: (gself->obj->ref_count >= 1)
Exception code=0x80000003 flags=0x0 at 0x00007FFABDDC0192
In my Python code I have (logger)
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
hdlr = logging.StreamHandler(sys.stderr)
fmt = logging.Formatter(fmt='%(asctime)s: %(name)s: %(message)s')
hdlr.setFormatter(fmt)
logger.addHandler(hdlr)
(root,_) = os.path.splitext(__file__)
pyver = sys.version_info
fhdlr = logging.FileHandler(filename='{fn}-py{major}.{minor}-{dt}.log'.format(fn=root,
major=pyver.major,
minor=pyver.minor,
dt=datetime.date.today().strftime('%Y%m%d')))
fhdlr.setFormatter(fmt)
logger.addHandler(fhdlr)
handler for getting Gst.DebugMessage messages
def gstlog_hdlr(category, level, file, function, line, obj,
message, user_data):
# This catches the Gst.DebugMessage messages
# according to the Gst.DebugLevel
msg = '({level}) {file}:{function}:{line}:,{message}'.format(
level=level.value_name,
file=file,
function=function,
line=line,
message=message.get())
logger.info(msg)
return
call to main(). testCameraBin.py
if __name__ == '__main__':
Gst.debug_add_log_function(gstlog_hdlr, None)
main()
Gst.debug_remove_log_function(gstlog_hdlr)
If I don't call Gst.debug_add_log_function(), I don't get the assertion error, but I'd log to redirect the Gst.DebugMessage messages to my logger. If I set the level lower, I don't get the assertion error, but I'm not getting down the the debug level I'm looking for either.
Edited by Tim Williams