Commit Graph

8 Commits (d4d056ac0c478454573ad1fb5715cba448f7078f)

Author SHA1 Message Date
Mooneer Salem d4d056ac0c Fix issues from previous ten runs. 2025-06-14 09:45:20 -07:00
Mooneer Salem e9ec9347d9
Make sure RTSan-related code isn't added if not installed. (#900)
* Make sure RTSan-related code isn't added if not installed.

* Enable RTSan checks in GH Actions.

* Fix syntax error in GH action.

* Fix GCC compile failures.

* Use different GH workflow to get correct Clang installed.

* Split RTSan test into separate build and test steps

* Move LLVM installation to beginning in case there are side effects.

* Prevent dynamic resampling in AudioPipeline when playing back files.

* Mixed up sample calculation, causing tests to fail.

* Additional changes to see if it still hangs.

* Update cmake-macos.yml

* Do completion check after queuing to output FIFO.

* Fix buffer overflow.

* Some additional changes based on local testing.

* GH tests weren't actually being run through the resampler.

* Remove ExclusiveAccessStep files as they're not being used.

* Remove some logging that shouldn't be in RT context.

* Add reset() to IPipelineStep to avoid repeated deallocations and reallocations of the TX pipeline.

* Fix segfault from previous changes.

* Remove RADE specific logging in RT context and suppress RTSan for RADE EOO handling.

* Disable RTSan for RADE text handling.

* Try disabling real-time for macOS.

* Force Windows 2022.

* Revert "Try disabling real-time for macOS."

This reverts commit c8ee871406.

* Experiment: use O(1) heap allocator for Codec2.

* Fix patch commands.

* thread_local is only in C++11 and above.

* Force codec2 folder to be removed every call.

* Update codec2 patch.

* Fix Windows compiler error.

* Oops, should be _aligned_malloc.

* Integrate codec2 into source tree so we don't need to deal with patch.

* Update Codec2 README.

* mbest needs to use o1heap too.

* Remove rtsan disable from FreeDV TX/RX steps.

* Bring back AudioPipeline change previously removed by master merge.

* Result resampler needs to be initialized on construction.

* Create resampler only if input and output rates don't match.

* Increase Codec2 RT heap size.

* Fix Windows failures.

* Ensure separate threads spawned from PipelineStep are also checked by RTSan.

* Support RTSan builds on macOS if user has appropriate LLVM.

* Remove no longer needed patch.

* Remove unneeded resettingThread property.

* Fix issue discovered during testing.

* Test: match Linux and macOS requested latency to Windows.

* Add PR #900 to changelog.
2025-06-05 08:17:24 -07:00
Mooneer Salem 919bba2c14
Further audio dropout improvements (#876)
* Adjust constants based on Instruments analysis.

* Update comments.

* Try reading only FRAME_DURATION at a time during TX.

* Speex step doesn't need to be locked.

* Use shared pointers instead of locking during EqualizerStep.

* Move file read out of the RT context.

* Remove file I/O from RT context for RecordStep too.

* Try requesting 10ms blocks from Windows.

* Allow all GH tests to run.

* Revert back to 20ms frames.

* Minor tweak to Easy Setup window formatting.

* Revert "Revert back to 20ms frames."

This reverts commit b67313cdef.

* Update freedv-ctest-fullduplex.conf.tmpl

Disable multiple RX for testing.

* Turn off multiple RX for reporting tests as well.

* Force single threaded if only one step is available.

* Revert changes to freedv-ctest-fullduplex.conf.tmpl.

* Revert changes to freedv-ctest-reporting.conf.tmpl.

* Need to wake up all threads whenever we get a block of audio.

* Fix compiler errors.

* Revert previous changes as they didn't help.

* Refactor ParallelStep to remove usage of locks.

* Fix compiler errors and warnings.

* Fix issue preventing EOO from being sent.

* Another attempt at fixing the test failures.

* Use semaphores to wake up ParallelStep threads on receipt of new audio data.

* Fix compiler errors.

* Forgot to wake up helper threads.

* Helper threads should wait until ended or until there's data.

* Fix compiler error.

* Increase fifo sizes for FreeDV TX and RX steps.

* macOS: add protection in case semaphore wasn't created.

* Prevent waterfall from clearing itself when RX mode changes.

* Add logic to read in any data that may have come in during processing.

* GitHub Actions: run all Windows tests even if one or more fail.

* Revert "Add logic to read in any data that may have come in during processing."

This reverts commit 11ce99bb6a.

* Meter out only a little bit of data at a time.

* Revert "Meter out only a little bit of data at a time."

This reverts commit 35e81d6ce5.

* Use 20ms blocks instead of 10ms.

* Revert "Use 20ms blocks instead of 10ms."

This reverts commit 1ec6fb308a.

* Update FRAME_DURATION instead.

* Only process entire TX blocks at a time.

* Set sRGB color space for all open windows.

* Change version tag to rc to reflect release candidate status.

* Revert waveform FIFO changes from previous PR.

* libsamplerate needs to be built with optimizations on macOS and Windows.

* Fix Windows build failure.

* Update LLVM MinGW in Windows CI build to match version used for packaging.

* Test: use RADE main to see if Python GC actually matters.
2025-05-19 11:56:05 -07:00
Mooneer Salem 439e54035f
Request real-time priority from the operating system for audio pipeline (#866)
* Bound requested frames between both min and max.

* Request real-time scheduling for pipeline threads (currently macOS-only).

* Ensure pipeline threads never execute at the same time as audio threads.

* macOS: ask for 5ms audio blocks.

* Temporarily re-enable stress test.

* Suppress codespell for .mm files.

* Swap times/buffer sizes.

* Fix compiler error.

* Go back to previous frame size and time.

* Re-disable stress test.

* Try adjusting time quantum.

* Move audio priority handling to audio layer.

* Set helper thread to real-time on Windows.

* Temporarily disable audio workgroup code.

* Disable periodicity in macOS RT request

* Forgot to define variable.

* Only allow a max of 50% CPU time for audio helpers.

* More tuning of the duty cycle.

* Make sure we sleep some amount of time every time through the loop.

* Go back to smaller time quantum.

* Another quantum tweak.

* Increase audio sample block size to 20ms.

* Use 2.5ms for audio block time.

* Try increasing FIFO sizes for RX.

* Oops, forgot to comment out the / 1000 too.

* Get faster turnaround for macOS GH builds.

* Revert FIFO changes.

* Add additional debugging.

* Fix compiler error.

* Fix typo.

* Use semaphores to notify TX/RX worker threads.

* Try dividing duty cycle by 2 to avoid starvation.

* Reenable audio workgroups.

* No point in having parallel threads if only one mode is active.

* Ensure that ParallelStep gets added to the audio workgroup too.

* Anything for GUI consumption shouldn't be in the RT path.

* Go back to 10ms audio blocks to see if reporting tests can more reliably pass.

* Fix issue causing audio to not work on certain Macs.

* Support real-time threading on Linux when using PulseAudio/pipewire.

* Fix misspelling.

* dbus needs to be installed in the environment.

* macOS: try a smaller block size again.

* Revert "macOS: try a smaller block size again."

This reverts commit 1d21ad6934.

* Try architecture-specific audio block times.

* rtkit itself also needs to be installed in the environment.

* Revert ordering changes to macOS CI builds.

* GH user needs to be added to rtkit group.

* Implement semaphores on Windows.

* Don't exit the render/capture threads unless requested by higher level code.

* Don't take address of a pointer.

* macOS: set thread QoS for RT threads.

* Move RADE RX/TX memory allocations out of real-time path.

* Moving additional memory allocations outside of RT context.

* Move all remaining allocations in pipeline outside of RT except for legacy FreeDV modes.

* Longer audio block times don't seem to be making a difference.

* Move legacy mode memory allocations out of RT context.

* Prevent unbounded mutex locks inside pipeline.

* Windows: fallback to a simple sleep if we can't lock the semaphore.

* Increase maximum wait time to match what Windows returns for buffer size.

* PulseAudio: fallback to simple sleep if we can't wait on semaphore.

* Prevent unbounded locking in TapStep.
2025-04-23 00:18:24 -07:00
Mooneer Salem e7f7b35646
Integrate RADE into FreeDV application (#748)
* Include very basic Python install in the FreeDV Windows installer.

* Bump version to 2.0.0 devel.

* Adjust pth file to allow pip to work.

* Create post-install script. Not tied into the installer yet.

* Install needed packages during setup.

* Fix issue preventing uninstall commands from being properly added to the installer.

* Add RADE binaries to installer for initial tests.

* Suppress RADAE/RADE in code spelling check.

* Fix additional compiler errors.

* Fix GitHub actions on Linux and macOS.

* Print API version later on startup so it'll actually show up in the Windows console.

* Enforce minimum 16 kHz sample rate for voice keyer files.

* Disallow sample rates lower than 16000 in audio config.

* Initial support for RX using librade.

* Adjust dependencies in CMake infrastructure to make sure RADE/Opus build before FreeDV code.

* Add GUI for RADE.

* Add forgotten files.

* Add initialize/finalize calls for RADE.

* Add progress text to post-install script.

* Adjust paths based on recent RADE commits.

* Add basic support for RADE TX.

* Output EOO on end of TX.

* Fix error preventing Windows installer from being created without 2020 mode.

* Change working directory to folder containing freedv.exe.

* Remove quotes from messages in post-setup script.

* Fix compiler errors.

* Fix assertion failure in PlaybackStep.

* Fix assertion failure in FreeDVInterface.

* Suppress warnings during post-install.

* Get missed bugfixes from previous PR.

* Test changes to get GH actions working again for Windows.

* Forgot to install WINE in GH action.

* Try win64 instead of win32 for WINE.

* wine32 and not wine64

* Try different way of installing wine.

* Remove packages that don't exist.

* Oops, actually installed Python 3.12.7.

* Use normal Python installer instead of wenv.

* Need to make sure wine runs in console-only.

* Use Wine from Ubuntu.

* Install wine32 too.

* Ignore return value.

* Use xvfb since trying to bypass doesn't work for winecfg.

* s/xvfb/xvfb-run/

* Separate WINE install from Python.

* More tweaks to the GH workflow.

* wine64 instead of wine

* Use WINEARCH when creating env.

* test changes

* Start xvfb separately.

* xvfb -> Xvfb

* Add debugging

* Forgot :

* Make WINE think it's Windows 10.

* Back to using wine-staging.

* Reenable xvfb.

* Fix cmake invocation.

* Integrate BuildOpus changes from RADE.

* Ensure Opus is built for minimum supported FreeDV version.

* Warning cleanup.

* Ensure RADE is actually built as a universal binary.

* Include basic Python into the .app file.

* macOS version now builds. Still need to figure out how to get modules installed.

* Resolve problems preventing proper execution of the macOS binary.

* torchvision isn't necessary.

* Fix reporting so that we report RADE instead of 'unk'.

* Expire devel versions of FreeDV after six months.

* Attenuate RADE TX by 4dB to avoid needing to adjust TX Attenuation dial just for that mode.

* Disable 2020/2020B on all platforms.

* Stop building 32 bit Windows builds.

* Move RADE mode to the top of the mode list.

* Tweak preprocess function for RADE.

* Update Windows Python to 3.12.7.

* Re-disable ARM Windows builds while we figure out how to build it.

* Build Wine in signing environment.

* Update wxWidgets to 3.2.6.

* Workaround time display issue in FreeDV Reporter on macOS.

* Limit number of numpy/OpenBLAS threads due to known issues with their interaction with Python/C++ threading.

* Add additional guarding around Codec2 FIFO calls.

* Split off DMG creation into separate target to save time during development.

* Use dr-reset for initial release.
2024-10-20 18:09:11 -07:00
Mooneer Salem a1cc4544f3 Ensure that PlaybackStep always outputs nsf samples even at the end of playback. 2022-03-22 23:33:13 -07:00
Mooneer Salem d421d7e8f7 Add additional checking to attempt to debug memory trashing. 2022-03-22 01:31:36 -07:00
Mooneer Salem 2626c6554b Add additional required pipeline step implementations for current FreeDV encoding. 2022-03-16 15:43:06 -07:00