diff options
| -rw-r--r-- | engines/agos/animation.cpp | 14 | ||||
| -rw-r--r-- | graphics/dxa_player.cpp | 13 | ||||
| -rw-r--r-- | graphics/dxa_player.h | 12 | ||||
| -rw-r--r-- | graphics/smk_player.cpp | 8 | ||||
| -rw-r--r-- | graphics/smk_player.h | 3 | 
5 files changed, 39 insertions, 11 deletions
| diff --git a/engines/agos/animation.cpp b/engines/agos/animation.cpp index d6e5a1f414..47ed5ade8e 100644 --- a/engines/agos/animation.cpp +++ b/engines/agos/animation.cpp @@ -312,7 +312,7 @@ void MoviePlayerDXA::startSound() {  }  void MoviePlayerDXA::nextFrame() { -	if (_vm->_mixer->isSoundHandleActive(_bgSound) && (_vm->_mixer->getSoundElapsedTime(_bgSound) * _framesPerSec) / 1000 < _frameNum) { +	if (_vm->_mixer->isSoundHandleActive(_bgSound) && (_vm->_mixer->getSoundElapsedTime(_bgSound) * getFrameRate()) / 1000 < _frameNum) {  		copyFrameToBuffer(_vm->getBackBuf(), 465, 222, _vm->_screenWidth);  		return;  	} @@ -353,15 +353,15 @@ bool MoviePlayerDXA::processFrame() {  	copyFrameToBuffer((byte *)screen->pixels, (_vm->_screenWidth - _width) / 2, (_vm->_screenHeight - _height) / 2, _vm->_screenWidth);  	_vm->_system->unlockScreen(); -	if ((_bgSoundStream == NULL) || ((int)(_mixer->getSoundElapsedTime(_bgSound) * _framesPerSec) / 1000 < _frameNum + 1) || -		_frameSkipped > _framesPerSec) { -		if (_frameSkipped > _framesPerSec) { +	if ((_bgSoundStream == NULL) || ((int)(_mixer->getSoundElapsedTime(_bgSound) * getFrameRate()) / 1000 < _frameNum + 1) || +		_frameSkipped > getFrameRate()) { +		if (_frameSkipped > getFrameRate()) {  			warning("force frame %i redraw", _frameNum);  			_frameSkipped = 0;  		}  		if (_bgSoundStream && _mixer->isSoundHandleActive(_bgSound)) { -			while (_mixer->isSoundHandleActive(_bgSound) && (_mixer->getSoundElapsedTime(_bgSound) * _framesPerSec) / 1000 < _frameNum) { +			while (_mixer->isSoundHandleActive(_bgSound) && (_mixer->getSoundElapsedTime(_bgSound) * getFrameRate()) / 1000 < _frameNum) {  				_vm->_system->delayMillis(10);  			}  			// In case the background sound ends prematurely, update @@ -369,7 +369,7 @@ bool MoviePlayerDXA::processFrame() {  			// sync case for the subsequent frames.  			_ticks = _vm->_system->getMillis();  		} else { -			_ticks += _frameTicks; +			_ticks += getFrameDelay();  			while (_vm->_system->getMillis() < _ticks)  				_vm->_system->delayMillis(10);  		} @@ -463,7 +463,7 @@ bool MoviePlayerSMK::processFrame() {  	copyFrameToBuffer((byte *)screen->pixels, (_vm->_screenWidth - getWidth()) / 2, (_vm->_screenHeight - getHeight()) / 2, _vm->_screenWidth);  	_vm->_system->unlockScreen(); -	if (!getAudioLag() || getAudioLag() > 0 || _frameSkipped > getFrameRate()) { +	if (!getAudioLag() || getFrameWaitTime() || _frameSkipped > getFrameRate()) {  		if (_frameSkipped > getFrameRate()) {  			warning("force frame %i redraw", getCurFrame());  			_frameSkipped = 0; diff --git a/graphics/dxa_player.cpp b/graphics/dxa_player.cpp index 7cc5f05eb7..e4601564aa 100644 --- a/graphics/dxa_player.cpp +++ b/graphics/dxa_player.cpp @@ -88,6 +88,19 @@ int DXAPlayer::getFrameCount() {  	return _framesCount;  } +int DXAPlayer::getFrameRate() { +	if (!_fileStream) +		return 0; +	return _framesPerSec; +} + +int32 DXAPlayer::getFrameDelay() { +	if (!_fileStream) +		return 0; + +	return _frameTicks; +} +  bool DXAPlayer::loadFile(const char *fileName) {  	uint32 tag;  	int32 frameRate; diff --git a/graphics/dxa_player.h b/graphics/dxa_player.h index 4b0a74fd94..73d6ac7ca4 100644 --- a/graphics/dxa_player.h +++ b/graphics/dxa_player.h @@ -85,6 +85,18 @@ public:  	int getFrameCount();  	/** +	 * Returns the frame rate of the video +	 * @return the frame rate of the video +	 */ +	int32 getFrameRate(); + +	/** +	 * Returns the time to wait for each frame in 1/100 ms +	 * @return the time to wait for each frame in 1/100 ms +	 */ +	int32 getFrameDelay(); + +	/**  	 * Load a DXA encoded video file  	 * @param filename	the filename to load  	 */ diff --git a/graphics/smk_player.cpp b/graphics/smk_player.cpp index ea4fd45287..ccd366c7c0 100644 --- a/graphics/smk_player.cpp +++ b/graphics/smk_player.cpp @@ -348,7 +348,13 @@ int32 SMKPlayer::getFrameCount() {  int32 SMKPlayer::getFrameRate() {  	if (!_fileStream)  		return 0; -	return _header.frameRate; + +	if (_header.frameRate > 0) +		return 1000 / _header.frameRate; +	else if (_header.frameRate < 0) +		return 100000 / (-_header.frameRate); +	else +		return 10;  }  int32 SMKPlayer::getFrameDelay() { diff --git a/graphics/smk_player.h b/graphics/smk_player.h index 1b8976203d..b6513d1803 100644 --- a/graphics/smk_player.h +++ b/graphics/smk_player.h @@ -75,9 +75,6 @@ public:  	/**  	 * Returns the frame rate of the video -	 * If > 0, fps are 1000 / FrameRate -	 * If < 0, fps are 100000 / (-FrameRate) -	 * If 0, fps are 10  	 * @return the frame rate of the video  	 */  	int32 getFrameRate(); | 
