diff --git a/rpcs3/Emu/Cell/Modules/cellMusicDecode.cpp b/rpcs3/Emu/Cell/Modules/cellMusicDecode.cpp index b7f21b90ad..6e6d477ec2 100644 --- a/rpcs3/Emu/Cell/Modules/cellMusicDecode.cpp +++ b/rpcs3/Emu/Cell/Modules/cellMusicDecode.cpp @@ -90,6 +90,7 @@ struct music_decode case CELL_MUSIC_DECODE_CMD_PREV: { decoder.stop(); + read_pos = 0; if (decoder.set_next_index(command == CELL_MUSIC_DECODE_CMD_NEXT) == umax) { @@ -195,9 +196,10 @@ error_code cell_music_decode_read(vm::ptr buf, vm::ptr startTime, u64 if (dec.decoder.m_size == 0) { - return CELL_MUSIC_DECODE_ERROR_NO_LPCM_DATA; + return { CELL_MUSIC_DECODE_ERROR_NO_LPCM_DATA, "m_size == 0" }; } + ensure(dec.decoder.m_size >= dec.read_pos); const u64 size_left = dec.decoder.m_size - dec.read_pos; if (dec.read_pos == 0) @@ -229,10 +231,10 @@ error_code cell_music_decode_read(vm::ptr buf, vm::ptr startTime, u64 if (size_to_read == 0) { - return CELL_MUSIC_DECODE_ERROR_NO_LPCM_DATA; // TODO: speculative + return { CELL_MUSIC_DECODE_ERROR_NO_LPCM_DATA, "size_to_read == 0" }; // TODO: speculative } - std::memcpy(buf.get_ptr(), &dec.decoder.data[dec.read_pos], size_to_read); + std::memcpy(buf.get_ptr(), &::at32(dec.decoder.data, dec.read_pos), size_to_read); if (size_to_read < reqSize) {