From 456aa4ab8d90ee277c441a4e418dff00896b469e Mon Sep 17 00:00:00 2001 From: Megamouse Date: Thu, 7 Jun 2018 09:59:06 +0200 Subject: [PATCH] cellMusic: improvements --- rpcs3/Emu/Cell/Modules/cellMusic.cpp | 70 +++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Cell/Modules/cellMusic.cpp b/rpcs3/Emu/Cell/Modules/cellMusic.cpp index e6d38221b8..3a312b2308 100644 --- a/rpcs3/Emu/Cell/Modules/cellMusic.cpp +++ b/rpcs3/Emu/Cell/Modules/cellMusic.cpp @@ -22,6 +22,10 @@ struct music_t s32 cellMusicGetSelectionContext(vm::ptr context) { cellMusic.todo("cellMusicGetSelectionContext(context=*0x%x)", context); + + if (!context) + return CELL_MUSIC_ERROR_PARAM; + return CELL_OK; } @@ -29,6 +33,9 @@ s32 cellMusicSetSelectionContext2(vm::ptr context) { cellMusic.todo("cellMusicSetSelectionContext2(context=*0x%x)", context); + if (!context) + return CELL_MUSIC2_ERROR_PARAM; + const auto music = fxm::get_always(); if (!music->func) @@ -47,6 +54,8 @@ s32 cellMusicSetVolume2(f32 level) { cellMusic.todo("cellMusicSetVolume2(level=0x%x)", level); + level = std::clamp(level, 0.0f, 1.0f); + const auto music = fxm::get_always(); if (!music->func) @@ -64,6 +73,10 @@ s32 cellMusicSetVolume2(f32 level) s32 cellMusicGetContentsId(vm::ptr contents_id) { cellMusic.todo("cellMusicGetContentsId(contents_id=*0x%x)", contents_id); + + if (!contents_id) + return CELL_MUSIC_ERROR_PARAM; + return CELL_OK; } @@ -71,6 +84,9 @@ s32 cellMusicSetSelectionContext(vm::ptr context) { cellMusic.todo("cellMusicSetSelectionContext(context=*0x%x)", context); + if (!context) + return CELL_MUSIC_ERROR_PARAM; + const auto music = fxm::get_always(); if (!music->func) @@ -89,6 +105,15 @@ s32 cellMusicInitialize2SystemWorkload(s32 mode, vm::ptr fun { cellMusic.todo("cellMusicInitialize2SystemWorkload(mode=0x%x, func=*0x%x, userData=*0x%x, spurs=*0x%x, priority=*0x%x, attr=*0x%x)", mode, func, userData, spurs, priority, attr); + if (!func) + return CELL_MUSIC2_ERROR_PARAM; + + if (mode != CELL_MUSIC2_PLAYER_MODE_NORMAL) + { + cellMusic.todo("Unknown player mode: 0x%x", mode); + return CELL_MUSIC2_ERROR_PARAM; + } + const auto music = fxm::make_always(); music->func = func; music->userData = userData; @@ -105,12 +130,20 @@ s32 cellMusicInitialize2SystemWorkload(s32 mode, vm::ptr fun s32 cellMusicGetPlaybackStatus2(vm::ptr status) { cellMusic.todo("cellMusicGetPlaybackStatus2(status=*0x%x)", status); + + if (!status) + return CELL_MUSIC2_ERROR_PARAM; + return CELL_OK; } s32 cellMusicGetContentsId2(vm::ptr contents_id) { cellMusic.todo("cellMusicGetContentsId2(contents_id=*0x%x)", contents_id); + + if (!contents_id) + return CELL_MUSIC2_ERROR_PARAM; + return CELL_OK; } @@ -136,7 +169,10 @@ s32 cellMusicInitializeSystemWorkload(s32 mode, u32 container, vm::ptr context) { cellMusic.todo("cellMusicGetSelectionContext2(context=*0x%x)", context); + + if (!context) + return CELL_MUSIC2_ERROR_PARAM; + return CELL_OK; } s32 cellMusicGetVolume(vm::ptr level) { cellMusic.todo("cellMusicGetVolume(level=*0x%x)", level); + + if (!level) + return CELL_MUSIC_ERROR_PARAM; + return CELL_OK; } s32 cellMusicGetPlaybackStatus(vm::ptr status) { cellMusic.todo("cellMusicGetPlaybackStatus(status=*0x%x)", status); + + if (!status) + return CELL_MUSIC_ERROR_PARAM; + return CELL_OK; } @@ -218,6 +269,9 @@ s32 cellMusicSetPlaybackCommand2(s32 command, vm::ptr param) { cellMusic.todo("cellMusicSetPlaybackCommand2(command=0x%x, param=*0x%x)", command, param); + if (command < CELL_MUSIC_PB_CMD_STOP || command > CELL_MUSIC_PB_CMD_FASTREVERSE) + return CELL_MUSIC2_ERROR_PARAM; + const auto music = fxm::get_always(); if (!music->func) @@ -236,6 +290,9 @@ s32 cellMusicSetPlaybackCommand(s32 command, vm::ptr param) { cellMusic.todo("cellMusicSetPlaybackCommand(command=0x%x, param=*0x%x)", command, param); + if (command < CELL_MUSIC_PB_CMD_STOP || command > CELL_MUSIC_PB_CMD_FASTREVERSE) + return CELL_MUSIC_ERROR_PARAM; + const auto music = fxm::get_always(); if (!music->func) @@ -290,6 +347,9 @@ s32 cellMusicInitialize2(s32 mode, s32 spuPriority, vm::ptr { cellMusic.todo("cellMusicInitialize2(mode=%d, spuPriority=%d, func=*0x%x, userData=*0x%x)", mode, spuPriority, func, userData); + if (!func) + return CELL_MUSIC2_ERROR_PARAM; + if (mode != CELL_MUSIC2_PLAYER_MODE_NORMAL) { cellMusic.todo("Unknown player mode: 0x%x", mode); @@ -313,6 +373,8 @@ s32 cellMusicSetVolume(f32 level) { cellMusic.todo("cellMusicSetVolume(level=0x%x)", level); + level = std::clamp(level, 0.0f, 1.0f); + const auto music = fxm::get_always(); if (!music->func) @@ -330,6 +392,10 @@ s32 cellMusicSetVolume(f32 level) s32 cellMusicGetVolume2(vm::ptr level) { cellMusic.todo("cellMusicGetVolume2(level=*0x%x)", level); + + if (!level) + return CELL_MUSIC2_ERROR_PARAM; + return CELL_OK; }