Remove std prefix from int types
std::int* -> int*
This commit is contained in:
+1
-1
@@ -340,7 +340,7 @@ typedef unsigned IPos; // A Pos is an index in the character window. Pos is used
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef std::int64_t lutime_t; // define it ourselves since we don't include time.h
|
typedef int64_t lutime_t; // define it ourselves since we don't include time.h
|
||||||
|
|
||||||
typedef struct iztimes {
|
typedef struct iztimes {
|
||||||
lutime_t atime,mtime,ctime;
|
lutime_t atime,mtime,ctime;
|
||||||
|
|||||||
+2
-2
@@ -544,7 +544,7 @@ void Model::PlayAnimation( const RString &sAniName, float fPlayRate )
|
|||||||
{
|
{
|
||||||
// int iBoneIndex = (pMesh->m_iBoneIndex!=-1) ? pMesh->m_iBoneIndex : bone;
|
// int iBoneIndex = (pMesh->m_iBoneIndex!=-1) ? pMesh->m_iBoneIndex : bone;
|
||||||
RageVector3 &pos = Vertices[j].p;
|
RageVector3 &pos = Vertices[j].p;
|
||||||
std::int8_t bone = Vertices[j].bone;
|
int8_t bone = Vertices[j].bone;
|
||||||
if( bone != -1 )
|
if( bone != -1 )
|
||||||
{
|
{
|
||||||
pos[0] -= m_vpBones[bone].m_Absolute.m[3][0];
|
pos[0] -= m_vpBones[bone].m_Absolute.m[3][0];
|
||||||
@@ -701,7 +701,7 @@ void Model::UpdateTempGeometry()
|
|||||||
RageVector3 &tempNormal = tempVertices[j].n;
|
RageVector3 &tempNormal = tempVertices[j].n;
|
||||||
const RageVector3 &originalPos = origVertices[j].p;
|
const RageVector3 &originalPos = origVertices[j].p;
|
||||||
const RageVector3 &originalNormal = origVertices[j].n;
|
const RageVector3 &originalNormal = origVertices[j].n;
|
||||||
std::int8_t bone = origVertices[j].bone;
|
int8_t bone = origVertices[j].bone;
|
||||||
|
|
||||||
if( bone == -1 )
|
if( bone == -1 )
|
||||||
{
|
{
|
||||||
|
|||||||
+2
-2
@@ -17,14 +17,14 @@ struct msTriangle
|
|||||||
struct msMesh
|
struct msMesh
|
||||||
{
|
{
|
||||||
RString sName;
|
RString sName;
|
||||||
std::int8_t nMaterialIndex;
|
int8_t nMaterialIndex;
|
||||||
|
|
||||||
std::vector<RageModelVertex> Vertices;
|
std::vector<RageModelVertex> Vertices;
|
||||||
|
|
||||||
// OPTIMIZATION: If all verts in a mesh are transformed by the same bone,
|
// OPTIMIZATION: If all verts in a mesh are transformed by the same bone,
|
||||||
// then send the transform to the graphics card for the whole mesh instead
|
// then send the transform to the graphics card for the whole mesh instead
|
||||||
// of transforming each vertex on the CPU;
|
// of transforming each vertex on the CPU;
|
||||||
std::int8_t m_iBoneIndex; // -1 = no bone
|
int8_t m_iBoneIndex; // -1 = no bone
|
||||||
|
|
||||||
std::vector<msTriangle> Triangles;
|
std::vector<msTriangle> Triangles;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ static void LoadFromSMNoteDataStringWithPlayer( NoteData& out, const RString &sS
|
|||||||
int iHeadRow;
|
int iHeadRow;
|
||||||
if( !out.IsHoldNoteAtRow( iTrack, iIndex, &iHeadRow ) )
|
if( !out.IsHoldNoteAtRow( iTrack, iIndex, &iHeadRow ) )
|
||||||
{
|
{
|
||||||
int n = std::intptr_t(endLine) - std::intptr_t(beginLine);
|
int n = intptr_t(endLine) - intptr_t(beginLine);
|
||||||
LOG->Warn( "Unmatched 3 in \"%.*s\"", n, beginLine );
|
LOG->Warn( "Unmatched 3 in \"%.*s\"", n, beginLine );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
+1
-1
@@ -1361,7 +1361,7 @@ void NoteDisplay::DrawActor(const TapNote& tn, Actor* pActor, NotePart part,
|
|||||||
break;
|
break;
|
||||||
case NoteColorType_ProgressAlternate:
|
case NoteColorType_ProgressAlternate:
|
||||||
fScaledBeat = fBeat * cache->m_iNoteColorCount[part];
|
fScaledBeat = fBeat * cache->m_iNoteColorCount[part];
|
||||||
if( fScaledBeat - std::int64_t(fScaledBeat) == 0.0f )
|
if( fScaledBeat - int64_t(fScaledBeat) == 0.0f )
|
||||||
//we're on a boundary, so move to the previous frame.
|
//we're on a boundary, so move to the previous frame.
|
||||||
//doing it this way ensures that fScaledBeat is never negative so std::fmod works.
|
//doing it this way ensures that fScaledBeat is never negative so std::fmod works.
|
||||||
fScaledBeat += cache->m_iNoteColorCount[part] - 1;
|
fScaledBeat += cache->m_iNoteColorCount[part] - 1;
|
||||||
|
|||||||
+6
-6
@@ -287,10 +287,10 @@ uint16_t FileReading::read_u16_le( RageFileBasic &f, RString &sError )
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int16_t FileReading::read_16_le( RageFileBasic &f, RString &sError )
|
int16_t FileReading::read_16_le( RageFileBasic &f, RString &sError )
|
||||||
{
|
{
|
||||||
std::int16_t val;
|
int16_t val;
|
||||||
ReadBytes( f, &val, sizeof(std::int16_t), sError );
|
ReadBytes( f, &val, sizeof(int16_t), sError );
|
||||||
if( sError.size() == 0 )
|
if( sError.size() == 0 )
|
||||||
return Swap16LE( val );
|
return Swap16LE( val );
|
||||||
else
|
else
|
||||||
@@ -307,10 +307,10 @@ uint32_t FileReading::read_u32_le( RageFileBasic &f, RString &sError )
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int32_t FileReading::read_32_le( RageFileBasic &f, RString &sError )
|
int32_t FileReading::read_32_le( RageFileBasic &f, RString &sError )
|
||||||
{
|
{
|
||||||
std::int32_t val;
|
int32_t val;
|
||||||
ReadBytes( f, &val, sizeof(std::int32_t), sError );
|
ReadBytes( f, &val, sizeof(int32_t), sError );
|
||||||
if( sError.size() == 0 )
|
if( sError.size() == 0 )
|
||||||
return Swap32LE( val );
|
return Swap32LE( val );
|
||||||
else
|
else
|
||||||
|
|||||||
+2
-2
@@ -104,9 +104,9 @@ namespace FileReading
|
|||||||
void Seek( RageFileBasic &f, int iOffset, RString &sError );
|
void Seek( RageFileBasic &f, int iOffset, RString &sError );
|
||||||
RString ReadString( RageFileBasic &f, int size, RString &sError );
|
RString ReadString( RageFileBasic &f, int size, RString &sError );
|
||||||
uint8_t read_8( RageFileBasic &f, RString &sError );
|
uint8_t read_8( RageFileBasic &f, RString &sError );
|
||||||
std::int16_t read_16_le( RageFileBasic &f, RString &sError );
|
int16_t read_16_le( RageFileBasic &f, RString &sError );
|
||||||
uint16_t read_u16_le( RageFileBasic &f, RString &sError );
|
uint16_t read_u16_le( RageFileBasic &f, RString &sError );
|
||||||
std::int32_t read_32_le( RageFileBasic &f, RString &sError );
|
int32_t read_32_le( RageFileBasic &f, RString &sError );
|
||||||
uint32_t read_u32_le( RageFileBasic &f, RString &sError );
|
uint32_t read_u32_le( RageFileBasic &f, RString &sError );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -366,7 +366,7 @@ RageFileObjInflate *GunzipFile( RageFileBasic *pFile_, RString &sError, uint32_t
|
|||||||
|
|
||||||
if( iFlags & FEXTRA )
|
if( iFlags & FEXTRA )
|
||||||
{
|
{
|
||||||
std::int16_t iSize = FileReading::read_16_le( *pFile, sError );
|
int16_t iSize = FileReading::read_16_le( *pFile, sError );
|
||||||
FileReading::SkipBytes( *pFile, iSize, sError );
|
FileReading::SkipBytes( *pFile, iSize, sError );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -386,7 +386,7 @@ RageFileObjInflate *GunzipFile( RageFileBasic *pFile_, RString &sError, uint32_t
|
|||||||
ASSERT( bOK );
|
ASSERT( bOK );
|
||||||
|
|
||||||
uint16_t iExpectedCRC16 = FileReading::read_u16_le( *pFile, sError );
|
uint16_t iExpectedCRC16 = FileReading::read_u16_le( *pFile, sError );
|
||||||
uint16_t iActualCRC16 = std::int16_t( iActualCRC32 & 0xFFFF );
|
uint16_t iActualCRC16 = int16_t( iActualCRC32 & 0xFFFF );
|
||||||
if( sError != "" )
|
if( sError != "" )
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
|
|||||||
+6
-6
@@ -266,7 +266,7 @@ void RageSound::LoadSoundReader( RageSoundReader *pSound )
|
|||||||
* conditions are masked and will be seen on the next call. Otherwise, the requested
|
* conditions are masked and will be seen on the next call. Otherwise, the requested
|
||||||
* number of frames will always be returned.
|
* number of frames will always be returned.
|
||||||
*/
|
*/
|
||||||
int RageSound::GetDataToPlay( float *pBuffer, int iFrames, std::int64_t &iStreamFrame, int &iFramesStored )
|
int RageSound::GetDataToPlay( float *pBuffer, int iFrames, int64_t &iStreamFrame, int &iFramesStored )
|
||||||
{
|
{
|
||||||
/* We only update m_iStreamFrame; only take a shared lock, so we don't block the main thread. */
|
/* We only update m_iStreamFrame; only take a shared lock, so we don't block the main thread. */
|
||||||
// LockMut(m_Mutex);
|
// LockMut(m_Mutex);
|
||||||
@@ -316,7 +316,7 @@ int RageSound::GetDataToPlay( float *pBuffer, int iFrames, std::int64_t &iStream
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Indicate that a block of audio data has been written to the device. */
|
/* Indicate that a block of audio data has been written to the device. */
|
||||||
void RageSound::CommitPlayingPosition( std::int64_t iHardwareFrame, std::int64_t iStreamFrame, int iGotFrames )
|
void RageSound::CommitPlayingPosition( int64_t iHardwareFrame, int64_t iStreamFrame, int iGotFrames )
|
||||||
{
|
{
|
||||||
m_Mutex.Lock();
|
m_Mutex.Lock();
|
||||||
m_HardwareToStreamMap.Insert( iHardwareFrame, iGotFrames, iStreamFrame );
|
m_HardwareToStreamMap.Insert( iHardwareFrame, iGotFrames, iStreamFrame );
|
||||||
@@ -371,7 +371,7 @@ void RageSound::SoundIsFinishedPlaying()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Get our current hardware position. */
|
/* Get our current hardware position. */
|
||||||
std::int64_t iCurrentHardwareFrame = SOUNDMAN->GetPosition(nullptr);
|
int64_t iCurrentHardwareFrame = SOUNDMAN->GetPosition(nullptr);
|
||||||
|
|
||||||
m_Mutex.Lock();
|
m_Mutex.Lock();
|
||||||
|
|
||||||
@@ -473,12 +473,12 @@ float RageSound::GetLengthSeconds()
|
|||||||
return iLength / 1000.f; // ms -> secs
|
return iLength / 1000.f; // ms -> secs
|
||||||
}
|
}
|
||||||
|
|
||||||
int RageSound::GetSourceFrameFromHardwareFrame( std::int64_t iHardwareFrame ) const
|
int RageSound::GetSourceFrameFromHardwareFrame( int64_t iHardwareFrame ) const
|
||||||
{
|
{
|
||||||
if( m_HardwareToStreamMap.IsEmpty() || m_StreamToSourceMap.IsEmpty() )
|
if( m_HardwareToStreamMap.IsEmpty() || m_StreamToSourceMap.IsEmpty() )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
std::int64_t iStreamFrame = m_HardwareToStreamMap.Search( iHardwareFrame );
|
int64_t iStreamFrame = m_HardwareToStreamMap.Search( iHardwareFrame );
|
||||||
return static_cast<int>(m_StreamToSourceMap.Search( iStreamFrame ));
|
return static_cast<int>(m_StreamToSourceMap.Search( iStreamFrame ));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -492,7 +492,7 @@ int RageSound::GetSourceFrameFromHardwareFrame( std::int64_t iHardwareFrame ) co
|
|||||||
float RageSound::GetPositionSeconds( RageTimer *pTimestamp ) const
|
float RageSound::GetPositionSeconds( RageTimer *pTimestamp ) const
|
||||||
{
|
{
|
||||||
// Get our current hardware position.
|
// Get our current hardware position.
|
||||||
std::int64_t iCurrentHardwareFrame = SOUNDMAN->GetPosition(pTimestamp);
|
int64_t iCurrentHardwareFrame = SOUNDMAN->GetPosition(pTimestamp);
|
||||||
|
|
||||||
// Lock the mutex after calling SOUNDMAN->GetPosition().
|
// Lock the mutex after calling SOUNDMAN->GetPosition().
|
||||||
LockMut(m_Mutex);
|
LockMut(m_Mutex);
|
||||||
|
|||||||
+6
-6
@@ -18,8 +18,8 @@ class RageSoundBase
|
|||||||
public:
|
public:
|
||||||
virtual ~RageSoundBase() { }
|
virtual ~RageSoundBase() { }
|
||||||
virtual void SoundIsFinishedPlaying() = 0;
|
virtual void SoundIsFinishedPlaying() = 0;
|
||||||
virtual int GetDataToPlay( float *buffer, int size, std::int64_t &iStreamFrame, int &got_bytes ) = 0;
|
virtual int GetDataToPlay( float *buffer, int size, int64_t &iStreamFrame, int &got_bytes ) = 0;
|
||||||
virtual void CommitPlayingPosition( std::int64_t iFrameno, std::int64_t iPosition, int iBytesRead ) = 0;
|
virtual void CommitPlayingPosition( int64_t iFrameno, int64_t iPosition, int iBytesRead ) = 0;
|
||||||
virtual RageTimer GetStartTime() const { return RageZeroTimer; }
|
virtual RageTimer GetStartTime() const { return RageZeroTimer; }
|
||||||
virtual RString GetLoadedFilePath() const = 0;
|
virtual RString GetLoadedFilePath() const = 0;
|
||||||
};
|
};
|
||||||
@@ -161,7 +161,7 @@ private:
|
|||||||
|
|
||||||
/* Current position of the output sound, in frames. If < 0, nothing will play
|
/* Current position of the output sound, in frames. If < 0, nothing will play
|
||||||
* until it becomes positive. */
|
* until it becomes positive. */
|
||||||
std::int64_t m_iStreamFrame;
|
int64_t m_iStreamFrame;
|
||||||
|
|
||||||
/* Hack: When we stop a playing sound, we can't ask the driver the position
|
/* Hack: When we stop a playing sound, we can't ask the driver the position
|
||||||
* (we're not playing); and we can't seek back to the current playing position
|
* (we're not playing); and we can't seek back to the current playing position
|
||||||
@@ -175,7 +175,7 @@ private:
|
|||||||
|
|
||||||
RString m_sError;
|
RString m_sError;
|
||||||
|
|
||||||
int GetSourceFrameFromHardwareFrame( std::int64_t iHardwareFrame ) const;
|
int GetSourceFrameFromHardwareFrame( int64_t iHardwareFrame ) const;
|
||||||
|
|
||||||
bool SetPositionFrames( int frames = -1 );
|
bool SetPositionFrames( int frames = -1 );
|
||||||
RageSoundParams::StopMode_t GetStopMode() const; // resolves M_AUTO
|
RageSoundParams::StopMode_t GetStopMode() const; // resolves M_AUTO
|
||||||
@@ -189,8 +189,8 @@ public:
|
|||||||
* it signals the stream to stop; once it's flushed, SoundStopped will be
|
* it signals the stream to stop; once it's flushed, SoundStopped will be
|
||||||
* called. Until then, SOUNDMAN->GetPosition can still be called; the sound
|
* called. Until then, SOUNDMAN->GetPosition can still be called; the sound
|
||||||
* is still playing. */
|
* is still playing. */
|
||||||
int GetDataToPlay( float *pBuffer, int iSize, std::int64_t &iStreamFrame, int &iBytesRead );
|
int GetDataToPlay( float *pBuffer, int iSize, int64_t &iStreamFrame, int &iBytesRead );
|
||||||
void CommitPlayingPosition( std::int64_t iHardwareFrame, std::int64_t iStreamFrame, int iGotFrames );
|
void CommitPlayingPosition( int64_t iHardwareFrame, int64_t iStreamFrame, int iGotFrames );
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ bool RageSoundManager::Pause( RageSoundBase *pSound, bool bPause )
|
|||||||
return m_pDriver->PauseMixing( pSound, bPause );
|
return m_pDriver->PauseMixing( pSound, bPause );
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t RageSoundManager::GetPosition( RageTimer *pTimer ) const
|
int64_t RageSoundManager::GetPosition( RageTimer *pTimer ) const
|
||||||
{
|
{
|
||||||
if( m_pDriver == nullptr )
|
if( m_pDriver == nullptr )
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public:
|
|||||||
void StartMixing( RageSoundBase *snd ); /* used by RageSound */
|
void StartMixing( RageSoundBase *snd ); /* used by RageSound */
|
||||||
void StopMixing( RageSoundBase *snd ); /* used by RageSound */
|
void StopMixing( RageSoundBase *snd ); /* used by RageSound */
|
||||||
bool Pause( RageSoundBase *snd, bool bPause ); /* used by RageSound */
|
bool Pause( RageSoundBase *snd, bool bPause ); /* used by RageSound */
|
||||||
std::int64_t GetPosition( RageTimer *pTimer ) const; /* used by RageSound */
|
int64_t GetPosition( RageTimer *pTimer ) const; /* used by RageSound */
|
||||||
float GetPlayLatency() const;
|
float GetPlayLatency() const;
|
||||||
int GetDriverSampleRate() const;
|
int GetDriverSampleRate() const;
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ void RageSoundMixBuffer::write( const float *pBuf, unsigned iSize, int iSourceSt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RageSoundMixBuffer::read( std::int16_t *pBuf )
|
void RageSoundMixBuffer::read( int16_t *pBuf )
|
||||||
{
|
{
|
||||||
for( unsigned iPos = 0; iPos < m_iBufUsed; ++iPos )
|
for( unsigned iPos = 0; iPos < m_iBufUsed; ++iPos )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public:
|
|||||||
// Extend the buffer as if write() was called with a buffer of silence.
|
// Extend the buffer as if write() was called with a buffer of silence.
|
||||||
void Extend( unsigned iSamples );
|
void Extend( unsigned iSamples );
|
||||||
|
|
||||||
void read( std::int16_t *pBuf );
|
void read( int16_t *pBuf );
|
||||||
void read( float *pBuf );
|
void read( float *pBuf );
|
||||||
void read_deinterlace( float **pBufs, int channels );
|
void read_deinterlace( float **pBufs, int channels );
|
||||||
float *read() { return m_pMixbuf; }
|
float *read() { return m_pMixbuf; }
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ static int pos_map_backlog_frames = 80000;
|
|||||||
|
|
||||||
struct pos_map_t
|
struct pos_map_t
|
||||||
{
|
{
|
||||||
std::int64_t m_iSourceFrame;
|
int64_t m_iSourceFrame;
|
||||||
std::int64_t m_iDestFrame;
|
int64_t m_iDestFrame;
|
||||||
std::int64_t m_iFrames;
|
int64_t m_iFrames;
|
||||||
double m_fSourceToDestRatio;
|
double m_fSourceToDestRatio;
|
||||||
|
|
||||||
pos_map_t() { m_iSourceFrame = 0; m_iDestFrame = 0; m_iFrames = 0; m_fSourceToDestRatio = 1.0; }
|
pos_map_t() { m_iSourceFrame = 0; m_iDestFrame = 0; m_iFrames = 0; m_fSourceToDestRatio = 1.0; }
|
||||||
@@ -59,7 +59,7 @@ pos_map_queue &pos_map_queue::operator=( const pos_map_queue &rhs )
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void pos_map_queue::Insert(std::int64_t iSourceFrame, std::int64_t iFrames, std::int64_t iDestFrame, double fSourceToDestRatio)
|
void pos_map_queue::Insert(int64_t iSourceFrame, int64_t iFrames, int64_t iDestFrame, double fSourceToDestRatio)
|
||||||
{
|
{
|
||||||
bool merged = false;
|
bool merged = false;
|
||||||
if (!m_pImpl->m_Queue.empty())
|
if (!m_pImpl->m_Queue.empty())
|
||||||
@@ -95,7 +95,7 @@ void pos_map_queue::Insert(std::int64_t iSourceFrame, std::int64_t iFrames, std:
|
|||||||
void pos_map_impl::Cleanup()
|
void pos_map_impl::Cleanup()
|
||||||
{
|
{
|
||||||
std::list<pos_map_t>::iterator it = m_Queue.end();
|
std::list<pos_map_t>::iterator it = m_Queue.end();
|
||||||
std::int64_t iTotalFrames = 0;
|
int64_t iTotalFrames = 0;
|
||||||
// Scan backwards until we have at least pos_map_backlog_frames.
|
// Scan backwards until we have at least pos_map_backlog_frames.
|
||||||
while (iTotalFrames < pos_map_backlog_frames)
|
while (iTotalFrames < pos_map_backlog_frames)
|
||||||
{
|
{
|
||||||
@@ -108,7 +108,7 @@ void pos_map_impl::Cleanup()
|
|||||||
m_Queue.erase(m_Queue.begin(), it);
|
m_Queue.erase(m_Queue.begin(), it);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t pos_map_queue::Search( std::int64_t iSourceFrame ) const
|
int64_t pos_map_queue::Search( int64_t iSourceFrame ) const
|
||||||
{
|
{
|
||||||
if( IsEmpty() )
|
if( IsEmpty() )
|
||||||
{
|
{
|
||||||
@@ -116,7 +116,7 @@ std::int64_t pos_map_queue::Search( std::int64_t iSourceFrame ) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// iSourceFrame is probably in pos_map. Search to figure out what position it maps to.
|
// iSourceFrame is probably in pos_map. Search to figure out what position it maps to.
|
||||||
std::int64_t iClosestPosition = 0, iClosestPositionDist = std::numeric_limits<int64_t>::max();
|
int64_t iClosestPosition = 0, iClosestPositionDist = std::numeric_limits<int64_t>::max();
|
||||||
for (pos_map_t const &pm : m_pImpl->m_Queue)
|
for (pos_map_t const &pm : m_pImpl->m_Queue)
|
||||||
{
|
{
|
||||||
// Loop over the queue until we know generally where iSourceFrame is
|
// Loop over the queue until we know generally where iSourceFrame is
|
||||||
@@ -124,13 +124,13 @@ std::int64_t pos_map_queue::Search( std::int64_t iSourceFrame ) const
|
|||||||
iSourceFrame < pm.m_iSourceFrame+pm.m_iFrames )
|
iSourceFrame < pm.m_iSourceFrame+pm.m_iFrames )
|
||||||
{
|
{
|
||||||
// If we are in the correct block, calculate its current position
|
// If we are in the correct block, calculate its current position
|
||||||
std::int64_t iDiff = static_cast<std::int64_t>(iSourceFrame - pm.m_iSourceFrame);
|
int64_t iDiff = static_cast<int64_t>(iSourceFrame - pm.m_iSourceFrame);
|
||||||
iDiff = static_cast<int64_t>(( iDiff * pm.m_fSourceToDestRatio) + 0.5 );
|
iDiff = static_cast<int64_t>(( iDiff * pm.m_fSourceToDestRatio) + 0.5 );
|
||||||
return pm.m_iDestFrame + iDiff;
|
return pm.m_iDestFrame + iDiff;
|
||||||
}
|
}
|
||||||
|
|
||||||
// See if the current position is close to the beginning of this block.
|
// See if the current position is close to the beginning of this block.
|
||||||
std::int64_t dist = llabs( pm.m_iSourceFrame - iSourceFrame );
|
int64_t dist = llabs( pm.m_iSourceFrame - iSourceFrame );
|
||||||
if( dist < iClosestPositionDist )
|
if( dist < iClosestPositionDist )
|
||||||
{
|
{
|
||||||
iClosestPositionDist = dist;
|
iClosestPositionDist = dist;
|
||||||
|
|||||||
@@ -16,10 +16,10 @@ public:
|
|||||||
|
|
||||||
/* Insert a mapping from iSourceFrame to iDestFrame, containing iFrames.
|
/* Insert a mapping from iSourceFrame to iDestFrame, containing iFrames.
|
||||||
* The double type is used to prevent precision loss leading to sync drift the longer the game runs. -sukibaby */
|
* The double type is used to prevent precision loss leading to sync drift the longer the game runs. -sukibaby */
|
||||||
void Insert( std::int64_t iSourceFrame, std::int64_t iFrames, std::int64_t iDestFrame, double fSourceToDestRatio = 1.0 );
|
void Insert( int64_t iSourceFrame, int64_t iFrames, int64_t iDestFrame, double fSourceToDestRatio = 1.0 );
|
||||||
|
|
||||||
/* Return the iDestFrame for the given iSourceFrame. */
|
/* Return the iDestFrame for the given iSourceFrame. */
|
||||||
std::int64_t Search( std::int64_t iSourceFrame ) const;
|
int64_t Search( int64_t iSourceFrame ) const;
|
||||||
|
|
||||||
/* Erase all mappings. */
|
/* Erase all mappings. */
|
||||||
void Clear();
|
void Clear();
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ private:
|
|||||||
float fPan;
|
float fPan;
|
||||||
RageSoundReader *pSound; // nullptr if not activated
|
RageSoundReader *pSound; // nullptr if not activated
|
||||||
|
|
||||||
int GetOffsetFrame( int iSampleRate ) const { return int( std::int64_t(iOffsetMS) * iSampleRate / 1000 ); }
|
int GetOffsetFrame( int iSampleRate ) const { return int( int64_t(iOffsetMS) * iSampleRate / 1000 ); }
|
||||||
bool operator<( const Sound &rhs ) const { return iOffsetMS < rhs.iOffsetMS; }
|
bool operator<( const Sound &rhs ) const { return iOffsetMS < rhs.iOffsetMS; }
|
||||||
};
|
};
|
||||||
std::vector<Sound> m_aSounds;
|
std::vector<Sound> m_aSounds;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ Preference<bool> g_bSoundPreload16bit( "SoundPreload16bit", true );
|
|||||||
/* If a sound is smaller than this, we'll load it entirely into memory. */
|
/* If a sound is smaller than this, we'll load it entirely into memory. */
|
||||||
Preference<int> g_iSoundPreloadMaxSamples( "SoundPreloadMaxSamples", 1024*1024 );
|
Preference<int> g_iSoundPreloadMaxSamples( "SoundPreloadMaxSamples", 1024*1024 );
|
||||||
|
|
||||||
#define samplesize (m_bBufferIs16Bit? sizeof(std::int16_t):sizeof(float))
|
#define samplesize (m_bBufferIs16Bit? sizeof(int16_t):sizeof(float))
|
||||||
#define framesize (samplesize * m_iChannels)
|
#define framesize (samplesize * m_iChannels)
|
||||||
|
|
||||||
bool RageSoundReader_Preload::PreloadSound( RageSoundReader *&pSound )
|
bool RageSoundReader_Preload::PreloadSound( RageSoundReader *&pSound )
|
||||||
@@ -93,7 +93,7 @@ bool RageSoundReader_Preload::Open( RageSoundReader *pSource )
|
|||||||
/* Add the buffer. */
|
/* Add the buffer. */
|
||||||
if( m_bBufferIs16Bit )
|
if( m_bBufferIs16Bit )
|
||||||
{
|
{
|
||||||
std::int16_t buffer16[1024];
|
int16_t buffer16[1024];
|
||||||
RageSoundUtil::ConvertFloatToNativeInt16( buffer, buffer16, iCnt*m_iChannels );
|
RageSoundUtil::ConvertFloatToNativeInt16( buffer, buffer16, iCnt*m_iChannels );
|
||||||
m_Buffer.Get()->append( (char *) buffer16, (char *) (buffer16+iCnt*m_iChannels) );
|
m_Buffer.Get()->append( (char *) buffer16, (char *) (buffer16+iCnt*m_iChannels) );
|
||||||
}
|
}
|
||||||
@@ -152,7 +152,7 @@ int RageSoundReader_Preload::Read( float *pBuffer, int iFrames )
|
|||||||
return END_OF_FILE;
|
return END_OF_FILE;
|
||||||
if( m_bBufferIs16Bit )
|
if( m_bBufferIs16Bit )
|
||||||
{
|
{
|
||||||
const std::int16_t *pIn = (const std::int16_t *) (m_Buffer->data() + (m_iPosition * framesize));
|
const int16_t *pIn = (const int16_t *) (m_Buffer->data() + (m_iPosition * framesize));
|
||||||
RageSoundUtil::ConvertNativeInt16ToFloat( pIn, pBuffer, iFrames * m_iChannels );
|
RageSoundUtil::ConvertNativeInt16ToFloat( pIn, pBuffer, iFrames * m_iChannels );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -548,7 +548,7 @@ private:
|
|||||||
|
|
||||||
int RageSoundReader_Resample_Good::GetNextSourceFrame() const
|
int RageSoundReader_Resample_Good::GetNextSourceFrame() const
|
||||||
{
|
{
|
||||||
std::int64_t iPosition = m_pSource->GetNextSourceFrame();
|
int64_t iPosition = m_pSource->GetNextSourceFrame();
|
||||||
iPosition -= m_apResamplers[0]->GetFilled();
|
iPosition -= m_apResamplers[0]->GetFilled();
|
||||||
|
|
||||||
iPosition *= m_iSampleRate;
|
iPosition *= m_iSampleRate;
|
||||||
@@ -648,7 +648,7 @@ RageSoundReader_Resample_Good::~RageSoundReader_Resample_Good()
|
|||||||
int RageSoundReader_Resample_Good::SetPosition( int iFrame )
|
int RageSoundReader_Resample_Good::SetPosition( int iFrame )
|
||||||
{
|
{
|
||||||
Reset();
|
Reset();
|
||||||
iFrame = (int) SCALE( iFrame, 0, (std::int64_t) m_iSampleRate, 0, (std::int64_t) m_pSource->GetSampleRate() );
|
iFrame = (int) SCALE( iFrame, 0, (int64_t) m_iSampleRate, 0, (int64_t) m_pSource->GetSampleRate() );
|
||||||
return m_pSource->SetPosition( iFrame );
|
return m_pSource->SetPosition( iFrame );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ int RageSoundReader_Vorbisfile::Read( float *buf, int iFrames )
|
|||||||
{
|
{
|
||||||
int bstream;
|
int bstream;
|
||||||
#if defined(INTEGER_VORBIS)
|
#if defined(INTEGER_VORBIS)
|
||||||
int ret = ov_read( vf, (char *) buf, iFrames * channels * sizeof(std::int16_t), &bstream );
|
int ret = ov_read( vf, (char *) buf, iFrames * channels * sizeof(int16_t), &bstream );
|
||||||
#else // float vorbis decoder
|
#else // float vorbis decoder
|
||||||
float **pcm;
|
float **pcm;
|
||||||
int ret = ov_read_float( vf, &pcm, iFrames, &bstream );
|
int ret = ov_read_float( vf, &pcm, iFrames, &bstream );
|
||||||
@@ -218,11 +218,11 @@ int RageSoundReader_Vorbisfile::Read( float *buf, int iFrames )
|
|||||||
#if defined(INTEGER_VORBIS)
|
#if defined(INTEGER_VORBIS)
|
||||||
if( ret > 0 )
|
if( ret > 0 )
|
||||||
{
|
{
|
||||||
int iSamplesRead = ret / sizeof(std::int16_t);
|
int iSamplesRead = ret / sizeof(int16_t);
|
||||||
iFramesRead = iSamplesRead / channels;
|
iFramesRead = iSamplesRead / channels;
|
||||||
|
|
||||||
/* Convert in reverse, so we can do it in-place. */
|
/* Convert in reverse, so we can do it in-place. */
|
||||||
const std::int16_t *pIn = (std::int16_t *) buf;
|
const int16_t *pIn = (int16_t *) buf;
|
||||||
float *pOut = (float *) buf;
|
float *pOut = (float *) buf;
|
||||||
for( int i = iSamplesRead-1; i >= 0; --i )
|
for( int i = iSamplesRead-1; i >= 0; --i )
|
||||||
pOut[i] = pIn[i] / 32768.0f;
|
pOut[i] = pIn[i] / 32768.0f;
|
||||||
|
|||||||
+23
-23
@@ -41,11 +41,11 @@ namespace
|
|||||||
void ConvertLittleEndian16BitToFloat( void *pBuf, int iSamples )
|
void ConvertLittleEndian16BitToFloat( void *pBuf, int iSamples )
|
||||||
{
|
{
|
||||||
/* Convert in reverse, so we can do it in-place. */
|
/* Convert in reverse, so we can do it in-place. */
|
||||||
const std::int16_t *pIn = (std::int16_t *) pBuf;
|
const int16_t *pIn = (int16_t *) pBuf;
|
||||||
float *pOut = (float *) pBuf;
|
float *pOut = (float *) pBuf;
|
||||||
for( int i = iSamples-1; i >= 0; --i )
|
for( int i = iSamples-1; i >= 0; --i )
|
||||||
{
|
{
|
||||||
std::int16_t iSample = Swap16LE( pIn[i] );
|
int16_t iSample = Swap16LE( pIn[i] );
|
||||||
pOut[i] = iSample / 32768.0f;
|
pOut[i] = iSample / 32768.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -60,7 +60,7 @@ namespace
|
|||||||
{
|
{
|
||||||
pIn -= 3;
|
pIn -= 3;
|
||||||
|
|
||||||
std::int32_t iSample =
|
int32_t iSample =
|
||||||
(int(pIn[0]) << 0) |
|
(int(pIn[0]) << 0) |
|
||||||
(int(pIn[1]) << 8) |
|
(int(pIn[1]) << 8) |
|
||||||
(int(pIn[2]) << 16);
|
(int(pIn[2]) << 16);
|
||||||
@@ -76,11 +76,11 @@ namespace
|
|||||||
void ConvertLittleEndian32BitToFloat( void *pBuf, int iSamples )
|
void ConvertLittleEndian32BitToFloat( void *pBuf, int iSamples )
|
||||||
{
|
{
|
||||||
/* Convert in reverse, so we can do it in-place. */
|
/* Convert in reverse, so we can do it in-place. */
|
||||||
const std::int32_t *pIn = (std::int32_t *) pBuf;
|
const int32_t *pIn = (int32_t *) pBuf;
|
||||||
float *pOut = (float *) pBuf;
|
float *pOut = (float *) pBuf;
|
||||||
for( int i = iSamples-1; i >= 0; --i )
|
for( int i = iSamples-1; i >= 0; --i )
|
||||||
{
|
{
|
||||||
std::int32_t iSample = Swap32LE( pIn[i] );
|
int32_t iSample = Swap32LE( pIn[i] );
|
||||||
pOut[i] = iSample / 2147483648.0f;
|
pOut[i] = iSample / 2147483648.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -167,13 +167,13 @@ struct WavReaderPCM: public WavReader
|
|||||||
int GetLength() const
|
int GetLength() const
|
||||||
{
|
{
|
||||||
const int iBytesPerSec = m_WavData.m_iSampleRate * m_WavData.m_iChannels * m_WavData.m_iBitsPerSample / 8;
|
const int iBytesPerSec = m_WavData.m_iSampleRate * m_WavData.m_iChannels * m_WavData.m_iBitsPerSample / 8;
|
||||||
std::int64_t iMS = (std::int64_t(m_WavData.m_iDataChunkSize) * 1000) / iBytesPerSec;
|
int64_t iMS = (int64_t(m_WavData.m_iDataChunkSize) * 1000) / iBytesPerSec;
|
||||||
return (int) iMS;
|
return (int) iMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SetPosition( int iFrame )
|
int SetPosition( int iFrame )
|
||||||
{
|
{
|
||||||
int iByte = (int) (std::int64_t(iFrame) * m_WavData.m_iChannels * m_WavData.m_iBitsPerSample / 8);
|
int iByte = (int) (int64_t(iFrame) * m_WavData.m_iChannels * m_WavData.m_iBitsPerSample / 8);
|
||||||
if( iByte > m_WavData.m_iDataChunkSize )
|
if( iByte > m_WavData.m_iDataChunkSize )
|
||||||
{
|
{
|
||||||
m_File.Seek( m_WavData.m_iDataChunkSize+m_WavData.m_iDataChunkPos );
|
m_File.Seek( m_WavData.m_iDataChunkSize+m_WavData.m_iDataChunkPos );
|
||||||
@@ -196,8 +196,8 @@ struct WavReaderPCM: public WavReader
|
|||||||
struct WavReaderADPCM: public WavReader
|
struct WavReaderADPCM: public WavReader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::vector<std::int16_t> m_iaCoef1, m_iaCoef2;
|
std::vector<int16_t> m_iaCoef1, m_iaCoef2;
|
||||||
std::int16_t m_iFramesPerBlock;
|
int16_t m_iFramesPerBlock;
|
||||||
float *m_pBuffer;
|
float *m_pBuffer;
|
||||||
int m_iBufferAvail, m_iBufferUsed;
|
int m_iBufferAvail, m_iBufferUsed;
|
||||||
|
|
||||||
@@ -223,7 +223,7 @@ public:
|
|||||||
m_File.Seek( m_WavData.m_iExtraFmtPos );
|
m_File.Seek( m_WavData.m_iExtraFmtPos );
|
||||||
|
|
||||||
m_iFramesPerBlock = FileReading::read_16_le( m_File, m_sError );
|
m_iFramesPerBlock = FileReading::read_16_le( m_File, m_sError );
|
||||||
std::int16_t iNumCoef = FileReading::read_16_le( m_File, m_sError );
|
int16_t iNumCoef = FileReading::read_16_le( m_File, m_sError );
|
||||||
m_iaCoef1.resize( iNumCoef );
|
m_iaCoef1.resize( iNumCoef );
|
||||||
m_iaCoef2.resize( iNumCoef );
|
m_iaCoef2.resize( iNumCoef );
|
||||||
for( int i = 0; i < iNumCoef; ++i )
|
for( int i = 0; i < iNumCoef; ++i )
|
||||||
@@ -259,8 +259,8 @@ public:
|
|||||||
if( m_File.Tell() >= m_WavData.m_iDataChunkSize+m_WavData.m_iDataChunkPos || m_File.AtEOF() )
|
if( m_File.Tell() >= m_WavData.m_iDataChunkSize+m_WavData.m_iDataChunkPos || m_File.AtEOF() )
|
||||||
return true; /* past the data chunk */
|
return true; /* past the data chunk */
|
||||||
|
|
||||||
std::int8_t iPredictor[2];
|
int8_t iPredictor[2];
|
||||||
std::int16_t iDelta[2], iSamp1[2], iSamp2[2];
|
int16_t iDelta[2], iSamp1[2], iSamp2[2];
|
||||||
for( int i = 0; i < m_WavData.m_iChannels; ++i )
|
for( int i = 0; i < m_WavData.m_iChannels; ++i )
|
||||||
iPredictor[i] = FileReading::read_8( m_File, m_sError );
|
iPredictor[i] = FileReading::read_8( m_File, m_sError );
|
||||||
for( int i = 0; i < m_WavData.m_iChannels; ++i )
|
for( int i = 0; i < m_WavData.m_iChannels; ++i )
|
||||||
@@ -304,11 +304,11 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
for( int i = 0; i < m_WavData.m_iChannels; ++i )
|
for( int i = 0; i < m_WavData.m_iChannels; ++i )
|
||||||
pBuffer[m_iBufferAvail++] = (std::int16_t)iSamp2[i] / 32768.0f;
|
pBuffer[m_iBufferAvail++] = (int16_t)iSamp2[i] / 32768.0f;
|
||||||
for( int i = 0; i < m_WavData.m_iChannels; ++i )
|
for( int i = 0; i < m_WavData.m_iChannels; ++i )
|
||||||
pBuffer[m_iBufferAvail++] = (std::int16_t)iSamp1[i] / 32768.0f;
|
pBuffer[m_iBufferAvail++] = (int16_t)iSamp1[i] / 32768.0f;
|
||||||
|
|
||||||
std::int8_t iBufSize = 0;
|
int8_t iBufSize = 0;
|
||||||
uint8_t iBuf = 0;
|
uint8_t iBuf = 0;
|
||||||
|
|
||||||
bool bDone = false;
|
bool bDone = false;
|
||||||
@@ -330,24 +330,24 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Store the nibble in signed char, so we get an arithmetic shift. */
|
/* Store the nibble in signed char, so we get an arithmetic shift. */
|
||||||
std::int8_t iErrorDelta = (std::int8_t)(iBuf) >> 4;
|
int8_t iErrorDelta = (int8_t)(iBuf) >> 4;
|
||||||
uint8_t iErrorDeltaUnsigned = iBuf >> 4;
|
uint8_t iErrorDeltaUnsigned = iBuf >> 4;
|
||||||
iBuf <<= 4;
|
iBuf <<= 4;
|
||||||
--iBufSize;
|
--iBufSize;
|
||||||
|
|
||||||
std::int32_t iPredSample = (iSamp1[c] * iCoef1[c] + iSamp2[c] * iCoef2[c]) / (1<<8);
|
int32_t iPredSample = (iSamp1[c] * iCoef1[c] + iSamp2[c] * iCoef2[c]) / (1<<8);
|
||||||
if( iPredSample < -32768 ) iPredSample = -32768;
|
if( iPredSample < -32768 ) iPredSample = -32768;
|
||||||
if( iPredSample > 32767 ) iPredSample = 32767;
|
if( iPredSample > 32767 ) iPredSample = 32767;
|
||||||
|
|
||||||
std::int16_t iNewSample = (std::int16_t)iPredSample + (iDelta[c] * iErrorDelta);
|
int16_t iNewSample = (int16_t)iPredSample + (iDelta[c] * iErrorDelta);
|
||||||
pBuffer[m_iBufferAvail++] = iNewSample / 32768.0f;
|
pBuffer[m_iBufferAvail++] = iNewSample / 32768.0f;
|
||||||
|
|
||||||
static const int aAdaptionTable[] = {
|
static const int aAdaptionTable[] = {
|
||||||
230, 230, 230, 230, 307, 409, 512, 614,
|
230, 230, 230, 230, 307, 409, 512, 614,
|
||||||
768, 614, 512, 409, 307, 230, 230, 230
|
768, 614, 512, 409, 307, 230, 230, 230
|
||||||
};
|
};
|
||||||
iDelta[c] = std::int16_t( (iDelta[c] * aAdaptionTable[iErrorDeltaUnsigned]) / (1<<8) );
|
iDelta[c] = int16_t( (iDelta[c] * aAdaptionTable[iErrorDeltaUnsigned]) / (1<<8) );
|
||||||
iDelta[c] = std::max( (std::int16_t) 16, iDelta[c] );
|
iDelta[c] = std::max( (int16_t) 16, iDelta[c] );
|
||||||
|
|
||||||
iSamp2[c] = iSamp1[c];
|
iSamp2[c] = iSamp1[c];
|
||||||
iSamp1[c] = iNewSample;
|
iSamp1[c] = iNewSample;
|
||||||
@@ -402,7 +402,7 @@ public:
|
|||||||
iFrames += 2+iExtraADPCMFrames;
|
iFrames += 2+iExtraADPCMFrames;
|
||||||
}
|
}
|
||||||
|
|
||||||
int iMS = int((std::int64_t(iFrames)*1000)/m_WavData.m_iSampleRate);
|
int iMS = int((int64_t(iFrames)*1000)/m_WavData.m_iSampleRate);
|
||||||
return iMS;
|
return iMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -445,7 +445,7 @@ public:
|
|||||||
int iFrame = iBlock * m_iFramesPerBlock;
|
int iFrame = iBlock * m_iFramesPerBlock;
|
||||||
|
|
||||||
int iBufferRemainingBytes = m_iBufferAvail - m_iBufferUsed;
|
int iBufferRemainingBytes = m_iBufferAvail - m_iBufferUsed;
|
||||||
int iBufferRemainingFrames = iBufferRemainingBytes / (m_WavData.m_iChannels * sizeof(std::int16_t));
|
int iBufferRemainingFrames = iBufferRemainingBytes / (m_WavData.m_iChannels * sizeof(int16_t));
|
||||||
iFrame -= iBufferRemainingFrames;
|
iFrame -= iBufferRemainingFrames;
|
||||||
|
|
||||||
return iFrame;
|
return iFrame;
|
||||||
@@ -496,7 +496,7 @@ RageSoundReader_FileReader::OpenResult RageSoundReader_WAV::Open( RageFileBasic
|
|||||||
while( !bGotFormatChunk || !bGotDataChunk )
|
while( !bGotFormatChunk || !bGotDataChunk )
|
||||||
{
|
{
|
||||||
RString ChunkID = ReadString( *m_pFile, 4, sError );
|
RString ChunkID = ReadString( *m_pFile, 4, sError );
|
||||||
std::int32_t iChunkSize = FileReading::read_32_le( *m_pFile, sError );
|
int32_t iChunkSize = FileReading::read_32_le( *m_pFile, sError );
|
||||||
|
|
||||||
if( sError.size() != 0 )
|
if( sError.size() != 0 )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ public:
|
|||||||
|
|
||||||
struct WavData
|
struct WavData
|
||||||
{
|
{
|
||||||
std::int32_t m_iDataChunkPos, m_iDataChunkSize, m_iExtraFmtPos, m_iSampleRate, m_iFormatTag;
|
int32_t m_iDataChunkPos, m_iDataChunkSize, m_iExtraFmtPos, m_iSampleRate, m_iFormatTag;
|
||||||
std::int16_t m_iChannels, m_iBitsPerSample, m_iBlockAlign, m_iExtraFmtBytes;
|
int16_t m_iChannels, m_iBitsPerSample, m_iBlockAlign, m_iExtraFmtBytes;
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ void RageSoundUtil::ConvertMonoToStereoInPlace( float *data, int iFrames )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RageSoundUtil::ConvertNativeInt16ToFloat( const std::int16_t *pFrom, float *pTo, int iSamples )
|
void RageSoundUtil::ConvertNativeInt16ToFloat( const int16_t *pFrom, float *pTo, int iSamples )
|
||||||
{
|
{
|
||||||
for( int i = 0; i < iSamples; ++i )
|
for( int i = 0; i < iSamples; ++i )
|
||||||
{
|
{
|
||||||
@@ -90,7 +90,7 @@ void RageSoundUtil::ConvertNativeInt16ToFloat( const std::int16_t *pFrom, float
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RageSoundUtil::ConvertFloatToNativeInt16( const float *pFrom, std::int16_t *pTo, int iSamples )
|
void RageSoundUtil::ConvertFloatToNativeInt16( const float *pFrom, int16_t *pTo, int iSamples )
|
||||||
{
|
{
|
||||||
for( int i = 0; i < iSamples; ++i )
|
for( int i = 0; i < iSamples; ++i )
|
||||||
{
|
{
|
||||||
|
|||||||
+2
-2
@@ -10,8 +10,8 @@ namespace RageSoundUtil
|
|||||||
void Pan( float *pBuffer, int iFrames, float fPos );
|
void Pan( float *pBuffer, int iFrames, float fPos );
|
||||||
void Fade( float *pBuffer, int iFrames, int iChannels, float fStartVolume, float fEndVolume );
|
void Fade( float *pBuffer, int iFrames, int iChannels, float fStartVolume, float fEndVolume );
|
||||||
void ConvertMonoToStereoInPlace( float *pBuffer, int iFrames );
|
void ConvertMonoToStereoInPlace( float *pBuffer, int iFrames );
|
||||||
void ConvertNativeInt16ToFloat( const std::int16_t *pFrom, float *pTo, int iSamples );
|
void ConvertNativeInt16ToFloat( const int16_t *pFrom, float *pTo, int iSamples );
|
||||||
void ConvertFloatToNativeInt16( const float *pFrom, std::int16_t *pTo, int iSamples );
|
void ConvertFloatToNativeInt16( const float *pFrom, int16_t *pTo, int iSamples );
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+6
-6
@@ -7,7 +7,7 @@
|
|||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
|
|
||||||
std::int32_t RageSurfacePalette::FindColor( const RageSurfaceColor &color ) const
|
int32_t RageSurfacePalette::FindColor( const RageSurfaceColor &color ) const
|
||||||
{
|
{
|
||||||
for( int i = 0; i < ncolors; ++i )
|
for( int i = 0; i < ncolors; ++i )
|
||||||
if( colors[i] == color )
|
if( colors[i] == color )
|
||||||
@@ -16,7 +16,7 @@ std::int32_t RageSurfacePalette::FindColor( const RageSurfaceColor &color ) cons
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* XXX: untested */
|
/* XXX: untested */
|
||||||
std::int32_t RageSurfacePalette::FindClosestColor( const RageSurfaceColor &color ) const
|
int32_t RageSurfacePalette::FindClosestColor( const RageSurfaceColor &color ) const
|
||||||
{
|
{
|
||||||
int iBest = -1;
|
int iBest = -1;
|
||||||
int iBestDist = INT_MAX;
|
int iBestDist = INT_MAX;
|
||||||
@@ -70,9 +70,9 @@ void RageSurfaceFormat::GetRGB( uint32_t val, uint8_t *r, uint8_t *g, uint8_t *b
|
|||||||
*g = palette->colors[val].g;
|
*g = palette->colors[val].g;
|
||||||
*b = palette->colors[val].b;
|
*b = palette->colors[val].b;
|
||||||
} else {
|
} else {
|
||||||
*r = std::int8_t( (val & Mask[0]) >> Shift[0] << Loss[0] );
|
*r = int8_t( (val & Mask[0]) >> Shift[0] << Loss[0] );
|
||||||
*g = std::int8_t( (val & Mask[1]) >> Shift[1] << Loss[1] );
|
*g = int8_t( (val & Mask[1]) >> Shift[1] << Loss[1] );
|
||||||
*b = std::int8_t( (val & Mask[2]) >> Shift[2] << Loss[2] );
|
*b = int8_t( (val & Mask[2]) >> Shift[2] << Loss[2] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ bool RageSurfaceFormat::MapRGBA( uint8_t r, uint8_t g, uint8_t b, uint8_t a, uin
|
|||||||
if( BytesPerPixel == 1 )
|
if( BytesPerPixel == 1 )
|
||||||
{
|
{
|
||||||
RageSurfaceColor c( r, g, b, a );
|
RageSurfaceColor c( r, g, b, a );
|
||||||
std::int32_t n = palette->FindColor( c );
|
int32_t n = palette->FindColor( c );
|
||||||
if( n == -1 )
|
if( n == -1 )
|
||||||
return false;
|
return false;
|
||||||
val = (uint32_t) n;
|
val = (uint32_t) n;
|
||||||
|
|||||||
+7
-7
@@ -33,11 +33,11 @@ inline bool operator!=(RageSurfaceColor const &lhs, RageSurfaceColor const &rhs)
|
|||||||
struct RageSurfacePalette
|
struct RageSurfacePalette
|
||||||
{
|
{
|
||||||
RageSurfaceColor colors[256];
|
RageSurfaceColor colors[256];
|
||||||
std::int32_t ncolors;
|
int32_t ncolors;
|
||||||
|
|
||||||
/* Find the exact color; returns -1 if not found. */
|
/* Find the exact color; returns -1 if not found. */
|
||||||
std::int32_t FindColor( const RageSurfaceColor &color ) const;
|
int32_t FindColor( const RageSurfaceColor &color ) const;
|
||||||
std::int32_t FindClosestColor( const RageSurfaceColor &color ) const;
|
int32_t FindClosestColor( const RageSurfaceColor &color ) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RageSurfaceFormat
|
struct RageSurfaceFormat
|
||||||
@@ -46,8 +46,8 @@ struct RageSurfaceFormat
|
|||||||
RageSurfaceFormat( const RageSurfaceFormat &cpy );
|
RageSurfaceFormat( const RageSurfaceFormat &cpy );
|
||||||
~RageSurfaceFormat() = default;
|
~RageSurfaceFormat() = default;
|
||||||
|
|
||||||
std::int32_t BytesPerPixel;
|
int32_t BytesPerPixel;
|
||||||
std::int32_t BitsPerPixel;
|
int32_t BitsPerPixel;
|
||||||
std::array<uint32_t, 4> Mask;
|
std::array<uint32_t, 4> Mask;
|
||||||
std::array<uint32_t, 4> Shift;
|
std::array<uint32_t, 4> Shift;
|
||||||
std::array<uint32_t, 4> Loss;
|
std::array<uint32_t, 4> Loss;
|
||||||
@@ -79,8 +79,8 @@ struct RageSurface
|
|||||||
|
|
||||||
uint8_t *pixels;
|
uint8_t *pixels;
|
||||||
bool pixels_owned;
|
bool pixels_owned;
|
||||||
std::int32_t w, h, pitch;
|
int32_t w, h, pitch;
|
||||||
std::int32_t flags;
|
int32_t flags;
|
||||||
|
|
||||||
RageSurface();
|
RageSurface();
|
||||||
RageSurface( const RageSurface &cpy );
|
RageSurface( const RageSurface &cpy );
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ void RageSurfaceUtils::OrderedDither( const RageSurface *src, RageSurface *dst )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static uint8_t EDDitherPixel( int x, int y, int intensity, int conv, std::int32_t &accumError )
|
static uint8_t EDDitherPixel( int x, int y, int intensity, int conv, int32_t &accumError )
|
||||||
{
|
{
|
||||||
// Convert the number to the destination range.
|
// Convert the number to the destination range.
|
||||||
int out_intensity = intensity * conv;
|
int out_intensity = intensity * conv;
|
||||||
@@ -195,7 +195,7 @@ void RageSurfaceUtils::ErrorDiffusionDither( const RageSurface *src, RageSurface
|
|||||||
// For each row:
|
// For each row:
|
||||||
for(int row = 0; row < src->h; ++row)
|
for(int row = 0; row < src->h; ++row)
|
||||||
{
|
{
|
||||||
std::int32_t accumError[4] = { 0, 0, 0, 0 }; // accum error values are reset every row
|
int32_t accumError[4] = { 0, 0, 0, 0 }; // accum error values are reset every row
|
||||||
|
|
||||||
const uint8_t *srcp = src->pixels + row * src->pitch;
|
const uint8_t *srcp = src->pixels + row * src->pitch;
|
||||||
uint8_t *dstp = dst->pixels + row * dst->pitch;
|
uint8_t *dstp = dst->pixels + row * dst->pitch;
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ void RageSurfaceUtils::Palettize( RageSurface *&pImg, int iColors, bool bDither
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
std::int32_t sc[4];
|
int32_t sc[4];
|
||||||
uint8_t pixel[4] = { pIn[0], pIn[1], pIn[2], pIn[3] };
|
uint8_t pixel[4] = { pIn[0], pIn[1], pIn[2], pIn[3] };
|
||||||
if( bDither )
|
if( bDither )
|
||||||
{
|
{
|
||||||
@@ -218,7 +218,7 @@ void RageSurfaceUtils::Palettize( RageSurface *&pImg, int iColors, bool bDither
|
|||||||
for( int c = 0; c < 4; ++c )
|
for( int c = 0; c < 4; ++c )
|
||||||
{
|
{
|
||||||
sc[c] = pixel[c] + thiserr[col + 1].c[c] / FS_SCALE;
|
sc[c] = pixel[c] + thiserr[col + 1].c[c] / FS_SCALE;
|
||||||
sc[c] = std::clamp( sc[c], 0, (std::int32_t) maxval );
|
sc[c] = std::clamp( sc[c], 0, (int32_t) maxval );
|
||||||
}
|
}
|
||||||
|
|
||||||
PAM_ASSIGN( pixel, (uint8_t)sc[0], (uint8_t)sc[1], (uint8_t)sc[2], (uint8_t)sc[3] );
|
PAM_ASSIGN( pixel, (uint8_t)sc[0], (uint8_t)sc[1], (uint8_t)sc[2], (uint8_t)sc[3] );
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ static RageSurface *RageSurface_Load_JPEG( RageFile *f, const char *fn, char err
|
|||||||
for( int i = 0; i < 256; ++i )
|
for( int i = 0; i < 256; ++i )
|
||||||
{
|
{
|
||||||
RageSurfaceColor color;
|
RageSurfaceColor color;
|
||||||
color.r = color.g = color.b = (std::int8_t) i;
|
color.r = color.g = color.b = (int8_t) i;
|
||||||
color.a = 0xFF;
|
color.a = 0xFF;
|
||||||
img->fmt.palette->colors[i] = color;
|
img->fmt.palette->colors[i] = color;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ static RageSurface *RageSurface_Load_PNG( RageFile *f, const char *fn, char erro
|
|||||||
/* Fake PNG_COLOR_TYPE_GRAY. */
|
/* Fake PNG_COLOR_TYPE_GRAY. */
|
||||||
for( int i = 0; i < 256; ++i )
|
for( int i = 0; i < 256; ++i )
|
||||||
{
|
{
|
||||||
colors[i].r = colors[i].g = colors[i].b = (std::int8_t) i;
|
colors[i].r = colors[i].g = colors[i].b = (int8_t) i;
|
||||||
colors[i].a = 0xFF;
|
colors[i].a = 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -91,9 +91,9 @@ RageSurface *RageSurface_Load_XPM( char * const *xpm, RString &error )
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int8_t *p = (std::int8_t *) img->pixels;
|
int8_t *p = (int8_t *) img->pixels;
|
||||||
p += y * img->pitch;
|
p += y * img->pitch;
|
||||||
std::int32_t *p32 = (std::int32_t *) p;
|
int32_t *p32 = (int32_t *) p;
|
||||||
for( int x = 0; x < width; ++x )
|
for( int x = 0; x < width; ++x )
|
||||||
{
|
{
|
||||||
RString color_name = row.substr( x*color_length, color_length );
|
RString color_name = row.substr( x*color_length, color_length );
|
||||||
@@ -108,7 +108,7 @@ RageSurface *RageSurface_Load_XPM( char * const *xpm, RString &error )
|
|||||||
|
|
||||||
if( colors.size() <= 256 )
|
if( colors.size() <= 256 )
|
||||||
{
|
{
|
||||||
p[x] = (std::int8_t) it->second;
|
p[x] = (int8_t) it->second;
|
||||||
} else {
|
} else {
|
||||||
const RageSurfaceColor &color = colors[it->second];
|
const RageSurfaceColor &color = colors[it->second];
|
||||||
p32[x] = (color.r << 24) + (color.g << 16) + (color.b << 8);
|
p32[x] = (color.r << 24) + (color.g << 16) + (color.b << 8);
|
||||||
|
|||||||
+5
-5
@@ -31,7 +31,7 @@
|
|||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
const uint64_t ONE_SECOND_IN_MICROSECONDS_ULL = 1000000ULL;
|
const uint64_t ONE_SECOND_IN_MICROSECONDS_ULL = 1000000ULL;
|
||||||
const std::int64_t ONE_SECOND_IN_MICROSECONDS_LL = 1000000LL;
|
const int64_t ONE_SECOND_IN_MICROSECONDS_LL = 1000000LL;
|
||||||
const uint_fast64_t ONE_SECOND_IN_MICROSECONDS_FAST_ULL = 1000000ULL;
|
const uint_fast64_t ONE_SECOND_IN_MICROSECONDS_FAST_ULL = 1000000ULL;
|
||||||
const double ONE_SECOND_IN_MICROSECONDS_DBL = 1000000.0;
|
const double ONE_SECOND_IN_MICROSECONDS_DBL = 1000000.0;
|
||||||
|
|
||||||
@@ -128,8 +128,8 @@ RageTimer RageTimer::Sum(const RageTimer& lhs, float tm)
|
|||||||
/* Calculate the seconds and microseconds from the time:
|
/* Calculate the seconds and microseconds from the time:
|
||||||
* tm == 5.25 -> secs = 5, us = 5.25 - ( 5) = .25
|
* tm == 5.25 -> secs = 5, us = 5.25 - ( 5) = .25
|
||||||
* tm == -1.25 -> secs = -2, us = -1.25 - (-2) = .75 */
|
* tm == -1.25 -> secs = -2, us = -1.25 - (-2) = .75 */
|
||||||
std::int64_t seconds = std::floor(tm);
|
int64_t seconds = std::floor(tm);
|
||||||
std::int64_t us = static_cast<int64_t>((tm - seconds) * ONE_SECOND_IN_MICROSECONDS_LL);
|
int64_t us = static_cast<int64_t>((tm - seconds) * ONE_SECOND_IN_MICROSECONDS_LL);
|
||||||
|
|
||||||
// Prevent unnecessarily checking the time
|
// Prevent unnecessarily checking the time
|
||||||
RageTimer ret(0, 0);
|
RageTimer ret(0, 0);
|
||||||
@@ -151,8 +151,8 @@ RageTimer RageTimer::Sum(const RageTimer& lhs, float tm)
|
|||||||
double RageTimer::Difference(const RageTimer& lhs, const RageTimer& rhs)
|
double RageTimer::Difference(const RageTimer& lhs, const RageTimer& rhs)
|
||||||
{
|
{
|
||||||
// Calculate the difference in seconds and microseconds respectively
|
// Calculate the difference in seconds and microseconds respectively
|
||||||
std::int64_t secs = lhs.m_secs - rhs.m_secs;
|
int64_t secs = lhs.m_secs - rhs.m_secs;
|
||||||
std::int64_t us = lhs.m_us - rhs.m_us;
|
int64_t us = lhs.m_us - rhs.m_us;
|
||||||
|
|
||||||
// Adjust seconds and microseconds if microseconds is negative
|
// Adjust seconds and microseconds if microseconds is negative
|
||||||
if ( us < 0 )
|
if ( us < 0 )
|
||||||
|
|||||||
+1
-1
@@ -360,7 +360,7 @@ struct RageModelVertex // doesn't have color. Relies on material color
|
|||||||
RageVector3 p; // position
|
RageVector3 p; // position
|
||||||
RageVector3 n; // normal
|
RageVector3 n; // normal
|
||||||
RageVector2 t; // texture coordinates
|
RageVector2 t; // texture coordinates
|
||||||
std::int8_t bone;
|
int8_t bone;
|
||||||
RageVector2 TextureMatrixScale; // usually 1,1
|
RageVector2 TextureMatrixScale; // usually 1,1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ void ScoreKeeperNormal::OnNextSong( int iSongInCourseIndex, const Steps* pSteps,
|
|||||||
GAMESTATE->SetProcessedTimingData(nullptr);
|
GAMESTATE->SetProcessedTimingData(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int GetScore(int p, int Z, std::int64_t S, int n)
|
static int GetScore(int p, int Z, int64_t S, int n)
|
||||||
{
|
{
|
||||||
/* There's a problem with the scoring system described below. Z/S is truncated
|
/* There's a problem with the scoring system described below. Z/S is truncated
|
||||||
* to an int. However, in some cases we can end up with very small base scores.
|
* to an int. However, in some cases we can end up with very small base scores.
|
||||||
@@ -221,7 +221,7 @@ static int GetScore(int p, int Z, std::int64_t S, int n)
|
|||||||
return p * (Z / S) * n;
|
return p * (Z / S) * n;
|
||||||
#elif 1
|
#elif 1
|
||||||
// This doesn't round down Z/S.
|
// This doesn't round down Z/S.
|
||||||
return int(std::int64_t(p) * n * Z / S);
|
return int(int64_t(p) * n * Z / S);
|
||||||
#else
|
#else
|
||||||
// This also doesn't round down Z/S. Use this if you don't have 64-bit ints.
|
// This also doesn't round down Z/S. Use this if you don't have 64-bit ints.
|
||||||
return int(p * n * (float(Z) / S));
|
return int(p * n * (float(Z) / S));
|
||||||
@@ -282,8 +282,8 @@ void ScoreKeeperNormal::AddScoreInternal( TapNoteScore score )
|
|||||||
|
|
||||||
m_iTapNotesHit++;
|
m_iTapNotesHit++;
|
||||||
|
|
||||||
const std::int64_t N = uint64_t(m_iNumTapsAndHolds);
|
const int64_t N = uint64_t(m_iNumTapsAndHolds);
|
||||||
const std::int64_t sum = (N * (N + 1)) / 2;
|
const int64_t sum = (N * (N + 1)) / 2;
|
||||||
const int Z = m_iMaxPossiblePoints/10;
|
const int Z = m_iMaxPossiblePoints/10;
|
||||||
|
|
||||||
// Don't use a multiplier if the player has failed
|
// Don't use a multiplier if the player has failed
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public:
|
|||||||
* underlying timers may be 32-bit, but implementations should try to avoid
|
* underlying timers may be 32-bit, but implementations should try to avoid
|
||||||
* wrapping if possible.
|
* wrapping if possible.
|
||||||
*/
|
*/
|
||||||
static std::int64_t GetSystemTimeInMicroseconds();
|
static int64_t GetSystemTimeInMicroseconds();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add file search paths, higher priority first.
|
* Add file search paths, higher priority first.
|
||||||
@@ -131,8 +131,8 @@ public:
|
|||||||
private:
|
private:
|
||||||
/* This are helpers for GetSystemTimeInMicroseconds on systems with a timer
|
/* This are helpers for GetSystemTimeInMicroseconds on systems with a timer
|
||||||
* that may loop or move backwards. */
|
* that may loop or move backwards. */
|
||||||
static std::int64_t FixupTimeIfLooped( std::int64_t usecs );
|
static int64_t FixupTimeIfLooped( int64_t usecs );
|
||||||
static std::int64_t FixupTimeIfBackwards( std::int64_t usecs );
|
static int64_t FixupTimeIfBackwards( int64_t usecs );
|
||||||
|
|
||||||
static bool g_bQuitting;
|
static bool g_bQuitting;
|
||||||
static bool g_bToggleWindowed;
|
static bool g_bToggleWindowed;
|
||||||
|
|||||||
@@ -27,15 +27,15 @@
|
|||||||
* bAccurate == false.
|
* bAccurate == false.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
std::int64_t ArchHooks::FixupTimeIfLooped( std::int64_t usecs )
|
int64_t ArchHooks::FixupTimeIfLooped( int64_t usecs )
|
||||||
{
|
{
|
||||||
static std::int64_t last = 0;
|
static int64_t last = 0;
|
||||||
static std::int64_t offset_us = 0;
|
static int64_t offset_us = 0;
|
||||||
|
|
||||||
/* The time has wrapped if the last time was very high and the current time is very low. */
|
/* The time has wrapped if the last time was very high and the current time is very low. */
|
||||||
const std::int64_t i32BitMaxMs = uint64_t(1) << 32;
|
const int64_t i32BitMaxMs = uint64_t(1) << 32;
|
||||||
const std::int64_t i32BitMaxUs = i32BitMaxMs*1000;
|
const int64_t i32BitMaxUs = i32BitMaxMs*1000;
|
||||||
const std::int64_t one_day = uint64_t(24*60*60)*1000000;
|
const int64_t one_day = uint64_t(24*60*60)*1000000;
|
||||||
if( last > (i32BitMaxUs-one_day) && usecs < one_day )
|
if( last > (i32BitMaxUs-one_day) && usecs < one_day )
|
||||||
offset_us += i32BitMaxUs;
|
offset_us += i32BitMaxUs;
|
||||||
|
|
||||||
@@ -44,10 +44,10 @@ std::int64_t ArchHooks::FixupTimeIfLooped( std::int64_t usecs )
|
|||||||
return usecs + offset_us;
|
return usecs + offset_us;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t ArchHooks::FixupTimeIfBackwards( std::int64_t usecs )
|
int64_t ArchHooks::FixupTimeIfBackwards( int64_t usecs )
|
||||||
{
|
{
|
||||||
static std::int64_t last = 0;
|
static int64_t last = 0;
|
||||||
static std::int64_t offset_us = 0;
|
static int64_t offset_us = 0;
|
||||||
|
|
||||||
if( usecs < last )
|
if( usecs < last )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -258,7 +258,7 @@ bool ArchHooks_MacOSX::GoToURL( RString sUrl )
|
|||||||
return result == 0;
|
return result == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t ArchHooks::GetSystemTimeInMicroseconds()
|
int64_t ArchHooks::GetSystemTimeInMicroseconds()
|
||||||
{
|
{
|
||||||
// http://developer.apple.com/qa/qa2004/qa1398.html
|
// http://developer.apple.com/qa/qa2004/qa1398.html
|
||||||
static double factor = 0.0;
|
static double factor = 0.0;
|
||||||
@@ -270,7 +270,7 @@ std::int64_t ArchHooks::GetSystemTimeInMicroseconds()
|
|||||||
mach_timebase_info( &timeBase );
|
mach_timebase_info( &timeBase );
|
||||||
factor = timeBase.numer / ( 1000.0 * timeBase.denom );
|
factor = timeBase.numer / ( 1000.0 * timeBase.denom );
|
||||||
}
|
}
|
||||||
return std::int64_t( mach_absolute_time() * factor );
|
return int64_t( mach_absolute_time() * factor );
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "RageFileManager.h"
|
#include "RageFileManager.h"
|
||||||
|
|||||||
@@ -149,25 +149,25 @@ clockid_t ArchHooks_Unix::GetClock()
|
|||||||
return g_Clock;
|
return g_Clock;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t ArchHooks::GetSystemTimeInMicroseconds()
|
int64_t ArchHooks::GetSystemTimeInMicroseconds()
|
||||||
{
|
{
|
||||||
OpenGetTime();
|
OpenGetTime();
|
||||||
|
|
||||||
timespec ts;
|
timespec ts;
|
||||||
clock_gettime( g_Clock, &ts );
|
clock_gettime( g_Clock, &ts );
|
||||||
|
|
||||||
std::int64_t iRet = std::int64_t(ts.tv_sec) * 1000000 + std::int64_t(ts.tv_nsec)/1000;
|
int64_t iRet = int64_t(ts.tv_sec) * 1000000 + int64_t(ts.tv_nsec)/1000;
|
||||||
if( g_Clock != CLOCK_MONOTONIC )
|
if( g_Clock != CLOCK_MONOTONIC )
|
||||||
iRet = ArchHooks::FixupTimeIfBackwards( iRet );
|
iRet = ArchHooks::FixupTimeIfBackwards( iRet );
|
||||||
return iRet;
|
return iRet;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
std::int64_t ArchHooks::GetSystemTimeInMicroseconds()
|
int64_t ArchHooks::GetSystemTimeInMicroseconds()
|
||||||
{
|
{
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
gettimeofday( &tv, nullptr );
|
gettimeofday( &tv, nullptr );
|
||||||
|
|
||||||
std::int64_t iRet = std::int64_t(tv.tv_sec) * 1000000 + std::int64_t(tv.tv_usec);
|
int64_t iRet = int64_t(tv.tv_sec) * 1000000 + int64_t(tv.tv_usec);
|
||||||
ret = FixupTimeIfBackwards( ret );
|
ret = FixupTimeIfBackwards( ret );
|
||||||
return iRet;
|
return iRet;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public:
|
|||||||
void DumpDebugInfo();
|
void DumpDebugInfo();
|
||||||
|
|
||||||
void SetTime( tm newtime );
|
void SetTime( tm newtime );
|
||||||
std::int64_t GetSystemTimeInMicroseconds();
|
int64_t GetSystemTimeInMicroseconds();
|
||||||
|
|
||||||
void MountInitialFilesystems( const RString &sDirOfExecutable );
|
void MountInitialFilesystems( const RString &sDirOfExecutable );
|
||||||
float GetDisplayAspectRatio() { return 4.0f/3; }
|
float GetDisplayAspectRatio() { return 4.0f/3; }
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ static void InitTimer()
|
|||||||
QueryPerformanceFrequency(&g_liFrequency);
|
QueryPerformanceFrequency(&g_liFrequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t ArchHooks::GetSystemTimeInMicroseconds()
|
int64_t ArchHooks::GetSystemTimeInMicroseconds()
|
||||||
{
|
{
|
||||||
// Make sure the timer is initialized.
|
// Make sure the timer is initialized.
|
||||||
if (!g_bTimerInitialized) {
|
if (!g_bTimerInitialized) {
|
||||||
|
|||||||
@@ -506,7 +506,7 @@ static int AVIORageFile_ReadPacket(void* opaque, uint8_t* buf, int buf_size)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::int64_t AVIORageFile_Seek(void* opaque, std::int64_t offset, int whence)
|
static int64_t AVIORageFile_Seek(void* opaque, int64_t offset, int whence)
|
||||||
{
|
{
|
||||||
RageFile* f = (RageFile*)opaque;
|
RageFile* f = (RageFile*)opaque;
|
||||||
if (whence == AVSEEK_SIZE)
|
if (whence == AVSEEK_SIZE)
|
||||||
|
|||||||
@@ -337,7 +337,7 @@ bool Alsa9Buf::WaitUntilFramesCanBeFilled( int timeout_ms )
|
|||||||
return err == 1;
|
return err == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Alsa9Buf::Write( const std::int16_t *buffer, int frames )
|
void Alsa9Buf::Write( const int16_t *buffer, int frames )
|
||||||
{
|
{
|
||||||
/* We should be able to write it all. If we don't, treat it as an error. */
|
/* We should be able to write it all. If we don't, treat it as an error. */
|
||||||
int wrote;
|
int wrote;
|
||||||
@@ -388,7 +388,7 @@ bool Alsa9Buf::Recover( int r )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t Alsa9Buf::GetPosition() const
|
int64_t Alsa9Buf::GetPosition() const
|
||||||
{
|
{
|
||||||
if( dsnd_pcm_state(pcm) == SND_PCM_STATE_PREPARED )
|
if( dsnd_pcm_state(pcm) == SND_PCM_STATE_PREPARED )
|
||||||
return last_cursor_pos;
|
return last_cursor_pos;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ private:
|
|||||||
int channels, samplebits;
|
int channels, samplebits;
|
||||||
unsigned samplerate;
|
unsigned samplerate;
|
||||||
int buffersize;
|
int buffersize;
|
||||||
std::int64_t last_cursor_pos;
|
int64_t last_cursor_pos;
|
||||||
|
|
||||||
snd_pcm_uframes_t preferred_writeahead, preferred_chunksize;
|
snd_pcm_uframes_t preferred_writeahead, preferred_chunksize;
|
||||||
snd_pcm_uframes_t writeahead, chunksize;
|
snd_pcm_uframes_t writeahead, chunksize;
|
||||||
@@ -40,15 +40,15 @@ public:
|
|||||||
|
|
||||||
int GetNumFramesToFill();
|
int GetNumFramesToFill();
|
||||||
bool WaitUntilFramesCanBeFilled( int timeout_ms );
|
bool WaitUntilFramesCanBeFilled( int timeout_ms );
|
||||||
void Write( const std::int16_t *buffer, int frames );
|
void Write( const int16_t *buffer, int frames );
|
||||||
|
|
||||||
void Play();
|
void Play();
|
||||||
void Stop();
|
void Stop();
|
||||||
void SetVolume(float vol);
|
void SetVolume(float vol);
|
||||||
int GetSampleRate() const { return samplerate; }
|
int GetSampleRate() const { return samplerate; }
|
||||||
|
|
||||||
std::int64_t GetPosition() const;
|
int64_t GetPosition() const;
|
||||||
std::int64_t GetPlayPos() const { return last_cursor_pos; }
|
int64_t GetPlayPos() const { return last_cursor_pos; }
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -559,7 +559,7 @@ void DSoundBuf::release_output_buf( char *pBuffer, unsigned iBufferSize )
|
|||||||
m_bBufferLocked = false;
|
m_bBufferLocked = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t DSoundBuf::GetPosition() const
|
int64_t DSoundBuf::GetPosition() const
|
||||||
{
|
{
|
||||||
DWORD iCursor, iJunk;
|
DWORD iCursor, iJunk;
|
||||||
HRESULT hr = m_pBuffer->GetCurrentPosition( &iCursor, &iJunk );
|
HRESULT hr = m_pBuffer->GetCurrentPosition( &iCursor, &iJunk );
|
||||||
@@ -589,7 +589,7 @@ std::int64_t DSoundBuf::GetPosition() const
|
|||||||
if( iFramesBehind < 0 )
|
if( iFramesBehind < 0 )
|
||||||
iFramesBehind += buffersize_frames(); /* unwrap */
|
iFramesBehind += buffersize_frames(); /* unwrap */
|
||||||
|
|
||||||
std::int64_t iRet = m_iWriteCursorPos - iFramesBehind;
|
int64_t iRet = m_iWriteCursorPos - iFramesBehind;
|
||||||
|
|
||||||
/* Failsafe: never return a value smaller than we've already returned.
|
/* Failsafe: never return a value smaller than we've already returned.
|
||||||
* This can happen once in a while in underrun conditions. */
|
* This can happen once in a while in underrun conditions. */
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ public:
|
|||||||
int GetSampleRate() const { return m_iSampleRate; }
|
int GetSampleRate() const { return m_iSampleRate; }
|
||||||
|
|
||||||
~DSoundBuf();
|
~DSoundBuf();
|
||||||
std::int64_t GetPosition() const;
|
int64_t GetPosition() const;
|
||||||
std::int64_t GetOutputPosition() const { return m_iWriteCursorPos; }
|
int64_t GetOutputPosition() const { return m_iWriteCursorPos; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int buffersize_frames() const { return m_iBufferSize / bytes_per_frame(); }
|
int buffersize_frames() const { return m_iBufferSize / bytes_per_frame(); }
|
||||||
@@ -70,8 +70,8 @@ private:
|
|||||||
|
|
||||||
int m_iWriteCursor, m_iBufferBytesFilled; /* bytes */
|
int m_iWriteCursor, m_iBufferBytesFilled; /* bytes */
|
||||||
int m_iExtraWriteahead;
|
int m_iExtraWriteahead;
|
||||||
std::int64_t m_iWriteCursorPos; /* frames */
|
int64_t m_iWriteCursorPos; /* frames */
|
||||||
mutable std::int64_t m_iLastPosition;
|
mutable int64_t m_iLastPosition;
|
||||||
bool m_bPlaying;
|
bool m_bPlaying;
|
||||||
|
|
||||||
bool m_bBufferLocked;
|
bool m_bBufferLocked;
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ public:
|
|||||||
|
|
||||||
/* Get the current hardware frame position, in the same time base as passed to
|
/* Get the current hardware frame position, in the same time base as passed to
|
||||||
* RageSound::CommitPlayingPosition. */
|
* RageSound::CommitPlayingPosition. */
|
||||||
std::int64_t GetHardwareFrame( RageTimer *pTimer ) const;
|
int64_t GetHardwareFrame( RageTimer *pTimer ) const;
|
||||||
virtual std::int64_t GetPosition() const = 0;
|
virtual int64_t GetPosition() const = 0;
|
||||||
|
|
||||||
/* When a sound is finished playing (GetDataToPlay returns 0) and the sound has
|
/* When a sound is finished playing (GetDataToPlay returns 0) and the sound has
|
||||||
* been completely flushed (so GetPosition is no longer meaningful), call
|
* been completely flushed (so GetPosition is no longer meaningful), call
|
||||||
@@ -96,10 +96,10 @@ protected:
|
|||||||
* This function only mixes data; it will not lock any mutexes or do any file access, and
|
* This function only mixes data; it will not lock any mutexes or do any file access, and
|
||||||
* is safe to call from a realtime thread.
|
* is safe to call from a realtime thread.
|
||||||
*/
|
*/
|
||||||
void Mix( std::int16_t *pBuf, int iFrames, std::int64_t iFrameNumber, std::int64_t iCurrentFrame );
|
void Mix( int16_t *pBuf, int iFrames, int64_t iFrameNumber, int64_t iCurrentFrame );
|
||||||
void Mix( float *pBuf, int iFrames, std::int64_t iFrameNumber, std::int64_t iCurrentFrame );
|
void Mix( float *pBuf, int iFrames, int64_t iFrameNumber, int64_t iCurrentFrame );
|
||||||
|
|
||||||
void MixDeinterlaced( float **pBufs, int iChannels, int iFrames, std::int64_t iFrameNumber, std::int64_t iCurrentFrame );
|
void MixDeinterlaced( float **pBufs, int iChannels, int iFrames, int64_t iFrameNumber, int64_t iCurrentFrame );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* This mutex is used for serializing with the decoder thread. Locking this mutex
|
/* This mutex is used for serializing with the decoder thread. Locking this mutex
|
||||||
@@ -156,7 +156,7 @@ private:
|
|||||||
float m_Buffer[samples_per_block];
|
float m_Buffer[samples_per_block];
|
||||||
float *m_BufferNext; // beginning of the unread data
|
float *m_BufferNext; // beginning of the unread data
|
||||||
int m_FramesInBuffer; // total number of frames at m_BufferNext
|
int m_FramesInBuffer; // total number of frames at m_BufferNext
|
||||||
std::int64_t m_iPosition; // stream frame of m_BufferNext
|
int64_t m_iPosition; // stream frame of m_BufferNext
|
||||||
sound_block(): m_BufferNext(m_Buffer),
|
sound_block(): m_BufferNext(m_Buffer),
|
||||||
m_FramesInBuffer(0), m_iPosition(0) {}
|
m_FramesInBuffer(0), m_iPosition(0) {}
|
||||||
};
|
};
|
||||||
@@ -176,8 +176,8 @@ private:
|
|||||||
struct QueuedPosMap
|
struct QueuedPosMap
|
||||||
{
|
{
|
||||||
int iFrames;
|
int iFrames;
|
||||||
std::int64_t iStreamFrame;
|
int64_t iStreamFrame;
|
||||||
std::int64_t iHardwareFrame;
|
int64_t iHardwareFrame;
|
||||||
};
|
};
|
||||||
|
|
||||||
CircBuf<QueuedPosMap> m_PosMapQueue;
|
CircBuf<QueuedPosMap> m_PosMapQueue;
|
||||||
@@ -201,15 +201,15 @@ private:
|
|||||||
/* List of currently playing sounds: XXX no vector */
|
/* List of currently playing sounds: XXX no vector */
|
||||||
Sound m_Sounds[32];
|
Sound m_Sounds[32];
|
||||||
|
|
||||||
std::int64_t ClampHardwareFrame( std::int64_t iHardwareFrame ) const;
|
int64_t ClampHardwareFrame( int64_t iHardwareFrame ) const;
|
||||||
mutable std::int64_t m_iMaxHardwareFrame;
|
mutable int64_t m_iMaxHardwareFrame;
|
||||||
mutable std::int64_t m_iVMaxHardwareFrame;
|
mutable int64_t m_iVMaxHardwareFrame;
|
||||||
|
|
||||||
bool m_bShutdownDecodeThread;
|
bool m_bShutdownDecodeThread;
|
||||||
|
|
||||||
static int DecodeThread_start( void *p );
|
static int DecodeThread_start( void *p );
|
||||||
void DecodeThread();
|
void DecodeThread();
|
||||||
RageSoundMixBuffer &MixIntoBuffer( int iFrames, std::int64_t iFrameNumber, std::int64_t iCurrentFrame );
|
RageSoundMixBuffer &MixIntoBuffer( int iFrames, int64_t iFrameNumber, int64_t iCurrentFrame );
|
||||||
RageThread m_DecodeThread;
|
RageThread m_DecodeThread;
|
||||||
|
|
||||||
int GetDataForSound( Sound &s );
|
int GetDataForSound( Sound &s );
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ REGISTER_SOUND_DRIVER_CLASS2( ALSA-sw, ALSA9_Software );
|
|||||||
|
|
||||||
static const int channels = 2;
|
static const int channels = 2;
|
||||||
static const int samples_per_frame = channels;
|
static const int samples_per_frame = channels;
|
||||||
static const int bytes_per_frame = sizeof(std::int16_t) * samples_per_frame;
|
static const int bytes_per_frame = sizeof(int16_t) * samples_per_frame;
|
||||||
|
|
||||||
/* Linux 2.6 has a fine-grained scheduler. We can almost always use a smaller buffer
|
/* Linux 2.6 has a fine-grained scheduler. We can almost always use a smaller buffer
|
||||||
* size than in 2.4. XXX: Some cards can handle smaller buffer sizes than others. */
|
* size than in 2.4. XXX: Some cards can handle smaller buffer sizes than others. */
|
||||||
@@ -54,7 +54,7 @@ bool RageSoundDriver_ALSA9_Software::GetData()
|
|||||||
if( frames_to_fill <= 0 )
|
if( frames_to_fill <= 0 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
static std::int16_t *buf = nullptr;
|
static int16_t *buf = nullptr;
|
||||||
static int bufsize = 0;
|
static int bufsize = 0;
|
||||||
if( buf && bufsize < frames_to_fill )
|
if( buf && bufsize < frames_to_fill )
|
||||||
{
|
{
|
||||||
@@ -63,12 +63,12 @@ bool RageSoundDriver_ALSA9_Software::GetData()
|
|||||||
}
|
}
|
||||||
if( !buf )
|
if( !buf )
|
||||||
{
|
{
|
||||||
buf = new std::int16_t[frames_to_fill*samples_per_frame];
|
buf = new int16_t[frames_to_fill*samples_per_frame];
|
||||||
bufsize = frames_to_fill;
|
bufsize = frames_to_fill;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::int64_t play_pos = m_pPCM->GetPlayPos();
|
const int64_t play_pos = m_pPCM->GetPlayPos();
|
||||||
const std::int64_t cur_play_pos = m_pPCM->GetPosition();
|
const int64_t cur_play_pos = m_pPCM->GetPosition();
|
||||||
|
|
||||||
this->Mix( buf, frames_to_fill, play_pos, cur_play_pos );
|
this->Mix( buf, frames_to_fill, play_pos, cur_play_pos );
|
||||||
m_pPCM->Write( buf, frames_to_fill );
|
m_pPCM->Write( buf, frames_to_fill );
|
||||||
@@ -77,7 +77,7 @@ bool RageSoundDriver_ALSA9_Software::GetData()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::int64_t RageSoundDriver_ALSA9_Software::GetPosition() const
|
int64_t RageSoundDriver_ALSA9_Software::GetPosition() const
|
||||||
{
|
{
|
||||||
return m_pPCM->GetPosition();
|
return m_pPCM->GetPosition();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ public:
|
|||||||
RString Init();
|
RString Init();
|
||||||
|
|
||||||
/* virtuals: */
|
/* virtuals: */
|
||||||
std::int64_t GetPosition() const;
|
int64_t GetPosition() const;
|
||||||
float GetPlayLatency() const;
|
float GetPlayLatency() const;
|
||||||
int GetSampleRate() const { return m_iSampleRate; }
|
int GetSampleRate() const { return m_iSampleRate; }
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ public:
|
|||||||
~RageSoundDriver_AU();
|
~RageSoundDriver_AU();
|
||||||
float GetPlayLatency() const;
|
float GetPlayLatency() const;
|
||||||
int GetSampleRate() const { return m_iSampleRate; }
|
int GetSampleRate() const { return m_iSampleRate; }
|
||||||
std::int64_t GetPosition() const;
|
int64_t GetPosition() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void SetupDecodingThread();
|
void SetupDecodingThread();
|
||||||
|
|||||||
@@ -205,9 +205,9 @@ RageSoundDriver_AU::~RageSoundDriver_AU()
|
|||||||
delete m_pNotificationThread;
|
delete m_pNotificationThread;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t RageSoundDriver_AU::GetPosition() const
|
int64_t RageSoundDriver_AU::GetPosition() const
|
||||||
{
|
{
|
||||||
return std::int64_t( m_TimeScale * AudioGetCurrentHostTime() );
|
return int64_t( m_TimeScale * AudioGetCurrentHostTime() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -350,8 +350,8 @@ OSStatus RageSoundDriver_AU::Render( void *inRefCon,
|
|||||||
This->m_pIOThread = new RageThreadRegister( "HAL I/O thread" );
|
This->m_pIOThread = new RageThreadRegister( "HAL I/O thread" );
|
||||||
|
|
||||||
AudioBuffer &buf = ioData->mBuffers[0];
|
AudioBuffer &buf = ioData->mBuffers[0];
|
||||||
std::int64_t now = std::int64_t( This->m_TimeScale * AudioGetCurrentHostTime() );
|
int64_t now = int64_t( This->m_TimeScale * AudioGetCurrentHostTime() );
|
||||||
std::int64_t next = std::int64_t( This->m_TimeScale * inTimeStamp->mHostTime );
|
int64_t next = int64_t( This->m_TimeScale * inTimeStamp->mHostTime );
|
||||||
|
|
||||||
This->Mix( (float *)buf.mData, inNumberFrames, next, now );
|
This->Mix( (float *)buf.mData, inNumberFrames, next, now );
|
||||||
if( unlikely(This->m_bDone) )
|
if( unlikely(This->m_bDone) )
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ void RageSoundDriver_DSound_Software::MixerThread()
|
|||||||
{
|
{
|
||||||
char *pLockedBuf;
|
char *pLockedBuf;
|
||||||
unsigned iLen;
|
unsigned iLen;
|
||||||
const std::int64_t iPlayPos = m_pPCM->GetOutputPosition(); /* must be called before get_output_buf */
|
const int64_t iPlayPos = m_pPCM->GetOutputPosition(); /* must be called before get_output_buf */
|
||||||
|
|
||||||
if( !m_pPCM->get_output_buf(&pLockedBuf, &iLen, chunksize()) )
|
if( !m_pPCM->get_output_buf(&pLockedBuf, &iLen, chunksize()) )
|
||||||
{
|
{
|
||||||
@@ -52,7 +52,7 @@ void RageSoundDriver_DSound_Software::MixerThread()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->Mix( (std::int16_t *) pLockedBuf, iLen/bytes_per_frame, iPlayPos, m_pPCM->GetPosition() );
|
this->Mix( (int16_t *) pLockedBuf, iLen/bytes_per_frame, iPlayPos, m_pPCM->GetPosition() );
|
||||||
|
|
||||||
m_pPCM->release_output_buf( pLockedBuf, iLen );
|
m_pPCM->release_output_buf( pLockedBuf, iLen );
|
||||||
}
|
}
|
||||||
@@ -62,7 +62,7 @@ void RageSoundDriver_DSound_Software::MixerThread()
|
|||||||
m_pPCM->Stop();
|
m_pPCM->Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t RageSoundDriver_DSound_Software::GetPosition() const
|
int64_t RageSoundDriver_DSound_Software::GetPosition() const
|
||||||
{
|
{
|
||||||
return m_pPCM->GetPosition();
|
return m_pPCM->GetPosition();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ public:
|
|||||||
virtual ~RageSoundDriver_DSound_Software();
|
virtual ~RageSoundDriver_DSound_Software();
|
||||||
RString Init();
|
RString Init();
|
||||||
|
|
||||||
std::int64_t GetPosition() const;
|
int64_t GetPosition() const;
|
||||||
float GetPlayLatency() const;
|
float GetPlayLatency() const;
|
||||||
int GetSampleRate() const;
|
int GetSampleRate() const;
|
||||||
|
|
||||||
|
|||||||
@@ -56,14 +56,14 @@ int RageSoundDriver::DecodeThread_start( void *p )
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::int64_t g_iTotalAhead = 0;
|
static int64_t g_iTotalAhead = 0;
|
||||||
static int g_iTotalAheadCount = 0;
|
static int g_iTotalAheadCount = 0;
|
||||||
|
|
||||||
RageSoundMixBuffer &RageSoundDriver::MixIntoBuffer( int iFrames, std::int64_t iFrameNumber, std::int64_t iCurrentFrame )
|
RageSoundMixBuffer &RageSoundDriver::MixIntoBuffer( int iFrames, int64_t iFrameNumber, int64_t iCurrentFrame )
|
||||||
{
|
{
|
||||||
ASSERT_M( m_DecodeThread.IsCreated(), "RageSoundDriver::StartDecodeThread() was never called" );
|
ASSERT_M( m_DecodeThread.IsCreated(), "RageSoundDriver::StartDecodeThread() was never called" );
|
||||||
|
|
||||||
std::int64_t frameDifference = iFrameNumber - iCurrentFrame + static_cast<std::int64_t>(iFrames);
|
int64_t frameDifference = iFrameNumber - iCurrentFrame + static_cast<int64_t>(iFrames);
|
||||||
if (frameDifference > 0)
|
if (frameDifference > 0)
|
||||||
{
|
{
|
||||||
g_iTotalAhead += frameDifference;
|
g_iTotalAhead += frameDifference;
|
||||||
@@ -100,9 +100,9 @@ RageSoundMixBuffer &RageSoundDriver::MixIntoBuffer( int iFrames, std::int64_t iF
|
|||||||
if( !s.m_StartTime.IsZero() && iCurrentFrame != -1 )
|
if( !s.m_StartTime.IsZero() && iCurrentFrame != -1 )
|
||||||
{
|
{
|
||||||
/* If the sound is supposed to start at a time past this buffer, insert silence. */
|
/* If the sound is supposed to start at a time past this buffer, insert silence. */
|
||||||
const std::int64_t iFramesUntilThisBuffer = iFrameNumber - iCurrentFrame;
|
const int64_t iFramesUntilThisBuffer = iFrameNumber - iCurrentFrame;
|
||||||
const float fSecondsBeforeStart = -s.m_StartTime.Ago();
|
const float fSecondsBeforeStart = -s.m_StartTime.Ago();
|
||||||
const std::int64_t iFramesBeforeStart = std::int64_t(fSecondsBeforeStart * GetSampleRate());
|
const int64_t iFramesBeforeStart = int64_t(fSecondsBeforeStart * GetSampleRate());
|
||||||
const int iSilentFramesInThisBuffer = std::clamp( int(iFramesBeforeStart-iFramesUntilThisBuffer), 0, iFramesLeft );
|
const int iSilentFramesInThisBuffer = std::clamp( int(iFramesBeforeStart-iFramesUntilThisBuffer), 0, iFramesLeft );
|
||||||
|
|
||||||
iGotFrames += iSilentFramesInThisBuffer;
|
iGotFrames += iSilentFramesInThisBuffer;
|
||||||
@@ -170,19 +170,19 @@ RageSoundMixBuffer &RageSoundDriver::MixIntoBuffer( int iFrames, std::int64_t iF
|
|||||||
return mix;
|
return mix;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RageSoundDriver::Mix( std::int16_t *pBuf, int iFrames, std::int64_t iFrameNumber, std::int64_t iCurrentFrame )
|
void RageSoundDriver::Mix( int16_t *pBuf, int iFrames, int64_t iFrameNumber, int64_t iCurrentFrame )
|
||||||
{
|
{
|
||||||
memset( pBuf, 0, iFrames*channels*sizeof(std::int16_t) );
|
memset( pBuf, 0, iFrames*channels*sizeof(int16_t) );
|
||||||
MixIntoBuffer( iFrames, iFrameNumber, iCurrentFrame ).read( pBuf );
|
MixIntoBuffer( iFrames, iFrameNumber, iCurrentFrame ).read( pBuf );
|
||||||
}
|
}
|
||||||
|
|
||||||
void RageSoundDriver::Mix( float *pBuf, int iFrames, std::int64_t iFrameNumber, std::int64_t iCurrentFrame )
|
void RageSoundDriver::Mix( float *pBuf, int iFrames, int64_t iFrameNumber, int64_t iCurrentFrame )
|
||||||
{
|
{
|
||||||
memset( pBuf, 0, iFrames*channels*sizeof(float) );
|
memset( pBuf, 0, iFrames*channels*sizeof(float) );
|
||||||
MixIntoBuffer( iFrames, iFrameNumber, iCurrentFrame ).read( pBuf );
|
MixIntoBuffer( iFrames, iFrameNumber, iCurrentFrame ).read( pBuf );
|
||||||
}
|
}
|
||||||
|
|
||||||
void RageSoundDriver::MixDeinterlaced( float **pBufs, int iChannels, int iFrames, std::int64_t iFrameNumber, std::int64_t iCurrentFrame )
|
void RageSoundDriver::MixDeinterlaced( float **pBufs, int iChannels, int iFrames, int64_t iFrameNumber, int64_t iCurrentFrame )
|
||||||
{
|
{
|
||||||
for (int i = 0; i < iChannels; ++i )
|
for (int i = 0; i < iChannels; ++i )
|
||||||
memset( pBufs[i], 0, iFrames*sizeof(float) );
|
memset( pBufs[i], 0, iFrames*sizeof(float) );
|
||||||
@@ -478,7 +478,7 @@ RageSoundDriver::~RageSoundDriver()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t RageSoundDriver::ClampHardwareFrame( std::int64_t iHardwareFrame ) const
|
int64_t RageSoundDriver::ClampHardwareFrame( int64_t iHardwareFrame ) const
|
||||||
{
|
{
|
||||||
/* It's sometimes possible for the hardware position to move backwards, usually
|
/* It's sometimes possible for the hardware position to move backwards, usually
|
||||||
* on underrun. We can try to prevent this in each driver, but it's an obscure
|
* on underrun. We can try to prevent this in each driver, but it's an obscure
|
||||||
@@ -487,8 +487,8 @@ std::int64_t RageSoundDriver::ClampHardwareFrame( std::int64_t iHardwareFrame )
|
|||||||
{
|
{
|
||||||
/* Clamp the output to one per second, so one underruns don't cascade due to
|
/* Clamp the output to one per second, so one underruns don't cascade due to
|
||||||
* output spam. */
|
* output spam. */
|
||||||
static std::int64_t lastTime = 0;
|
static int64_t lastTime = 0;
|
||||||
std::int64_t currentTime = RageTimer::GetTimeSinceStartMicroseconds();
|
int64_t currentTime = RageTimer::GetTimeSinceStartMicroseconds();
|
||||||
if( lastTime == 0 || (currentTime - lastTime) > 1000000 )
|
if( lastTime == 0 || (currentTime - lastTime) > 1000000 )
|
||||||
{
|
{
|
||||||
LOG->Trace("RageSoundDriver: driver returned a lesser position (%" PRId64 " < %" PRId64 ")", iHardwareFrame, m_iMaxHardwareFrame);
|
LOG->Trace("RageSoundDriver: driver returned a lesser position (%" PRId64 " < %" PRId64 ")", iHardwareFrame, m_iMaxHardwareFrame);
|
||||||
@@ -503,7 +503,7 @@ std::int64_t RageSoundDriver::ClampHardwareFrame( std::int64_t iHardwareFrame )
|
|||||||
return m_iMaxHardwareFrame;
|
return m_iMaxHardwareFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t RageSoundDriver::GetHardwareFrame( RageTimer *pTimestamp=nullptr ) const
|
int64_t RageSoundDriver::GetHardwareFrame( RageTimer *pTimestamp=nullptr ) const
|
||||||
{
|
{
|
||||||
if( pTimestamp == nullptr )
|
if( pTimestamp == nullptr )
|
||||||
return ClampHardwareFrame( GetPosition() );
|
return ClampHardwareFrame( GetPosition() );
|
||||||
@@ -518,7 +518,7 @@ std::int64_t RageSoundDriver::GetHardwareFrame( RageTimer *pTimestamp=nullptr )
|
|||||||
* severe performance problems, anyway.
|
* severe performance problems, anyway.
|
||||||
*/
|
*/
|
||||||
int iTries = 3;
|
int iTries = 3;
|
||||||
std::int64_t iPositionFrames;
|
int64_t iPositionFrames;
|
||||||
uint64_t iStartTime;
|
uint64_t iStartTime;
|
||||||
const uint64_t iThreshold = 2000ULL;
|
const uint64_t iThreshold = 2000ULL;
|
||||||
|
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ RString RageSoundDriver_JACK::ConnectPorts()
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t RageSoundDriver_JACK::GetPosition() const
|
int64_t RageSoundDriver_JACK::GetPosition() const
|
||||||
{
|
{
|
||||||
return jack_frame_time(client);
|
return jack_frame_time(client);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public:
|
|||||||
RString Init();
|
RString Init();
|
||||||
|
|
||||||
int GetSampleRate() const;
|
int GetSampleRate() const;
|
||||||
std::int64_t GetPosition() const;
|
int64_t GetPosition() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
jack_client_t *client;
|
jack_client_t *client;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ void RageSoundDriver_Null::Update()
|
|||||||
/* "Play" frames. */
|
/* "Play" frames. */
|
||||||
while( m_iLastCursorPos < GetPosition()+1024*4 )
|
while( m_iLastCursorPos < GetPosition()+1024*4 )
|
||||||
{
|
{
|
||||||
std::int16_t buf[256*channels];
|
int16_t buf[256*channels];
|
||||||
this->Mix( buf, 256, m_iLastCursorPos, GetPosition() );
|
this->Mix( buf, 256, m_iLastCursorPos, GetPosition() );
|
||||||
m_iLastCursorPos += 256;
|
m_iLastCursorPos += 256;
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,7 @@ void RageSoundDriver_Null::Update()
|
|||||||
RageSoundDriver::Update();
|
RageSoundDriver::Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t RageSoundDriver_Null::GetPosition() const
|
int64_t RageSoundDriver_Null::GetPosition() const
|
||||||
{
|
{
|
||||||
return (RageTimer::GetTimeSinceStartMicroseconds() * m_iSampleRate) / 1000000;
|
return (RageTimer::GetTimeSinceStartMicroseconds() * m_iSampleRate) / 1000000;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ class RageSoundDriver_Null: public RageSoundDriver
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RageSoundDriver_Null();
|
RageSoundDriver_Null();
|
||||||
std::int64_t GetPosition() const;
|
int64_t GetPosition() const;
|
||||||
int GetSampleRate() const;
|
int GetSampleRate() const;
|
||||||
void Update();
|
void Update();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::int64_t m_iLastCursorPos;
|
int64_t m_iLastCursorPos;
|
||||||
int m_iSampleRate;
|
int m_iSampleRate;
|
||||||
};
|
};
|
||||||
#define USE_RAGE_SOUND_NULL
|
#define USE_RAGE_SOUND_NULL
|
||||||
|
|||||||
@@ -83,9 +83,9 @@ bool RageSoundDriver_OSS::GetData()
|
|||||||
|
|
||||||
const int chunksize = ab.fragsize;
|
const int chunksize = ab.fragsize;
|
||||||
|
|
||||||
static std::int16_t *buf = nullptr;
|
static int16_t *buf = nullptr;
|
||||||
if(!buf)
|
if(!buf)
|
||||||
buf = new std::int16_t[chunksize / sizeof(std::int16_t)];
|
buf = new int16_t[chunksize / sizeof(int16_t)];
|
||||||
|
|
||||||
this->Mix( buf, chunksize/bytes_per_frame, last_cursor_pos, GetPosition() );
|
this->Mix( buf, chunksize/bytes_per_frame, last_cursor_pos, GetPosition() );
|
||||||
|
|
||||||
@@ -101,7 +101,7 @@ bool RageSoundDriver_OSS::GetData()
|
|||||||
|
|
||||||
/* XXX: There's a race on last_cursor_pos here: new data might be written after the
|
/* XXX: There's a race on last_cursor_pos here: new data might be written after the
|
||||||
* ioctl returns, incrementing last_cursor_pos. */
|
* ioctl returns, incrementing last_cursor_pos. */
|
||||||
std::int64_t RageSoundDriver_OSS::GetPosition() const
|
int64_t RageSoundDriver_OSS::GetPosition() const
|
||||||
{
|
{
|
||||||
ASSERT( fd != -1 );
|
ASSERT( fd != -1 );
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public:
|
|||||||
int GetSampleRate() const { return samplerate; }
|
int GetSampleRate() const { return samplerate; }
|
||||||
|
|
||||||
/* virtuals: */
|
/* virtuals: */
|
||||||
std::int64_t GetPosition() const;
|
int64_t GetPosition() const;
|
||||||
float GetPlayLatency() const;
|
float GetPlayLatency() const;
|
||||||
void SetupDecodingThread();
|
void SetupDecodingThread();
|
||||||
|
|
||||||
|
|||||||
@@ -306,15 +306,15 @@ void RageSoundDriver_PulseAudio::StreamStateCb(pa_stream *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t RageSoundDriver_PulseAudio::GetPosition() const
|
int64_t RageSoundDriver_PulseAudio::GetPosition() const
|
||||||
{
|
{
|
||||||
pa_threaded_mainloop_lock(m_PulseMainLoop);
|
pa_threaded_mainloop_lock(m_PulseMainLoop);
|
||||||
std::int64_t position = GetPositionUnlocked();
|
int64_t position = GetPositionUnlocked();
|
||||||
pa_threaded_mainloop_unlock(m_PulseMainLoop);
|
pa_threaded_mainloop_unlock(m_PulseMainLoop);
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t RageSoundDriver_PulseAudio::GetPositionUnlocked() const
|
int64_t RageSoundDriver_PulseAudio::GetPositionUnlocked() const
|
||||||
{
|
{
|
||||||
pa_usec_t usec;
|
pa_usec_t usec;
|
||||||
if(pa_stream_get_time(m_PulseStream, &usec) < 0)
|
if(pa_stream_get_time(m_PulseStream, &usec) < 0)
|
||||||
@@ -329,12 +329,12 @@ std::int64_t RageSoundDriver_PulseAudio::GetPositionUnlocked() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t length = pa_usec_to_bytes(usec, &m_ss);
|
size_t length = pa_usec_to_bytes(usec, &m_ss);
|
||||||
return length / (sizeof(std::int16_t) * 2); /* we use 16-bit frames and 2 channels */
|
return length / (sizeof(int16_t) * 2); /* we use 16-bit frames and 2 channels */
|
||||||
}
|
}
|
||||||
|
|
||||||
void RageSoundDriver_PulseAudio::StreamWriteCb(pa_stream *s, size_t length)
|
void RageSoundDriver_PulseAudio::StreamWriteCb(pa_stream *s, size_t length)
|
||||||
{
|
{
|
||||||
std::int64_t curPos = GetPositionUnlocked();
|
int64_t curPos = GetPositionUnlocked();
|
||||||
while(length > 0)
|
while(length > 0)
|
||||||
{
|
{
|
||||||
void* buf;
|
void* buf;
|
||||||
@@ -344,10 +344,10 @@ void RageSoundDriver_PulseAudio::StreamWriteCb(pa_stream *s, size_t length)
|
|||||||
RageException::Throw("Pulse: pa_stream_begin_write() failed: %s", pa_strerror(pa_context_errno(m_PulseCtx)));
|
RageException::Throw("Pulse: pa_stream_begin_write() failed: %s", pa_strerror(pa_context_errno(m_PulseCtx)));
|
||||||
}
|
}
|
||||||
|
|
||||||
const size_t nbframes = bufsize / sizeof(std::int16_t); /* we use 16-bit frames */
|
const size_t nbframes = bufsize / sizeof(int16_t); /* we use 16-bit frames */
|
||||||
std::int64_t pos1 = m_LastPosition;
|
int64_t pos1 = m_LastPosition;
|
||||||
std::int64_t pos2 = pos1 + nbframes/2; /* Mix() position in stereo frames */
|
int64_t pos2 = pos1 + nbframes/2; /* Mix() position in stereo frames */
|
||||||
this->Mix( reinterpret_cast<std::int16_t*>(buf), pos2-pos1, pos1, curPos);
|
this->Mix( reinterpret_cast<int16_t*>(buf), pos2-pos1, pos1, curPos);
|
||||||
|
|
||||||
if(pa_stream_write(m_PulseStream, buf, bufsize, nullptr, 0, PA_SEEK_RELATIVE) < 0)
|
if(pa_stream_write(m_PulseStream, buf, bufsize, nullptr, 0, PA_SEEK_RELATIVE) < 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ public:
|
|||||||
|
|
||||||
RString Init();
|
RString Init();
|
||||||
|
|
||||||
std::int64_t GetPosition() const;
|
int64_t GetPosition() const;
|
||||||
inline int GetSampleRate() const { return m_ss.rate; };
|
inline int GetSampleRate() const { return m_ss.rate; };
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::int64_t GetPositionUnlocked() const;
|
int64_t GetPositionUnlocked() const;
|
||||||
|
|
||||||
std::int64_t m_LastPosition;
|
int64_t m_LastPosition;
|
||||||
pa_sample_spec m_ss;
|
pa_sample_spec m_ss;
|
||||||
char *m_Error;
|
char *m_Error;
|
||||||
|
|
||||||
|
|||||||
@@ -1025,7 +1025,7 @@ bool WinWdmStream::SubmitPacket( int iPacket, RString &sError )
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
void MapChannels( const std::int16_t *pIn, std::int16_t *pOut, int iInChannels, int iOutChannels, int iFrames, const int *pChannelMap )
|
void MapChannels( const int16_t *pIn, int16_t *pOut, int iInChannels, int iOutChannels, int iFrames, const int *pChannelMap )
|
||||||
{
|
{
|
||||||
for( int i = 0; i < iFrames; ++i )
|
for( int i = 0; i < iFrames; ++i )
|
||||||
{
|
{
|
||||||
@@ -1049,7 +1049,7 @@ namespace
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MapChannels( const std::int16_t *pIn, std::int16_t *pOut, int iInChannels, int iOutChannels, int iFrames )
|
void MapChannels( const int16_t *pIn, int16_t *pOut, int iInChannels, int iOutChannels, int iFrames )
|
||||||
{
|
{
|
||||||
static const int i1ChannelMap[] = { -2 };
|
static const int i1ChannelMap[] = { -2 };
|
||||||
static const int i4ChannelMap[] = { 0, 1, 0, 1 };
|
static const int i4ChannelMap[] = { 0, 1, 0, 1 };
|
||||||
@@ -1067,7 +1067,7 @@ namespace
|
|||||||
MapChannels( pIn, pOut, iInChannels, iOutChannels, iFrames, pChannelMap );
|
MapChannels( pIn, pOut, iInChannels, iOutChannels, iFrames, pChannelMap );
|
||||||
}
|
}
|
||||||
|
|
||||||
void MapSampleFormatFromInt16( const std::int16_t *pIn, void *pOut, int iSamples, DeviceSampleFormat FromFormat )
|
void MapSampleFormatFromInt16( const int16_t *pIn, void *pOut, int iSamples, DeviceSampleFormat FromFormat )
|
||||||
{
|
{
|
||||||
switch( FromFormat )
|
switch( FromFormat )
|
||||||
{
|
{
|
||||||
@@ -1092,7 +1092,7 @@ namespace
|
|||||||
}
|
}
|
||||||
case DeviceSampleFormat_Int32:
|
case DeviceSampleFormat_Int32:
|
||||||
{
|
{
|
||||||
std::int16_t *pOutBuf = (std::int16_t *) pOut;
|
int16_t *pOutBuf = (int16_t *) pOut;
|
||||||
for( int i = 0; i < iSamples; ++i )
|
for( int i = 0; i < iSamples; ++i )
|
||||||
{
|
{
|
||||||
*pOutBuf++ = 0;
|
*pOutBuf++ = 0;
|
||||||
@@ -1112,29 +1112,29 @@ void RageSoundDriver_WDMKS::Read( void *pData, int iFrames, int iLastCursorPos,
|
|||||||
if( m_pStream->m_iDeviceOutputChannels == iChannels &&
|
if( m_pStream->m_iDeviceOutputChannels == iChannels &&
|
||||||
m_pStream->m_DeviceSampleFormat == DeviceSampleFormat_Int16 )
|
m_pStream->m_DeviceSampleFormat == DeviceSampleFormat_Int16 )
|
||||||
{
|
{
|
||||||
std::int16_t *pBuf = (std::int16_t *) pData;
|
int16_t *pBuf = (int16_t *) pData;
|
||||||
this->Mix( pBuf, iFrames, iLastCursorPos, iCurrentFrame );
|
this->Mix( pBuf, iFrames, iLastCursorPos, iCurrentFrame );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int16_t *pBuf = (std::int16_t *) alloca( iFrames * iChannels * sizeof(std::int16_t) );
|
int16_t *pBuf = (int16_t *) alloca( iFrames * iChannels * sizeof(int16_t) );
|
||||||
this->Mix( (std::int16_t *) pBuf, iFrames, iLastCursorPos, iCurrentFrame );
|
this->Mix( (int16_t *) pBuf, iFrames, iLastCursorPos, iCurrentFrame );
|
||||||
|
|
||||||
/* If the device has other than 2 channels, convert. */
|
/* If the device has other than 2 channels, convert. */
|
||||||
if( m_pStream->m_iDeviceOutputChannels != iChannels )
|
if( m_pStream->m_iDeviceOutputChannels != iChannels )
|
||||||
{
|
{
|
||||||
std::int16_t *pTempBuf = (std::int16_t *) alloca( iFrames * m_pStream->m_iBytesPerOutputSample * m_pStream->m_iDeviceOutputChannels );
|
int16_t *pTempBuf = (int16_t *) alloca( iFrames * m_pStream->m_iBytesPerOutputSample * m_pStream->m_iDeviceOutputChannels );
|
||||||
MapChannels( (std::int16_t *) pBuf, pTempBuf, iChannels, m_pStream->m_iDeviceOutputChannels, iFrames );
|
MapChannels( (int16_t *) pBuf, pTempBuf, iChannels, m_pStream->m_iDeviceOutputChannels, iFrames );
|
||||||
pBuf = pTempBuf;
|
pBuf = pTempBuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the device format isn't std::int16_t, convert. */
|
/* If the device format isn't int16_t, convert. */
|
||||||
if( m_pStream->m_DeviceSampleFormat != DeviceSampleFormat_Int16 )
|
if( m_pStream->m_DeviceSampleFormat != DeviceSampleFormat_Int16 )
|
||||||
{
|
{
|
||||||
int iSamples = iFrames * m_pStream->m_iDeviceOutputChannels;
|
int iSamples = iFrames * m_pStream->m_iDeviceOutputChannels;
|
||||||
void *pTempBuf = alloca( iSamples * m_pStream->m_iBytesPerOutputSample );
|
void *pTempBuf = alloca( iSamples * m_pStream->m_iBytesPerOutputSample );
|
||||||
MapSampleFormatFromInt16( (std::int16_t *) pBuf, pTempBuf, iSamples, m_pStream->m_DeviceSampleFormat );
|
MapSampleFormatFromInt16( (int16_t *) pBuf, pTempBuf, iSamples, m_pStream->m_DeviceSampleFormat );
|
||||||
pBuf = (std::int16_t *) pTempBuf;
|
pBuf = (int16_t *) pTempBuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy( pData, pBuf, iFrames * m_pStream->m_iDeviceOutputChannels * m_pStream->m_iBytesPerOutputSample );
|
memcpy( pData, pBuf, iFrames * m_pStream->m_iDeviceOutputChannels * m_pStream->m_iBytesPerOutputSample );
|
||||||
@@ -1236,7 +1236,7 @@ void RageSoundDriver_WDMKS::SetupDecodingThread()
|
|||||||
LOG->Warn( werr_ssprintf(GetLastError(), "Failed to set sound thread priority") );
|
LOG->Warn( werr_ssprintf(GetLastError(), "Failed to set sound thread priority") );
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t RageSoundDriver_WDMKS::GetPosition() const
|
int64_t RageSoundDriver_WDMKS::GetPosition() const
|
||||||
{
|
{
|
||||||
KSAUDIO_POSITION pos;
|
KSAUDIO_POSITION pos;
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public:
|
|||||||
~RageSoundDriver_WDMKS();
|
~RageSoundDriver_WDMKS();
|
||||||
RString Init();
|
RString Init();
|
||||||
|
|
||||||
std::int64_t GetPosition() const;
|
int64_t GetPosition() const;
|
||||||
float GetPlayLatency() const;
|
float GetPlayLatency() const;
|
||||||
int GetSampleRate() const;
|
int GetSampleRate() const;
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ bool RageSoundDriver_WaveOut::GetData()
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* Call the callback. */
|
/* Call the callback. */
|
||||||
this->Mix( (std::int16_t *) m_aBuffers[b].lpData, CHUNKSIZE_FRAMES, m_iLastCursorPos, GetPosition() );
|
this->Mix( (int16_t *) m_aBuffers[b].lpData, CHUNKSIZE_FRAMES, m_iLastCursorPos, GetPosition() );
|
||||||
|
|
||||||
MMRESULT ret = waveOutWrite( m_hWaveOut, &m_aBuffers[b], sizeof(m_aBuffers[b]) );
|
MMRESULT ret = waveOutWrite( m_hWaveOut, &m_aBuffers[b], sizeof(m_aBuffers[b]) );
|
||||||
if( ret != MMSYSERR_NOERROR )
|
if( ret != MMSYSERR_NOERROR )
|
||||||
@@ -99,7 +99,7 @@ void RageSoundDriver_WaveOut::SetupDecodingThread()
|
|||||||
LOG->Warn( werr_ssprintf(GetLastError(), "Failed to set sound thread priority") );
|
LOG->Warn( werr_ssprintf(GetLastError(), "Failed to set sound thread priority") );
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int64_t RageSoundDriver_WaveOut::GetPosition() const
|
int64_t RageSoundDriver_WaveOut::GetPosition() const
|
||||||
{
|
{
|
||||||
MMTIME tm;
|
MMTIME tm;
|
||||||
tm.wType = TIME_SAMPLES;
|
tm.wType = TIME_SAMPLES;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ public:
|
|||||||
RageSoundDriver_WaveOut();
|
RageSoundDriver_WaveOut();
|
||||||
~RageSoundDriver_WaveOut();
|
~RageSoundDriver_WaveOut();
|
||||||
RString Init();
|
RString Init();
|
||||||
std::int64_t GetPosition() const;
|
int64_t GetPosition() const;
|
||||||
float GetPlayLatency() const;
|
float GetPlayLatency() const;
|
||||||
int GetSampleRate() const { return m_iSampleRate; }
|
int GetSampleRate() const { return m_iSampleRate; }
|
||||||
static const int NUM_BUFFERS = 32;
|
static const int NUM_BUFFERS = 32;
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ static const char *itoa(unsigned n)
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::intptr_t xtoi( const char *hex )
|
static intptr_t xtoi( const char *hex )
|
||||||
{
|
{
|
||||||
std::intptr_t ret = 0;
|
intptr_t ret = 0;
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
int val = -1;
|
int val = -1;
|
||||||
@@ -502,7 +502,7 @@ static bool PointsToValidCall( vm_address_t start, const void *ptr )
|
|||||||
|
|
||||||
/* We're reading buf backwards, between buf[-7] and buf[-1]. Find out how
|
/* We're reading buf backwards, between buf[-7] and buf[-1]. Find out how
|
||||||
* far we can read. */
|
* far we can read. */
|
||||||
const int len = std::min<int>(std::intptr_t(ptr) - start, 7);
|
const int len = std::min<int>(intptr_t(ptr) - start, 7);
|
||||||
|
|
||||||
// Permissible CALL sequences that we care about:
|
// Permissible CALL sequences that we care about:
|
||||||
//
|
//
|
||||||
@@ -639,7 +639,7 @@ void GetBacktrace( const void **buf, size_t size, const BacktraceContext *ctx )
|
|||||||
buf[i++] = p;
|
buf[i++] = p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
frame = (Frame *)(std::intptr_t(frame)+4);
|
frame = (Frame *)(intptr_t(frame)+4);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Valid.
|
// Valid.
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ RString BacktraceNames::Format() const
|
|||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
void BacktraceNames::FromAddr( void * const p )
|
void BacktraceNames::FromAddr( void * const p )
|
||||||
{
|
{
|
||||||
Address = (std::intptr_t) p;
|
Address = (intptr_t) p;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When calling a function that doesn't return, gcc will truncate a function.
|
* When calling a function that doesn't return, gcc will truncate a function.
|
||||||
@@ -226,7 +226,7 @@ static const char *osx_find_link_edit( const struct mach_header *header )
|
|||||||
|
|
||||||
void BacktraceNames::FromAddr( void * const p )
|
void BacktraceNames::FromAddr( void * const p )
|
||||||
{
|
{
|
||||||
Address = (std::intptr_t) p;
|
Address = (intptr_t) p;
|
||||||
|
|
||||||
/* Find the image with the given pointer. */
|
/* Find the image with the given pointer. */
|
||||||
int index = osx_find_image( p );
|
int index = osx_find_image( p );
|
||||||
@@ -298,7 +298,7 @@ void BacktraceNames::FromAddr( void * const p )
|
|||||||
#include <execinfo.h>
|
#include <execinfo.h>
|
||||||
void BacktraceNames::FromAddr( void * const p )
|
void BacktraceNames::FromAddr( void * const p )
|
||||||
{
|
{
|
||||||
Address = (std::intptr_t) p;
|
Address = (intptr_t) p;
|
||||||
|
|
||||||
char **foo = backtrace_symbols(&p, 1);
|
char **foo = backtrace_symbols(&p, 1);
|
||||||
if( foo == nullptr )
|
if( foo == nullptr )
|
||||||
@@ -346,7 +346,7 @@ void BacktraceNames::FromString( RString s )
|
|||||||
#warning Undefined BACKTRACE_LOOKUP_METHOD_*
|
#warning Undefined BACKTRACE_LOOKUP_METHOD_*
|
||||||
void BacktraceNames::FromAddr( void * const p )
|
void BacktraceNames::FromAddr( void * const p )
|
||||||
{
|
{
|
||||||
Address = std::intptr_t(p);
|
Address = intptr_t(p);
|
||||||
Offset = 0;
|
Offset = 0;
|
||||||
Symbol = "";
|
Symbol = "";
|
||||||
File = "";
|
File = "";
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
struct BacktraceNames
|
struct BacktraceNames
|
||||||
{
|
{
|
||||||
RString Symbol, File;
|
RString Symbol, File;
|
||||||
std::intptr_t Address;
|
intptr_t Address;
|
||||||
int Offset;
|
int Offset;
|
||||||
void FromAddr( void * const p );
|
void FromAddr( void * const p );
|
||||||
void FromString( RString str );
|
void FromString( RString str );
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ namespace VDDebugInfo
|
|||||||
return heap;
|
return heap;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::intptr_t VDDebugInfoLookupRVA( const Context *pctx, uintptr_t rva, char *buf, int buflen )
|
intptr_t VDDebugInfoLookupRVA( const Context *pctx, uintptr_t rva, char *buf, int buflen )
|
||||||
{
|
{
|
||||||
if( !PointerIsInAnySegment(pctx, rva) )
|
if( !PointerIsInAnySegment(pctx, rva) )
|
||||||
return -1;
|
return -1;
|
||||||
@@ -201,7 +201,7 @@ namespace VDDebugInfo
|
|||||||
// Linearly unpack RVA deltas and find lower_bound
|
// Linearly unpack RVA deltas and find lower_bound
|
||||||
rva -= pctx->nFirstRVA;
|
rva -= pctx->nFirstRVA;
|
||||||
|
|
||||||
if( static_cast<std::intptr_t>(rva) < 0 )
|
if( static_cast<intptr_t>(rva) < 0 )
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
while( pr < pr_limit )
|
while( pr < pr_limit )
|
||||||
@@ -218,7 +218,7 @@ namespace VDDebugInfo
|
|||||||
|
|
||||||
rva -= diff;
|
rva -= diff;
|
||||||
|
|
||||||
if (static_cast<std::intptr_t>(rva) < 0) {
|
if (static_cast<intptr_t>(rva) < 0) {
|
||||||
rva += diff;
|
rva += diff;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -237,7 +237,7 @@ namespace VDDebugInfo
|
|||||||
strncpy( buf, fn_name, buflen );
|
strncpy( buf, fn_name, buflen );
|
||||||
buf[buflen-1] = 0;
|
buf[buflen-1] = 0;
|
||||||
|
|
||||||
return static_cast<std::intptr_t>(rva);
|
return static_cast<intptr_t>(rva);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -370,7 +370,7 @@ namespace SymbolLookup
|
|||||||
VirtualQueryEx( g_hParent, ptr, &meminfo, sizeof meminfo );
|
VirtualQueryEx( g_hParent, ptr, &meminfo, sizeof meminfo );
|
||||||
|
|
||||||
char tmp[512];
|
char tmp[512];
|
||||||
std::intptr_t iAddress = VDDebugInfo::VDDebugInfoLookupRVA(pctx, reinterpret_cast<uintptr_t>(ptr), tmp, sizeof(tmp));
|
intptr_t iAddress = VDDebugInfo::VDDebugInfoLookupRVA(pctx, reinterpret_cast<uintptr_t>(ptr), tmp, sizeof(tmp));
|
||||||
if( iAddress >= 0 )
|
if( iAddress >= 0 )
|
||||||
{
|
{
|
||||||
wsprintf( buf, "%" ADDRESS_ZEROS "Ix: %s [%" ADDRESS_ZEROS "Ix+%Ix+%Ix]", reinterpret_cast<uintptr_t>(ptr), Demangle(tmp),
|
wsprintf( buf, "%" ADDRESS_ZEROS "Ix: %s [%" ADDRESS_ZEROS "Ix+%Ix+%Ix]", reinterpret_cast<uintptr_t>(ptr), Demangle(tmp),
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ static LONG GetRegKey( HKEY key, RString subkey, LPTSTR retdata )
|
|||||||
bool GotoURL( RString sUrl )
|
bool GotoURL( RString sUrl )
|
||||||
{
|
{
|
||||||
// First try ShellExecute()
|
// First try ShellExecute()
|
||||||
std::intptr_t iRet = reinterpret_cast<std::intptr_t>(ShellExecute( nullptr, "open", sUrl, nullptr, nullptr, SW_SHOWDEFAULT ));
|
intptr_t iRet = reinterpret_cast<intptr_t>(ShellExecute( nullptr, "open", sUrl, nullptr, nullptr, SW_SHOWDEFAULT ));
|
||||||
|
|
||||||
// If it failed, get the .htm regkey and lookup the program
|
// If it failed, get the .htm regkey and lookup the program
|
||||||
if( iRet > 32 )
|
if( iRet > 32 )
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ void dump_bin( const char *fn, const char *buf, int size )
|
|||||||
close( fd );
|
close( fd );
|
||||||
}
|
}
|
||||||
|
|
||||||
void dump( const char *fn, const std::int16_t *buf, int samples )
|
void dump( const char *fn, const int16_t *buf, int samples )
|
||||||
{
|
{
|
||||||
FILE *f = fopen( fn, "w+");
|
FILE *f = fopen( fn, "w+");
|
||||||
ASSERT( f );
|
ASSERT( f );
|
||||||
@@ -72,7 +72,7 @@ void dump( const char *buf, int size )
|
|||||||
printf("\n\n");
|
printf("\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void dump( const std::int16_t *buf, int samples )
|
void dump( const int16_t *buf, int samples )
|
||||||
{
|
{
|
||||||
for( int i = 0; i < samples; ++i )
|
for( int i = 0; i < samples; ++i )
|
||||||
printf( "0x%04hx,", buf[i] );
|
printf( "0x%04hx,", buf[i] );
|
||||||
@@ -86,11 +86,11 @@ void dump( const float *buf, int samples )
|
|||||||
printf( "\n" );
|
printf( "\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool compare( const float *m1, const std::int16_t *m2, int iSamples )
|
bool compare( const float *m1, const int16_t *m2, int iSamples )
|
||||||
{
|
{
|
||||||
for( int i = 0; i < iSamples; ++i )
|
for( int i = 0; i < iSamples; ++i )
|
||||||
{
|
{
|
||||||
std::int16_t iSample1 = std::lrint(m1[i]*32768);
|
int16_t iSample1 = std::lrint(m1[i]*32768);
|
||||||
if( iSample1 != m2[i] )
|
if( iSample1 != m2[i] )
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -99,7 +99,7 @@ bool compare( const float *m1, const std::int16_t *m2, int iSamples )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void compare_buffers( const std::int16_t *expect, const std::int16_t *got, int frames,
|
void compare_buffers( const int16_t *expect, const int16_t *got, int frames,
|
||||||
int &NumInaccurateSamplesAtStart,
|
int &NumInaccurateSamplesAtStart,
|
||||||
int &NumInaccurateSamples )
|
int &NumInaccurateSamples )
|
||||||
{
|
{
|
||||||
@@ -125,7 +125,7 @@ void compare_buffers( const std::int16_t *expect, const std::int16_t *got, int f
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool compare_buffers( const std::int16_t *expect, const std::int16_t *got, int frames, int channels )
|
bool compare_buffers( const int16_t *expect, const int16_t *got, int frames, int channels )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Compare each channel separately. Try to figure out if
|
* Compare each channel separately. Try to figure out if
|
||||||
@@ -165,8 +165,8 @@ bool test_read( RageSoundReader *snd, float *expected_data, int frames )
|
|||||||
int got = snd->Read( buf, frames );
|
int got = snd->Read( buf, frames );
|
||||||
ASSERT( got == frames );
|
ASSERT( got == frames );
|
||||||
|
|
||||||
//compare_buffers( (const std::int16_t *) expected_data,
|
//compare_buffers( (const int16_t *) expected_data,
|
||||||
// (const std::int16_t *) buf,
|
// (const int16_t *) buf,
|
||||||
// bytes/2,
|
// bytes/2,
|
||||||
// 2 );
|
// 2 );
|
||||||
|
|
||||||
@@ -258,7 +258,7 @@ const int TestDataSize = 2;
|
|||||||
/* Find "haystack" in "needle". Start looking at "expect" and move outward; find
|
/* Find "haystack" in "needle". Start looking at "expect" and move outward; find
|
||||||
* the closest. */
|
* the closest. */
|
||||||
void *xmemsearch( const float *haystack, size_t iHaystackSamples,
|
void *xmemsearch( const float *haystack, size_t iHaystackSamples,
|
||||||
const std::int16_t *needle, size_t iNeedleSamples,
|
const int16_t *needle, size_t iNeedleSamples,
|
||||||
int expect )
|
int expect )
|
||||||
{
|
{
|
||||||
if( !iNeedleSamples )
|
if( !iNeedleSamples )
|
||||||
@@ -301,10 +301,10 @@ struct TestFile
|
|||||||
int SilentFrames;
|
int SilentFrames;
|
||||||
|
|
||||||
/* The first two frames (four samples): */
|
/* The first two frames (four samples): */
|
||||||
std::int16_t initial[TestDataSize*2];
|
int16_t initial[TestDataSize*2];
|
||||||
|
|
||||||
/* Frames of data half a second in: */
|
/* Frames of data half a second in: */
|
||||||
std::int16_t later[TestDataSize*2];
|
int16_t later[TestDataSize*2];
|
||||||
};
|
};
|
||||||
const int channels = 2;
|
const int channels = 2;
|
||||||
|
|
||||||
@@ -378,7 +378,7 @@ bool RunTests( RageSoundReader *snd, const TestFile &tf )
|
|||||||
dump( LaterData, 16 );
|
dump( LaterData, 16 );
|
||||||
|
|
||||||
/* See if we can find the half second data. */
|
/* See if we can find the half second data. */
|
||||||
float *p = (float *) xmemsearch( sdata, one_second_bytes, tf.later, sizeof(tf.later), LaterOffsetSamples*sizeof(std::int16_t) );
|
float *p = (float *) xmemsearch( sdata, one_second_bytes, tf.later, sizeof(tf.later), LaterOffsetSamples*sizeof(int16_t) );
|
||||||
if( p )
|
if( p )
|
||||||
{
|
{
|
||||||
int SamplesOff = p-sdata;
|
int SamplesOff = p-sdata;
|
||||||
@@ -387,7 +387,7 @@ bool RunTests( RageSoundReader *snd, const TestFile &tf )
|
|||||||
FramesOff, LaterOffsetFrames, FramesOff-LaterOffsetFrames );
|
FramesOff, LaterOffsetFrames, FramesOff-LaterOffsetFrames );
|
||||||
}
|
}
|
||||||
// else
|
// else
|
||||||
// dump( "foo", sdata, one_second/sizeof(std::int16_t) );
|
// dump( "foo", sdata, one_second/sizeof(int16_t) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user