https://bugs.winehq.org/show_bug.cgi?id=23175
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|Zak McKracken - Between |Zak McKracken - Between |Time and Space fails to |Time and Space fails to |play back intro video |play back intro video | |(ICM_DECOMPRESS_GET_FORMAT | |problems with Xvid) Component|-unknown |msvfw32
--- Comment #4 from Bruno Jesus 00cpxxx@gmail.com --- I remember this problem from years ago, I tried contacting Xvid developers to no response.
In the process of reproducing video Wine issues a ICM_DECOMPRESS_GET_FORMAT message so that the codec can fill the output structure with the correct output video frame information, but unfortunately Xvid (unlike every other codec) checks the output data before filling it (!?) with the requested information.
That is why the log varies depending on the attempt to run, different garbage is present in lpbiOut when the message is sent to the codec.
So probably wine implements this in a little bit different way since it works in Windows.
There are 2 separate problems. The problem starts in msvfw32/msvideo_main.c:ICGetDisplayFormat because:
738 ICSendMessage(tmphic, ICM_DECOMPRESS_GET_FORMAT, (DWORD_PTR)lpbiIn, (DWORD_PTR)lpbiOut); 739 740 if (lpbiOut->biCompression != 0) { 741 FIXME("Ooch, how come decompressor outputs compressed data (%d)? ?\n", 742 lpbiOut->biCompression); 743 }
The return of ICSendMessage is not checked, so the rest of IF conditions are tested over garbage when ICSendMessage returns error (in this case ICERR_BADFORMAT).
Anyway, the main problem is in how to request for the output format in a way Xvid does not complain.