chore(fmod): add files from Chensne/DragonNest
This commit is contained in:
commit
50fb3c6b1c
544 changed files with 315778 additions and 0 deletions
256
win32/src/fmod_sample_dsound.cpp
Executable file
256
win32/src/fmod_sample_dsound.cpp
Executable file
|
|
@ -0,0 +1,256 @@
|
|||
#include "fmod_settings.h"
|
||||
|
||||
#ifdef FMOD_SUPPORT_DSOUND
|
||||
|
||||
#include "fmod.h"
|
||||
#include "fmod_output_dsound.h"
|
||||
#include "fmod_sample_dsound.h"
|
||||
#include "fmod_systemi.h"
|
||||
|
||||
namespace FMOD
|
||||
{
|
||||
|
||||
|
||||
/*
|
||||
[
|
||||
[DESCRIPTION]
|
||||
|
||||
[PARAMETERS]
|
||||
|
||||
[RETURN_VALUE]
|
||||
FMOD_OK
|
||||
|
||||
[REMARKS]
|
||||
|
||||
[PLATFORMS]
|
||||
Win32, Win64
|
||||
|
||||
[SEE_ALSO]
|
||||
]
|
||||
*/
|
||||
SampleDSound::SampleDSound()
|
||||
{
|
||||
mBuffer = 0;
|
||||
mBuffer3D = 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
[
|
||||
[DESCRIPTION]
|
||||
|
||||
[PARAMETERS]
|
||||
|
||||
[RETURN_VALUE]
|
||||
FMOD_OK
|
||||
|
||||
[REMARKS]
|
||||
|
||||
[PLATFORMS]
|
||||
Win32, Win64
|
||||
|
||||
[SEE_ALSO]
|
||||
]
|
||||
*/
|
||||
FMOD_RESULT SampleDSound::release(bool freethis)
|
||||
{
|
||||
FMOD_RESULT result;
|
||||
|
||||
if (!mSystem)
|
||||
{
|
||||
return FMOD_ERR_UNINITIALIZED;
|
||||
}
|
||||
|
||||
if (mFlags & FMOD_SOUND_FLAG_PRELOADEDFSB)
|
||||
{
|
||||
return FMOD_ERR_PRELOADED;
|
||||
}
|
||||
|
||||
if (mFlags & FMOD_SOUND_FLAG_PROGRAMMERSOUND)
|
||||
{
|
||||
return FMOD_ERR_PROGRAMMERSOUND;
|
||||
}
|
||||
|
||||
while (mOpenState != FMOD_OPENSTATE_READY && mOpenState != FMOD_OPENSTATE_ERROR)
|
||||
{
|
||||
FMOD_OS_Time_Sleep(2);
|
||||
}
|
||||
|
||||
result = mSystem->stopSound(this);
|
||||
if (result != FMOD_OK)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
Free sample's secondary buffer
|
||||
*/
|
||||
if (mBuffer)
|
||||
{
|
||||
if (mOutput)
|
||||
{
|
||||
mOutput->mBufferMemoryCurrent -= mLengthBytes;
|
||||
}
|
||||
|
||||
mBuffer->Release();
|
||||
mBuffer = 0;
|
||||
}
|
||||
|
||||
if(mBuffer3D)
|
||||
{
|
||||
mBuffer3D->Release();
|
||||
mBuffer3D = 0;
|
||||
}
|
||||
|
||||
return Sample::release(freethis);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
[
|
||||
[DESCRIPTION]
|
||||
|
||||
[PARAMETERS]
|
||||
|
||||
[RETURN_VALUE]
|
||||
FMOD_OK
|
||||
|
||||
[REMARKS]
|
||||
|
||||
[PLATFORMS]
|
||||
Win32, Win64
|
||||
|
||||
[SEE_ALSO]
|
||||
]
|
||||
*/
|
||||
FMOD_RESULT SampleDSound::lockInternal(unsigned int offset, unsigned int length, void **ptr1, void **ptr2, unsigned int *len1, unsigned int *len2)
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
if (!mBuffer)
|
||||
{
|
||||
return FMOD_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
hr = mBuffer->Lock(offset, length, ptr1, (DWORD *)len1, ptr2, (DWORD *)len2, 0); /* not DSBLOCK_FROMWRITECURSOR OR DSBLOCK_ENTIREBUFFER */
|
||||
if (hr == E_INVALIDARG)
|
||||
{
|
||||
return FMOD_ERR_INVALID_PARAM;
|
||||
}
|
||||
else if (hr == DSBSTATUS_BUFFERLOST)
|
||||
{
|
||||
DWORD locflags = 0;
|
||||
|
||||
if (!(mMode & FMOD_UNIQUE))
|
||||
{
|
||||
if (mLOCSoftware)
|
||||
{
|
||||
locflags |= DSBPLAY_LOCSOFTWARE;
|
||||
}
|
||||
else
|
||||
{
|
||||
locflags |= DSBPLAY_LOCHARDWARE;
|
||||
}
|
||||
}
|
||||
mBuffer->Restore();
|
||||
mBuffer->Play(0, 0, locflags | DSBPLAY_LOOPING);
|
||||
}
|
||||
else if (hr != DS_OK)
|
||||
{
|
||||
return FMOD_ERR_OUTPUT_DRIVERCALL;
|
||||
|
||||
}
|
||||
return FMOD_OK;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
[
|
||||
[DESCRIPTION]
|
||||
|
||||
[PARAMETERS]
|
||||
|
||||
[RETURN_VALUE]
|
||||
FMOD_OK
|
||||
|
||||
[REMARKS]
|
||||
|
||||
[PLATFORMS]
|
||||
Win32, Win64
|
||||
|
||||
[SEE_ALSO]
|
||||
]
|
||||
*/
|
||||
FMOD_RESULT SampleDSound::unlockInternal(void *ptr1, void *ptr2, unsigned int len1, unsigned int len2)
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
if (!mBuffer)
|
||||
{
|
||||
return FMOD_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (mFormat == FMOD_SOUND_FORMAT_PCM8)
|
||||
{
|
||||
if (ptr1 && len1)
|
||||
{
|
||||
unsigned int count;
|
||||
unsigned char *destptr = (unsigned char *)ptr1;
|
||||
|
||||
for (count = 0; count < len1; count++)
|
||||
{
|
||||
*destptr++ ^= 128;
|
||||
}
|
||||
}
|
||||
if (ptr2 && len2)
|
||||
{
|
||||
unsigned int count;
|
||||
unsigned char *destptr = (unsigned char *)ptr2;
|
||||
|
||||
for (count = 0; count < len2; count++)
|
||||
{
|
||||
*destptr++ ^= 128;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hr = mBuffer->Unlock(ptr1, len1, ptr2, len2);
|
||||
if (hr != DS_OK)
|
||||
{
|
||||
return FMOD_ERR_OUTPUT_DRIVERCALL;
|
||||
}
|
||||
|
||||
return FMOD_OK;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
[
|
||||
[DESCRIPTION]
|
||||
|
||||
[PARAMETERS]
|
||||
|
||||
[RETURN_VALUE]
|
||||
|
||||
[REMARKS]
|
||||
|
||||
[PLATFORMS]
|
||||
|
||||
[SEE_ALSO]
|
||||
]
|
||||
*/
|
||||
|
||||
#ifdef FMOD_SUPPORT_MEMORYTRACKER
|
||||
|
||||
FMOD_RESULT SampleDSound::getMemoryUsedImpl(MemoryTracker *tracker)
|
||||
{
|
||||
tracker->add(false, FMOD_MEMBITS_SOUND, sizeof(SampleDSound) - sizeof(Sample)); // only the SampleDSound members...
|
||||
|
||||
return Sample::getMemoryUsedImpl(tracker); // all the base class members
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
#endif /* FMOD_SUPPORT_DSOUND */
|
||||
Loading…
Add table
Add a link
Reference in a new issue