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 698546 - avdec: Crash with some h264 streams
avdec: Crash with some h264 streams
Status: RESOLVED OBSOLETE
Product: GStreamer
Classification: Platform
Component: gst-libav
git master
Other Linux
: Normal normal
: git master
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2013-04-22 07:57 UTC by Sebastian Dröge (slomo)
Modified: 2013-04-22 08:33 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Sebastian Dröge (slomo) 2013-04-22 07:57:10 UTC
Happens especially often on Windows, sometimes on Linux. I have a 0.10 GDP dump here that reproduces it reliably on Linux too, backtrace below. Happens after decoding a few frames without problems. Stream is avc/au.

Unfortunately muxing that to anything else makes the crash go away. It happens with versions 0.6.6, 0.7.2 and 0.8.6 of libav at least so it's nothing new. Does *not* happen with the 0.10 versions of everything as in Debian/unstable, which is also libav 0.8.6.



Thread 140737333872384 (LWP 6011)

  • #0 decode_slice_header
    at libavcodec/h264.c line 2927
  • #1 decode_nal_units
    at libavcodec/h264.c line 3966
  • #2 decode_frame
    at libavcodec/h264.c line 4184
  • #3 avcodec_decode_video2
    at libavcodec/utils.c line 1152
  • #4 gst_ffmpegdec_video_frame
    at gstffmpegdec.c line 1769
  • #5 gst_ffmpegdec_frame
    at gstffmpegdec.c line 2286
  • #6 gst_ffmpegdec_chain
    at gstffmpegdec.c line 2733
  • #7 gst_pad_push
    at gstpad.c line 4715
  • #8 gst_base_transform_chain
    at gstbasetransform.c line 2687
  • #9 gst_pad_push
    at gstpad.c line 4715
  • #10 gst_base_parse_push_frame
    at gstbaseparse.c line 1967
  • #11 gst_base_parse_chain
    at gstbaseparse.c line 2303
  • #12 gst_h264_parse_chain
    at gsth264parse.c line 1988
  • #13 gst_pad_push
    at gstpad.c line 4715
  • #14 gst_type_find_element_chain
    at gsttypefindelement.c line 771
  • #15 gst_pad_push
    at gstpad.c line 4715
  • #16 gst_pad_push
    at gstpad.c line 4715
  • #17 gst_gdp_depay_chain
    at gstgdpdepay.c line 328
  • #18 gst_pad_push
    at gstpad.c line 4715
  • #19 gst_base_src_loop
    at gstbasesrc.c line 2567
  • #20 gst_task_func
    at gsttask.c line 327
  • #21 g_thread_pool_thread_proxy
    from /home/slomo/Projects/gstreamer/gst-sdk/cerbero/dist/linux/lib/libglib-2.0.so.0
  • #22 g_thread_proxy
    from /home/slomo/Projects/gstreamer/gst-sdk/cerbero/dist/linux/lib/libglib-2.0.so.0
  • #23 start_thread
    at pthread_create.c line 311
  • #24 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 113

Comment 1 Sebastian Dröge (slomo) 2013-04-22 08:16:44 UTC
Reverting this makes it work again, so something in libav that causes it to explode on discontinuities

commit 630790f50d04a4998a37a0e01304e9196f776476
Author: Wim Taymans <wim.taymans@collabora.co.uk>
Date:   Fri Apr 20 16:16:25 2012 +0200

    ffdec: don't flush buffers on DISCONT
    
    Don't flush the buffers that ffmpeg has on DISCONT but instead let it recove
    This gives a much better image in the case of packet loss.
    
    Fixes https://bugzilla.gnome.org/show_bug.cgi?id=635020
Comment 2 Sebastian Dröge (slomo) 2013-04-22 08:33:31 UTC
It seems to be related to the draining that happens there, without draining nothing is crashing. In 1.0 this code is different and does not crash anymore, especially on DISCONT nothing is done at all.