[XMA] convert GetNextPacketReadOffset from recursion to iterative loop
This commit is contained in:
@@ -587,26 +587,24 @@ const uint8_t* XmaContextNew::GetNextPacket(
|
|||||||
const uint32_t XmaContextNew::GetNextPacketReadOffset(
|
const uint32_t XmaContextNew::GetNextPacketReadOffset(
|
||||||
uint8_t* buffer, uint32_t next_packet_index,
|
uint8_t* buffer, uint32_t next_packet_index,
|
||||||
uint32_t current_input_packet_count) {
|
uint32_t current_input_packet_count) {
|
||||||
if (next_packet_index >= current_input_packet_count) {
|
// Scan forward for the next packet that contains a new frame.
|
||||||
return kBitsPerPacketHeader;
|
while (next_packet_index < current_input_packet_count) {
|
||||||
|
uint8_t* next_packet = buffer + (next_packet_index * kBytesPerPacket);
|
||||||
|
const uint32_t packet_frame_offset = xma::GetPacketFrameOffset(next_packet);
|
||||||
|
|
||||||
|
if (packet_frame_offset <= kMaxFrameSizeinBits) {
|
||||||
|
const uint32_t new_input_buffer_offset =
|
||||||
|
(next_packet_index * kBitsPerPacket) + packet_frame_offset;
|
||||||
|
|
||||||
|
XELOGAPU("XmaContext {}: new offset: {} packet_offset: {} packet: {}/{}",
|
||||||
|
id(), new_input_buffer_offset, packet_frame_offset,
|
||||||
|
next_packet_index, current_input_packet_count);
|
||||||
|
return new_input_buffer_offset;
|
||||||
|
}
|
||||||
|
next_packet_index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t* next_packet = buffer + (next_packet_index * kBytesPerPacket);
|
return kBitsPerPacketHeader;
|
||||||
const uint32_t packet_frame_offset = xma::GetPacketFrameOffset(next_packet);
|
|
||||||
|
|
||||||
if (packet_frame_offset > kMaxFrameSizeinBits) {
|
|
||||||
const uint32_t offset = GetNextPacketReadOffset(
|
|
||||||
buffer, next_packet_index + 1, current_input_packet_count);
|
|
||||||
return offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
const uint32_t new_input_buffer_offset =
|
|
||||||
(next_packet_index * kBitsPerPacket) + packet_frame_offset;
|
|
||||||
|
|
||||||
XELOGAPU("XmaContext {}: new offset: {} packet_offset: {} packet: {}/{}",
|
|
||||||
id(), new_input_buffer_offset, packet_frame_offset,
|
|
||||||
next_packet_index, current_input_packet_count);
|
|
||||||
return new_input_buffer_offset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint32_t XmaContextNew::GetAmountOfBitsToRead(
|
const uint32_t XmaContextNew::GetAmountOfBitsToRead(
|
||||||
|
|||||||
Reference in New Issue
Block a user