-
Notifications
You must be signed in to change notification settings - Fork 312
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix 'pulseaudioHostApi' use-after-free in PaPulseAudio_Initialize #847
Merged
RossBencina
merged 1 commit into
PortAudio:master
from
bear101:pulseaudio-use-after-free
Oct 6, 2023
Merged
Fix 'pulseaudioHostApi' use-after-free in PaPulseAudio_Initialize #847
RossBencina
merged 1 commit into
PortAudio:master
from
bear101:pulseaudio-use-after-free
Oct 6, 2023
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
The call to PaPulseAudio_UnLock( pulseaudioHostApi->mainloop ) in error-label is performed on 'pulseaudioHostApi' after 'pulseaudioHostApi' has been freed by PaPulseAudio_Free
Thanks we've created a ticket for the larger bug: #848 |
philburk
approved these changes
Oct 6, 2023
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
bear101
added a commit
to bear101/portaudio
that referenced
this pull request
Mar 6, 2024
* Preparation to start patching - TODOS and directory src/hostapi/Oboe * Added src/hostapi/oboe/README.md * Added include/pa_oboe.h and src/hostapi/oboe/pa_oboe.cpp * Added PA_USE_OBOE section to CMakeLists.txt * Added PA_USE_OBOE section to CMakeLists.txt * Heavily reworked CMake dependencies, added FindOboe.cmake, updated pa_oboe.cpp, more work needed * Included build_all_PaOboe.sh, more work needed on CMake * Included build_all_PaOboe.sh, more work needed on CMake * Update src/hostapi/oboe/README.md * bindings/cpp: CMake: support pkgconfig with RelWithDebInfo (PortAudio#822) bindings/cpp: add `RelWithDebInfo` to the configurations allowed to install portaudiocpp.pc, otherwise you won't have support for pkg-config when building a release package with separate debugging information. Besides that, RelWithDebInfo is identical to Release. * Fix MSVC warning C4018 signed/unsigned mismatch (PortAudio#821) See PortAudio#810 * Built shared library * Polished bits * mme: don't restrict the host buffer to 16-bit Currently, the MME Host API code only creates 16-bit integer MME buffers. All audio data provided by the user is therefore converted by PortAudio to and from 16-bit, regardless of the user buffer format. This basically makes it impossible to pass 24-bit audio through the MME Host API. If the user buffer format is not 16-bit, this also causes pointless conversions to take place, *even if the hardware is running at 16-bit*, because modern Windows versions (Vista+) convert the data to floating point behind the scenes before it is handed off to the hardware. This can lead to silly situations where 32-bit float samples from the user are (lossily) converted to 16-bit by PortAudio, then ended off to Windows via MME, only to be converted back to 32-bit float again, before finally being converted to the format the hardware device is configured to use. This can easily lead to two layers of 16-bit dithering (one from PortAudio, and one from Windows) being piled on top of each other, resulting in an elevated noise floor. This commit fixes this problem by configuring the MME buffers to use the same format as the user buffer. This should stop PortAudio from converting samples in all cases except paInt8, which is not supported by WAVEFORMATEX (only paUInt8 is). This is pretty much the same idea as PortAudio#774. The new code assumes that MME will accept whatever format we throw at it. I feel confident that this is always true on Vista+ regardless of hardware, because starting from Vista MME does not access hardware directly - it always goes through the Windows Audio Engine which supports all formats in both directions (I verified this using paloopback). On pre-Vista Windows, this should still work all the way back to Windows 98 SE, because MME goes through KMixer which supports all formats [1]. Nevertheless, it's difficult to be sure, so this code checks the Windows version it's running on and preserves the old behavior (i.e. always use Int16) on pre-Vista Windows. [1]: https://learn.microsoft.com/en-us/windows-hardware/drivers/audio/background-of-non-pcm-support#waveout-api Fixes PortAudio#139 * Don't use absolute path when linking to macOS frameworks (PortAudio#829) fixes PortAudio#828 * Fixing old problems * Added some debug messages * added new build script * Added paOboe in the paHostApi array * Added paOboe in pa_unix_hostapis.c * Working patch * win: New PaWinUtil_GetOsVersion() function for getting Windows OS version. Refactored WASAPI, DS, MME and WDMKS host back-ends to use PaWinUtil_GetOsVersion() instead of direct OS API. * Ready for other users to compile/build * Updated oboe/Readme.md * Added sharing mode selection * Fixed minor issue with sharing mode selection * Removed references to KCTI * Fixed error callback, added performance mode autoselection * Minor change to CMakeLists, added low latency costant in pa_oboe.h * Deleted Build_PaOboe.sh * Ready to push (removed my paths to Oboe directory and Android NDK) * Update README.md * Update README.md * remove all alternative sample conversion code using lrintf in pa_converters.c (PortAudio#403) removes the code guarded by PA_USE_C99_LRINTF See PortAudio#390 * updated readme * fixed CMakeLists.txt * fixed FindOboe.cmake * Preparation to start patching - TODOS and directory src/hostapi/Oboe * Added src/hostapi/oboe/README.md * Added include/pa_oboe.h and src/hostapi/oboe/pa_oboe.cpp * Added PA_USE_OBOE section to CMakeLists.txt * Added PA_USE_OBOE section to CMakeLists.txt * Heavily reworked CMake dependencies, added FindOboe.cmake, updated pa_oboe.cpp, more work needed * Included build_all_PaOboe.sh, more work needed on CMake * Included build_all_PaOboe.sh, more work needed on CMake * Built shared library * Polished bits * Fixing old problems * Added some debug messages * added new build script * Added paOboe in the paHostApi array * Added paOboe in pa_unix_hostapis.c * Working patch * Ready for other users to compile/build * Updated oboe/Readme.md * Added sharing mode selection * Fixed minor issue with sharing mode selection * Removed references to KCTI * Fixed error callback, added performance mode autoselection * Minor change to CMakeLists, added low latency costant in pa_oboe.h * Deleted Build_PaOboe.sh * Ready to push (removed my paths to Oboe directory and Android NDK) * Update src/hostapi/oboe/README.md * Update README.md * Update README.md * updated readme * fixed CMakeLists.txt * fixed FindOboe.cmake * corrected oboe/Readme.md * Updated oboe/Readme.md * PulseAudio Portaudio HostAPI (PortAudio#336) Adds support for PulseAudio API on Linux. For more information about Pulseaudio visit: https://www.freedesktop.org/wiki/Software/PulseAudio/ --------- Signed-off-by: Mario Kleiner <[email protected]> Co-authored-by: sqweek <[email protected]> Co-authored-by: Daniel Schürmann <[email protected]> Co-authored-by: Mooneer Salem <[email protected]> Co-authored-by: Be <[email protected]> Co-authored-by: Mario Kleiner <[email protected]> * pulseaudio: Move Pulseaudio include in correct place when using autoconf (PortAudio#843) As Jack and Pulseaudio both needs Ringbuffer that include can be done in same place. In configure.in also Pulseaudio header file was included before it was sure that it was really needed. Commit makes sure that Pulseaudio include is available only if it's needed as it can cause failing in build if Pulseaudio develoment files are not available. * added .idea to gitignore * added .idea to gitignore * restored workflows directory * Minor fixes to FindOboe.cmake * Enhanced prebuilt libraries compatibility in FindOboe.cmake * Minor changes to Pa_Oboe/Readme and pa_oboe.cpp * Removed auto latency tuning in favor of simpler impleentation in pa_oboe.cpp * Set paFloat32 as default format in pa_oboe.cpp * Renamed most of the variables according to best coding practices. * Added separate callback class to fix the single-stream issue. * Modified OboeEngine accordingly * Adjusted the code in the rest of pa_oboe.cpp * Removed stop and close phases of OboeEngine::restartStream * Updated functions' description * minor description corrections * fixed all compiling errors generated by typos * Added OboeMediator class in place of OboeCallback, that mediates PortAudio C stream struct and the C++ OboeEngine class * Fixed allocation problem, working PaOboe implementation * Fix 'pulseaudioHostApi' use-after-free/null ptr deref in PaPulseAudio_Initialize (PortAudio#847) The call to PaPulseAudio_UnLock( pulseaudioHostApi->mainloop ) in error-label is performed on 'pulseaudioHostApi' after 'pulseaudioHostApi' has been freed by PaPulseAudio_Free and set to NULL. * wdmks: declare GUIDs with selectany attribute (PortAudio#846) * wdmks: declare GUIDs with selectany attribute Match the behavior of guiddef.h in both mingw and the Windows SDK headers. This prevents linking errors caused by multiply defined symbols when linking against certain Windows SDK libs (like dxguid.lib). * Make sure this works even if DECLSPEC_SELECTANY is not defined --------- Co-authored-by: Ross Bencina <[email protected]> * fixed README.md indenting * Removed .idea folder from repo * replaced 'g_' with 'paOboe_' in non-static global variables * replaced 'm_' prefix with 'm' prefix * fixed OboeEngine::tryStream as requested * PulseAudio Portaudio HostAPI (PortAudio#336) Adds support for PulseAudio API on Linux. For more information about Pulseaudio visit: https://www.freedesktop.org/wiki/Software/PulseAudio/ --------- Signed-off-by: Mario Kleiner <[email protected]> Co-authored-by: sqweek <[email protected]> Co-authored-by: Daniel Schürmann <[email protected]> Co-authored-by: Mooneer Salem <[email protected]> Co-authored-by: Be <[email protected]> Co-authored-by: Mario Kleiner <[email protected]> * pulseaudio: Move Pulseaudio include in correct place when using autoconf (PortAudio#843) As Jack and Pulseaudio both needs Ringbuffer that include can be done in same place. In configure.in also Pulseaudio header file was included before it was sure that it was really needed. Commit makes sure that Pulseaudio include is available only if it's needed as it can cause failing in build if Pulseaudio develoment files are not available. * restored workflows directory * Minor fixes to FindOboe.cmake * Enhanced prebuilt libraries compatibility in FindOboe.cmake * Minor changes to Pa_Oboe/Readme and pa_oboe.cpp * Removed auto latency tuning in favor of simpler impleentation in pa_oboe.cpp * Set paFloat32 as default format in pa_oboe.cpp * Renamed most of the variables according to best coding practices. * Added separate callback class to fix the single-stream issue. * Modified OboeEngine accordingly * Adjusted the code in the rest of pa_oboe.cpp * Removed stop and close phases of OboeEngine::restartStream * Updated functions' description * minor description corrections * fixed all compiling errors generated by typos * Added OboeMediator class in place of OboeCallback, that mediates PortAudio C stream struct and the C++ OboeEngine class * Fixed allocation problem, working PaOboe implementation * fixed README.md indenting * Removed .idea folder from repo * replaced 'g_' with 'paOboe_' in non-static global variables * replaced 'm_' prefix with 'm' prefix * fixed OboeEngine::tryStream as requested * Changed names to improve readability, i.e. OboeStream -> PaOboeStream * fixed all compiling errors generated by typos * Fixed minor problem with TryStream * fixed long line in FindOboe.cmake * fixed typos in pa_oboe.cpp * set to verbose some logs * Fixed minor problem with TryStream * fixed long line in FindOboe.cmake * fixed typos in pa_oboe.cpp * set to verbose some logs * Better handling of format in paOboe, removed junk code from CMakeLists * Improved readability of some variables * Removed '#include oboe/Oboe.h' from pa_oboe.h, and modified host api implementation accordingly * static cast fixes --------- Signed-off-by: Mario Kleiner <[email protected]> Co-authored-by: Carlo Benfatti <[email protected]> Co-authored-by: hopefulGiupplo <[email protected]> Co-authored-by: Carlo Bramini <[email protected]> Co-authored-by: Etienne Dechamps <[email protected]> Co-authored-by: Daniel Schürmann <[email protected]> Co-authored-by: dmitrykos <[email protected]> Co-authored-by: Ross Bencina <[email protected]> Co-authored-by: Tuukka Pasanen <[email protected]> Co-authored-by: sqweek <[email protected]> Co-authored-by: Mooneer Salem <[email protected]> Co-authored-by: Be <[email protected]> Co-authored-by: Mario Kleiner <[email protected]> Co-authored-by: Tuukka Pasanen <[email protected]> Co-authored-by: invertego <[email protected]>
bear101
added a commit
to bear101/portaudio
that referenced
this pull request
Mar 6, 2024
* Preparation to start patching - TODOS and directory src/hostapi/Oboe * Added src/hostapi/oboe/README.md * Added include/pa_oboe.h and src/hostapi/oboe/pa_oboe.cpp * Added PA_USE_OBOE section to CMakeLists.txt * Added PA_USE_OBOE section to CMakeLists.txt * Heavily reworked CMake dependencies, added FindOboe.cmake, updated pa_oboe.cpp, more work needed * Included build_all_PaOboe.sh, more work needed on CMake * Included build_all_PaOboe.sh, more work needed on CMake * Update src/hostapi/oboe/README.md * bindings/cpp: CMake: support pkgconfig with RelWithDebInfo (PortAudio#822) bindings/cpp: add `RelWithDebInfo` to the configurations allowed to install portaudiocpp.pc, otherwise you won't have support for pkg-config when building a release package with separate debugging information. Besides that, RelWithDebInfo is identical to Release. * Fix MSVC warning C4018 signed/unsigned mismatch (PortAudio#821) See PortAudio#810 * Built shared library * Polished bits * mme: don't restrict the host buffer to 16-bit Currently, the MME Host API code only creates 16-bit integer MME buffers. All audio data provided by the user is therefore converted by PortAudio to and from 16-bit, regardless of the user buffer format. This basically makes it impossible to pass 24-bit audio through the MME Host API. If the user buffer format is not 16-bit, this also causes pointless conversions to take place, *even if the hardware is running at 16-bit*, because modern Windows versions (Vista+) convert the data to floating point behind the scenes before it is handed off to the hardware. This can lead to silly situations where 32-bit float samples from the user are (lossily) converted to 16-bit by PortAudio, then ended off to Windows via MME, only to be converted back to 32-bit float again, before finally being converted to the format the hardware device is configured to use. This can easily lead to two layers of 16-bit dithering (one from PortAudio, and one from Windows) being piled on top of each other, resulting in an elevated noise floor. This commit fixes this problem by configuring the MME buffers to use the same format as the user buffer. This should stop PortAudio from converting samples in all cases except paInt8, which is not supported by WAVEFORMATEX (only paUInt8 is). This is pretty much the same idea as The new code assumes that MME will accept whatever format we throw at it. I feel confident that this is always true on Vista+ regardless of hardware, because starting from Vista MME does not access hardware directly - it always goes through the Windows Audio Engine which supports all formats in both directions (I verified this using paloopback). On pre-Vista Windows, this should still work all the way back to Windows 98 SE, because MME goes through KMixer which supports all formats [1]. Nevertheless, it's difficult to be sure, so this code checks the Windows version it's running on and preserves the old behavior (i.e. always use Int16) on pre-Vista Windows. [1]: https://learn.microsoft.com/en-us/windows-hardware/drivers/audio/background-of-non-pcm-support#waveout-api Fixes PortAudio#139 * Don't use absolute path when linking to macOS frameworks (PortAudio#829) fixes PortAudio#828 * Fixing old problems * Added some debug messages * added new build script * Added paOboe in the paHostApi array * Added paOboe in pa_unix_hostapis.c * Working patch * win: New PaWinUtil_GetOsVersion() function for getting Windows OS version. Refactored WASAPI, DS, MME and WDMKS host back-ends to use PaWinUtil_GetOsVersion() instead of direct OS API. * Ready for other users to compile/build * Updated oboe/Readme.md * Added sharing mode selection * Fixed minor issue with sharing mode selection * Removed references to KCTI * Fixed error callback, added performance mode autoselection * Minor change to CMakeLists, added low latency costant in pa_oboe.h * Deleted Build_PaOboe.sh * Ready to push (removed my paths to Oboe directory and Android NDK) * Update README.md * Update README.md * remove all alternative sample conversion code using lrintf in pa_converters.c (PortAudio#403) removes the code guarded by PA_USE_C99_LRINTF See PortAudio#390 * updated readme * fixed CMakeLists.txt * fixed FindOboe.cmake * Preparation to start patching - TODOS and directory src/hostapi/Oboe * Added src/hostapi/oboe/README.md * Added include/pa_oboe.h and src/hostapi/oboe/pa_oboe.cpp * Added PA_USE_OBOE section to CMakeLists.txt * Added PA_USE_OBOE section to CMakeLists.txt * Heavily reworked CMake dependencies, added FindOboe.cmake, updated pa_oboe.cpp, more work needed * Included build_all_PaOboe.sh, more work needed on CMake * Included build_all_PaOboe.sh, more work needed on CMake * Built shared library * Polished bits * Fixing old problems * Added some debug messages * added new build script * Added paOboe in the paHostApi array * Added paOboe in pa_unix_hostapis.c * Working patch * Ready for other users to compile/build * Updated oboe/Readme.md * Added sharing mode selection * Fixed minor issue with sharing mode selection * Removed references to KCTI * Fixed error callback, added performance mode autoselection * Minor change to CMakeLists, added low latency costant in pa_oboe.h * Deleted Build_PaOboe.sh * Ready to push (removed my paths to Oboe directory and Android NDK) * Update src/hostapi/oboe/README.md * Update README.md * Update README.md * updated readme * fixed CMakeLists.txt * fixed FindOboe.cmake * corrected oboe/Readme.md * Updated oboe/Readme.md * PulseAudio Portaudio HostAPI (PortAudio#336) Adds support for PulseAudio API on Linux. For more information about Pulseaudio visit: https://www.freedesktop.org/wiki/Software/PulseAudio/ --------- Signed-off-by: Mario Kleiner <[email protected]> Co-authored-by: sqweek <[email protected]> Co-authored-by: Daniel Schürmann <[email protected]> Co-authored-by: Mooneer Salem <[email protected]> Co-authored-by: Be <[email protected]> Co-authored-by: Mario Kleiner <[email protected]> * pulseaudio: Move Pulseaudio include in correct place when using autoconf (PortAudio#843) As Jack and Pulseaudio both needs Ringbuffer that include can be done in same place. In configure.in also Pulseaudio header file was included before it was sure that it was really needed. Commit makes sure that Pulseaudio include is available only if it's needed as it can cause failing in build if Pulseaudio develoment files are not available. * added .idea to gitignore * added .idea to gitignore * restored workflows directory * Minor fixes to FindOboe.cmake * Enhanced prebuilt libraries compatibility in FindOboe.cmake * Minor changes to Pa_Oboe/Readme and pa_oboe.cpp * Removed auto latency tuning in favor of simpler impleentation in pa_oboe.cpp * Set paFloat32 as default format in pa_oboe.cpp * Renamed most of the variables according to best coding practices. * Added separate callback class to fix the single-stream issue. * Modified OboeEngine accordingly * Adjusted the code in the rest of pa_oboe.cpp * Removed stop and close phases of OboeEngine::restartStream * Updated functions' description * minor description corrections * fixed all compiling errors generated by typos * Added OboeMediator class in place of OboeCallback, that mediates PortAudio C stream struct and the C++ OboeEngine class * Fixed allocation problem, working PaOboe implementation * Fix 'pulseaudioHostApi' use-after-free/null ptr deref in PaPulseAudio_Initialize (PortAudio#847) The call to PaPulseAudio_UnLock( pulseaudioHostApi->mainloop ) in error-label is performed on 'pulseaudioHostApi' after 'pulseaudioHostApi' has been freed by PaPulseAudio_Free and set to NULL. * wdmks: declare GUIDs with selectany attribute (PortAudio#846) * wdmks: declare GUIDs with selectany attribute Match the behavior of guiddef.h in both mingw and the Windows SDK headers. This prevents linking errors caused by multiply defined symbols when linking against certain Windows SDK libs (like dxguid.lib). * Make sure this works even if DECLSPEC_SELECTANY is not defined --------- Co-authored-by: Ross Bencina <[email protected]> * fixed README.md indenting * Removed .idea folder from repo * replaced 'g_' with 'paOboe_' in non-static global variables * replaced 'm_' prefix with 'm' prefix * fixed OboeEngine::tryStream as requested * PulseAudio Portaudio HostAPI (PortAudio#336) Adds support for PulseAudio API on Linux. For more information about Pulseaudio visit: https://www.freedesktop.org/wiki/Software/PulseAudio/ --------- Signed-off-by: Mario Kleiner <[email protected]> Co-authored-by: sqweek <[email protected]> Co-authored-by: Daniel Schürmann <[email protected]> Co-authored-by: Mooneer Salem <[email protected]> Co-authored-by: Be <[email protected]> Co-authored-by: Mario Kleiner <[email protected]> * pulseaudio: Move Pulseaudio include in correct place when using autoconf (PortAudio#843) As Jack and Pulseaudio both needs Ringbuffer that include can be done in same place. In configure.in also Pulseaudio header file was included before it was sure that it was really needed. Commit makes sure that Pulseaudio include is available only if it's needed as it can cause failing in build if Pulseaudio develoment files are not available. * restored workflows directory * Minor fixes to FindOboe.cmake * Enhanced prebuilt libraries compatibility in FindOboe.cmake * Minor changes to Pa_Oboe/Readme and pa_oboe.cpp * Removed auto latency tuning in favor of simpler impleentation in pa_oboe.cpp * Set paFloat32 as default format in pa_oboe.cpp * Renamed most of the variables according to best coding practices. * Added separate callback class to fix the single-stream issue. * Modified OboeEngine accordingly * Adjusted the code in the rest of pa_oboe.cpp * Removed stop and close phases of OboeEngine::restartStream * Updated functions' description * minor description corrections * fixed all compiling errors generated by typos * Added OboeMediator class in place of OboeCallback, that mediates PortAudio C stream struct and the C++ OboeEngine class * Fixed allocation problem, working PaOboe implementation * fixed README.md indenting * Removed .idea folder from repo * replaced 'g_' with 'paOboe_' in non-static global variables * replaced 'm_' prefix with 'm' prefix * fixed OboeEngine::tryStream as requested * Changed names to improve readability, i.e. OboeStream -> PaOboeStream * fixed all compiling errors generated by typos * Fixed minor problem with TryStream * fixed long line in FindOboe.cmake * fixed typos in pa_oboe.cpp * set to verbose some logs * Fixed minor problem with TryStream * fixed long line in FindOboe.cmake * fixed typos in pa_oboe.cpp * set to verbose some logs * Better handling of format in paOboe, removed junk code from CMakeLists * Improved readability of some variables * Removed '#include oboe/Oboe.h' from pa_oboe.h, and modified host api implementation accordingly * static cast fixes --------- Signed-off-by: Mario Kleiner <[email protected]> Co-authored-by: Carlo Benfatti <[email protected]> Co-authored-by: hopefulGiupplo <[email protected]> Co-authored-by: Carlo Bramini <[email protected]> Co-authored-by: Etienne Dechamps <[email protected]> Co-authored-by: Daniel Schürmann <[email protected]> Co-authored-by: dmitrykos <[email protected]> Co-authored-by: Ross Bencina <[email protected]> Co-authored-by: Tuukka Pasanen <[email protected]> Co-authored-by: sqweek <[email protected]> Co-authored-by: Mooneer Salem <[email protected]> Co-authored-by: Be <[email protected]> Co-authored-by: Mario Kleiner <[email protected]> Co-authored-by: Tuukka Pasanen <[email protected]> Co-authored-by: invertego <[email protected]>
bear101
added a commit
to bear101/portaudio
that referenced
this pull request
Mar 6, 2024
* Preparation to start patching - TODOS and directory src/hostapi/Oboe * Added src/hostapi/oboe/README.md * Added include/pa_oboe.h and src/hostapi/oboe/pa_oboe.cpp * Added PA_USE_OBOE section to CMakeLists.txt * Added PA_USE_OBOE section to CMakeLists.txt * Heavily reworked CMake dependencies, added FindOboe.cmake, updated pa_oboe.cpp, more work needed * Included build_all_PaOboe.sh, more work needed on CMake * Included build_all_PaOboe.sh, more work needed on CMake * Update src/hostapi/oboe/README.md * bindings/cpp: CMake: support pkgconfig with RelWithDebInfo (PortAudio#822) bindings/cpp: add `RelWithDebInfo` to the configurations allowed to install portaudiocpp.pc, otherwise you won't have support for pkg-config when building a release package with separate debugging information. Besides that, RelWithDebInfo is identical to Release. * Fix MSVC warning C4018 signed/unsigned mismatch (PortAudio#821) See PortAudio#810 * Built shared library * Polished bits * mme: don't restrict the host buffer to 16-bit Currently, the MME Host API code only creates 16-bit integer MME buffers. All audio data provided by the user is therefore converted by PortAudio to and from 16-bit, regardless of the user buffer format. This basically makes it impossible to pass 24-bit audio through the MME Host API. If the user buffer format is not 16-bit, this also causes pointless conversions to take place, *even if the hardware is running at 16-bit*, because modern Windows versions (Vista+) convert the data to floating point behind the scenes before it is handed off to the hardware. This can lead to silly situations where 32-bit float samples from the user are (lossily) converted to 16-bit by PortAudio, then ended off to Windows via MME, only to be converted back to 32-bit float again, before finally being converted to the format the hardware device is configured to use. This can easily lead to two layers of 16-bit dithering (one from PortAudio, and one from Windows) being piled on top of each other, resulting in an elevated noise floor. This commit fixes this problem by configuring the MME buffers to use the same format as the user buffer. This should stop PortAudio from converting samples in all cases except paInt8, which is not supported by WAVEFORMATEX (only paUInt8 is). This is pretty much the same idea as The new code assumes that MME will accept whatever format we throw at it. I feel confident that this is always true on Vista+ regardless of hardware, because starting from Vista MME does not access hardware directly - it always goes through the Windows Audio Engine which supports all formats in both directions (I verified this using paloopback). On pre-Vista Windows, this should still work all the way back to Windows 98 SE, because MME goes through KMixer which supports all formats [1]. Nevertheless, it's difficult to be sure, so this code checks the Windows version it's running on and preserves the old behavior (i.e. always use Int16) on pre-Vista Windows. [1]: https://learn.microsoft.com/en-us/windows-hardware/drivers/audio/background-of-non-pcm-support#waveout-api Fixes PortAudio#139 * Don't use absolute path when linking to macOS frameworks (PortAudio#829) fixes PortAudio#828 * Fixing old problems * Added some debug messages * added new build script * Added paOboe in the paHostApi array * Added paOboe in pa_unix_hostapis.c * Working patch * win: New PaWinUtil_GetOsVersion() function for getting Windows OS version. Refactored WASAPI, DS, MME and WDMKS host back-ends to use PaWinUtil_GetOsVersion() instead of direct OS API. * Ready for other users to compile/build * Updated oboe/Readme.md * Added sharing mode selection * Fixed minor issue with sharing mode selection * Removed references to KCTI * Fixed error callback, added performance mode autoselection * Minor change to CMakeLists, added low latency costant in pa_oboe.h * Deleted Build_PaOboe.sh * Ready to push (removed my paths to Oboe directory and Android NDK) * Update README.md * Update README.md * remove all alternative sample conversion code using lrintf in pa_converters.c (PortAudio#403) removes the code guarded by PA_USE_C99_LRINTF See PortAudio#390 * updated readme * fixed CMakeLists.txt * fixed FindOboe.cmake * Preparation to start patching - TODOS and directory src/hostapi/Oboe * Added src/hostapi/oboe/README.md * Added include/pa_oboe.h and src/hostapi/oboe/pa_oboe.cpp * Added PA_USE_OBOE section to CMakeLists.txt * Added PA_USE_OBOE section to CMakeLists.txt * Heavily reworked CMake dependencies, added FindOboe.cmake, updated pa_oboe.cpp, more work needed * Included build_all_PaOboe.sh, more work needed on CMake * Included build_all_PaOboe.sh, more work needed on CMake * Built shared library * Polished bits * Fixing old problems * Added some debug messages * added new build script * Added paOboe in the paHostApi array * Added paOboe in pa_unix_hostapis.c * Working patch * Ready for other users to compile/build * Updated oboe/Readme.md * Added sharing mode selection * Fixed minor issue with sharing mode selection * Removed references to KCTI * Fixed error callback, added performance mode autoselection * Minor change to CMakeLists, added low latency costant in pa_oboe.h * Deleted Build_PaOboe.sh * Ready to push (removed my paths to Oboe directory and Android NDK) * Update src/hostapi/oboe/README.md * Update README.md * Update README.md * updated readme * fixed CMakeLists.txt * fixed FindOboe.cmake * corrected oboe/Readme.md * Updated oboe/Readme.md * PulseAudio Portaudio HostAPI (PortAudio#336) Adds support for PulseAudio API on Linux. For more information about Pulseaudio visit: https://www.freedesktop.org/wiki/Software/PulseAudio/ --------- Signed-off-by: Mario Kleiner <[email protected]> Co-authored-by: sqweek <[email protected]> Co-authored-by: Daniel Schürmann <[email protected]> Co-authored-by: Mooneer Salem <[email protected]> Co-authored-by: Be <[email protected]> Co-authored-by: Mario Kleiner <[email protected]> * pulseaudio: Move Pulseaudio include in correct place when using autoconf (PortAudio#843) As Jack and Pulseaudio both needs Ringbuffer that include can be done in same place. In configure.in also Pulseaudio header file was included before it was sure that it was really needed. Commit makes sure that Pulseaudio include is available only if it's needed as it can cause failing in build if Pulseaudio develoment files are not available. * added .idea to gitignore * added .idea to gitignore * restored workflows directory * Minor fixes to FindOboe.cmake * Enhanced prebuilt libraries compatibility in FindOboe.cmake * Minor changes to Pa_Oboe/Readme and pa_oboe.cpp * Removed auto latency tuning in favor of simpler impleentation in pa_oboe.cpp * Set paFloat32 as default format in pa_oboe.cpp * Renamed most of the variables according to best coding practices. * Added separate callback class to fix the single-stream issue. * Modified OboeEngine accordingly * Adjusted the code in the rest of pa_oboe.cpp * Removed stop and close phases of OboeEngine::restartStream * Updated functions' description * minor description corrections * fixed all compiling errors generated by typos * Added OboeMediator class in place of OboeCallback, that mediates PortAudio C stream struct and the C++ OboeEngine class * Fixed allocation problem, working PaOboe implementation * Fix 'pulseaudioHostApi' use-after-free/null ptr deref in PaPulseAudio_Initialize (PortAudio#847) The call to PaPulseAudio_UnLock( pulseaudioHostApi->mainloop ) in error-label is performed on 'pulseaudioHostApi' after 'pulseaudioHostApi' has been freed by PaPulseAudio_Free and set to NULL. * wdmks: declare GUIDs with selectany attribute (PortAudio#846) * wdmks: declare GUIDs with selectany attribute Match the behavior of guiddef.h in both mingw and the Windows SDK headers. This prevents linking errors caused by multiply defined symbols when linking against certain Windows SDK libs (like dxguid.lib). * Make sure this works even if DECLSPEC_SELECTANY is not defined --------- Co-authored-by: Ross Bencina <[email protected]> * fixed README.md indenting * Removed .idea folder from repo * replaced 'g_' with 'paOboe_' in non-static global variables * replaced 'm_' prefix with 'm' prefix * fixed OboeEngine::tryStream as requested * PulseAudio Portaudio HostAPI (PortAudio#336) Adds support for PulseAudio API on Linux. For more information about Pulseaudio visit: https://www.freedesktop.org/wiki/Software/PulseAudio/ --------- Signed-off-by: Mario Kleiner <[email protected]> Co-authored-by: sqweek <[email protected]> Co-authored-by: Daniel Schürmann <[email protected]> Co-authored-by: Mooneer Salem <[email protected]> Co-authored-by: Be <[email protected]> Co-authored-by: Mario Kleiner <[email protected]> * pulseaudio: Move Pulseaudio include in correct place when using autoconf (PortAudio#843) As Jack and Pulseaudio both needs Ringbuffer that include can be done in same place. In configure.in also Pulseaudio header file was included before it was sure that it was really needed. Commit makes sure that Pulseaudio include is available only if it's needed as it can cause failing in build if Pulseaudio develoment files are not available. * restored workflows directory * Minor fixes to FindOboe.cmake * Enhanced prebuilt libraries compatibility in FindOboe.cmake * Minor changes to Pa_Oboe/Readme and pa_oboe.cpp * Removed auto latency tuning in favor of simpler impleentation in pa_oboe.cpp * Set paFloat32 as default format in pa_oboe.cpp * Renamed most of the variables according to best coding practices. * Added separate callback class to fix the single-stream issue. * Modified OboeEngine accordingly * Adjusted the code in the rest of pa_oboe.cpp * Removed stop and close phases of OboeEngine::restartStream * Updated functions' description * minor description corrections * fixed all compiling errors generated by typos * Added OboeMediator class in place of OboeCallback, that mediates PortAudio C stream struct and the C++ OboeEngine class * Fixed allocation problem, working PaOboe implementation * fixed README.md indenting * Removed .idea folder from repo * replaced 'g_' with 'paOboe_' in non-static global variables * replaced 'm_' prefix with 'm' prefix * fixed OboeEngine::tryStream as requested * Changed names to improve readability, i.e. OboeStream -> PaOboeStream * fixed all compiling errors generated by typos * Fixed minor problem with TryStream * fixed long line in FindOboe.cmake * fixed typos in pa_oboe.cpp * set to verbose some logs * Fixed minor problem with TryStream * fixed long line in FindOboe.cmake * fixed typos in pa_oboe.cpp * set to verbose some logs * Better handling of format in paOboe, removed junk code from CMakeLists * Improved readability of some variables * Removed '#include oboe/Oboe.h' from pa_oboe.h, and modified host api implementation accordingly * static cast fixes --------- Signed-off-by: Mario Kleiner <[email protected]> Co-authored-by: Carlo Benfatti <[email protected]> Co-authored-by: hopefulGiupplo <[email protected]> Co-authored-by: Carlo Bramini <[email protected]> Co-authored-by: Etienne Dechamps <[email protected]> Co-authored-by: Daniel Schürmann <[email protected]> Co-authored-by: dmitrykos <[email protected]> Co-authored-by: Ross Bencina <[email protected]> Co-authored-by: Tuukka Pasanen <[email protected]> Co-authored-by: sqweek <[email protected]> Co-authored-by: Mooneer Salem <[email protected]> Co-authored-by: Be <[email protected]> Co-authored-by: Mario Kleiner <[email protected]> Co-authored-by: Tuukka Pasanen <[email protected]> Co-authored-by: invertego <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The call to PaPulseAudio_UnLock( pulseaudioHostApi->mainloop ) in error-label is performed on 'pulseaudioHostApi' after 'pulseaudioHostApi' has been freed by PaPulseAudio_Free