From ba66373d8c0f83aaccfac86fe7cc192425b49e83 Mon Sep 17 00:00:00 2001 From: Gliniak Date: Thu, 3 Nov 2022 20:56:36 +0100 Subject: [PATCH] [APU][Janky] Fixed issues with incorrect frames on streamed data This requires a lot more research and test data! --- src/xenia/apu/xma_context.cc | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/xenia/apu/xma_context.cc b/src/xenia/apu/xma_context.cc index 79d2bb49a..dd49e96aa 100644 --- a/src/xenia/apu/xma_context.cc +++ b/src/xenia/apu/xma_context.cc @@ -446,7 +446,11 @@ void XmaContext::Decode(XMA_CONTEXT_DATA* data) { reuse_input_buffer = TrySetupNextLoop(data, true); } if (!reuse_input_buffer) { - is_stream_done_ = true; + if (current_input_packet_count == 1) { + SwapInputBuffer(data); + } else { + is_stream_done_ = true; + } } return; } @@ -584,7 +588,11 @@ void XmaContext::Decode(XMA_CONTEXT_DATA* data) { reuse_input_buffer = TrySetupNextLoop(data, true); } if (!reuse_input_buffer) { - is_stream_done_ = true; + if (current_input_packet_count == 1) { + SwapInputBuffer(data); + } else { + is_stream_done_ = true; + } } return; } @@ -678,7 +686,11 @@ void XmaContext::Decode(XMA_CONTEXT_DATA* data) { reuse_input_buffer = TrySetupNextLoop(data, true); } if (!reuse_input_buffer) { - is_stream_done_ = true; + if (current_input_packet_count == 1) { + SwapInputBuffer(data); + } else { + is_stream_done_ = true; + } if (output_rb.write_offset() == output_rb.read_offset()) { data->output_buffer_valid = 0; } @@ -699,7 +711,11 @@ void XmaContext::Decode(XMA_CONTEXT_DATA* data) { reuse_input_buffer = TrySetupNextLoop(data, true); } if (!reuse_input_buffer) { - is_stream_done_ = true; + if (current_input_packet_count == 1) { + SwapInputBuffer(data); + } else { + is_stream_done_ = true; + } } break; }