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