From 5c1ab7e6991d27eda6f4d010c3d9eeda1fdede13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sun, 14 Apr 2024 18:31:26 +0200 Subject: [PATCH] Move dataOff into Track --- Core/HLE/AtracCtx.cpp | 30 +++++++++++++++--------------- Core/HLE/AtracCtx.h | 6 +++--- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Core/HLE/AtracCtx.cpp b/Core/HLE/AtracCtx.cpp index e686a5bcf5..38dbffacbb 100644 --- a/Core/HLE/AtracCtx.cpp +++ b/Core/HLE/AtracCtx.cpp @@ -64,9 +64,9 @@ void Atrac::DoState(PointerWrap &p) { Do(p, track_.endSample); Do(p, track_.firstSampleOffset); if (s >= 3) { - Do(p, dataOff_); + Do(p, track_.dataOff); } else { - dataOff_ = track_.firstSampleOffset; + track_.dataOff = track_.firstSampleOffset; } u32 hasDataBuf = dataBuf_ != nullptr; @@ -127,10 +127,10 @@ void Atrac::DoState(PointerWrap &p) { Do(p, bufferValidBytes_); Do(p, bufferHeaderSize_); } else { - bufferHeaderSize_ = dataOff_; - bufferValidBytes_ = std::min(first_.size - dataOff_, StreamBufferEnd() - dataOff_); + bufferHeaderSize_ = track_.dataOff; + bufferValidBytes_ = std::min(first_.size - track_.dataOff, StreamBufferEnd() - track_.dataOff); if ((bufferState_ & ATRAC_STATUS_STREAMED_MASK) == ATRAC_STATUS_STREAMED_MASK) { - bufferPos_ = dataOff_; + bufferPos_ = track_.dataOff; } } @@ -216,12 +216,12 @@ void Atrac::WriteContextToPSPMem() { } context->info.sampleSize = track_.bytesPerFrame; context->info.numChan = channels_; - context->info.dataOff = dataOff_; + context->info.dataOff = track_.dataOff; context->info.endSample = track_.endSample + track_.firstSampleOffset + FirstOffsetExtra(); context->info.dataEnd = track_.fileSize; context->info.curOff = first_.fileoffset; context->info.decodePos = DecodePosBySample(currentSample_); - context->info.streamDataByte = first_.size - dataOff_; + context->info.streamDataByte = first_.size - track_.dataOff; u8 *buf = (u8 *)context; *(u32_le *)(buf + 0xfc) = atracID_; @@ -392,7 +392,7 @@ int Atrac::Analyze(u32 addr, u32 size) { case DATA_CHUNK_MAGIC: { bfoundData = true; - dataOff_ = offset; + track->dataOff = offset; dataChunkSize = chunkSize; if (track->fileSize < offset + chunkSize) { WARN_LOG_REPORT(ME, "Atrac data chunk extends beyond riff chunk"); @@ -496,10 +496,10 @@ int Atrac::AnalyzeAA3(u32 addr, u32 size, u32 filesize) { return hleReportError(ME, ATRAC_ERROR_AA3_INVALID_DATA, "invalid codec type %d", buffer[32]); } - dataOff_ = 10 + tagSize + 96; + track->dataOff = 10 + tagSize + 96; track->firstSampleOffset = 0; if (track->endSample < 0 && track->bytesPerFrame != 0) { - track->endSample = ((filesize - dataOff_) / track->bytesPerFrame) * track->SamplesPerFrame(); + track->endSample = ((filesize - track->dataOff) / track->bytesPerFrame) * track->SamplesPerFrame(); } track->endSample -= 1; return 0; @@ -616,7 +616,7 @@ void Atrac::GetResetBufferInfo(AtracResetBufferInfo *bufferInfo, int sample) { } else { bufferInfo->first.minWriteBytes = track_.bytesPerFrame * 2; } - if ((u32)sample < (u32)track_.firstSampleOffset && sampleFileOffset != dataOff_) { + if ((u32)sample < (u32)track_.firstSampleOffset && sampleFileOffset != track_.dataOff) { sampleFileOffset -= track_.bytesPerFrame; } bufferInfo->first.filePos = sampleFileOffset; @@ -665,8 +665,8 @@ int Atrac::SetData(u32 buffer, u32 readSize, u32 bufferSize, int successCode) { ignoreDataBuf_ = true; } if (bufferState_ == ATRAC_STATUS_STREAMED_WITHOUT_LOOP || bufferState_ == ATRAC_STATUS_STREAMED_LOOP_FROM_END || bufferState_ == ATRAC_STATUS_STREAMED_LOOP_WITH_TRAILER) { - bufferHeaderSize_ = dataOff_; - bufferPos_ = dataOff_ + track_.bytesPerFrame; + bufferHeaderSize_ = track_.dataOff; + bufferPos_ = track_.dataOff + track_.bytesPerFrame; bufferValidBytes_ = first_.size - bufferPos_; } @@ -822,7 +822,7 @@ void Atrac::SeekToSample(int sample) { } const u32 off = FileOffsetBySample(sample + adjust); const u32 backfill = track_.bytesPerFrame * 2; - const u32 start = off - dataOff_ < backfill ? dataOff_ : off - backfill; + const u32 start = off - track_.dataOff < backfill ? track_.dataOff : off - backfill; for (u32 pos = start; pos < off; pos += track_.bytesPerFrame) { decoder_->Decode(BufferStart() + pos, track_.bytesPerFrame, nullptr, nullptr, nullptr); @@ -1102,7 +1102,7 @@ void Atrac::InitLowLevel(u32 paramsAddr, bool jointStereo) { jointStereo_ = false; } - dataOff_ = 0; + track_.dataOff = 0; first_.size = 0; track_.fileSize = track_.bytesPerFrame; // not really meaningful bufferState_ = ATRAC_STATUS_LOW_LEVEL; diff --git a/Core/HLE/AtracCtx.h b/Core/HLE/AtracCtx.h index 674ec9a973..68ab88faf0 100644 --- a/Core/HLE/AtracCtx.h +++ b/Core/HLE/AtracCtx.h @@ -112,6 +112,8 @@ struct Track { u16 bytesPerFrame; int firstSampleOffset; int endSample; + // Offset of the first sample in the input buffer + int dataOff = 0; std::vector loopinfo; int loopStartSample = -1; @@ -167,7 +169,7 @@ struct Atrac { u32 FileOffsetBySample(int sample) const { int offsetSample = sample + track_.firstSampleOffset; int frameOffset = offsetSample / (int)track_.SamplesPerFrame(); - return (u32)(dataOff_ + track_.bytesPerFrame + frameOffset * track_.bytesPerFrame); + return (u32)(track_.dataOff + track_.bytesPerFrame + frameOffset * track_.bytesPerFrame); } const Track &GetTrack() const { @@ -186,8 +188,6 @@ struct Atrac { int RemainingFrames() const; u8 *dataBuf_ = nullptr; - // Offset of the first sample in the input buffer - int dataOff_ = 0; // Indicates that the dataBuf_ array should not be used. bool ignoreDataBuf_ = false; u32 decodePos_ = 0;