http://bugs.winehq.org/show_bug.cgi?id=14578
Summary: Thief, System Shock 2 - video intros hang/crash in the end Product: Wine Version: CVS/GIT Platform: PC OS/Version: Linux Status: NEW Severity: minor Priority: P2 Component: quartz AssignedTo: wine-bugs@winehq.org ReportedBy: alexd4@inbox.lv CC: m.b.lankhorst@gmail.com
After recent fixes, videos now start playing in Wine with builtin quartz.dll. But some new problems now appeared.
There was a regression - some crashes because of "quartz: Fix reference leak in avi splitter on end of stream." (28d6203ca9bd0ba17ce38e309f340b518f954c08) patch. So far it appears to have been fixed by recently submitted "quartz: Fix handling of zero byte samples and endofstreams".
The latter patch, although fixing the crash, seems to introduce hangs of intro videos in Thief (i.e. it works before "fix reference leak", it crashes after "fix reference leak" and it doesn't crash but hangs after also applying "fix handling of zero byte samples". Very likely it simply exposes a previously hidden underlying problem. Because, for example, system shock 2 (also a Looking Glass game with similar engine) has some videos for which I can't find a working Wine version, probably they always had this hang problem. I've analyzed +quartz logs for differences, and it looks to me that the critical difference is lack of AVISplitter_SendEndOfFile on the video (0) stream in NON-working cases, which possibly makes game unaware that video ended. Non-working cases have either "END OF STREAM" detected on stream 1 only or not at all.
+quartz log of Thief session in Wine build that works fine has: err:quartz:AVISplitter_next_request END OF STREAM ON 1 trace:quartz:AVISplitter_SendEndOfFile End of file reached [...] err:quartz:AVISplitter_next_request END OF STREAM ON 0 trace:quartz:AVISplitter_SendEndOfFile End of file reached
+quartz log of Thief session in Wine build that hangs has no SendEndOfFile at all.
+quartz log of System Shock 2 in Wine build that works for Thief (but SS2 still hangs) has err:quartz:AVISplitter_next_request END OF STREAM ON 1 trace:quartz:AVISplitter_SendEndOfFile End of file reached
System Shock 2 with 28d6203ca9bd0ba17ce38e309f340b518f954c08 and "fix zero size samples" patch - can't compare because it now crashes (assert failed) :/
filesource.c:1250: FileAsyncReader_WaitForNext: Assertion `rtStop == rtSampleStop' failed.
This pattern shows when watching videos outside the game in the graphedit tool as well.
http://bugs.winehq.org/show_bug.cgi?id=14578
--- Comment #1 from Alexander Dorofeyev alexd4@inbox.lv 2008-07-20 10:32:59 --- Created an attachment (id=14938) --> (http://bugs.winehq.org/attachment.cgi?id=14938) +quartz log of Thief, Wine build that doesn't hang
http://bugs.winehq.org/show_bug.cgi?id=14578
--- Comment #2 from Alexander Dorofeyev alexd4@inbox.lv 2008-07-20 10:34:03 --- Created an attachment (id=14939) --> (http://bugs.winehq.org/attachment.cgi?id=14939) +quartz log of Thief, Wine build that hangs
http://bugs.winehq.org/show_bug.cgi?id=14578
--- Comment #3 from Alexander Dorofeyev alexd4@inbox.lv 2008-07-20 11:52:24 --- Continuing analysis of Thief videos in a working Wine build (current git + 28d6203ca9bd0ba17ce38e309f340b518f954c08 reverted and zero byte samples patch NOT applied). I'm looking further into differences that "fix handling of zero byte samples" patch introduces. I've added debug output in AVISplitter_next_request, that is supposed to call AVISplitter_SendEndOfFile, and it shows that
1) thief avis only seem to enter the "else if (This->oldindex) { } " path 2) stream->index always seems to be 0
Furthermore, I don't see any obvious way how stream->index can become anything but 0 for such a video.
This may explain why end of file is never detected in Thief videos with "fix handling of zero byte samples" as it replaces the end of file detecting conditional
- if (stream->pos_next * sizeof(This->oldindex->aIndex[0]) >= This->oldindex->cb) + if (stream->index)
to one that will never be true.
http://bugs.winehq.org/show_bug.cgi?id=14578
--- Comment #4 from Alexander Dorofeyev alexd4@inbox.lv 2008-07-20 13:34:49 --- Failed assert in system shock 2 intros seem to be a part of the same problem. I don't know whether this is really right or not as I don't understand yet how this index stuff works, but reverting that part back, i.e.
- if (stream->index) + if (stream->pos_next * sizeof(This->oldindex->aIndex[0]) >= This->oldindex->cb)
Cures hang in Thief and the assert in SS2 as well. It seems that SS2 assert may be coming from it failing to stop at end of stream.
http://bugs.winehq.org/show_bug.cgi?id=14578
Alexander Dorofeyev alexd4@inbox.lv changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED
--- Comment #5 from Alexander Dorofeyev alexd4@inbox.lv 2008-07-22 13:03:31 --- Seems to be fixed already in current git by 3376ba6113f81a420c56292f25bb5420ae2b6465. Thanks Maarten :) :).
marking fixed.
http://bugs.winehq.org/show_bug.cgi?id=14578
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #6 from Alexandre Julliard julliard@winehq.org 2008-07-25 13:25:43 --- Closing bugs fixed in 1.1.2.
http://bugs.winehq.org/show_bug.cgi?id=14578
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Version|CVS/GIT |unspecified