diff --git a/Core/HLE/scePsmf.cpp b/Core/HLE/scePsmf.cpp index d5e02306ca..29c09ba5df 100644 --- a/Core/HLE/scePsmf.cpp +++ b/Core/HLE/scePsmf.cpp @@ -1493,22 +1493,20 @@ int scePsmfPlayerGetVideoData(u32 psmfPlayer, u32 videoDataAddr) } } - if (!doVideoStep || psmfplayer->mediaengine->stepVideo(videoPixelMode)) { - int displaybufSize = psmfplayer->mediaengine->writeVideoImage(videoData->displaybuf, videoData->frameWidth, videoPixelMode); - gpu->InvalidateCache(videoData->displaybuf, displaybufSize, GPU_INVALIDATE_SAFE); + if (doVideoStep) { + psmfplayer->mediaengine->stepVideo(videoPixelMode); } + + // Always write the video frame, even after the video has ended. + int displaybufSize = psmfplayer->mediaengine->writeVideoImage(videoData->displaybuf, videoData->frameWidth, videoPixelMode); + gpu->InvalidateCache(videoData->displaybuf, displaybufSize, GPU_INVALIDATE_SAFE); __PsmfUpdatePts(psmfplayer, videoData); } _PsmfPlayerFillRingbuffer(psmfplayer); - int ret = psmfplayer->mediaengine->IsVideoEnd() ? (int)ERROR_PSMFPLAYER_NO_MORE_DATA : 0; - DEBUG_LOG(ME, "%08x=scePsmfPlayerGetVideoData(%08x, %08x)", ret, psmfPlayer, videoDataAddr); - if (ret != 0) { - return ret; - } - - return hleDelayResult(ret, "psmfPlayer video decode", 3000); + DEBUG_LOG(ME, "%08x=scePsmfPlayerGetVideoData(%08x, %08x)", 0, psmfPlayer, videoDataAddr); + return hleDelayResult(0, "psmfPlayer video decode", 3000); } int scePsmfPlayerGetAudioData(u32 psmfPlayer, u32 audioDataAddr)