[MPlayer-users] problem with a specific DVD, but xine works fine

Mike Castle dalgoda+mplayer at gmail.com
Fri Oct 10 00:53:19 CEST 2008


I'm running Debian testing + stuff from debian-multimedia.org

I have the same problem with whatever version of older mplayer comes
with Debian testing as well DebMM's dev-SVN-r26940 and my own built
dev-SVN-r27725-4.3.2

I also have this problem on two separate computers.  Most other DVDs work fine.

The DVD in question is The DaVinci Code, Disc 1, Region 1.

What happens is, if I play with:

mplayer dvd//:1

it hangs after about 8 seconds and the kernel starts spewing messages like:

[80665.956897] hda: media error (bad sector): status=0x51 { DriveReady
SeekComplete Error }
[80665.956897] hda: media error (bad sector): error=0x30 {
LastFailedSense=0x03 }
[80665.956897] ide: failed opcode was: unknown
[80665.956897] ATAPI device hda:
[80665.956908]   Error: Medium error -- (Sense key=0x03)
[80665.956917]   (reserved error code) -- (asc=0x02, ascq=0x00)
[80665.956923]   The failed "Read 10" packet command was:
[80665.956925]   "28 00 00 03 29 50 00 00 02 00 00 00 00 00 00 00 "
[80665.956948] end_request: I/O error, dev hda, sector 828736
[80665.956958] Buffer I/O error on device hda, logical block 103592
[80673.059179] hda: media error (bad sector): status=0x51 { DriveReady
SeekComplete Error }
[80673.059179] hda: media error (bad sector): error=0x30 {
LastFailedSense=0x03 }
[80673.059179] ide: failed opcode was: unknown
[80673.119543] ATAPI device hda:
[80673.119543]   Error: Medium error -- (Sense key=0x03)
[80673.119543]   (reserved error code) -- (asc=0x02, ascq=0x00)
[80673.119543]   The failed "Read 10" packet command was:
[80673.119543]   "28 00 00 03 29 50 00 00 02 00 00 00 00 00 00 00 "
[80673.119543] end_request: I/O error, dev hda, sector 828736
[80673.119543] Buffer I/O error on device hda, logical block 103592


Running under gdb and asking for a backtrace, we get:

#0  0xb7f30424 in __kernel_vsyscall ()
#1  0xb7e15093 in __read_nocancel () from /lib/i686/cmov/libpthread.so.0
#2  0x082010e9 in libc_read (dvdcss=0x9402bb0, p_buffer=0x9402278, i_blocks=1)
    at libdvdcss/device.c:679
#3  0x08201a77 in dvdcss_read (dvdcss=0x9402bb0, p_buffer=0x9402278,
    i_blocks=1, i_flags=1) at libdvdcss/libdvdcss.c:638
#4  0x0819fe7d in DVDReadBlocks (dvd_file=0x9429c98, offset=209872,
    block_count=1, data=0x9402278 "") at libdvdread/dvd_reader.c:1256
#5  0x0819b9b7 in dvd_read_sector (d=0x9429cf8, data=0x9402278 "")
    at stream/stream_dvd.c:366
#6  0x0819bc7b in fill_buffer (s=0x9402218, but=0x9402278 "", len=2048)
    at stream/stream_dvd.c:497
#7  0x08193b2c in stream_fill_buffer (s=0x9402218) at stream/stream.c:263
#8  0x0816075d in demux_mpg_fill_buffer (demux=0x942a608, ds=0x942aef8)
    at ./stream/stream.h:137
#9  0x08139a35 in ds_fill_buffer (ds=0x942aef8) at libmpdemux/demuxer.c:428
#10 0x0813a228 in demux_read_data (ds=0x942aef8,
    mem=0x9456658 "\004�\002�Yt\020\006\213\201�020*
yK�W(]�\032�\033�\222?\205M����I�n�222״��\216`\b�^\234*M0>}\r��\022��mt��Ru\r-(i\222��\225�y��+�v\223}*�234＀
K��\"\223]\036\017u�|�023�k��023�_m`\235k�jݯ\005����m�V\035>{6�IiBO\t���|�V\02t���\222�Z\030��\016��9$�!��7�...,
len=1347) at libmpdemux/demuxer.c:527
#11 0x081d7a6e in a52_fillbuff (sh_audio=0x944ba78)
    at libmpcodecs/ad_liba52.c:84
#12 0x081d7c8a in decode_audio (sh_audio=0x944ba78,
    buf=0x9457580
"��a���w���\213���\234�����\236���\235���\235����������������������������\237��\230��\220��\213��\206��\202��\201��\201��\205��\214��\226�������������\226��\212��\201��w��n��i��d��c��e��h��l��p��t��z���}���\201���\206���\212���\217���\226���"...,
minlen=8192,
    maxlen=71680) at libmpcodecs/ad_liba52.c:315
#13 0x080f814b in decode_audio (sh_audio=0x944ba78, minlen=8192)
    at libmpcodecs/dec_audio.c:383
#14 0x08088f98 in main (argc=2, argv=0xbfe4a134) at mplayer.c:2044


Anything using xine-lib (xine, codeine, kaffeine) plays this disc fine
in the same environment.

Using strace, I can watch both applications going through the CSS
keys, and reading data off of the disc.  Then at some point they
differ and mplayer tries to read a block it can't, while xine appears
to skip it and continues on it's way.


I thought that both xine and mplayer were built on top of
dvdnav/dvdread, but I can't figure out where xine called into that
library (granted I didn't spend a lot of time on it either).  A little
further seems to indicate that xine manages it's own local version of
libdvdnav?  Blast divergence.  I was hoping that this would be a
difference in how mplayer uses the library vs how xine uses the
library.  But now I wonder if it's a problem in the library instead.

I'm willing to try a variety of things and hack on this for a while if
anyone wants to throw suggestions at me.

Any help is appreciated.

mrc


More information about the MPlayer-users mailing list