mirror of
https://github.com/libretro/scummvm.git
synced 2025-04-07 09:14:11 +00:00
VIDEO: Return decoded frame when force seeking SmackerDecoder
This commit is contained in:
parent
aa629b7e30
commit
f012b06812
@ -451,7 +451,7 @@ bool SmackerDecoder::rewind() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SmackerDecoder::forceSeekToFrame(uint frame) {
|
const Graphics::Surface *SmackerDecoder::forceSeekToFrame(uint frame) {
|
||||||
uint seekFrame;
|
uint seekFrame;
|
||||||
if (frame >= 10)
|
if (frame >= 10)
|
||||||
seekFrame = MAX<uint>(frame - 10, 0);
|
seekFrame = MAX<uint>(frame - 10, 0);
|
||||||
@ -459,13 +459,13 @@ void SmackerDecoder::forceSeekToFrame(uint frame) {
|
|||||||
seekFrame = 0;
|
seekFrame = 0;
|
||||||
|
|
||||||
if (!isVideoLoaded())
|
if (!isVideoLoaded())
|
||||||
return;
|
return nullptr;
|
||||||
|
|
||||||
if (seekFrame >= getFrameCount())
|
if (seekFrame >= getFrameCount())
|
||||||
return;
|
return nullptr;
|
||||||
|
|
||||||
if (!rewind())
|
if (!rewind())
|
||||||
return;
|
return nullptr;
|
||||||
|
|
||||||
stopAudio();
|
stopAudio();
|
||||||
SmackerVideoTrack *videoTrack = (SmackerVideoTrack *)getTrack(0);
|
SmackerVideoTrack *videoTrack = (SmackerVideoTrack *)getTrack(0);
|
||||||
@ -484,10 +484,11 @@ void SmackerDecoder::forceSeekToFrame(uint frame) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!_fileStream->seek(startPos + offset, SEEK_SET))
|
if (!_fileStream->seek(startPos + offset, SEEK_SET))
|
||||||
return;
|
return nullptr;
|
||||||
|
|
||||||
|
const Graphics::Surface *surface = nullptr;
|
||||||
while (getCurFrame() < (int)frame) {
|
while (getCurFrame() < (int)frame) {
|
||||||
decodeNextFrame();
|
surface = decodeNextFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
_lastTimeChange = videoTrack->getFrameTime(frame);
|
_lastTimeChange = videoTrack->getFrameTime(frame);
|
||||||
@ -495,6 +496,7 @@ void SmackerDecoder::forceSeekToFrame(uint frame) {
|
|||||||
_startTime = g_system->getMillis() - (_lastTimeChange.msecs() / getRate()).toInt();
|
_startTime = g_system->getMillis() - (_lastTimeChange.msecs() / getRate()).toInt();
|
||||||
}
|
}
|
||||||
resetPauseStartTime();
|
resetPauseStartTime();
|
||||||
|
return surface;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SmackerDecoder::readNextPacket() {
|
void SmackerDecoder::readNextPacket() {
|
||||||
|
@ -64,6 +64,7 @@ typedef Common::BitStreamImpl<Common::BitStreamMemoryStream, uint32, 8, false, f
|
|||||||
*
|
*
|
||||||
* Video decoder used in engines:
|
* Video decoder used in engines:
|
||||||
* - agos
|
* - agos
|
||||||
|
* - bagel
|
||||||
* - saga
|
* - saga
|
||||||
* - scumm (he)
|
* - scumm (he)
|
||||||
* - sword1
|
* - sword1
|
||||||
@ -79,7 +80,7 @@ public:
|
|||||||
|
|
||||||
virtual bool loadStream(Common::SeekableReadStream *stream);
|
virtual bool loadStream(Common::SeekableReadStream *stream);
|
||||||
void close();
|
void close();
|
||||||
void forceSeekToFrame(uint frame);
|
const Graphics::Surface *forceSeekToFrame(uint frame);
|
||||||
bool rewind();
|
bool rewind();
|
||||||
|
|
||||||
Common::Rational getFrameRate() const;
|
Common::Rational getFrameRate() const;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user