diff options
| author | Bastien Bouclet | 2012-12-06 10:57:59 +0100 | 
|---|---|---|
| committer | Bastien Bouclet | 2012-12-16 06:51:00 +0100 | 
| commit | fdad5ec7b408fd9e45d69de2a2a9ca9e1796d1a5 (patch) | |
| tree | 8c2169990c92c4b1a1900f673fb374740064166f | |
| parent | f889457d3d7952b97e1e6be5a70ad20ec832f6e5 (diff) | |
| download | scummvm-rg350-fdad5ec7b408fd9e45d69de2a2a9ca9e1796d1a5.tar.gz scummvm-rg350-fdad5ec7b408fd9e45d69de2a2a9ca9e1796d1a5.tar.bz2 scummvm-rg350-fdad5ec7b408fd9e45d69de2a2a9ca9e1796d1a5.zip  | |
MOHAWK: Allow changing video rates
getVideoDuration now returns an Timestamp
| -rw-r--r-- | engines/mohawk/riven.cpp | 8 | ||||
| -rw-r--r-- | engines/mohawk/riven_external.cpp | 6 | ||||
| -rw-r--r-- | engines/mohawk/video.cpp | 9 | ||||
| -rw-r--r-- | engines/mohawk/video.h | 3 | 
4 files changed, 16 insertions, 10 deletions
diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp index 32613c6185..9a18d687bb 100644 --- a/engines/mohawk/riven.cpp +++ b/engines/mohawk/riven.cpp @@ -830,7 +830,7 @@ static void sunnersTopStairsTimer(MohawkEngine_Riven *vm) {  		} else if (sunnerTime < vm->getTotalPlayTime()) {  			VideoHandle handle = vm->_video->playMovieRiven(vm->_rnd->getRandomNumberRng(1, 3)); -			timerTime = vm->_video->getDuration(handle) + vm->_rnd->getRandomNumberRng(2, 15) * 1000; +			timerTime = vm->_video->getDuration(handle).msecs() + vm->_rnd->getRandomNumberRng(2, 15) * 1000;  		}  		sunnerTime = timerTime + vm->getTotalPlayTime(); @@ -868,7 +868,7 @@ static void sunnersMidStairsTimer(MohawkEngine_Riven *vm) {  			VideoHandle handle = vm->_video->playMovieRiven(movie); -			timerTime = vm->_video->getDuration(handle) + vm->_rnd->getRandomNumberRng(1, 10) * 1000; +			timerTime = vm->_video->getDuration(handle).msecs() + vm->_rnd->getRandomNumberRng(1, 10) * 1000;  		}  		sunnerTime = timerTime + vm->getTotalPlayTime(); @@ -898,7 +898,7 @@ static void sunnersLowerStairsTimer(MohawkEngine_Riven *vm) {  		} else if (sunnerTime < vm->getTotalPlayTime()) {  			VideoHandle handle = vm->_video->playMovieRiven(vm->_rnd->getRandomNumberRng(3, 5)); -			timerTime = vm->_video->getDuration(handle) + vm->_rnd->getRandomNumberRng(1, 30) * 1000; +			timerTime = vm->_video->getDuration(handle).msecs() + vm->_rnd->getRandomNumberRng(1, 30) * 1000;  		}  		sunnerTime = timerTime + vm->getTotalPlayTime(); @@ -932,7 +932,7 @@ static void sunnersBeachTimer(MohawkEngine_Riven *vm) {  			vm->_video->activateMLST(mlstID, vm->getCurCard());  			VideoHandle handle = vm->_video->playMovieRiven(mlstID); -			timerTime = vm->_video->getDuration(handle) + vm->_rnd->getRandomNumberRng(1, 30) * 1000; +			timerTime = vm->_video->getDuration(handle).msecs() + vm->_rnd->getRandomNumberRng(1, 30) * 1000;  		}  		sunnerTime = timerTime + vm->getTotalPlayTime(); diff --git a/engines/mohawk/riven_external.cpp b/engines/mohawk/riven_external.cpp index 337a57e3e1..384e89a4cf 100644 --- a/engines/mohawk/riven_external.cpp +++ b/engines/mohawk/riven_external.cpp @@ -1467,7 +1467,7 @@ static void catherineViewerIdleTimer(MohawkEngine_Riven *vm) {  	VideoHandle videoHandle = vm->_video->playMovieRiven(30);  	// Reset the timer -	vm->installTimer(&catherineViewerIdleTimer, vm->_video->getDuration(videoHandle) + vm->_rnd->getRandomNumber(60) * 1000); +	vm->installTimer(&catherineViewerIdleTimer, vm->_video->getDuration(videoHandle).msecs() + vm->_rnd->getRandomNumber(60) * 1000);  }  void RivenExternal::xglview_prisonon(uint16 argc, uint16 *argv) { @@ -1507,7 +1507,7 @@ void RivenExternal::xglview_prisonon(uint16 argc, uint16 *argv) {  		_vm->_video->activateMLST(cathMovie, _vm->getCurCard());  		VideoHandle videoHandle = _vm->_video->playMovieRiven(30); -		timeUntilNextMovie = _vm->_video->getDuration(videoHandle) + _vm->_rnd->getRandomNumber(60) * 1000; +		timeUntilNextMovie = _vm->_video->getDuration(videoHandle).msecs() + _vm->_rnd->getRandomNumber(60) * 1000;  	} else {  		// Otherwise, just redraw the imager  		timeUntilNextMovie = _vm->_rnd->getRandomNumberRng(10, 20) * 1000; @@ -2335,7 +2335,7 @@ static void rebelPrisonWindowTimer(MohawkEngine_Riven *vm) {  	VideoHandle handle = vm->_video->playMovieRiven(movie);  	// Ensure the next video starts after this one ends -	uint32 timeUntilNextVideo = vm->_video->getDuration(handle) + vm->_rnd->getRandomNumberRng(38, 58) * 1000; +	uint32 timeUntilNextVideo = vm->_video->getDuration(handle).msecs() + vm->_rnd->getRandomNumberRng(38, 58) * 1000;  	// Save the time in case we leave the card and return  	vm->_vars["rvillagetime"] = timeUntilNextVideo + vm->getTotalPlayTime(); diff --git a/engines/mohawk/video.cpp b/engines/mohawk/video.cpp index b1b99722d5..51e991aaf2 100644 --- a/engines/mohawk/video.cpp +++ b/engines/mohawk/video.cpp @@ -493,9 +493,9 @@ uint32 VideoManager::getTime(VideoHandle handle) {  	return _videoStreams[handle]->getTime();  } -uint32 VideoManager::getDuration(VideoHandle handle) { +Audio::Timestamp VideoManager::getDuration(VideoHandle handle) {  	assert(handle != NULL_VID_HANDLE); -	return _videoStreams[handle]->getDuration().msecs(); +	return _videoStreams[handle]->getDuration();  }  bool VideoManager::endOfVideo(VideoHandle handle) { @@ -536,6 +536,11 @@ void VideoManager::setVideoLooping(VideoHandle handle, bool loop) {  	_videoStreams[handle].loop = loop;  } +void VideoManager::setVideoRate(VideoHandle handle, const Common::Rational &rate) { +	assert(handle != NULL_VID_HANDLE); +	_videoStreams[handle]->setRate(rate); +} +  void VideoManager::pauseMovie(VideoHandle handle, bool pause) {  	assert(handle != NULL_VID_HANDLE);  	_videoStreams[handle]->pauseVideo(pause); diff --git a/engines/mohawk/video.h b/engines/mohawk/video.h index 6d2783936d..9641d36c8e 100644 --- a/engines/mohawk/video.h +++ b/engines/mohawk/video.h @@ -101,12 +101,13 @@ public:  	int getCurFrame(VideoHandle handle);  	uint32 getFrameCount(VideoHandle handle);  	uint32 getTime(VideoHandle handle); -	uint32 getDuration(VideoHandle videoHandle); +	Audio::Timestamp getDuration(VideoHandle videoHandle);  	bool endOfVideo(VideoHandle handle);  	void setVideoBounds(VideoHandle handle, Audio::Timestamp start, Audio::Timestamp end);  	void drawVideoFrame(VideoHandle handle, Audio::Timestamp time);  	void seekToTime(VideoHandle handle, Audio::Timestamp time);  	void setVideoLooping(VideoHandle handle, bool loop); +	void setVideoRate(VideoHandle handle, const Common::Rational &rate);  	void waitUntilMovieEnds(VideoHandle videoHandle);  	void delayUntilMovieEnds(VideoHandle videoHandle);  	void pauseMovie(VideoHandle videoHandle, bool pause);  | 
