aboutsummaryrefslogtreecommitdiffstats
path: root/OpenAL32/alSource.c
Commit message (Collapse)AuthorAgeFilesLines
* Reorder some source fieldsChris Robinson2016-07-071-19/+22
|
* Use separate arrays for UIntMap keys and valuesChris Robinson2016-07-041-2/+2
|
* Ensure voices has been updated once before mixing themChris Robinson2016-06-161-1/+8
| | | | | | | | Sometimes the mixer is temporarily prevented from applying updates, when multiple sources need to be updated simultaneously for example, but does not prevent mixing. If the mixer runs during that time and a voice was just started, it would've mixed the voice without any internal properties being set for it.
* Make a function staticChris Robinson2016-06-011-6/+7
|
* Hold the effectslot map lock while handling itChris Robinson2016-05-291-0/+3
|
* Avoid the mixer lock when getting the plain source offsetChris Robinson2016-05-281-11/+15
| | | | i.e. without the latency
* Avoid an explicit mixer lock for getting the source offset and latencyChris Robinson2016-05-281-27/+72
| | | | | The only mixer locking involved is with the backend, as determined by it's ability to get the device clock and latency atomically.
* Change the backend getLatency method to return the clock time tooChris Robinson2016-05-281-3/+8
| | | | | | This will also allow backends to better synchronize the tracked clock time with the device output latency, without necessarily needing to lock if the backend API can allow for it.
* Remove a couple unneeded functionsChris Robinson2016-05-251-4/+7
|
* Avoid using realloc in a number of placesChris Robinson2016-05-211-1/+3
|
* Make the source position calues atomicChris Robinson2016-05-191-19/+20
|
* Avoid redundantly storing distance model settingsChris Robinson2016-05-171-6/+9
|
* Don't store the source's update method with the voiceChris Robinson2016-05-161-4/+0
|
* Avoid separate updates to sources that should apply togetherChris Robinson2016-05-151-1/+12
|
* Provide asynchronous property updates for sourcesChris Robinson2016-05-141-132/+320
| | | | | | | | | | | | | | | | | | | | | | | | | This necessitates a change in how source updates are handled. Rather than just being able to update sources when a dependent object state is changed (e.g. a listener gain change), now all source updates must be proactively provided. Consequently, apps that do not utilize any deferring (AL_SOFT_defer_updates or alcSuspendContext/alcProcessContext) may utilize more CPU since it'll be filling out more update containers for the mixer thread to use. The upside is that there's less blocking between the app's calling thread and the mixer thread, particularly for vectors and other multi-value properties (filters and sends). Deferring behavior when used is also improved, since updates that shouldn't be applied yet are simply not provided. And when they are provided, the mixer doesn't have to ignore them, meaning the actual deferring of a context doesn't have to synchrnously force an update -- the process call will send any pending updates, which the mixer will apply even if another deferral occurs before the mixer runs, because it'll still be there waiting on the next mixer invocation. There is one slight bug introduced by this commit. When a listener change is made, or changes to multiple sources while updates are being deferred, it is possible for the mixer to run while the sources are prepping their updates, causing some of the source updates to be seen before the other. This will be fixed in short order.
* Hold the effect and filter maps while handling effects and filtersChris Robinson2016-05-121-1/+10
|
* Hold the buffer map lock while handling the bufferChris Robinson2016-05-101-1/+11
|
* Hold the source map lock while handling itChris Robinson2016-05-101-0/+68
|
* Use the source's offset type to determine if there's an offsetChris Robinson2016-05-091-6/+11
|
* Remove unnecessary code for the now-unused write offsetChris Robinson2016-04-251-53/+17
|
* Add support for AL_EXT_SOURCE_RADIUSChris Robinson2016-04-251-6/+27
|
* Drop support for AL_SOFT_buffer_samples and AL_SOFT_buffer_sub_dataChris Robinson2016-04-241-49/+0
| | | | | | Unfortunately they conflict with AL_EXT_SOURCE_RADIUS, as AL_SOURCE_RADIUS and AL_BYTE_RW_OFFSETS_SOFT share the same source property value. A replacement for AL_SOFT_buffer_samples will eventually be made.
* Move the aligned malloc functions to the common libChris Robinson2016-03-291-0/+1
|
* Implement AL_EXT_STEREO_ANGLES supportChris Robinson2016-03-251-0/+36
|
* Calculate HRTF stepping params right before mixingChris Robinson2016-02-141-1/+0
| | | | | This means we track the current params and the target params, rather than the target params and the stepping. This closer matches the non-HRTF mixers.
* Calculate channel gain stepping just before mixingChris Robinson2016-02-141-7/+2
|
* Make the source's buffer queue a singly-linked listChris Robinson2016-01-311-30/+27
|
* Lock the source queue for writing when updating the playback offsetChris Robinson2015-10-241-8/+8
|
* Fix usage of modfChris Robinson2015-10-241-2/+2
|
* Include the fractional part with the source sample/sec offsetChris Robinson2015-10-161-17/+18
|
* Store the source's previous samples with the voiceChris Robinson2015-10-151-0/+12
| | | | | | This helps avoid different results when looping is toggled within a couple samples of the loop point, or when a processed buffer is removed while the source is only a couple samples into the next buffer.
* Properly limit the calculated source offset componentsChris Robinson2015-10-141-4/+8
|
* Shut GCC upChris Robinson2015-10-131-1/+1
|
* Properly apply fractional source offsets when a user offset is setChris Robinson2015-10-131-22/+22
|
* Move the resampler stuff to mixer.c where it's usedChris Robinson2015-10-011-15/+0
|
* Implement a 6-point sinc-lanczos filterChris Robinson2015-09-291-0/+2
|
* Replace the cubic resampler with a 4-point sinc/lanczos filterChris Robinson2015-09-271-2/+2
|
* Don't keep selecting the mixer to useChris Robinson2015-09-271-2/+0
|
* Use a single enum list for source propertiesChris Robinson2015-09-221-346/+416
|
* Handle up to 6 values with alSourcedvSOFT and alGetSourcefvChris Robinson2015-09-211-4/+4
|
* Get rid of ALCdevice_GetLatencyChris Robinson2015-09-211-2/+6
|
* Move HRTF params and state closer togetherChris Robinson2015-02-091-3/+3
|
* Use aluVector in some more placesChris Robinson2014-12-161-27/+15
|
* Partially revert "Use a different method for HRTF mixing"Chris Robinson2014-11-231-0/+11
| | | | | | | | | | | | The sound localization with virtual channel mixing was just too poor, so while it's more costly to do per-source HRTF mixing, it's unavoidable if you want good localization. This is only partially reverted because having the virtual channel is still beneficial, particularly with B-Format rendering and effect mixing which otherwise skip HRTF processing. As before, the number of virtual channels can potentially be customized, specifying more or less channels depending on the system's needs.
* Use a different method for HRTF mixingChris Robinson2014-11-221-13/+2
| | | | | | | | | | | | | | | | | | | | | | | This new method mixes sources normally into a 14-channel buffer with the channels placed all around the listener. HRTF is then applied to the channels given their positions and written to a 2-channel buffer, which gets written out to the device. This method has the benefit that HRTF processing becomes more scalable. The costly HRTF filters are applied to the 14-channel buffer after the mix is done, turning it into a post-process with a fixed overhead. Mixing sources is done with normal non-HRTF methods, so increasing the number of playing sources only incurs normal mixing costs. Another benefit is that it improves B-Format playback since the soundfield gets mixed into speakers covering all three dimensions, which then get filtered based on their locations. The main downside to this is that the spatial resolution of the HRTF dataset does not play a big role anymore. However, the hope is that with ambisonics- based panning, the perceptual position of panned sounds will still be good. It is also an option to increase the number of virtual channels for systems that can handle it, or maybe even decrease it for weaker systems.
* Support B-Format source rotation with AL_ORIENTATIONChris Robinson2014-10-311-7/+99
|
* Rename the source's Orientation to DirectionChris Robinson2014-10-311-9/+9
|
* Rename activesource to voiceChris Robinson2014-08-211-34/+33
|
* Use an array of objects for active sources instead of pointersChris Robinson2014-08-211-43/+32
|
* Use a NULL source for inactive activesourcesChris Robinson2014-08-211-25/+29
| | | | Also only access the activesource's source field once per update.