mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-03 21:41:26 +12:00
cellMusic: Implement some error checking
This commit is contained in:
parent
4ac59875af
commit
f076fcd539
3 changed files with 47 additions and 6 deletions
|
@ -248,6 +248,11 @@ error_code cellMusicGetSelectionContext(vm::ptr<CellMusicSelectionContext> conte
|
||||||
auto& music = g_fxo->get<music_state>();
|
auto& music = g_fxo->get<music_state>();
|
||||||
std::lock_guard lock(music.mtx);
|
std::lock_guard lock(music.mtx);
|
||||||
|
|
||||||
|
if (!music.current_selection_context)
|
||||||
|
{
|
||||||
|
return CELL_MUSIC2_ERROR_NO_ACTIVE_CONTENT;
|
||||||
|
}
|
||||||
|
|
||||||
*context = music.current_selection_context.get();
|
*context = music.current_selection_context.get();
|
||||||
cellMusic.success("cellMusicGetSelectionContext: selection context = %s", music.current_selection_context.to_string());
|
cellMusic.success("cellMusicGetSelectionContext: selection context = %s", music.current_selection_context.to_string());
|
||||||
|
|
||||||
|
@ -317,6 +322,12 @@ error_code cellMusicGetContentsId(vm::ptr<CellSearchContentId> contents_id)
|
||||||
// HACKY
|
// HACKY
|
||||||
auto& music = g_fxo->get<music_state>();
|
auto& music = g_fxo->get<music_state>();
|
||||||
std::lock_guard lock(music.mtx);
|
std::lock_guard lock(music.mtx);
|
||||||
|
|
||||||
|
if (!music.current_selection_context)
|
||||||
|
{
|
||||||
|
return CELL_MUSIC2_ERROR_NO_ACTIVE_CONTENT;
|
||||||
|
}
|
||||||
|
|
||||||
return music.current_selection_context.find_content_id(contents_id);
|
return music.current_selection_context.find_content_id(contents_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,6 +374,7 @@ error_code cellMusicInitialize2SystemWorkload(s32 mode, vm::ptr<CellMusic2Callba
|
||||||
auto& music = g_fxo->get<music_state>();
|
auto& music = g_fxo->get<music_state>();
|
||||||
music.func = func;
|
music.func = func;
|
||||||
music.userData = userData;
|
music.userData = userData;
|
||||||
|
music.current_selection_context = {};
|
||||||
|
|
||||||
sysutil_register_cb([=, &music](ppu_thread& ppu) -> s32
|
sysutil_register_cb([=, &music](ppu_thread& ppu) -> s32
|
||||||
{
|
{
|
||||||
|
@ -429,6 +441,7 @@ error_code cellMusicInitializeSystemWorkload(s32 mode, u32 container, vm::ptr<Ce
|
||||||
auto& music = g_fxo->get<music_state>();
|
auto& music = g_fxo->get<music_state>();
|
||||||
music.func = func;
|
music.func = func;
|
||||||
music.userData = userData;
|
music.userData = userData;
|
||||||
|
music.current_selection_context = {};
|
||||||
|
|
||||||
sysutil_register_cb([=, &music](ppu_thread& ppu) -> s32
|
sysutil_register_cb([=, &music](ppu_thread& ppu) -> s32
|
||||||
{
|
{
|
||||||
|
@ -451,6 +464,7 @@ error_code cellMusicInitialize(s32 mode, u32 container, s32 spuPriority, vm::ptr
|
||||||
auto& music = g_fxo->get<music_state>();
|
auto& music = g_fxo->get<music_state>();
|
||||||
music.func = func;
|
music.func = func;
|
||||||
music.userData = userData;
|
music.userData = userData;
|
||||||
|
music.current_selection_context = {};
|
||||||
|
|
||||||
sysutil_register_cb([=, &music](ppu_thread& ppu) -> s32
|
sysutil_register_cb([=, &music](ppu_thread& ppu) -> s32
|
||||||
{
|
{
|
||||||
|
@ -489,6 +503,11 @@ error_code cellMusicGetSelectionContext2(vm::ptr<CellMusicSelectionContext> cont
|
||||||
auto& music = g_fxo->get<music_state>();
|
auto& music = g_fxo->get<music_state>();
|
||||||
std::lock_guard lock(music.mtx);
|
std::lock_guard lock(music.mtx);
|
||||||
|
|
||||||
|
if (!music.current_selection_context)
|
||||||
|
{
|
||||||
|
return CELL_MUSIC2_ERROR_NO_ACTIVE_CONTENT;
|
||||||
|
}
|
||||||
|
|
||||||
*context = music.current_selection_context.get();
|
*context = music.current_selection_context.get();
|
||||||
cellMusic.success("cellMusicGetSelectionContext2: selection context = %s", music.current_selection_context.to_string());
|
cellMusic.success("cellMusicGetSelectionContext2: selection context = %s", music.current_selection_context.to_string());
|
||||||
|
|
||||||
|
@ -533,14 +552,21 @@ error_code cellMusicSetPlaybackCommand2(s32 command, vm::ptr<void> param)
|
||||||
if (!music.func)
|
if (!music.func)
|
||||||
return CELL_MUSIC2_ERROR_GENERIC;
|
return CELL_MUSIC2_ERROR_GENERIC;
|
||||||
|
|
||||||
sysutil_register_cb([=, &music](ppu_thread& ppu) -> s32
|
error_code result = CELL_OK;
|
||||||
|
|
||||||
|
if (!music.current_selection_context)
|
||||||
{
|
{
|
||||||
const error_code result = music.set_playback_command(command);
|
result = CELL_MUSIC_ERROR_GENERIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
sysutil_register_cb([=, &music, prev_res = result](ppu_thread& ppu) -> s32
|
||||||
|
{
|
||||||
|
const error_code result = prev_res ? prev_res : music.set_playback_command(command);
|
||||||
music.func(ppu, CELL_MUSIC2_EVENT_SET_PLAYBACK_COMMAND_RESULT, vm::addr_t(+result), music.userData);
|
music.func(ppu, CELL_MUSIC2_EVENT_SET_PLAYBACK_COMMAND_RESULT, vm::addr_t(+result), music.userData);
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
});
|
});
|
||||||
|
|
||||||
return CELL_OK;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
error_code cellMusicSetPlaybackCommand(s32 command, vm::ptr<void> param)
|
error_code cellMusicSetPlaybackCommand(s32 command, vm::ptr<void> param)
|
||||||
|
@ -555,14 +581,21 @@ error_code cellMusicSetPlaybackCommand(s32 command, vm::ptr<void> param)
|
||||||
if (!music.func)
|
if (!music.func)
|
||||||
return CELL_MUSIC_ERROR_GENERIC;
|
return CELL_MUSIC_ERROR_GENERIC;
|
||||||
|
|
||||||
sysutil_register_cb([=, &music](ppu_thread& ppu) -> s32
|
error_code result = CELL_OK;
|
||||||
|
|
||||||
|
if (!music.current_selection_context)
|
||||||
{
|
{
|
||||||
const error_code result = music.set_playback_command(command);
|
result = CELL_MUSIC2_ERROR_GENERIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
sysutil_register_cb([=, &music, prev_res = result](ppu_thread& ppu) -> s32
|
||||||
|
{
|
||||||
|
const error_code result = prev_res ? prev_res : music.set_playback_command(command);
|
||||||
music.func(ppu, CELL_MUSIC_EVENT_SET_PLAYBACK_COMMAND_RESULT, vm::addr_t(+result), music.userData);
|
music.func(ppu, CELL_MUSIC_EVENT_SET_PLAYBACK_COMMAND_RESULT, vm::addr_t(+result), music.userData);
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
});
|
});
|
||||||
|
|
||||||
return CELL_OK;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
error_code cellMusicSelectContents2()
|
error_code cellMusicSelectContents2()
|
||||||
|
@ -591,6 +624,7 @@ error_code cellMusicInitialize2(s32 mode, s32 spuPriority, vm::ptr<CellMusic2Cal
|
||||||
auto& music = g_fxo->get<music_state>();
|
auto& music = g_fxo->get<music_state>();
|
||||||
music.func = func;
|
music.func = func;
|
||||||
music.userData = userData;
|
music.userData = userData;
|
||||||
|
music.current_selection_context = {};
|
||||||
|
|
||||||
sysutil_register_cb([=, &music](ppu_thread& ppu) -> s32
|
sysutil_register_cb([=, &music](ppu_thread& ppu) -> s32
|
||||||
{
|
{
|
||||||
|
|
|
@ -141,6 +141,7 @@ struct CellMusicSelectionContext
|
||||||
|
|
||||||
struct music_selection_context
|
struct music_selection_context
|
||||||
{
|
{
|
||||||
|
bool valid = false;
|
||||||
char magic[4] = "SUS";
|
char magic[4] = "SUS";
|
||||||
std::string hash;
|
std::string hash;
|
||||||
CellSearchContentType content_type = CELL_SEARCH_CONTENTTYPE_MUSIC;
|
CellSearchContentType content_type = CELL_SEARCH_CONTENTTYPE_MUSIC;
|
||||||
|
@ -167,6 +168,11 @@ struct music_selection_context
|
||||||
bool load_playlist();
|
bool load_playlist();
|
||||||
u32 step_track(bool next);
|
u32 step_track(bool next);
|
||||||
|
|
||||||
|
operator bool() const
|
||||||
|
{
|
||||||
|
return atomic_storage<bool>::load(valid);
|
||||||
|
}
|
||||||
|
|
||||||
// Helper
|
// Helper
|
||||||
error_code find_content_id(vm::ptr<CellSearchContentId> contents_id);
|
error_code find_content_id(vm::ptr<CellSearchContentId> contents_id);
|
||||||
};
|
};
|
||||||
|
|
|
@ -242,6 +242,7 @@ bool music_selection_context::load_playlist()
|
||||||
playlist.push_back(track_node[i].Scalar());
|
playlist.push_back(track_node[i].Scalar());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
valid = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue