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 655717 - resindvd hangs when trying to play DVD
resindvd hangs when trying to play DVD
Status: RESOLVED NOTGNOME
Product: GStreamer
Classification: Platform
Component: gst-plugins-bad
0.10.22
Other Linux
: Normal normal
: git master
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2011-08-01 12:32 UTC by Priit Laes (IRC: plaes)
Modified: 2011-08-03 23:35 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Priit Laes (IRC: plaes) 2011-08-01 12:32:09 UTC
I have a self-compiled DVD (that plays fine in Windows media player) that doesn't play at all with gstreamer. When launching the player, it spews following errors/warnings on the console and the process then locks up.


media-libs/libdvdcss-1.2.10
media-libs/libdvdread-4.1.3_p1168  USE="css"
media-libs/libdvdnav-4.1.3_p1168
media-plugins/gst-plugins-resindvd-0.10.22



I should also mention that it plays in mplayer too, but it mplayer shows following error every few seconds:
[snip]
***  libdvdread: CHECK_VALUE failed in nav_read.c:264 ***
***  for dsi->dsi_gi.zero1 == 0 **
[/snip]

[snip]
$ /usr/bin/gst-launch-0.10 rsndvdbin name=dvd dvdspu name=spu \! ffmpegcolorspace \! videoscale \! ximagesink force-aspect-ratio=true dvd. \! queue max-size-buffers=3 max-size-bytes=0 \! spu.video dvd. \! spu.subpicture dvd. \! audioconvert \! autoaudiosink

libdvdread: Using libdvdcss version 1.2.10 for DVD access
*** Zero check failed in ifo_read.c:518
    for vmgi_mat->zero_3 = 0x00000000010000000000000000000000000000
libdvdnav: Using dvdnav version 4.1.3
libdvdread: Using libdvdcss version 1.2.10 for DVD access
libdvdnav: DVD Title: 20100104_202029
libdvdnav: DVD Serial Number: 3c24a379        
libdvdnav: DVD Title (Alternative): 20100104_202029
libdvdnav: Unable to find map file '/home/plaes/.dvdnav/20100104_202029.map'
*** Zero check failed in ifo_read.c:518
    for vmgi_mat->zero_3 = 0x00000000010000000000000000000000000000
libdvdnav: DVD disk reports itself with Region mask 0x00000000. Regions: 1 2 3 4 5 6 7 8
libdvdnav: *** pgci_ut handle is NULL ***
libdvdnav: *** pgci_ut handle is NULL ***
libdvdnav: DVD disk reports itself with Region mask 0x00000000. Regions: 1 2 3 4 5 6 7 8
.... and that's all...
[/snip]

Backtrace reveals following:
[snip]
(gdb) bt
  • #0 __lll_lock_wait
    at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S line 136
  • #1 _L_lock_1006
    from /lib64/libpthread.so.0
  • #2 __pthread_mutex_lock
    at pthread_mutex_lock.c line 61
  • #3 dvdnav_clear
    at dvdnav.c line 51
  • #4 dvdnav_reset
    at dvdnav.c line 181
  • #5 rsn_dvdsrc_start
    at resindvdsrc.c line 401
  • #6 gst_base_src_start
    at gstbasesrc.c line 2716
  • #7 gst_base_src_activate_push
    at gstbasesrc.c line 2955
  • #8 gst_pad_activate_push
    at gstpad.c line 953
  • #9 gst_pad_set_active
    at gstpad.c line 708
  • #10 activate_pads
    at gstelement.c line 2802
  • #11 gst_iterator_fold
    at gstiterator.c line 549
  • #12 iterator_activate_fold_with_resync
    at gstelement.c line 2834
  • #13 gst_element_pads_activate
    at gstelement.c line 2870
  • #14 gst_element_change_state_func
    at gstelement.c line 2948
  • #15 gst_base_src_change_state
    at gstbasesrc.c line 3097
  • #16 rsn_dvdsrc_change_state
    at resindvdsrc.c line 2443
  • #17 gst_element_change_state
    at gstelement.c line 2718
  • #18 gst_element_set_state_func
    at gstelement.c line 2674
  • #19 gst_bin_element_set_state
    at gstbin.c line 2193
  • #20 gst_bin_change_state_func
    at gstbin.c line 2489
  • #21 rsn_dvdbin_change_state
    at resindvdbin.c line 923
  • #22 gst_element_change_state
    at gstelement.c line 2718
  • #23 gst_element_set_state_func
    at gstelement.c line 2674
  • #24 gst_bin_element_set_state
    at gstbin.c line 2193
  • #25 gst_bin_change_state_func
    at gstbin.c line 2489
  • #26 gst_pipeline_change_state
    at gstpipeline.c line 482
  • #27 gst_element_change_state
    at gstelement.c line 2718
  • #28 gst_element_change_state
    at gstelement.c line 2755
  • #29 gst_element_set_state_func
    at gstelement.c line 2674
  • #30 main
    at gst-launch.c line 1074

Comment 1 Jan Schmidt 2011-08-03 22:49:48 UTC
This is a pretty brutally obvious deadlock inside libdvdnav: dvdnav_reset locks the internal vm_lock, and then calls dvdnav_clear, which locks the vm_lock.

The correct place to get it fixed is in libdvdnav, which I believe these days lives in the mplayer SVN somewhere.

In the meantime, it should work if you run with the env var 'DVDFASTSTART=no'
Comment 2 David Schleef 2011-08-03 23:35:05 UTC
Jan, please reopen this if there's a workaround we can do in gstreamer.  Otherwise, closing as NOTGNOME.