From 6d14c17f26694e36bc1ff6eec7d5ecddcc9afc5c Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 4 Jun 2016 14:17:29 -0700 Subject: [PATCH] Mpeg: Treat negative available packets as zero. --- Core/HLE/sceMpeg.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Core/HLE/sceMpeg.cpp b/Core/HLE/sceMpeg.cpp index 4fda18f51a..248868a52f 100644 --- a/Core/HLE/sceMpeg.cpp +++ b/Core/HLE/sceMpeg.cpp @@ -1414,7 +1414,7 @@ void PostPutAction::run(MipsCall &call) { // Program signals that it has written data to the ringbuffer and gets a callback ? -static u32 sceMpegRingbufferPut(u32 ringbufferAddr, u32 numPackets, u32 available) +static u32 sceMpegRingbufferPut(u32 ringbufferAddr, int numPackets, int available) { numPackets = std::min(numPackets, available); if (numPackets <= 0) { @@ -1444,7 +1444,7 @@ static u32 sceMpegRingbufferPut(u32 ringbufferAddr, u32 numPackets, u32 availabl // TODO: Should call this multiple times until we get numPackets. // Normally this would be if it did not read enough, but also if available > packets. // Should ultimately return the TOTAL number of returned packets. - u32 packetsThisRound = std::min(numPackets, (u32)ringbuffer->packets); + u32 packetsThisRound = std::min(numPackets, (s32)ringbuffer->packets); u32 args[3] = {(u32)ringbuffer->data, packetsThisRound, (u32)ringbuffer->callback_args}; __KernelDirectMipsCall(ringbuffer->callback_addr, action, args, 3, false); } else { @@ -2184,7 +2184,7 @@ const HLEFunction sceMpeg[] = {0XA11C7026, &WrapI_UU, "sceMpegAvcDecodeMode", 'i', "xx" }, {0X37295ED8, &WrapU_UUUUUU, "sceMpegRingbufferConstruct", 'x', "xxxxxx" }, {0X13407F13, &WrapU_U, "sceMpegRingbufferDestruct", 'x', "x" }, - {0XB240A59E, &WrapU_UUU, "sceMpegRingbufferPut", 'x', "xxx" }, + {0XB240A59E, &WrapU_UII, "sceMpegRingbufferPut", 'x', "xxx" }, {0XB5F6DC87, &WrapI_U, "sceMpegRingbufferAvailableSize", 'i', "x" }, {0XD7A29F46, &WrapU_I, "sceMpegRingbufferQueryMemSize", 'x', "i" }, {0X769BEBB6, &WrapI_U, "sceMpegRingbufferQueryPackNum", 'i', "x" },