Page 1 of 1

VLC crashes playing .mpg, almost always

Posted: 14 Jan 2008 21:57
by vl6000
Windows XP Pro; VLC 0.8.6d; videl card NVidia GeForce 6200 TurboCache, BIOS 5.44.02.45, 256MB memory, ForceWare 93.71

A particular .mpg file causes VLC to crash when I attempt to play it. The crash occurs almost always, but occasionally the file plays. When it does play, everything works correctly. Also, other files created by the same pgm (WinTV2000) play correctly.

When it crashes, the audio stream is playing correctly, but no video. I suppose VLC is multi-threaded, and it is the video thread which has crashed.

When it crashes, it does so immediately, with an unhandled exception at loc 0 (access violation reading loc 0). This invokes the Visual Studio debugger, so I have information on the stack:

00000000()
liblibmpeg2_plugin.dll!6d353523()
[Frames below may be incorrect and/or missing, no symbols loaded for liblibmpeg2_plugin.dll]
kernel32.dll!7c80261a()
ntdll.dll!7c9106eb()
msvcrt.dll!77c2c3c9()
kernel32.dll!7c8025f0()
liblibmpeg2_plugin.dll!6d345152()
liblibmpeg2_plugin.dll!6d342872()
liblibmpeg2_plugin.dll!6d34186b()
libvlc.dll!62de0c1b()
kernel32.dll!7c80261a()
kernel32.dll!7c8025f0()
ntdll.dll!7c90e2f1()
kernel32.dll!7c8024b7()
libvlc.dll!62e24326()
msvcrt.dll!77c2c2e3()
libvlc.dll!62de1267()
msvcrt.dll!77c3a3b0()
kernel32.dll!7c80b683()

Here is the "Messages" output from VLC:

main debug: adding playlist item `C:\Miscellaneous\Patriots games\Patriots-Jaguars.mpg' ( C:\Miscellaneous\Patriots games\Patriots-Jaguars.mpg )
main debug: creating new input thread
main debug: waiting for thread completion
main debug: creating statistics handler
main debug: thread 4432 (input) created at priority 1 (input/input.c:265)
main debug: drive letter C: found in source
main debug: `C:\Miscellaneous\Patriots games\Patriots-Jaguars.mpg' gives access `' demux `' path `C:\Miscellaneous\Patriots games\Patriots-Jaguars.mpg'
main debug: creating demux: access='' demux='' path='C:\Miscellaneous\Patriots games\Patriots-Jaguars.mpg'
main debug: looking for access_demux module: 1 candidate
main debug: creating access '' path='C:\Miscellaneous\Patriots games\Patriots-Jaguars.mpg'
main debug: looking for access2 module: 5 candidates
vcd debug: trying .cue file: C:\Miscellaneous\Patriots games\Patriots-Jaguars.cue
vcd debug: could not find .cue file
access_file debug: opening file `C:\Miscellaneous\Patriots games\Patriots-Jaguars.mpg'
main debug: using access2 module "access_file"
main debug: pre-buffering...
main debug: received first data for our buffer
main debug: pre-buffering done 1408981 bytes in 0s - 91724 kbytes/s
main debug: creating demux: access='' demux='' path='C:\Miscellaneous\Patriots games\Patriots-Jaguars.mpg'
main debug: looking for demux2 module: 45 candidates
ts warning: TS module discarded (lost sync)
main debug: using demux2 module "ps"
main debug: looking for a subtitle file in C:\Miscellaneous\Patriots games\
main debug: `C:\Miscellaneous\Patriots games\Patriots-Jaguars.mpg' successfully opened
ps warning: garbage at input, trying to resync...
ps warning: found sync code
ps debug: we found a length of: 1079767945
main debug: selecting program id=0
main debug: looking for decoder module: 28 candidates
main debug: using decoder module "libmpeg2"
main debug: thread 4592 (decoder) created at priority 0 (input/decoder.c:159)
libmpeg2 debug: 704x480 (display 704,480), aspect 901120, sar 64:45, 59.941 fps
main debug: no usable vout present, spawning one
main debug: looking for decoder module: 28 candidates
main debug: using decoder module "a52"
main debug: thread 4532 (decoder) created at priority 2 (input/decoder.c:159)
main debug: window size: 1001x480
main debug: Registering subpicture channel, ID: 2
main debug: Registering subpicture channel, ID: 3
main debug: Registering subpicture channel, ID: 4
main debug: Registering subpicture channel, ID: 5
main debug: looking for video output module: 6 candidates
vout_directx debug: creating DirectXEventThread
main debug: waiting for thread completion
vout_directx debug: DirectXCreateWindow
vout_directx debug: created video sub-window
main debug: thread 4616 (DirectX Events Thread) created at priority 0 (directx.c:278)
vout_directx debug: DirectXEventThread running
vout_directx debug: DirectXInitDDraw
vout_directx debug: directx-device:
vout_directx debug: DirectXEnumCallback: Primary Display Driver, display
vout_directx debug: DirectXEnumCallback: NVIDIA GeForce 6200 TurboCache(TM), \\.\DISPLAY1
vout_directx debug: selecting NVIDIA GeForce 6200 TurboCache(TM), \\.\DISPLAY1
vout_directx debug: DirectXEnumCallback: NVIDIA GeForce 6200 TurboCache(TM), \\.\DISPLAY2
vout_directx debug: screen dimensions (0x0,1680x1050)
vout_directx debug: DirectDraw Capabilities: overlay=1 yuvoverlay=1 can_deinterlace_overlay=1 colorkey=1 stretch=1 bltfourcc=1
vout_directx debug: align_boundary_src=0,0 align_boundary_dest=1,1 align_size_src=0,0 align_size_dest=0,0
vout_directx debug: End DirectXInitDDraw
vout_directx debug: DirectXCreateDisplay
vout_directx debug: DirectXCreateClipper
vout_directx debug: disabling screen saver
main debug: using video output module "vout_directx"
main debug: waiting for thread completion
a52: A/52 channels:2 samplerate:48000 bitrate:384000
main debug: no aout present, spawning one
main debug: looking for audio output module: 3 candidates
vout_directx debug: NewPictureVec overlay:yes chroma:YV12
aout_directx debug: OpenAudio
vout_directx debug: YUV overlay created successfully
vout_directx debug: End NewPictureVec (succeeded)
main debug: got 1 direct buffer(s)
main debug: picture in 704x480 (0,0,704x480), chroma I420, ar 1408:675, sar 64:45
main debug: picture user 704x480 (0,0,704x480), chroma I420, ar 1408:675, sar 64:45
main debug: picture out 704x480 (0,0,704x480), chroma I420, ar 1408:675, sar 64:45
main debug: direct render, mapping render pictures 0-6 to system pictures 1-7
main debug: thread 4648 (video output) created at priority 1 (video_output/video_output.c:421)
aout_directx debug: found device: Primary Sound Driver
aout_directx debug: found device: SigmaTel Audio
libmpeg2 debug: intra-slice refresh stream
aout_directx debug: device supports 2 channels
aout_directx debug: device supports 1 channel
aout_directx debug: device supports A/52 over S/PDIF
aout_directx debug: creating DirectSoundThread
main debug: thread 5152 (DirectSound Notification Thread) created at priority 15 (directx.c:372)
aout_directx debug: DirectSoundThread ready
main debug: using audio output module "aout_directx"
main debug: output 's16l' 48000 Hz Stereo frame=1 samples/4 bytes
main debug: mixer 'fl32' 48000 Hz Stereo frame=1 samples/8 bytes
main debug: filter(s) 'fl32'->'s16l' 48000 Hz->48000 Hz Stereo->Stereo
main debug: looking for audio filter module: 24 candidates
main debug: using audio filter module "float32tos16"
main debug: found a filter for the whole conversion
main debug: looking for audio mixer module: 3 candidates
main debug: using audio mixer module "trivial_mixer"
main debug: input 'a52 ' 48000 Hz Stereo frame=1536 samples/1536 bytes
main debug: filter(s) 'a52 '->'fl32' 48000 Hz->48000 Hz Stereo->Stereo
main debug: looking for audio filter module: 24 candidates
main debug: using audio filter module "a52tofloat32"
main debug: found a filter for the whole conversion
main debug: filter(s) 'fl32'->'fl32' 52800 Hz->48000 Hz Stereo->Stereo
main debug: looking for audio filter module: 24 candidates
main debug: using audio filter module "bandlimited_resampler"
main debug: found a filter for the whole conversion


I also get a crash with the nightly build from 2008-1-13, although the exception location is different there, 0x2ccdb43. Here is the stack from the nightly build:

02ccdb43()
liblibmpeg2_plugin.dll!66746549()
[Frames below may be incorrect and/or missing, no symbols loaded for liblibmpeg2_plugin.dll]
kernel32.dll!7c80261a()
kernel32.dll!7c8025f0()
liblibmpeg2_plugin.dll!66752ccc()
liblibmpeg2_plugin.dll!66742d2e()
liblibmpeg2_plugin.dll!6674177a()
libvlc.dll!6a3242f0()
libvlc.dll!6a323e65()
kernel32.dll!7c8025f0()
ntdll.dll!7c90e2f1()
kernel32.dll!7c8024b7()
libvlc.dll!6a37165e()
msvcrt.dll!77c2c2e3()
libvlc.dll!6a3245cf()
msvcrt.dll!77c3a3b0()
ntdll.dll!7c910732()
kernel32.dll!7c80b683()
ntdll.dll!7c910732()

Re: VLC crashes playing .mpg, almost always

Posted: 14 Jan 2008 23:16
by Jean-Baptiste Kempf
can you try to use --codec ffmpeg or remove the libmpeg2.dll from the built-in modules ?

Re: VLC crashes playing .mpg, almost always

Posted: 15 Jan 2008 02:13
by vl6000
can you try to use --codec ffmpeg or remove the libmpeg2.dll from the built-in modules ?
Can you tell me how to do this in the Windows version, which has GUI?

I want to emphasize that the entire 4-hour (26 GB) file played properly one time, using the default settings (and possibly caching 300 sec).

Re: VLC crashes playing .mpg, almost always

Posted: 15 Jan 2008 14:17
by VLC_help
viewtopic.php?f=5&t=35859&start=75#p119933
that helps if you don't know how to add command line parameters.

Re: VLC crashes playing .mpg, almost always

Posted: 15 Jan 2008 20:09
by vl6000
I have changed the target for the shortcut from

"C:\Program Files\VideoLAN\VLC86\vlc.exe"
to
"C:\Program Files\VideoLAN\VLC86\vlc.exe" --codec ffmpeg

and the crash still occurs immediately after starting to play the file. I also tried starting VLC from a DOS window, with

"C:\Program Files\VideoLAN\VLC86\vlc.exe" --codec ffmpeg

and it fails the same way.

Any other suggestions? Is there any useful information in the messages window?

I can run the start of the file through my MPEG packet analyzer, if that's any use.

Re: VLC crashes playing .mpg, almost always

Posted: 16 Jan 2008 16:37
by VLC_help
You could try to remux the file to see if it helps.

Re: VLC crashes playing .mpg, almost always

Posted: 17 Jan 2008 10:34
by vl6000
I am trying to determine which case I have found:

1) The file is valid MPEG-2 and VLC crashes due to a bug in VLC
or
2) The file is not valid MPEG-2 and VLC crashes because the bad file format was not checked for, or the checking was so expensive that it was deliberately omitted.
or
3) The file is valid MPEG-2, and VLC crashes because some other (unknown) process is interfering with VLC's use of the video hardware or other resources.

Ideally, an application should never crash, even if the input is garbage. Because VLC was able to play the entire file once, I am guessing case (1), with the failure due to an uninitialized variable, a failed memory allocation, buffer overflow, or the like. But that is just a guess, and I was hoping someone more familiar with the operation of the pgm could deduce more from the Messages and/or the stack at the time of the crash.

So, remuxing the file might make it play better, but won't help diagnose the crash.