[XMA] detect full packet skip sentinel and advance rather than overshoot

This commit is contained in:
Herman S.
2026-02-20 17:45:11 +09:00
parent a1eef3a2b8
commit 470e62af22

View File

@@ -360,8 +360,23 @@ void XmaContextNew::Decode(XMA_CONTEXT_DATA* data) {
(packet_index * kBitsPerPacket) + packet_first_frame_offset;
relative_offset = packet_first_frame_offset;
}
const uint8_t skip_count = xma::GetPacketSkipCount(packet);
// Full packet skip — no new frames begin in this packet (XMA2: 0xFF,
// XMA1: lower 8 bits of 0x7FF also reads as 0xFF). Advance to the
// next sequential packet instead of trying to parse frames.
if (skip_count == 0xFF) {
uint32_t next_input_offset = GetNextPacketReadOffset(
current_input_buffer, packet_index + 1, current_input_packet_count);
if (next_input_offset == kBitsPerPacketHeader) {
SwapInputBuffer(data);
}
data->input_buffer_read_offset = next_input_offset;
return;
}
kPacketInfo packet_info = GetPacketInfo(packet, relative_offset);
const uint32_t packet_to_skip = xma::GetPacketSkipCount(packet) + 1;
const uint32_t packet_to_skip = skip_count + 1;
const uint32_t next_packet_index = packet_index + packet_to_skip;
// Frame header split across packet boundary — combine packets to read