From 3d5f818095f69ab36cb5843954588cacebcb8565 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 2 Jun 2013 11:40:12 -0700 Subject: [PATCH 1/2] Add a bounds check to writeVideoImageWithRange(). Fixes crash in Jeanne d' Arc, which sends 480x480. --- Core/HW/MediaEngine.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Core/HW/MediaEngine.cpp b/Core/HW/MediaEngine.cpp index 56d15d7087..d32b186689 100644 --- a/Core/HW/MediaEngine.cpp +++ b/Core/HW/MediaEngine.cpp @@ -447,6 +447,11 @@ bool MediaEngine::writeVideoImageWithRange(u8* buffer, int frameWidth, int video u16 *imgbuf16 = (u16 *)buffer; u16 *data16 = (u16 *)data; + if (width > m_desWidth - xpos) + width = m_desWidth - xpos; + if (height > m_desHeight - ypos) + height = m_desHeight - ypos; + switch (videoPixelMode) { case TPSM_PIXEL_STORAGE_MODE_32BIT_ABGR8888: data += (ypos * m_desWidth + xpos) * sizeof(u32); From b695fdda85f8094db3fd1b18740adb1d9e0e0774 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 2 Jun 2013 13:52:11 -0700 Subject: [PATCH 2/2] Ignore pixel mode -1 in psmf, seems to default? This makes videos play fine in Sword Art Online. --- Core/HLE/scePsmf.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Core/HLE/scePsmf.cpp b/Core/HLE/scePsmf.cpp index f2c9b58a2f..6e3c2dc329 100644 --- a/Core/HLE/scePsmf.cpp +++ b/Core/HLE/scePsmf.cpp @@ -1015,9 +1015,12 @@ u32 scePsmfPlayerConfigPlayer(u32 psmfPlayer, int configMode, int configAttr) if (configMode == PSMF_PLAYER_CONFIG_MODE_LOOP) { videoLoopStatus = configAttr; } else if (configMode == PSMF_PLAYER_CONFIG_MODE_PIXEL_TYPE) { - videoPixelMode = configAttr; + // Does -1 mean default or something? + if (configAttr != -1) { + videoPixelMode = configAttr; + } } else { - ERROR_LOG(HLE, "scePsmfPlayerConfigPlayer(%08x, %i, %i)", psmfPlayer , configMode, configAttr); + ERROR_LOG(HLE, "scePsmfPlayerConfigPlayer(%08x, %i, %i): unknown parameter", psmfPlayer, configMode, configAttr); } return 0;