diff options
author | Chris Robinson <[email protected]> | 2017-03-06 22:58:04 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2017-03-07 00:19:40 -0800 |
commit | 190120dfd7ae53e284944fa4971efcf999cc321e (patch) | |
tree | c081ca66b3680270c31a667eaa29c1eef3cb4c0b /OpenAL32 | |
parent | bc0096365e66b8114a54bb533e818deb794c7601 (diff) |
Store the channel count and sample size in the voice
Diffstat (limited to 'OpenAL32')
-rw-r--r-- | OpenAL32/Include/alSource.h | 11 | ||||
-rw-r--r-- | OpenAL32/alSource.c | 15 |
2 files changed, 11 insertions, 15 deletions
diff --git a/OpenAL32/Include/alSource.h b/OpenAL32/Include/alSource.h index c33d6d1a..2525f107 100644 --- a/OpenAL32/Include/alSource.h +++ b/OpenAL32/Include/alSource.h @@ -94,6 +94,13 @@ typedef struct ALvoice { ATOMIC(ALuint) position; ATOMIC(ALuint) position_fraction; + /** + * Number of channels and bytes-per-sample for the attached source's + * buffer(s). + */ + ALsizei NumChannels; + ALsizei SampleSize; + /** Current target parameters used for mixing. */ ALint Step; @@ -197,10 +204,6 @@ typedef struct ALsource { ATOMIC(ALboolean) looping; - /** Current buffer sample info. */ - ALsizei NumChannels; - ALsizei SampleSize; - ALenum NeedsUpdate; ATOMIC(struct ALsourceProps*) Update; diff --git a/OpenAL32/alSource.c b/OpenAL32/alSource.c index 024d7918..ca4f3811 100644 --- a/OpenAL32/alSource.c +++ b/OpenAL32/alSource.c @@ -719,11 +719,6 @@ static ALboolean SetSourceiv(ALsource *Source, ALCcontext *Context, SourceProp p /* Source is now Static */ Source->SourceType = AL_STATIC; - - ReadLock(&buffer->lock); - Source->NumChannels = ChannelsFromFmt(buffer->FmtChannels); - Source->SampleSize = BytesFromFmt(buffer->FmtType); - ReadUnlock(&buffer->lock); } else { @@ -2582,12 +2577,7 @@ AL_API ALvoid AL_APIENTRY alSourceQueueBuffers(ALuint src, ALsizei nb, const ALu IncrementRef(&buffer->ref); if(BufferFmt == NULL) - { BufferFmt = buffer; - - source->NumChannels = ChannelsFromFmt(buffer->FmtChannels); - source->SampleSize = BytesFromFmt(buffer->FmtType); - } else if(BufferFmt->Frequency != buffer->Frequency || BufferFmt->OriginalChannels != buffer->OriginalChannels || BufferFmt->OriginalType != buffer->OriginalType) @@ -2990,6 +2980,7 @@ ALvoid SetSourceState(ALsource *Source, ALCcontext *Context, ALenum state) { ALCdevice *device = Context->Device; ALbufferlistitem *BufferList; + ALbuffer *buffer = NULL; ALsizei i; /* Check that there is a queue containing at least one valid, non zero @@ -2997,7 +2988,6 @@ ALvoid SetSourceState(ALsource *Source, ALCcontext *Context, ALenum state) BufferList = ATOMIC_LOAD_SEQ(&Source->queue); while(BufferList) { - ALbuffer *buffer; if((buffer=BufferList->buffer) != NULL && buffer->SampleLen > 0) break; BufferList = BufferList->next; @@ -3064,6 +3054,9 @@ ALvoid SetSourceState(ALsource *Source, ALCcontext *Context, ALenum state) if(Source->OffsetType != AL_NONE) ApplyOffset(Source, voice); + voice->NumChannels = ChannelsFromFmt(buffer->FmtChannels); + voice->SampleSize = BytesFromFmt(buffer->FmtType); + /* Clear previous samples. */ memset(voice->PrevSamples, 0, sizeof(voice->PrevSamples)); |