Commit Graph

8196 Commits (master)

Author SHA1 Message Date
Chris Robinson 556c5d14d7 Avoid a virtual function call to set the decoder width 2022-05-17 02:32:10 -07:00
Chris Robinson 64cb0dc264 Use a member variable to specify the decoder padding 2022-05-17 02:28:57 -07:00
Chris Robinson a5729d1ff6 Check the container type given to DEF_NEWDEL and DEF_FAM_NEWDEL
There's apparently no way to get the containing class/struct type from a static
member function, and operator new/delete are implicitly static member functions
so the macros to define them need to be told the type to allocate for. This
ensures the type specified matches the containing type.
2022-05-16 23:56:07 -07:00
Chris Robinson 3e9597a768 Avoid magic numbers 2022-05-16 22:49:03 -07:00
Chris Robinson 65e4c20c27 Move EAX files to their own sub-directory 2022-05-16 02:08:18 -07:00
Chris Robinson 83238973ed Use virtual functions for the decoder 2022-05-14 21:23:03 -07:00
Chris Robinson 0a57ebdd49 Mark the template base as inline
Apple LLVM doesn't like template specializatioms marked inline without the
(deleted) base also being inline.
2022-05-14 10:27:03 -07:00
Chris Robinson f2858ac865 Resample before frequency analysis
We want to resample before minimum phase reconstruction since that changes the
phase relationship of the sampled signal, introducing a slight bit of noise
from truncated sampling. It's not clear that the frequency domain resampling
method is accurate, so resampling prior to frequency analysis is an alternative
to ensure the resulting frequencies are given the proper phase for sampling.

This also cleans up some micro allocations in loops.
2022-05-13 15:40:15 -07:00
Chris Robinson 82c8e87ec7 Keep some variables local to where they're needed 2022-05-13 15:40:15 -07:00
Chris Robinson dbf5306828 Use pw_buffer::requested in newer PipeWire versions 2022-05-13 15:40:15 -07:00
Chris Robinson d38d9b091e Remove a couple unnecessary casts 2022-05-13 15:40:15 -07:00
ilya-fedin 0bf2abae9b
Fix pkg-config file when libdir/bindir/includedir specified as absolute paths (#696)
Currently it makes the pkg-config file unusable as prefix is specified twice.

FULL variables do the necessary parsing and automatically prepend the prefix if needed.
2022-05-13 15:39:43 -07:00
ilya-fedin e0d26ba25a
Search the installation data directory (#693)
That allows the logic to work on non-FHS distros like NixOS
2022-05-13 13:55:17 -07:00
Chris Robinson af8e756dcb Fix the CoreAudio output element value 2022-05-10 15:36:26 -07:00
Chris Robinson 23b4611cd0 Properly set the air absorption gain base 2022-05-10 06:46:10 -07:00
Chris Robinson c870e550fa Don't enable RTKit/D-Bus support on Windows 2022-05-09 12:38:12 -07:00
Chris Robinson 5c55ec2f9b More agressively hide PipeWire and SDL header warnings 2022-05-09 07:47:43 -07:00
Chris Robinson 2c9da1b671 Avoid an ugly and confusing generate_n 2022-05-08 20:22:25 -07:00
Chris Robinson 6f11638162 Clean up readAudio some 2022-05-08 11:39:28 -07:00
Chris Robinson 97ed5a870d Drain audio frames when stopping playback in alffplay 2022-05-07 17:42:37 -07:00
Chris Robinson 96756acc52 Reject older versions of PipeWire than built against
Newer versions of PipeWire may add things to public structures. For example,
pw_buffer::requested added in 0.3.49. Building against 0.3.49 or newer, but
then running with 0.3.48 could result in invalid accesses since the returned
pw_buffer objects are shorter than the definition says to expect, creating
undefined behavior. Even if explicit access to the additional fields is
protected by a runtime check, the language allows the compiler to assume a
pointer to a pw_buffer object contains a complete pw_buffer, allowing the
optimizer to access the field earlier than the check (with the check only
controlling if the value gets used).

Another example is pw_time, which had a few fields added in 0.3.50 along with a
function, pw_stream_get_time_n, that provides the size of the pw_time struct
the application is using (so the library knows what version of the struct it
has to fill in). If a later version adds a new field, running it with an older
version will either fail (due to the library getting a size larger than it
knows about) or silently leave the newer fields as garbage.
2022-05-07 08:49:02 -07:00
Chris Robinson 10e863d1b4 Avoid a deprecated PipeWire function
Building against 0.3.50 or newer will require that version or newer at runtime.
Building against a version before 0.3.50 will work with newer versions.
2022-05-06 12:46:36 -07:00
Chris Robinson 7e6ed2fa95 Use an array of pointers for the UHJ encoder input 2022-05-06 04:14:34 -07:00
Chris Robinson de33f4968c Fix CoreAudio audio unit element values for capture 2022-05-02 05:17:22 -07:00
Chris Robinson 22e6c0df60 Check for a minimum PipeWire version
The backend is apparently using some stuff that wasn't in earlier headers, but
it's not clear what was introduced in which versions. 0.3.23 should work,
though it may need to be higher or it could go a bit lower.
2022-04-27 01:25:15 -07:00
Chris Robinson 514ff1d71b Update alsoftrc.sample about surround3d71 2022-04-27 00:28:23 -07:00
Chris Robinson d9fe5a11cd Reset the ringbuffer when stopping OpenSL playback 2022-04-26 23:42:23 -07:00
Chris Robinson 593966c8db Handle 3D7.1 as a separate channel configuration
It's treated as 5.1 + 2 aux channels. This allows AL_DIRECT_CHANNELS_SOFT to
behave better, not forwarding rear left/right channel inputs to lower front and
upper rear, and allows reporting a more appropriate output mode to the app
instead of 7.1.
2022-04-26 23:32:15 -07:00
Chris Robinson 07dd62e53f Update a tooltip to match current behavior 2022-04-26 19:27:26 -07:00
Chris Robinson 9b330e4127 Add an option to alsoft-config for EAX API support 2022-04-26 14:03:24 -07:00
Chris Robinson 4b557f15d0 Workaround a MinGW issue with str(n)casecmp macros 2022-04-26 02:31:06 -07:00
Chris Robinson 7c33c1b2e6 Use bool() instead of bool{} to cast
To work around a MinGW GCC 5 issue.
2022-04-25 21:11:10 -07:00
Chris Robinson 2daed0d0b4 Fully protect disconnection with the mixer counter 2022-04-25 17:32:20 -07:00
Chris Robinson 31d7d62eea Use a type alias to simplify using a type 2022-04-25 17:32:20 -07:00
Chris Robinson 5038ba4d6b Clean up some case spaghetti 2022-04-25 17:32:20 -07:00
ilya-fedin 2ea5bb9168
Fallback to pkg-config for dbus (#689) 2022-04-25 17:32:01 -07:00
Chris Robinson c1c63a27de Release 1.22.0 2022-04-22 18:46:14 -07:00
Chris Robinson 354c18a242 Remove a couple unused fields 2022-04-22 16:37:08 -07:00
Chris Robinson e7a2c0af76 Define FUNCTION_CAST in a common header 2022-04-22 11:24:39 -07:00
Chris Robinson 1050428d3d Print the output mode from openal-info 2022-04-17 13:56:30 -07:00
Chris Robinson 9ac49e2ce1 Finalize ALC_SOFT_output_mode 2022-04-17 13:56:01 -07:00
Chris Robinson ac4d4fc731 Always report ALC_ANY_SOFT for output without contexts
Not required, but nicer to be consistent if it's not a meaningful value (e.g.
the actual device mode).
2022-04-17 05:27:40 -07:00
Chris Robinson 5c0eabc526 Silence reverb with EAX by default 2022-04-16 13:40:46 -07:00
Chris Robinson adccf0aec9 Use a bool type for boolean parameters 2022-04-16 03:53:54 -07:00
Chris Robinson 4bfaf860bf Include ALC_OUTPUT_MODE_SOFT with ALC_ALL_ATTRIBUTES 2022-04-16 03:49:22 -07:00
Chris Robinson 144e30a949 Update the ALC_SOFT_output_mode surround enums
The values are identical to the matching loopback channel configuration enums,
so for example ALC_5POINT1_SOFT is interchangable with ALC_SURROUND_5_1_SOFT,
this is simply providing a cleaner styling for potential future modes.
2022-04-15 01:45:24 -07:00
Chris Robinson 12dd7bee90 Finalize AL_SOFT_UHJ 2022-04-13 23:02:35 -07:00
Chris Robinson 2fb7538f68 Clear capture buffers before enqueueing them with OpenSL 2022-04-08 21:46:30 -07:00
Chris Robinson a42fe862c5 Keep track of uncaptured samples with the Oboe backend
Stopping Oboe capture drops uncaptured samples, whereas OpenAL keeps them. Also
make sure the reported available count doesn't go backwards without reading.
2022-04-06 21:53:26 -07:00
Chris Robinson 6a9fe1e2c1 Rename lerp to avoid conflicts with C++20's std::lerp 2022-04-06 17:41:24 -07:00