MOHAWK: Allow changing video rates

getVideoDuration now returns an Timestamp
This commit is contained in:
Bastien Bouclet 2012-12-06 10:57:59 +01:00
parent f889457d3d
commit fdad5ec7b4
4 changed files with 16 additions and 10 deletions

View file

@ -830,7 +830,7 @@ static void sunnersTopStairsTimer(MohawkEngine_Riven *vm) {
} else if (sunnerTime < vm->getTotalPlayTime()) { } else if (sunnerTime < vm->getTotalPlayTime()) {
VideoHandle handle = vm->_video->playMovieRiven(vm->_rnd->getRandomNumberRng(1, 3)); 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(); sunnerTime = timerTime + vm->getTotalPlayTime();
@ -868,7 +868,7 @@ static void sunnersMidStairsTimer(MohawkEngine_Riven *vm) {
VideoHandle handle = vm->_video->playMovieRiven(movie); 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(); sunnerTime = timerTime + vm->getTotalPlayTime();
@ -898,7 +898,7 @@ static void sunnersLowerStairsTimer(MohawkEngine_Riven *vm) {
} else if (sunnerTime < vm->getTotalPlayTime()) { } else if (sunnerTime < vm->getTotalPlayTime()) {
VideoHandle handle = vm->_video->playMovieRiven(vm->_rnd->getRandomNumberRng(3, 5)); 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(); sunnerTime = timerTime + vm->getTotalPlayTime();
@ -932,7 +932,7 @@ static void sunnersBeachTimer(MohawkEngine_Riven *vm) {
vm->_video->activateMLST(mlstID, vm->getCurCard()); vm->_video->activateMLST(mlstID, vm->getCurCard());
VideoHandle handle = vm->_video->playMovieRiven(mlstID); 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(); sunnerTime = timerTime + vm->getTotalPlayTime();

View file

@ -1467,7 +1467,7 @@ static void catherineViewerIdleTimer(MohawkEngine_Riven *vm) {
VideoHandle videoHandle = vm->_video->playMovieRiven(30); VideoHandle videoHandle = vm->_video->playMovieRiven(30);
// Reset the timer // 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) { 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()); _vm->_video->activateMLST(cathMovie, _vm->getCurCard());
VideoHandle videoHandle = _vm->_video->playMovieRiven(30); 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 { } else {
// Otherwise, just redraw the imager // Otherwise, just redraw the imager
timeUntilNextMovie = _vm->_rnd->getRandomNumberRng(10, 20) * 1000; timeUntilNextMovie = _vm->_rnd->getRandomNumberRng(10, 20) * 1000;
@ -2335,7 +2335,7 @@ static void rebelPrisonWindowTimer(MohawkEngine_Riven *vm) {
VideoHandle handle = vm->_video->playMovieRiven(movie); VideoHandle handle = vm->_video->playMovieRiven(movie);
// Ensure the next video starts after this one ends // 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 // Save the time in case we leave the card and return
vm->_vars["rvillagetime"] = timeUntilNextVideo + vm->getTotalPlayTime(); vm->_vars["rvillagetime"] = timeUntilNextVideo + vm->getTotalPlayTime();

View file

@ -493,9 +493,9 @@ uint32 VideoManager::getTime(VideoHandle handle) {
return _videoStreams[handle]->getTime(); return _videoStreams[handle]->getTime();
} }
uint32 VideoManager::getDuration(VideoHandle handle) { Audio::Timestamp VideoManager::getDuration(VideoHandle handle) {
assert(handle != NULL_VID_HANDLE); assert(handle != NULL_VID_HANDLE);
return _videoStreams[handle]->getDuration().msecs(); return _videoStreams[handle]->getDuration();
} }
bool VideoManager::endOfVideo(VideoHandle handle) { bool VideoManager::endOfVideo(VideoHandle handle) {
@ -536,6 +536,11 @@ void VideoManager::setVideoLooping(VideoHandle handle, bool loop) {
_videoStreams[handle].loop = 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) { void VideoManager::pauseMovie(VideoHandle handle, bool pause) {
assert(handle != NULL_VID_HANDLE); assert(handle != NULL_VID_HANDLE);
_videoStreams[handle]->pauseVideo(pause); _videoStreams[handle]->pauseVideo(pause);

View file

@ -101,12 +101,13 @@ public:
int getCurFrame(VideoHandle handle); int getCurFrame(VideoHandle handle);
uint32 getFrameCount(VideoHandle handle); uint32 getFrameCount(VideoHandle handle);
uint32 getTime(VideoHandle handle); uint32 getTime(VideoHandle handle);
uint32 getDuration(VideoHandle videoHandle); Audio::Timestamp getDuration(VideoHandle videoHandle);
bool endOfVideo(VideoHandle handle); bool endOfVideo(VideoHandle handle);
void setVideoBounds(VideoHandle handle, Audio::Timestamp start, Audio::Timestamp end); void setVideoBounds(VideoHandle handle, Audio::Timestamp start, Audio::Timestamp end);
void drawVideoFrame(VideoHandle handle, Audio::Timestamp time); void drawVideoFrame(VideoHandle handle, Audio::Timestamp time);
void seekToTime(VideoHandle handle, Audio::Timestamp time); void seekToTime(VideoHandle handle, Audio::Timestamp time);
void setVideoLooping(VideoHandle handle, bool loop); void setVideoLooping(VideoHandle handle, bool loop);
void setVideoRate(VideoHandle handle, const Common::Rational &rate);
void waitUntilMovieEnds(VideoHandle videoHandle); void waitUntilMovieEnds(VideoHandle videoHandle);
void delayUntilMovieEnds(VideoHandle videoHandle); void delayUntilMovieEnds(VideoHandle videoHandle);
void pauseMovie(VideoHandle videoHandle, bool pause); void pauseMovie(VideoHandle videoHandle, bool pause);