summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreray orçunus <erayorcunus@gmail.com>2020-10-05 13:26:42 +0200
committereray orçunus <erayorcunus@gmail.com>2020-10-05 13:26:42 +0200
commitc5a61b3d3bccdbed385b68c48c7afb7d881f364d (patch)
tree140b4f6dcca75ca3701223b1c7098c6d69dd258c
parentFix some sanitizer errors, improve POSIX streamer (diff)
parentMerge branch 'master' of https://github.com/GTAmodding/re3 into audioFix (diff)
downloadre3-c5a61b3d3bccdbed385b68c48c7afb7d881f364d.tar
re3-c5a61b3d3bccdbed385b68c48c7afb7d881f364d.tar.gz
re3-c5a61b3d3bccdbed385b68c48c7afb7d881f364d.tar.bz2
re3-c5a61b3d3bccdbed385b68c48c7afb7d881f364d.tar.lz
re3-c5a61b3d3bccdbed385b68c48c7afb7d881f364d.tar.xz
re3-c5a61b3d3bccdbed385b68c48c7afb7d881f364d.tar.zst
re3-c5a61b3d3bccdbed385b68c48c7afb7d881f364d.zip
-rw-r--r--src/audio/oal/stream.cpp12
-rw-r--r--src/audio/oal/stream.h6
-rw-r--r--src/audio/sampman_oal.cpp5
-rw-r--r--src/core/Streaming.cpp15
4 files changed, 22 insertions, 16 deletions
diff --git a/src/audio/oal/stream.cpp b/src/audio/oal/stream.cpp
index eeaaafb0..c4f1b67c 100644
--- a/src/audio/oal/stream.cpp
+++ b/src/audio/oal/stream.cpp
@@ -155,13 +155,13 @@ public:
void Seek(uint32 milliseconds)
{
if ( !IsOpened() ) return;
- mpg123_seek(m_pMH, ms2samples(milliseconds)*GetSampleSize(), SEEK_SET);
+ mpg123_seek(m_pMH, ms2samples(milliseconds), SEEK_SET);
}
uint32 Tell()
{
if ( !IsOpened() ) return 0;
- return samples2ms(mpg123_tell(m_pMH)/GetSampleSize());
+ return samples2ms(mpg123_tell(m_pMH));
}
uint32 Decode(void *buffer)
@@ -247,13 +247,13 @@ public:
void Seek(uint32 milliseconds)
{
if ( !IsOpened() ) return;
- op_pcm_seek(m_FileH, ms2samples(milliseconds) * GetSampleSize());
+ op_pcm_seek(m_FileH, ms2samples(milliseconds) / GetChannels());
}
uint32 Tell()
{
if ( !IsOpened() ) return 0;
- return samples2ms(op_pcm_tell(m_FileH)/GetSampleSize());
+ return samples2ms(op_pcm_tell(m_FileH) * GetChannels());
}
uint32 Decode(void *buffer)
@@ -461,8 +461,8 @@ uint32 CStream::GetPosMS()
alGetSourcei(m_alSource, AL_BYTE_OFFSET, &offset);
return m_pSoundFile->Tell()
- - m_pSoundFile->samples2ms(m_pSoundFile->GetBufferSamples() * (NUM_STREAMBUFFERS-1))
- + m_pSoundFile->samples2ms(offset/m_pSoundFile->GetSampleSize());
+ - m_pSoundFile->samples2ms(m_pSoundFile->GetBufferSamples() * (NUM_STREAMBUFFERS-1)) / m_pSoundFile->GetChannels()
+ + m_pSoundFile->samples2ms(offset/m_pSoundFile->GetSampleSize()) / m_pSoundFile->GetChannels();
}
uint32 CStream::GetLengthMS()
diff --git a/src/audio/oal/stream.h b/src/audio/oal/stream.h
index 456c080a..2476abcc 100644
--- a/src/audio/oal/stream.h
+++ b/src/audio/oal/stream.h
@@ -24,12 +24,12 @@ public:
uint32 ms2samples(uint32 ms)
{
- return float(ms) / 1000.0f * float(GetChannels()) * float(GetSampleRate());
+ return float(ms) / 1000.0f * float(GetSampleRate());
}
uint32 samples2ms(uint32 sm)
{
- return float(sm) * 1000.0f / float(GetChannels()) / float(GetSampleRate());
+ return float(sm) * 1000.0f / float(GetSampleRate());
}
uint32 GetBufferSamples()
@@ -108,4 +108,4 @@ public:
void ProviderTerm();
};
-#endif \ No newline at end of file
+#endif
diff --git a/src/audio/sampman_oal.cpp b/src/audio/sampman_oal.cpp
index b10aa1ff..9f3156cb 100644
--- a/src/audio/sampman_oal.cpp
+++ b/src/audio/sampman_oal.cpp
@@ -27,6 +27,7 @@
#include "MusicManager.h"
#include "Frontend.h"
#include "Timer.h"
+#include "crossplatform.h"
#ifdef AUDIO_OPUS
#include <opusfile.h>
#endif
@@ -1423,11 +1424,11 @@ cSampleManager::InitialiseSampleBanks(void)
{
int32 nBank = SFX_BANK_0;
- fpSampleDescHandle = fopen(SampleBankDescFilename, "rb");
+ fpSampleDescHandle = fcaseopen(SampleBankDescFilename, "rb");
if ( fpSampleDescHandle == NULL )
return false;
#ifndef AUDIO_OPUS
- fpSampleDataHandle = fopen(SampleBankDataFilename, "rb");
+ fpSampleDataHandle = fcaseopen(SampleBankDataFilename, "rb");
if ( fpSampleDataHandle == NULL )
{
fclose(fpSampleDescHandle);
diff --git a/src/core/Streaming.cpp b/src/core/Streaming.cpp
index 4d14ff63..3c5689fd 100644
--- a/src/core/Streaming.cpp
+++ b/src/core/Streaming.cpp
@@ -2556,12 +2556,17 @@ CStreaming::DeleteRwObjectsNotInFrustumInSectorList(CPtrList &list, size_t mem)
void
CStreaming::MakeSpaceFor(int32 size)
{
- // BUG: ms_memoryAvailable can be uninitialized
- // the code still happens to work in that case because ms_memoryAvailable is unsigned
- // but it's not nice....
-
+#ifdef FIX_BUGS
+#define MB (1024 * 1024)
+ if(ms_memoryAvailable == 0) {
+ extern size_t _dwMemAvailPhys;
+ ms_memoryAvailable = (_dwMemAvailPhys - 10 * MB) / 2;
+ if(ms_memoryAvailable < 50 * MB) ms_memoryAvailable = 50 * MB;
+ }
+#undef MB
+#endif
while(ms_memoryUsed >= ms_memoryAvailable - size)
- if(!RemoveLeastUsedModel()){
+ if(!RemoveLeastUsedModel()) {
DeleteRwObjectsBehindCamera(ms_memoryAvailable - size);
return;
}