diff options
author | Chris Robinson <[email protected]> | 2010-07-24 19:14:32 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2010-07-24 19:14:32 -0700 |
commit | 40dd1fb85364e3a9e278ffa7a034638e7718770b (patch) | |
tree | b4da0f38e57498b1c2e4b44986814f7e58d92ef6 | |
parent | ab77fc14d53993e90403dd3474725a6202f623c4 (diff) |
Add a backend callback to get the device time
The method should monotonically count the number of nanoseconds the device has
active contexts
-rw-r--r-- | Alc/ALc.c | 2 | ||||
-rw-r--r-- | Alc/alsa.c | 8 | ||||
-rw-r--r-- | Alc/dsound.c | 8 | ||||
-rw-r--r-- | Alc/null.c | 8 | ||||
-rw-r--r-- | Alc/oss.c | 8 | ||||
-rw-r--r-- | Alc/portaudio.c | 8 | ||||
-rw-r--r-- | Alc/pulseaudio.c | 9 | ||||
-rw-r--r-- | Alc/solaris.c | 8 | ||||
-rw-r--r-- | Alc/wave.c | 8 | ||||
-rw-r--r-- | Alc/winmm.c | 8 | ||||
-rw-r--r-- | OpenAL32/Include/alMain.h | 3 |
11 files changed, 68 insertions, 10 deletions
@@ -39,7 +39,7 @@ #include "alu.h" -#define EmptyFuncs { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } +#define EmptyFuncs { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } typedef struct BackendInfo { const char *name; void (*Init)(BackendFuncs*); @@ -1002,6 +1002,11 @@ static void alsa_capture_samples(ALCdevice *Device, ALCvoid *Buffer, ALCuint Sam alcSetError(Device, ALC_INVALID_VALUE); } +static ALuint64 alsa_get_time(ALCdevice *Device) +{ + return Device->SamplesPlayed * 1000000000 / Device->Frequency; +} + BackendFuncs alsa_funcs = { alsa_open_playback, @@ -1013,7 +1018,8 @@ BackendFuncs alsa_funcs = { alsa_start_capture, alsa_stop_capture, alsa_capture_samples, - alsa_available_samples + alsa_available_samples, + alsa_get_time }; void alc_alsa_init(BackendFuncs *func_list) diff --git a/Alc/dsound.c b/Alc/dsound.c index 3365f5ef..f636287f 100644 --- a/Alc/dsound.c +++ b/Alc/dsound.c @@ -538,6 +538,11 @@ static ALCuint DSoundAvailableSamples(ALCdevice *pDevice) return 0; } +static ALuint64 DSoundGetTime(ALCdevice *Device) +{ + return Device->SamplesPlayed * 1000000000 / Device->Frequency; +} + BackendFuncs DSoundFuncs = { DSoundOpenPlayback, @@ -549,7 +554,8 @@ BackendFuncs DSoundFuncs = { DSoundStartCapture, DSoundStopCapture, DSoundCaptureSamples, - DSoundAvailableSamples + DSoundAvailableSamples, + DSoundGetTime }; @@ -144,6 +144,11 @@ static ALCboolean null_open_capture(ALCdevice *device, const ALCchar *deviceName return ALC_FALSE; } +static ALuint64 null_get_time(ALCdevice *Device) +{ + return Device->SamplesPlayed * 1000000000 / Device->Frequency; +} + BackendFuncs null_funcs = { null_open_playback, @@ -155,7 +160,8 @@ BackendFuncs null_funcs = { NULL, NULL, NULL, - NULL + NULL, + null_get_time }; void alc_null_init(BackendFuncs *func_list) @@ -465,6 +465,11 @@ static ALCuint oss_available_samples(ALCdevice *pDevice) return RingBufferSize(data->ring); } +static ALuint64 oss_get_time(ALCdevice *Device) +{ + return Device->SamplesPlayed * 1000000000 / Device->Frequency; +} + BackendFuncs oss_funcs = { oss_open_playback, @@ -476,7 +481,8 @@ BackendFuncs oss_funcs = { oss_start_capture, oss_stop_capture, oss_capture_samples, - oss_available_samples + oss_available_samples, + oss_get_time }; void alc_oss_init(BackendFuncs *func_list) diff --git a/Alc/portaudio.c b/Alc/portaudio.c index 2b8e0fa4..94eca19e 100644 --- a/Alc/portaudio.c +++ b/Alc/portaudio.c @@ -392,6 +392,11 @@ static ALCuint pa_available_samples(ALCdevice *device) return RingBufferSize(data->ring); } +static ALuint64 pa_get_time(ALCdevice *Device) +{ + return Device->SamplesPlayed * 1000000000 / Device->Frequency; +} + static const BackendFuncs pa_funcs = { pa_open_playback, @@ -403,7 +408,8 @@ static const BackendFuncs pa_funcs = { pa_start_capture, pa_stop_capture, pa_capture_samples, - pa_available_samples + pa_available_samples, + pa_get_time }; void alc_pa_init(BackendFuncs *func_list) diff --git a/Alc/pulseaudio.c b/Alc/pulseaudio.c index 2b68f166..2769fcd9 100644 --- a/Alc/pulseaudio.c +++ b/Alc/pulseaudio.c @@ -1204,6 +1204,12 @@ static void pulse_capture_samples(ALCdevice *device, ALCvoid *buffer, ALCuint sa alcSetError(device, ALC_INVALID_VALUE); } //}}} +static ALuint64 pulse_get_time(ALCdevice *Device) //{{{ +{ + return Device->SamplesPlayed * 1000000000 / Device->Frequency; +} //}}} + + BackendFuncs pulse_funcs = { //{{{ pulse_open_playback, pulse_close_playback, @@ -1214,7 +1220,8 @@ BackendFuncs pulse_funcs = { //{{{ pulse_start_capture, pulse_stop_capture, pulse_capture_samples, - pulse_available_samples + pulse_available_samples, + pulse_get_time }; //}}} void alc_pulse_init(BackendFuncs *func_list) //{{{ diff --git a/Alc/solaris.c b/Alc/solaris.c index 444cab58..cff744ae 100644 --- a/Alc/solaris.c +++ b/Alc/solaris.c @@ -266,6 +266,11 @@ static ALCuint solaris_available_samples(ALCdevice *pDevice) return 0; } +static ALuint64 solaris_get_time(ALCdevice *Device) +{ + return Device->SamplesPlayed * 1000000000 / Device->Frequency; +} + BackendFuncs solaris_funcs = { solaris_open_playback, @@ -277,7 +282,8 @@ BackendFuncs solaris_funcs = { solaris_start_capture, solaris_stop_capture, solaris_capture_samples, - solaris_available_samples + solaris_available_samples, + solaris_get_time }; void alc_solaris_init(BackendFuncs *func_list) @@ -334,6 +334,11 @@ static ALCboolean wave_open_capture(ALCdevice *pDevice, const ALCchar *deviceNam return ALC_FALSE; } +static ALuint64 wave_get_time(ALCdevice *Device) +{ + return Device->SamplesPlayed * 1000000000 / Device->Frequency; +} + BackendFuncs wave_funcs = { wave_open_playback, @@ -345,7 +350,8 @@ BackendFuncs wave_funcs = { NULL, NULL, NULL, - NULL + NULL, + wave_get_time }; void alc_wave_init(BackendFuncs *func_list) diff --git a/Alc/winmm.c b/Alc/winmm.c index 317906f7..70398a17 100644 --- a/Alc/winmm.c +++ b/Alc/winmm.c @@ -397,6 +397,11 @@ static void WinMMCaptureSamples(ALCdevice *pDevice, ALCvoid *pBuffer, ALCuint lS alcSetError(pDevice, ALC_INVALID_VALUE); } +static ALuint64 WinMMGetTime(ALCdevice *Device) +{ + return Device->SamplesPlayed * 1000000000 / Device->Frequency; +} + static BackendFuncs WinMMFuncs = { WinMMOpenPlayback, @@ -408,7 +413,8 @@ static BackendFuncs WinMMFuncs = { WinMMStartCapture, WinMMStopCapture, WinMMCaptureSamples, - WinMMAvailableSamples + WinMMAvailableSamples, + WinMMGetTime }; void alcWinMMInit(BackendFuncs *FuncList) diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h index d9c369ef..5791b336 100644 --- a/OpenAL32/Include/alMain.h +++ b/OpenAL32/Include/alMain.h @@ -273,6 +273,8 @@ typedef struct { void (*StopCapture)(ALCdevice*); void (*CaptureSamples)(ALCdevice*, void*, ALCuint); ALCuint (*AvailableSamples)(ALCdevice*); + + ALuint64 (*GetTime)(ALCdevice*); } BackendFuncs; enum { @@ -424,6 +426,7 @@ struct ALCdevice_struct #define ALCdevice_StopCapture(a) ((a)->Funcs->StopCapture((a))) #define ALCdevice_CaptureSamples(a,b,c) ((a)->Funcs->CaptureSamples((a), (b), (c))) #define ALCdevice_AvailableSamples(a) ((a)->Funcs->AvailableSamples((a))) +#define ALCdevice_GetTime(a) ((a)->Funcs->GetTime((a))) struct ALCcontext_struct { |