After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 634699 - [deinterlace] corner-case crash on eos
[deinterlace] corner-case crash on eos
Status: RESOLVED DUPLICATE of bug 633700
Product: GStreamer
Classification: Platform
Component: gst-plugins-good
git master
Other Linux
: Normal critical
: NONE
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2010-11-12 17:39 UTC by Tim-Philipp Müller
Modified: 2010-11-18 00:18 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Tim-Philipp Müller 2010-11-12 17:39:02 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.

Thread 140736729724688 (LWP 28644)

  • #0 memcpy
    at ../sysdeps/x86_64/memcpy.S line 191
  • #1 gst_deinterlace_simple_method_deinterlace_frame_planar_plane
  • #2 gst_deinterlace_simple_method_deinterlace_frame_planar
    at gstdeinterlacemethod.c line 648
  • #3 gst_deinterlace_method_deinterlace_frame
    at gstdeinterlacemethod.c line 202
  • #4 gst_deinterlace_output_frame
    at gstdeinterlace.c line 1048
  • #5 gst_deinterlace_reset_history
    at gstdeinterlace.c line 609
  • #6 gst_deinterlace_sink_event
    at gstdeinterlace.c line 1542
  • #7 gst_pad_send_event
    at gstpad.c line 5120
  • #8 gst_pad_push_event
    at gstpad.c line 4974
  • #9 gst_base_transform_sink_event
    at gstbasetransform.c line 1950
  • #10 gst_pad_send_event
    at gstpad.c line 5120
  • #11 gst_pad_push_event
    at gstpad.c line 4974
  • #12 gst_pad_send_event
    at gstpad.c line 5120
  • #13 gst_pad_push_event
    at gstpad.c line 4974
  • #14 gst_stream_synchronizer_sink_event
    at gststreamsynchronizer.c line 501
  • #15 gst_pad_send_event
    at gstpad.c line 5120
  • #16 gst_pad_push_event
    at gstpad.c line 4974
  • #17 gst_pad_event_default_dispatch
    at gstpad.c line 3510
  • #18 gst_pad_event_default
    at gstpad.c line 3593
  • #19 gst_pad_send_event
    at gstpad.c line 5120
  • #20 gst_pad_push_event
    at gstpad.c line 4974
  • #21 gst_pad_send_event
    at gstpad.c line 5120
  • #22 gst_pad_push_event
    at gstpad.c line 4974
  • #23 gst_selector_pad_event
    at gstinputselector.c line 435
  • #24 gst_pad_send_event
    at gstpad.c line 5120
  • #25 gst_pad_push_event
    at gstpad.c line 4974
  • #26 gst_pad_send_event
    at gstpad.c line 5120
  • #27 gst_pad_push_event
    at gstpad.c line 4974
  • #28 gst_pad_send_event
    at gstpad.c line 5120
  • #29 gst_pad_push_event
    at gstpad.c line 4974
  • #30 rsn_audiomunge_sink_event
    at rsnaudiomunge.c line 335
  • #31 gst_pad_send_event
    at gstpad.c line 5120
  • #32 gst_pad_push_event
    at gstpad.c line 4974
  • #33 gst_pad_send_event
    at gstpad.c line 5120
  • #34 gst_pad_push_event
    at gstpad.c line 4974
  • #35 gst_pad_send_event
    at gstpad.c line 5120
  • #36 gst_pad_push_event
    at gstpad.c line 4974
  • #37 gst_a52dec_sink_event
    at gsta52dec.c line 524
  • #38 gst_pad_send_event
    at gstpad.c line 5120
  • #39 gst_pad_push_event
    at gstpad.c line 4974
  • #40 gst_auto_convert_sink_event
    at gstautoconvert.c line 1096
  • #41 gst_pad_send_event
    at gstpad.c line 5120
  • #42 gst_pad_push_event
    at gstpad.c line 4974
  • #43 rsn_dec_sink_event
    at rsndec.c line 66
  • #44 gst_pad_send_event
    at gstpad.c line 5120
  • #45 gst_pad_push_event
    at gstpad.c line 4974
  • #46 gst_selector_pad_event
    at rsnstreamselector.c line 299
  • #47 gst_pad_send_event
    at gstpad.c line 5120
  • #48 gst_pad_push_event
    at gstpad.c line 4974
  • #49 gst_single_queue_push_one
    at gstmultiqueue.c line 944
  • #50 gst_multi_queue_loop
    at gstmultiqueue.c line 1101
  • #51 gst_task_func
    at gsttask.c line 271
  • #52 g_thread_pool_thread_proxy
    at /glib2.0-2.27.2/glib/gthreadpool.c line 319
  • #53 g_thread_create_proxy
    at /glib2.0-2.27.2/glib/gthread.c line 1897


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
Comment 1 Robert Swain 2010-11-12 21:20:08 UTC
Why does deinterlace get asked to allocate a 0 byte buffer? What should gst_deinterlace_alloc_buffer () do when this happens?
Comment 2 Jan Schmidt 2010-11-13 12:04:14 UTC
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?
Comment 3 Tim-Philipp Müller 2010-11-18 00:18:19 UTC
> 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 ***