cellMusicDecode: Fix read position on prev/next track

This commit is contained in:
Megamouse 2026-06-01 01:03:51 +02:00
parent 1b5a895346
commit 883a6889e0

View File

@ -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<void> buf, vm::ptr<u32> 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<void> buf, vm::ptr<u32> 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)
{