The movie player would use OSystem::getMillis to check the elapsed playing time
to keep audio and video in sync. This would go wrong when the game was paused
during movie playback, as the player would try to make up for the pause time,
fast forwarding the movie and breaking A/V sync.
This commit improves this by using Engine::getTotalPlayTime, which subtracts
pause time, and Mixer::getElapsedTime, which returns the actual length of audio
played. The player seems to restart later than the audio when unpausing, so it
still catches up for about 10 frames, but it's not as bad as before and it does
not lose A/V sync.
The engine used the plain sound type for sampled sound effects and movie audio
and applied the SFX user volume control to the plain sound type. This caused
emulators like the AdLib emulator and Munt to be affected by the SFX user
volume control, because they use the plain sound type. This commit fixes this
by using the SFX sound type instead of the plain sound type. User volume is
applied by Engine::syncSoundSettings.
This commit also fixes the setSoundVolume script function. Volume was
previously applied to the SFX and speech sound types, which were not used.
Also, by directly using Mixer::setVolumeForSoundType, it would override the
user volume setting. This is fixed by storing the game sound volume in a field
and applying this to the current and future audio streams. This fixes bug
#6444.
The sound buffer used in decompressSound() is now stored so that
it can be re-used in the next call of decompressSound, specifically
in chunk type 1.
This caused some clicking/static in the intro of Return to Zork.
Thanks to eriktorbjorn for noticing the glitch and writing most of the patch.
MKID_BE relied on unspecified behavior of the C++ compiler,
and as such was always a bit unsafe. The new MKTAG macro
is slightly less elegant, but does no longer depend on the
behavior of the compiler.
Inspired by FFmpeg, which has an almost identical macro.
- Support for 'chunked' picture resources and EGA pictures
- Improved the mouth sync in RtZ (still not perfect, though)
- Removed obsolete TODOs
- Fixed sfPlayMovie to return if the movie playback was aborted or not; this is used by RtZ to determine if it should display the credits screen after the intro movie
svn-id: r35997
- PMV video is now stopped correctly if the end of the video has been reached. Removed a relevant hack, which was caused due to an invalid memory read
svn-id: r35849