From e115ed4187e2692202c4f99ad5fb607c94c1053e Mon Sep 17 00:00:00 2001 From: Henrik Rydgard Date: Tue, 11 Jun 2013 00:51:10 +0200 Subject: [PATCH] Work-around crash in sceMpeg with bad ringbuffer address. Add reminder on first run to access the ingame menu with ESC on windows. --- Core/HLE/sceMpeg.cpp | 9 +++++++-- UI/EmuScreen.cpp | 7 +++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Core/HLE/sceMpeg.cpp b/Core/HLE/sceMpeg.cpp index 7421acf48b..ec0d6bcfdc 100644 --- a/Core/HLE/sceMpeg.cpp +++ b/Core/HLE/sceMpeg.cpp @@ -610,8 +610,13 @@ u32 sceMpegAvcDecode(u32 mpeg, u32 auAddr, u32 frameWidth, u32 bufferAddr, u32 i SceMpegAu avcAu; avcAu.read(auAddr); - SceMpegRingBuffer ringbuffer; - Memory::ReadStruct(ctx->mpegRingbufferAddr, &ringbuffer); + SceMpegRingBuffer ringbuffer = {0}; + if (Memory::IsValidAddress(ctx->mpegRingbufferAddr)) { + Memory::ReadStruct(ctx->mpegRingbufferAddr, &ringbuffer); + } else { + ERROR_LOG(HLE, "Bogus mpegringbufferaddr"); + return -1; + } if (ringbuffer.packetsRead == 0 || ctx->mediaengine->IsVideoEnd()) { WARN_LOG(HLE, "sceMpegAvcDecode(%08x, %08x, %d, %08x, %08x): mpeg buffer empty", mpeg, auAddr, frameWidth, bufferAddr, initAddr); diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index aebc111626..7e087d630e 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -96,6 +96,13 @@ EmuScreen::EmuScreen(const std::string &filename) : invalid_(true) { g_gameInfoCache.FlushBGs(); NOTICE_LOG(BOOT, "Loading %s...", fileToStart.c_str()); + I18NCategory *s = GetI18NCategory("Screen"); + +#ifdef _WIN32 + if (g_Config.bFirstRun) { + osm.Show(s->T("PressESC", "Press ESC to open the pause menu"), 3.0f); + } +#endif } EmuScreen::~EmuScreen() {