GNOME Bugzilla – Bug 634699
[deinterlace] corner-case crash on eos
Last modified: 2010-11-18 00:18:19 UTC
+++ This bug was initially created as a clone of Bug #633294 +++ deinterlace crashes in some circumstances, like Jan's trimmed dvd test, in the scenes menu when clicking a scene. That scene won't be available, so the dvd source will error out and send an eos event down the pipeline. That somehow leads to a crash in deinterlace ** Message: Error: Could not read from resource. resindvdsrc.c(1098): rsn_dvdsrc_step (): /GstPlayBin2:play/GstURIDecodeBin:uridecodebin0/RsnDvdBin:source/resinDvdSrc:dvdsrc: Failed to read next DVD block. Error: Error opening vtsN=1, domain=3. Program received signal SIGSEGV, Segmentation fault.
+ Trace 224644
Thread 140736729724688 (LWP 28644)
Log: gstdeinterlace.c:1631:gst_deinterlace_src_event:<deinterlace:src> received navigation event gstdeinterlace.c:1483:gst_deinterlace_sink_event:<deinterlace:sink> received custom-downstream-oob event: custom-downstream-oob event from 'sink' at time 99:99:99.999999999: application/x-gst-dvd, event=(string)dvd-spu-highlight, button=(int)3, palette=(int)286554832, sx=(int)190, sy=(int)280, ex=(int)365, ey=(int)410; gstdeinterlace.c:1483:gst_deinterlace_sink_event:<deinterlace:sink> received flush-start event: flush-start event from 'sink' at time 99:99:99.999999999: (NULL) gstdeinterlace.c:1483:gst_deinterlace_sink_event:<deinterlace:sink> received flush-stop event: flush-stop event from 'sink' at time 99:99:99.999999999: (NULL) gstdeinterlace.c:882:gst_deinterlace_update_qos:<deinterlace> Updating QoS: proportion gstdeinterlace.c:598:gst_deinterlace_reset_history:<deinterlace> Resetting history (count 0) gstdeinterlace.c:1483:gst_deinterlace_sink_event:<deinterlace:sink> received custom-downstream-oob event: custom-downstream-oob event from 'sink' at time 99:99:99.999999999: application/x-gst-dvd, event=(string)dvd-spu-reset-highlight; ** Message: Error: Could not read from resource. resindvdsrc.c(1098): rsn_dvdsrc_step (): /GstPlayBin2:play/GstURIDecodeBin:uridecodebin0/RsnDvdBin:source/resinDvdSrc:dvdsrc: Failed to read next DVD block. Error: Error opening vtsN=1, domain=3. gstdeinterlace.c:1483:gst_deinterlace_sink_event:<deinterlace:sink> received tag event: tag event from 'sink' at time 99:99:99.999999999: taglist, title=(string)"Title\ 1\,\ Chapter\ 3"; gstdeinterlace.c:1748:gst_deinterlace_alloc_buffer:<deinterlace:sink> alloc with caps video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)64/45, framerate=(fraction)25/1, interlaced=(boolean)true, size 0 gstdeinterlace.c:804:gst_deinterlace_push_history:<deinterlace> Pushing new buffer to the history: 99:99:99.999999999 with duration 99:99:99.999999999 and size 0 gstdeinterlace.c:830:gst_deinterlace_push_history:<deinterlace> Bottom field first gstdeinterlace.c:868:gst_deinterlace_push_history:<deinterlace> Pushed buffer -- current history size 2 gstdeinterlace.c:263:gst_deinterlace_set_method:<deinterlace> Setting new method 1 gstdeinterlace.c:984:gst_deinterlace_output_frame:<deinterlace> Need more fields (have 2, need 4) gstdeinterlace.c:1483:gst_deinterlace_sink_event:<deinterlace:sink> received eos event: eos event from 'sink' at time 99:99:99.999999999: (NULL) gstdeinterlace.c:607:gst_deinterlace_reset_history:<deinterlace> Flushing history (count 2) gstdeinterlace.c:263:gst_deinterlace_set_method:<deinterlace> Setting new method 1 gstdeinterlace.c:269:gst_deinterlace_set_method:<deinterlace> Reusing current method gstdeinterlace.c:263:gst_deinterlace_set_method:<deinterlace> Setting new method 3 gstdeinterlace.c:980:gst_deinterlace_output_frame:<deinterlace> Flushing field(s) using vfir method gstdeinterlace.c:991:gst_deinterlace_output_frame:<deinterlace> All fields gstdeinterlace.c:1002:gst_deinterlace_output_frame:<deinterlace> deinterlacing top field gstdeinterlace.c:926:gst_deinterlace_do_qos:<deinterlace> invalid timestamp, can't do QoS, process frame
Why does deinterlace get asked to allocate a 0 byte buffer? What should gst_deinterlace_alloc_buffer () do when this happens?
streamsynchroniser sends a 0 byte fake buffer with the PREROLL flag set downstream when it sees EOS and no data has passed since the last flush. That seems pretty dubious behaviour, unless it's been recently changed and documented somewhere that such buffers are valid and should be handled by all elements?
> streamsynchroniser sends a 0 byte fake buffer with the PREROLL flag set > downstream when it sees EOS and no data has passed since the last flush. That > seems pretty dubious behaviour, unless it's been recently changed and > documented somewhere that such buffers are valid and should be handled by all > elements? I think it's dubious. Not sure we can make such a change in a stable series.. *** This bug has been marked as a duplicate of bug 633700 ***