From 5316ec7ef7aca94b7b6f590cc6e4d7d010ee5ee6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sun, 19 Jan 2025 13:09:30 +0100 Subject: [PATCH] Fix more misuse of the hleLog* functions --- Core/HLE/HLE.h | 4 ++++ Core/HLE/sceDisplay.cpp | 2 +- Core/HLE/sceKernelModule.cpp | 3 +-- Core/HLE/sceMpeg.cpp | 18 ++++++++--------- Core/HLE/sceNetAdhoc.cpp | 13 ++++++------ Core/HLE/sceNetInet.cpp | 31 +++++++++++++---------------- Core/HLE/sceParseHttp.cpp | 14 ++++++------- Core/HLE/scePsmf.cpp | 38 ++++++++++++++++++++---------------- 8 files changed, 63 insertions(+), 60 deletions(-) diff --git a/Core/HLE/HLE.h b/Core/HLE/HLE.h index 6d30e298d2..5d8deb16f6 100644 --- a/Core/HLE/HLE.h +++ b/Core/HLE/HLE.h @@ -25,6 +25,10 @@ #include "Common/Log.h" #include "Core/MIPS/MIPS.h" +#ifdef _MSC_VER +#pragma warning (error: 4834) // discarding return value of function with 'nodiscard' attribute +#endif + class PointerWrap; class PSPAction; typedef void (* HLEFunc)(); diff --git a/Core/HLE/sceDisplay.cpp b/Core/HLE/sceDisplay.cpp index 06d893eb74..aefe4a8469 100644 --- a/Core/HLE/sceDisplay.cpp +++ b/Core/HLE/sceDisplay.cpp @@ -775,7 +775,7 @@ static u32 sceDisplayIsVblank() { return hleLogSuccessI(Log::sceDisplay, DisplayIsVblank()); } -static void __DisplayWaitForVblanks(const char *reason, int vblanks, bool callbacks) { +void __DisplayWaitForVblanks(const char *reason, int vblanks, bool callbacks) { const s64 ticksIntoFrame = CoreTiming::GetTicks() - DisplayFrameStartTicks(); const s64 cyclesToNextVblank = msToCycles(frameMs) - ticksIntoFrame; diff --git a/Core/HLE/sceKernelModule.cpp b/Core/HLE/sceKernelModule.cpp index 285d080484..64efdc234e 100644 --- a/Core/HLE/sceKernelModule.cpp +++ b/Core/HLE/sceKernelModule.cpp @@ -2163,8 +2163,7 @@ u32 sceKernelLoadModule(const char *name, u32 flags, u32 optionAddr) { } return __KernelLoadExec(safeName.c_str(), 0, &error_string); } else { - hleLogError(Log::Loader, error, "failed to load"); - return hleDelayResult(error, "module loaded", 500); + return hleDelayResult(hleLogError(Log::Loader, error, "failed to load"), "module loaded", 500); } } diff --git a/Core/HLE/sceMpeg.cpp b/Core/HLE/sceMpeg.cpp index 63776786da..c54b023db3 100644 --- a/Core/HLE/sceMpeg.cpp +++ b/Core/HLE/sceMpeg.cpp @@ -1172,6 +1172,8 @@ static u32 sceMpegAvcDecode(u32 mpeg, u32 auAddr, u32 frameWidth, u32 bufferAddr // We stored the video stream id here in sceMpegGetAvcAu(). ctx->mediaengine->setVideoStream(avcAu.esBuffer); + int accumDelay = 0; + if (ispmp){ #ifdef USE_FFMPEG while (pmp_queue.size() != 0){ @@ -1183,12 +1185,11 @@ static u32 sceMpegAvcDecode(u32 mpeg, u32 auAddr, u32 frameWidth, u32 bufferAddr ctx->videoFrameCount++; // free front frame - hleDelayResult(0, "pmp video decode", 30); + accumDelay += 30; pmp_queue.pop_front(); } #endif - } - else if(ctx->mediaengine->stepVideo(ctx->videoPixelMode)) { + } else if (ctx->mediaengine->stepVideo(ctx->videoPixelMode)) { int bufferSize = ctx->mediaengine->writeVideoImage(buffer, frameWidth, ctx->videoPixelMode); gpu->PerformWriteFormattedFromMemory(buffer, bufferSize, frameWidth, (GEBufferFormat)ctx->videoPixelMode); ctx->avc.avcFrameStatus = 1; @@ -1220,12 +1221,11 @@ static u32 sceMpegAvcDecode(u32 mpeg, u32 auAddr, u32 frameWidth, u32 bufferAddr } ctx->avc.avcDecodeResult = MPEG_AVC_DECODE_SUCCESS; - DEBUG_LOG(Log::ME, "sceMpegAvcDecode(%08x, %08x, %i, %08x, %08x)", mpeg, auAddr, frameWidth, bufferAddr, initAddr); - - if (ctx->videoFrameCount <= 1) - return hleDelayResult(0, "mpeg decode", avcFirstDelayMs); - else - return hleDelayResult(0, "mpeg decode", avcDecodeDelayMs); + if (ctx->videoFrameCount <= 1) { + return hleDelayResult(hleLogSuccessI(Log::ME, 0), "mpeg decode", accumDelay + avcFirstDelayMs); + } else { + return hleDelayResult(hleLogSuccessI(Log::ME, 0), "mpeg decode", accumDelay + avcDecodeDelayMs); + } //hleEatMicro(3300); //return hleDelayResult(0, "mpeg decode", 200); } diff --git a/Core/HLE/sceNetAdhoc.cpp b/Core/HLE/sceNetAdhoc.cpp index 292fa99c66..9f2dc62b9a 100644 --- a/Core/HLE/sceNetAdhoc.cpp +++ b/Core/HLE/sceNetAdhoc.cpp @@ -1996,8 +1996,7 @@ int sceNetAdhocSetSocketAlert(int id, int flag) { WARN_LOG_REPORT_ONCE(sceNetAdhocSetSocketAlert, Log::sceNet, "UNTESTED sceNetAdhocSetSocketAlert(%d, %08x) at %08x", id, flag, currentMIPS->pc); int retval = NetAdhoc_SetSocketAlert(id, flag); - hleDelayResult(retval, "set socket alert delay", 1000); - return hleLogDebug(Log::sceNet, retval, ""); + return hleDelayResult(hleLogDebug(Log::sceNet, retval, ""), "set socket alert delay", 1000); } int PollAdhocSocket(SceNetAdhocPollSd* sds, int count, int timeout, int nonblock) { @@ -3482,12 +3481,14 @@ static int sceNetAdhocPtpOpen(const char *srcmac, int sport, const char *dstmac, NetAdhocPtp_Connect(i + 1, rexmt_int, 1, false); // Workaround to give some time to get connected before returning from PtpOpen over high latency - if (g_Config.bForcedFirstConnect && internal->attemptCount == 1) - hleDelayResult(i + 1, "delayed ptpopen", rexmt_int); + INFO_LOG(Log::sceNet, "sceNetAdhocPtpOpen - PSP Socket id: %i, Host Socket id: %i", i + 1, tcpsocket); // Return PTP Socket id - INFO_LOG(Log::sceNet, "sceNetAdhocPtpOpen - PSP Socket id: %i, Host Socket id: %i", i + 1, tcpsocket); - return i + 1; + if (g_Config.bForcedFirstConnect && internal->attemptCount == 1) { + return hleDelayResult(i + 1, "delayed ptpopen", rexmt_int); + } else { + return i + 1; + } } // Free Memory diff --git a/Core/HLE/sceNetInet.cpp b/Core/HLE/sceNetInet.cpp index 0b98abd3bf..cc7bff26e8 100644 --- a/Core/HLE/sceNetInet.cpp +++ b/Core/HLE/sceNetInet.cpp @@ -390,9 +390,9 @@ static int sceNetInetRecv(int socket, u32 bufPtr, u32 bufLen, u32 flags) { int retval = recv(inetSock->sock, (char*)Memory::GetPointer(bufPtr), bufLen, flgs | MSG_NOSIGNAL); if (retval < 0) { if (UpdateErrnoFromHost(socket_errno, __FUNCTION__) == ERROR_INET_EAGAIN) { - hleLogDebug(Log::sceNet, retval, "EAGAIN"); + retval = hleLogDebug(Log::sceNet, retval, "EAGAIN"); } else { - hleLogError(Log::sceNet, retval); + retval = hleLogError(Log::sceNet, retval); } return hleDelayResult(retval, "workaround until blocking-socket", 500); } @@ -517,7 +517,7 @@ static int sceNetInetSetsockopt(int socket, int level, int optname, u32 optvalPt } if (retval < 0) { UpdateErrnoFromHost(socket_errno, __FUNCTION__); - hleLogError(Log::sceNet, retval); + return hleLogError(Log::sceNet, retval); } return hleLogSuccessI(Log::sceNet, retval); } @@ -581,7 +581,7 @@ static int sceNetInetGetsockopt(int socket, int level, int optname, u32 optvalPt } if (retval < 0) { UpdateErrnoFromHost(socket_errno, __FUNCTION__); - hleLogError(Log::sceNet, retval); + return hleLogError(Log::sceNet, retval); } DEBUG_LOG(Log::sceNet, "SockOpt: OptValue = %d", *optval); return hleLogSuccessI(Log::sceNet, retval); @@ -667,9 +667,9 @@ static int sceNetInetConnect(int socket, u32 sockAddrPtr, int sockAddrLen) { int hostErrno = socket_errno; UpdateErrnoFromHost(hostErrno, __FUNCTION__); if (connectInProgress(hostErrno)) - hleLogDebug(Log::sceNet, retval, "errno = %s Address = %s, Port = %d", convertInetErrno2str(g_inetLastErrno), ip2str(saddr.in.sin_addr).c_str(), ntohs(saddr.in.sin_port)); + retval = hleLogDebug(Log::sceNet, retval, "errno = %s Address = %s, Port = %d", convertInetErrno2str(g_inetLastErrno), ip2str(saddr.in.sin_addr).c_str(), ntohs(saddr.in.sin_port)); else - hleLogError(Log::sceNet, retval, "errno = %s Address = %s, Port = %d", convertInetErrno2str(g_inetLastErrno), ip2str(saddr.in.sin_addr).c_str(), ntohs(saddr.in.sin_port)); + retval = hleLogError(Log::sceNet, retval, "errno = %s Address = %s, Port = %d", convertInetErrno2str(g_inetLastErrno), ip2str(saddr.in.sin_addr).c_str(), ntohs(saddr.in.sin_port)); changeBlockingMode(inetSock->sock, 1); // TODO: Since we're temporarily forcing blocking-mode we'll need to change errno from ETIMEDOUT to EAGAIN /*if (inetLastErrno == ETIMEDOUT) @@ -712,11 +712,10 @@ static int sceNetInetAccept(int socket, u32 addrPtr, u32 addrLenPtr) { int newHostSocket = accept(inetSock->sock, (struct sockaddr*)&saddr.addr, srclen); if (newHostSocket < 0) { if (UpdateErrnoFromHost(socket_errno, __FUNCTION__) == ERROR_INET_EAGAIN) { - hleLogDebug(Log::sceNet, newHostSocket, "EAGAIN"); + return hleLogDebug(Log::sceNet, -1, "EAGAIN"); } else { - hleLogError(Log::sceNet, newHostSocket); + return hleLogError(Log::sceNet, -1); } - return -1; } int newSocketId; @@ -809,9 +808,9 @@ static int sceNetInetRecvfrom(int socket, u32 bufferPtr, int len, int flags, u32 int retval = recvfrom(inetSock->sock, (char*)Memory::GetPointer(bufferPtr), len, flgs | MSG_NOSIGNAL, (struct sockaddr*)&saddr.addr, srclen); if (retval < 0) { if (UpdateErrnoFromHost(socket_errno, __FUNCTION__) == ERROR_INET_EAGAIN) { - hleLogDebug(Log::sceNet, retval, "EAGAIN"); + retval = hleLogDebug(Log::sceNet, retval, "EAGAIN"); } else { - hleLogError(Log::sceNet, retval); + retval = hleLogError(Log::sceNet, retval); } // Using hleDelayResult as a workaround for games that need blocking-socket to be implemented (ie. Coded Arms Contagion) return hleDelayResult(retval, "workaround until blocking-socket", 500); @@ -904,11 +903,10 @@ static int sceNetInetSendto(int socket, u32 bufferPtr, int len, int flags, u32 t } if (retval < 0) { if (UpdateErrnoFromHost(socket_errno, __FUNCTION__) == ERROR_INET_EAGAIN) { - hleLogDebug(Log::sceNet, retval, "EAGAIN"); + return hleLogDebug(Log::sceNet, retval, "EAGAIN"); } else { - hleLogError(Log::sceNet, retval); + return hleLogError(Log::sceNet, retval); } - return retval; } return hleLogSuccessInfoI(Log::sceNet, retval, "SendTo: Address = %s, Port = %d", ip2str(saddr.in.sin_addr).c_str(), ntohs(saddr.in.sin_port)); @@ -1105,11 +1103,10 @@ static int sceNetInetSendmsg(int socket, u32 msghdrPtr, int flags) { */ if (retval < 0) { if (UpdateErrnoFromHost(socket_errno, __FUNCTION__) == ERROR_INET_EAGAIN) { - hleLogDebug(Log::sceNet, retval, "EAGAIN"); + return hleLogDebug(Log::sceNet, retval, "EAGAIN"); } else { - hleLogError(Log::sceNet, retval); + return hleLogError(Log::sceNet, retval); } - return retval; } return hleLogSuccessInfoI(Log::sceNet, retval); // returns number of bytes sent? } diff --git a/Core/HLE/sceParseHttp.cpp b/Core/HLE/sceParseHttp.cpp index e150b79fa7..1afb4eec8c 100644 --- a/Core/HLE/sceParseHttp.cpp +++ b/Core/HLE/sceParseHttp.cpp @@ -157,25 +157,23 @@ static int sceParseHttpStatusLine(u32 headerAddr, u32 headerLength, u32 httpVers } } catch (const std::runtime_error& ex) { - hleLogError(Log::sceNet, -1, "Runtime error: %s", ex.what()); + return hleLogError(Log::sceNet, -1, "Runtime error: %s", ex.what()); } catch (const std::exception& ex) { - hleLogError(Log::sceNet, -1, "Error occurred: %s", ex.what()); // SCE_HTTP_ERROR_PARSE_HTTP_INVALID_VALUE + return hleLogError(Log::sceNet, -1, "Error occurred: %s", ex.what()); // SCE_HTTP_ERROR_PARSE_HTTP_INVALID_VALUE } catch (...) { - hleLogError(Log::sceNet, -1, "Unknown error"); + return hleLogError(Log::sceNet, -1, "Unknown error"); } - return 0; + return hleLogSuccessI(Log::sceNet, 0); } -const HLEFunction sceParseHttp [] = -{ +const HLEFunction sceParseHttp[] = { {0X8077A433, &WrapI_UUUUUUU, "sceParseHttpStatusLine", 'i', "xxxxxxx"}, {0XAD7BFDEF, &WrapI_UICUU, "sceParseHttpResponseHeader", 'i', "xisxx" }, }; -void Register_sceParseHttp() -{ +void Register_sceParseHttp() { RegisterModule("sceParseHttp", ARRAY_SIZE(sceParseHttp), sceParseHttp); } diff --git a/Core/HLE/scePsmf.cpp b/Core/HLE/scePsmf.cpp index 5fc9bddbb9..f66db52779 100644 --- a/Core/HLE/scePsmf.cpp +++ b/Core/HLE/scePsmf.cpp @@ -1962,41 +1962,40 @@ static u32 scePsmfPlayerSelectVideo(u32 psmfPlayer) return 0; } -static u32 scePsmfPlayerSelectSpecificVideo(u32 psmfPlayer, int videoCodec, int videoStreamNum) +static u32 scePsmfPlayerSelectSpecificVideo(u32 psmfPlayer, int videoCodec, int videoStreamNum) { PsmfPlayer *psmfplayer = getPsmfPlayer(psmfPlayer); if (!psmfplayer) { - ERROR_LOG(Log::ME, "scePsmfPlayerSelectSpecificVideo(%08x, %i, %i): invalid psmf player", psmfPlayer, videoCodec, videoStreamNum); - return ERROR_PSMFPLAYER_INVALID_STATUS; + return hleLogError(Log::ME, ERROR_PSMFPLAYER_INVALID_STATUS); } if (psmfplayer->status != PSMF_PLAYER_STATUS_PLAYING) { - ERROR_LOG(Log::ME, "scePsmfPlayerSelectSpecificVideo(%08x, %i, %i): not playing", psmfPlayer, videoCodec, videoStreamNum); - return ERROR_PSMFPLAYER_INVALID_STATUS; + return hleLogError(Log::ME, ERROR_PSMFPLAYER_INVALID_STATUS, "not playing"); } if (psmfplayer->totalVideoStreams < 2) { - ERROR_LOG_REPORT(Log::ME, "scePsmfPlayerSelectSpecificVideo(%08x, %i, %i): unable to change stream", psmfPlayer, videoCodec, videoStreamNum); - return ERROR_PSMFPLAYER_INVALID_STREAM; + return hleReportError(Log::ME, ERROR_PSMFPLAYER_INVALID_STREAM, "unable to change stream"); } if (videoStreamNum < 0 || videoStreamNum >= psmfplayer->totalVideoStreams) { - ERROR_LOG_REPORT(Log::ME, "scePsmfPlayerSelectSpecificVideo(%08x, %i, %i): bad stream num param", psmfPlayer, videoCodec, videoStreamNum); - return ERROR_PSMFPLAYER_INVALID_CONFIG; + return hleReportError(Log::ME, ERROR_PSMFPLAYER_INVALID_CONFIG, "bad stream num param"); } if (videoCodec != 0x0E && videoCodec != 0x00) { - ERROR_LOG_REPORT(Log::ME, "scePsmfPlayerSelectSpecificVideo(%08x, %i, %i): invalid codec", psmfPlayer, videoCodec, videoStreamNum); - return ERROR_PSMFPLAYER_INVALID_STREAM; + return hleReportError(Log::ME, ERROR_PSMFPLAYER_INVALID_STREAM, "invalid codec"); } if (psmfplayer->totalVideoStreams < 2 || !psmfplayer->mediaengine->setVideoStream(videoStreamNum)) { - ERROR_LOG_REPORT(Log::ME, "scePsmfPlayerSelectSpecificVideo(%08x, %i, %i): unable to change stream", psmfPlayer, videoCodec, videoStreamNum); - return ERROR_PSMFPLAYER_INVALID_STREAM; + return hleReportError(Log::ME, ERROR_PSMFPLAYER_INVALID_STREAM, "unable to change stream"); } WARN_LOG_REPORT(Log::ME, "scePsmfPlayerSelectSpecificVideo(%08x, %i, %i)", psmfPlayer, videoCodec, videoStreamNum); + bool delay = false; if (psmfplayer->videoStreamNum != videoStreamNum) { - hleDelayResult(0, "psmf select video", 100); + delay = true; } psmfplayer->videoCodec = videoCodec; psmfplayer->videoStreamNum = videoStreamNum; - return 0; + if (delay) { + return hleDelayResult(hleLogSuccessI(Log::ME, 0), "psmf select video", 100); + } else { + return hleLogSuccessI(Log::ME, 0); + } } // WARNING: This function appears to be buggy in most libraries. @@ -2029,12 +2028,17 @@ static u32 scePsmfPlayerSelectSpecificAudio(u32 psmfPlayer, int audioCodec, int } WARN_LOG_REPORT(Log::ME, "scePsmfPlayerSelectSpecificAudio(%08x, %i, %i)", psmfPlayer, audioCodec, audioStreamNum); + bool delay = false; if (psmfplayer->audioStreamNum != audioStreamNum) { - hleDelayResult(0, "psmf select audio", 100); + delay = true; } psmfplayer->audioCodec = audioCodec; psmfplayer->audioStreamNum = audioStreamNum; - return 0; + if (delay) { + return hleDelayResult(hleLogSuccessI(Log::ME, 0), "psmf select audio", 100); + } else { + return hleLogSuccessI(Log::ME, 0); + } } static u32 scePsmfPlayerConfigPlayer(u32 psmfPlayer, int configMode, int configAttr)