diff options
author | Einar Johan Trøan Sømåen | 2014-01-21 02:25:18 +0100 |
---|---|---|
committer | Einar Johan Trøan Sømåen | 2014-01-21 02:25:18 +0100 |
commit | 2dfbad8074dce96af03f3bf2927e9bdffc3a16ec (patch) | |
tree | a5eb378282474b703b51fef409a64131b185ccf6 /engines/wintermute/video | |
parent | 0b76f66edcf283f48f8f945dc18a764bf427fdf1 (diff) | |
download | scummvm-rg350-2dfbad8074dce96af03f3bf2927e9bdffc3a16ec.tar.gz scummvm-rg350-2dfbad8074dce96af03f3bf2927e9bdffc3a16ec.tar.bz2 scummvm-rg350-2dfbad8074dce96af03f3bf2927e9bdffc3a16ec.zip |
WINTERMUTE: Avoid using Graphics::copyFrom to copy FMV-frames.
copyFrom frees and reallocates the surface for every update, as long
as the dimensions and format stay the same, we can do with just a
memcpy.
This gives a tiny improvement in the update-part of the Theora-player
(on the order of a bit more than 1 second saved total in the 1:28 long
J.U.L.I.A.-intro)
Diffstat (limited to 'engines/wintermute/video')
-rw-r--r-- | engines/wintermute/video/video_theora_player.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/engines/wintermute/video/video_theora_player.cpp b/engines/wintermute/video/video_theora_player.cpp index 44eecf93a8..aedc9bf025 100644 --- a/engines/wintermute/video/video_theora_player.cpp +++ b/engines/wintermute/video/video_theora_player.cpp @@ -305,8 +305,15 @@ bool VideoTheoraPlayer::update() { if (!_theoraDecoder->endOfVideo() && _theoraDecoder->getTimeToNextFrame() == 0) { const Graphics::Surface *decodedFrame = _theoraDecoder->decodeNextFrame(); if (decodedFrame) { - _surface.free(); - _surface.copyFrom(*decodedFrame); + if (decodedFrame->format == _surface.format && decodedFrame->w == _surface.w && decodedFrame->h == _surface.h) { + const byte *src = (const byte*) decodedFrame->getBasePtr(0, 0); + byte *dst = (byte*) _surface.getBasePtr(0, 0); + memcpy(dst, src, _surface.pitch * _surface.h); + } else { + _surface.free(); + _surface.copyFrom(*decodedFrame); + } + if (_texture) { writeVideo(); } |