2014-08-03 19:38:53 +06:00
|
|
|
#include "StdAfxSA.h"
|
|
|
|
#include "AudioHardwareSA.h"
|
2014-06-10 22:31:19 +06:00
|
|
|
|
2014-08-23 04:07:08 +06:00
|
|
|
bool CAEDataStream::m_bUseNewStruct;
|
|
|
|
|
2014-08-22 04:10:23 +06:00
|
|
|
static void* CAEDataStream__Initialise = AddressByVersion<void*>(0x4DC2B0, 0x4DC7A0, 0x4E7550);
|
2014-08-03 19:38:53 +06:00
|
|
|
WRAPPER bool CAEDataStream::Initialise() { VARJMP(CAEDataStream__Initialise); }
|
2014-06-10 22:31:19 +06:00
|
|
|
|
2024-10-24 00:52:25 +05:00
|
|
|
// Work around libflac linking issues with older MSVC
|
|
|
|
#if _MSC_VER < 1930
|
|
|
|
|
|
|
|
extern "C" unsigned long __declspec(naked) _dtoul3_legacy(const double x) {
|
|
|
|
_asm
|
|
|
|
{
|
|
|
|
cvtsd2si eax, xmm0
|
|
|
|
xor edx, edx
|
|
|
|
retn
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
extern "C" __declspec(naked) float _ltof3(long x) {
|
|
|
|
_asm
|
|
|
|
{
|
|
|
|
cvtsi2ss xmm0, ecx
|
|
|
|
retn
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
2017-03-02 05:35:13 +05:00
|
|
|
DWORD CAEDataStreamOld::Seek(LONG nToSeek, DWORD nPoint)
|
2014-08-23 04:07:08 +06:00
|
|
|
{
|
2017-03-02 05:35:13 +05:00
|
|
|
LARGE_INTEGER filePosition;
|
2014-08-23 04:07:08 +06:00
|
|
|
switch ( nPoint )
|
|
|
|
{
|
|
|
|
case FILE_BEGIN:
|
2017-03-02 05:35:13 +05:00
|
|
|
filePosition.QuadPart = nToSeek + dwStartPosition;
|
2014-08-23 04:07:08 +06:00
|
|
|
break;
|
|
|
|
case FILE_END:
|
|
|
|
nPoint = FILE_BEGIN;
|
2017-03-02 05:35:13 +05:00
|
|
|
filePosition.QuadPart = dwStartPosition + dwLength - nToSeek;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
filePosition.QuadPart = nToSeek;
|
2014-08-23 04:07:08 +06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2017-03-02 05:35:13 +05:00
|
|
|
SetFilePointerEx(hHandle, filePosition, &filePosition, nPoint);
|
|
|
|
dwCurrentPosition = filePosition.LowPart;
|
2014-08-23 04:07:08 +06:00
|
|
|
|
|
|
|
return dwCurrentPosition - dwStartPosition;
|
|
|
|
}
|
|
|
|
|
2017-03-02 05:35:13 +05:00
|
|
|
DWORD CAEDataStreamOld::FillBuffer(void* pBuf, DWORD nLen)
|
2014-08-23 04:07:08 +06:00
|
|
|
{
|
|
|
|
ReadFile(hHandle, pBuf, nLen, &nLen, nullptr);
|
|
|
|
dwCurrentPosition += nLen;
|
|
|
|
return nLen;
|
|
|
|
}
|
|
|
|
|
2017-03-02 05:35:13 +05:00
|
|
|
DWORD CAEDataStreamNew::Seek(LONG nToSeek, DWORD nPoint)
|
2014-06-14 06:15:14 +06:00
|
|
|
{
|
2017-03-02 05:35:13 +05:00
|
|
|
LARGE_INTEGER filePosition;
|
2014-06-14 06:15:14 +06:00
|
|
|
switch ( nPoint )
|
|
|
|
{
|
|
|
|
case FILE_BEGIN:
|
2017-03-02 05:35:13 +05:00
|
|
|
filePosition.QuadPart = nToSeek + dwStartPosition;
|
2014-06-14 06:15:14 +06:00
|
|
|
break;
|
|
|
|
case FILE_END:
|
|
|
|
nPoint = FILE_BEGIN;
|
2017-03-02 05:35:13 +05:00
|
|
|
filePosition.QuadPart = dwStartPosition + dwLength - nToSeek;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
filePosition.QuadPart = nToSeek;
|
2014-06-14 06:15:14 +06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2017-03-02 05:35:13 +05:00
|
|
|
SetFilePointerEx(hHandle, filePosition, &filePosition, nPoint);
|
|
|
|
dwCurrentPosition = filePosition.LowPart;
|
2014-06-14 06:15:14 +06:00
|
|
|
|
|
|
|
return dwCurrentPosition - dwStartPosition;
|
|
|
|
}
|
|
|
|
|
2017-03-02 05:35:13 +05:00
|
|
|
DWORD CAEDataStreamNew::FillBuffer(void* pBuf, DWORD nLen)
|
2014-06-14 06:15:14 +06:00
|
|
|
{
|
|
|
|
ReadFile(hHandle, pBuf, nLen, &nLen, nullptr);
|
|
|
|
dwCurrentPosition += nLen;
|
|
|
|
return nLen;
|
|
|
|
}
|
|
|
|
|
|
|
|
CAEStreamingDecoder::~CAEStreamingDecoder()
|
|
|
|
{
|
2014-08-23 04:07:08 +06:00
|
|
|
if ( CAEDataStream::IsNew() )
|
|
|
|
delete reinterpret_cast<CAEDataStreamNew*>(pStream);
|
|
|
|
else
|
|
|
|
delete reinterpret_cast<CAEDataStreamOld*>(pStream);
|
2014-06-10 22:31:19 +06:00
|
|
|
}
|