Add thread entry and exit callbacks
This commit is contained in:
parent
52f2a10db6
commit
a17e4b44c6
33
src/raudio.c
33
src/raudio.c
|
|
@ -175,6 +175,12 @@ typedef struct tagBITMAPINFOHEADER {
|
||||||
// Threading model: Default: [0] COINIT_MULTITHREADED: COM calls objects on any thread (free threading)
|
// Threading model: Default: [0] COINIT_MULTITHREADED: COM calls objects on any thread (free threading)
|
||||||
#define MA_COINIT_VALUE 2 // [2] COINIT_APARTMENTTHREADED: Each object has its own thread (apartment model)
|
#define MA_COINIT_VALUE 2 // [2] COINIT_APARTMENTTHREADED: Each object has its own thread (apartment model)
|
||||||
|
|
||||||
|
static void CallAudioThreadEntryCallback(void);
|
||||||
|
static void CallAudioThreadExitCallback(void);
|
||||||
|
|
||||||
|
#define MA_ON_THREAD_ENTRY CallAudioThreadEntryCallback();
|
||||||
|
#define MA_ON_THREAD_EXIT CallAudioThreadExitCallback();
|
||||||
|
|
||||||
#define MINIAUDIO_IMPLEMENTATION
|
#define MINIAUDIO_IMPLEMENTATION
|
||||||
//#define MA_DEBUG_OUTPUT
|
//#define MA_DEBUG_OUTPUT
|
||||||
#include "external/miniaudio.h" // Audio device initialization and management
|
#include "external/miniaudio.h" // Audio device initialization and management
|
||||||
|
|
@ -391,6 +397,8 @@ typedef struct AudioData {
|
||||||
int defaultSize; // Default audio buffer size for audio streams
|
int defaultSize; // Default audio buffer size for audio streams
|
||||||
} Buffer;
|
} Buffer;
|
||||||
rAudioProcessor *mixedProcessor;
|
rAudioProcessor *mixedProcessor;
|
||||||
|
AudioThreadEntryCallback threadEntryCallback;
|
||||||
|
AudioThreadExitCallback threadExitCallback;
|
||||||
} AudioData;
|
} AudioData;
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
@ -403,7 +411,9 @@ static AudioData AUDIO = { // Global AUDIO context
|
||||||
// standard double-buffering system, a 4096 samples buffer has been chosen, it should be enough
|
// standard double-buffering system, a 4096 samples buffer has been chosen, it should be enough
|
||||||
// In case of music-stalls, just increase this number
|
// In case of music-stalls, just increase this number
|
||||||
.Buffer.defaultSize = 0,
|
.Buffer.defaultSize = 0,
|
||||||
.mixedProcessor = NULL
|
.mixedProcessor = NULL,
|
||||||
|
.threadEntryCallback = NULL,
|
||||||
|
.threadExitCallback = NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
@ -2327,6 +2337,14 @@ void DetachAudioMixedProcessor(AudioCallback process)
|
||||||
ma_mutex_unlock(&AUDIO.System.lock);
|
ma_mutex_unlock(&AUDIO.System.lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetAudioThreadEntryCallback(AudioThreadEntryCallback callback) {
|
||||||
|
AUDIO.threadEntryCallback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetAudioThreadExitCallback(AudioThreadExitCallback callback) {
|
||||||
|
AUDIO.threadExitCallback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module specific Functions Definition
|
// Module specific Functions Definition
|
||||||
|
|
@ -2698,6 +2716,19 @@ static void UpdateAudioStreamInLockedState(AudioStream stream, const void *data,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void CallAudioThreadEntryCallback(void) {
|
||||||
|
if (AUDIO.threadEntryCallback) {
|
||||||
|
AUDIO.threadEntryCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CallAudioThreadExitCallback(void) {
|
||||||
|
if (AUDIO.threadExitCallback) {
|
||||||
|
AUDIO.threadExitCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Some required functions for audio standalone module version
|
// Some required functions for audio standalone module version
|
||||||
#if defined(RAUDIO_STANDALONE)
|
#if defined(RAUDIO_STANDALONE)
|
||||||
// Check file extension
|
// Check file extension
|
||||||
|
|
|
||||||
|
|
@ -1596,6 +1596,8 @@ RLAPI RayCollision GetRayCollisionQuad(Ray ray, Vector3 p1, Vector3 p2, Vector3
|
||||||
// Audio Loading and Playing Functions (Module: audio)
|
// Audio Loading and Playing Functions (Module: audio)
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
typedef void (*AudioCallback)(void *bufferData, unsigned int frames);
|
typedef void (*AudioCallback)(void *bufferData, unsigned int frames);
|
||||||
|
typedef void (*AudioThreadEntryCallback)(void);
|
||||||
|
typedef void (*AudioThreadExitCallback)(void);
|
||||||
|
|
||||||
// Audio device management functions
|
// Audio device management functions
|
||||||
RLAPI void InitAudioDevice(void); // Initialize audio device and context
|
RLAPI void InitAudioDevice(void); // Initialize audio device and context
|
||||||
|
|
@ -1675,6 +1677,9 @@ RLAPI void DetachAudioStreamProcessor(AudioStream stream, AudioCallback processo
|
||||||
RLAPI void AttachAudioMixedProcessor(AudioCallback processor); // Attach audio stream processor to the entire audio pipeline, receives the samples as 'float'
|
RLAPI void AttachAudioMixedProcessor(AudioCallback processor); // Attach audio stream processor to the entire audio pipeline, receives the samples as 'float'
|
||||||
RLAPI void DetachAudioMixedProcessor(AudioCallback processor); // Detach audio stream processor from the entire audio pipeline
|
RLAPI void DetachAudioMixedProcessor(AudioCallback processor); // Detach audio stream processor from the entire audio pipeline
|
||||||
|
|
||||||
|
RLAPI void SetAudioThreadEntryCallback(AudioThreadEntryCallback callback); // Audio thread creation callback (usually should be called before audio device initialization, can be NULL)
|
||||||
|
RLAPI void SetAudioThreadExitCallback(AudioThreadExitCallback callback); // Audio thread destruction callback (can be NULL)
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user