From de62ab97e912525f20272153f6a4c896e833839d Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 18 Apr 2017 00:58:33 -0700 Subject: Store the source queue head in the voice to signify looping This removes the need to access a couple more source fields in the mixer, and also makes the looping and queue fields non-atomic. --- OpenAL32/Include/alSource.h | 5 ++--- OpenAL32/Include/alu.h | 11 ++++++++--- 2 files changed, 10 insertions(+), 6 deletions(-) (limited to 'OpenAL32/Include') diff --git a/OpenAL32/Include/alSource.h b/OpenAL32/Include/alSource.h index 265a8f47..795ddf24 100644 --- a/OpenAL32/Include/alSource.h +++ b/OpenAL32/Include/alSource.h @@ -40,6 +40,7 @@ typedef struct ALsource { ALfloat Direction[3]; ALfloat Orientation[2][3]; ALboolean HeadRelative; + ALboolean Looping; enum DistanceModel DistanceModel; ALboolean DirectChannels; @@ -91,9 +92,7 @@ typedef struct ALsource { /** Source Buffer Queue head. */ RWLock queue_lock; - ATOMIC(ALbufferlistitem*) queue; - - ATOMIC(ALboolean) looping; + ALbufferlistitem *queue; ATOMIC_FLAG PropsClean; diff --git a/OpenAL32/Include/alu.h b/OpenAL32/Include/alu.h index a2ba4fae..96c7d4c4 100644 --- a/OpenAL32/Include/alu.h +++ b/OpenAL32/Include/alu.h @@ -219,9 +219,6 @@ typedef struct ALvoice { ATOMIC(struct ALsource*) Source; ATOMIC(bool) Playing; - /* Current buffer queue item being played. */ - ATOMIC(struct ALbufferlistitem*) current_buffer; - /** * Source offset in samples, relative to the currently playing buffer, NOT * the whole queue, and the fractional (fixed-point) offset to the next @@ -230,6 +227,14 @@ typedef struct ALvoice { ATOMIC(ALuint) position; ATOMIC(ALsizei) position_fraction; + /* Current buffer queue item being played. */ + ATOMIC(struct ALbufferlistitem*) current_buffer; + + /* Buffer queue item to loop to at end of queue (will be NULL for non- + * looping voices). + */ + ATOMIC(struct ALbufferlistitem*) loop_buffer; + /** * Number of channels and bytes-per-sample for the attached source's * buffer(s). -- cgit v1.2.3