Commit graph portaudio/src/hostapi/alsa/pa_linux_alsa.c
Author SHA1 Message Date
Dmitry Kostjuchenko
da20219f27
Merge pull request #312 from PortAudio/alsa_ignore_all_plugins
alsa: Option to ignore all ALSA plugin devices.
2020-10-22 10:34:51 +03:00
dmitrykos
6bb858643b alsa: Introduce possibility to ignore all ALSA plugin devices by setting the environment variable PA_ALSA_IGNORE_ALL_PLUGINS to non-0. Fixed logic of guarding assertion in BuildDeviceList() when only one or none PCM device is available (may occur if PA_ALSA_IGNORE_ALL_PLUGINS is set to non-0 or when device has no any audio device available, including plugin devices). 2020-10-15 11:05:05 +03:00
Ross Bencina
f828ad5fdc Merge branch 'alsa_uninitialized_dir_fixes' into 'master'
Fix additional cases of uninitialized dir variable in pa_linux_alsa.c

+1: Phil Burk

Merged-on: https://assembla.com/code/portaudio/git/merge_requests/7613051
2020-08-06 00:25:37 +00:00
Ross Bencina
f269bf93e6 follow up fix related to 933b05c331 (ticket #263 uninitialized dir variable): fix the three other places where dir parameter wasn't set prior to entry to a snd_pcm_*_get_* function. There is some ambiguity about (a) whether this is intentional (i.e. use the rounding dir returned by previous *_get_* call, the PA source code does not indicate), and (b) whether it is meaningful (i.e. whether *_get_* functions actually use the value upon input -- the ALSA docs are not clear. regarding (a): I don't think it's intentional, i think it was just oversight. In any case thr risk is low: the underlying values of period_size, periods_max, periods_min, are all integer and should not be rounded, get_rate_min/get_rate_max are used only for debug reporting (I've set them to 0,0 for a minimal change from the current code, but -1,1 makes more sense). 2019-05-14 07:36:24 +10:00
Ross Bencina
933b05c331 fix uninitialized dir variable in pa_linux_alsa.c GropeDevice() by removing it. pass NULL as parameter to ALSA functions instead. see ticket #263. 2019-05-14 07:00:47 +10:00
Phil Burk
f17d549093 pa_linux_alsa: fix hang in callback caused by abort
The author of this patch is Alan Horstmann.

Fixes ticket #251
2016-09-14 08:50:33 -07:00
gineera
e2662ae2ad Alsa: Revise the use of the environment variable 'PA_ALSA_PLUGHW' so it correctly influences the Device-List and the capabilities reported. Also rename a mis-leading variable and add one additional DEBUG line. 2013-10-17 12:44:09 +00:00
gineera
3029485a0e Alsa: Add function to prevent duplicate parts in the visible pa device name string, that occur when the pcm-device name starts with the card name (since they are both used). Achieved by trimming the pcm-device string beginning. 2013-08-27 17:14:51 +00:00
gineera
bbf60ab137 Alsa: Fix memory leak as nonMmapBuffers were not freed (since change to realloc). Clean out corresponding dead code chunk. 2013-08-22 22:01:17 +00:00
gineera
d17353a602 Alsa: Rename some variables in pa_linux_alsa where the meaning is mis-leading or wrong in the Alsa context. Also tweak one debug message and a few typos. 2013-08-22 19:43:07 +00:00
gineera
b1a62661bf Alsa: Fix handling of poll descriptors in PaAlsaStream_WaitForFrames(). Otherwise if capture signals before playback a duplex stream could poll the wrong descriptor, causing a loop (reported by Alexander Kartashov). 2013-08-13 20:37:04 +00:00
gineera
28f9ee0965 Alsa: revise latency use and calculations, since the latency should be equivalent to one Alsa period less than the Alsa ringbuffer (was based on the whole). Also fixes failure if zero latency was specified. 2013-06-08 19:12:25 +00:00
gineera
f69a02a99a Alsa: re-write SetApproximateSampleRate() to allow small deviations from a nominal requested rate, so inexactly clocked cards do not fail (use 1% tolerance). 2012-05-18 16:04:30 +00:00
gineera
8a244e09f1 Alsa: remove tabs and fix whitespace in pa_linux_alsa.c in line with the Portaudio coding standards 2012-05-04 08:18:05 +00:00
gineera
d82cd55923 Alsa: default sample rate should always be chosen with Alsa-lib sample-rate conversion disabled. 2012-05-02 21:46:01 +00:00
gineera
ce083a09b7 Alsa: fix defaultHighLatency - sample rate has to be set following reset of hwParams. 2012-05-02 21:32:40 +00:00
rbencina
ebd20865db rolling back r1822 and r1815 to pa_linux_alsa.c . will recommit on alsa_hw_endian_subdevice branch 2012-05-01 08:18:14 +00:00
dmitrykos
1526a5bfc7 alsa: fix paSwapEndian applied to non-24bit formats due to incorrect logic of tests 2012-03-28 16:14:49 +00:00
gineera
00502bdef0 Alsa: add a workaround for stuttering/xruns when using default device on Alsa-lib older than 1.0.16 (caused by zero 'revents' when poll() returns). 2012-03-01 21:20:07 +00:00
dmitrykos
d998066452 alsa:
- support for sub-devices;
- fixed 24-bit format support for some devices which on little-endian machine operate only in big-endian format, example of such device is Audio4DJ which supports only SND_PCM_FORMAT_S24_3BE (for this patch implemented support only for 24-bit audio samples although other formats may be added in case of necessity and if such devices exist);
! special thanks to Owen Williams from Mixxx project who tested these changes/fixes on real Audio4DJ device.
2012-02-16 16:59:03 +00:00
alan_horstmann
56f148f7b8 Correct some entries in the devices 'predefinedNames' list - 'dmix' device is always only for playback. This removes an Alsa-lib dmix error message during Portaudio initialization. 2011-12-08 19:43:29 +00:00
aknudsen
ef2d8b6cd8 PA ALSA: define SND_PCM_TSTAMP_ENABLE as SND_PCM_TSTAMP_MMAP if the former is undefined 2011-05-26 20:19:19 +00:00
rossb
cbd24dc45c renamed PaUtil_GetBufferProcessorInputLatency to PaUtil_GetBufferProcessorInputLatencyFrames and PaUtil_GetBufferProcessorOutputLatency to PaUtil_GetBufferProcessorOutputLatencyFrames. see ticket #161 2011-05-02 17:07:11 +00:00
philburk
1ca032a561 Ass semicolon to fix "label at end of compound statement" error
caused by pthread_cleanup_pop(1) macro.
2011-03-01 00:49:52 +00:00
dmitrykos
9c4c92fef6 alsa:
- implemented dynamic ALSA loading, you shall define PA_ALSA_DYNAMIC when compiling PortAudio library, by default PortAudio will use compile time linkage;
- added PA_ALSA_PATHNAME define to redefine ALSA library path and filename to some other name and location, has effect only together with PA_ALSA_DYNAMIC;
- added extension function (PaAlsa_SetLibraryPathName) which allows to set ALSA library path and filename during application run-time overwriting default set by PA_ALSA_PATHNAME during compilation;
- added API compatibility with Android OS (although ALSA may not be available on your device and usually requires 'root' access rights to open an audio device), some missing ALSA functions are replaced with stubs (needs more input from interested parties), to compile on Android you need to add ALSA headers (get it from Android GIT source-code tree) to compiler's searchable path.
2011-02-11 00:15:51 +00:00
dmitrykos
4318a7556b alsa:
- fixed callback thread to exit normally if error condition was satisfied during stream processing (OnExit wasn't called), it was possible cause of crash if error happened inside the thread
- modified processing thread to timeout during poll() within around 2 seconds instead of 64 milliseconds, this will help to fix problems on systems with low processing power and possible CPU overloading, like portable ARM devices
- timeout of poll() will not cause stream to stop but will cause Alsa stream restart, poll timeout will now set 'xrun' event to 1
2011-02-09 08:53:50 +00:00
dmitrykos
96b86da500 alsa: fixed Segmentation fault due to dangling pointer left by snd_lib_error_set_handler() call which set callback pointer to ALSA during PaAlsa_Initialize call. Segmentation fault happens only if application dynamically unloaded PortAudio while still using ALSA through other means, then next ALSA error which causes invocation of ALSA error handling callbacks would cause Segmentation fault. Bug reported in: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=563192, and re-announced by Phil Burk on 15.10.2010. 2010-10-15 20:39:23 +00:00
dmitrykos
b6e9030f6f alsa: avoid SetApproximateSampleRate() excessive log messages when Pa_IsFormatSupported API method is used to test for supported sample rates and some of them are not supported by device 2010-09-20 16:23:30 +00:00
dmitrykos
2b8866cd3d alsa:
- trying to fix specific case of stream failing to open when min/max period is specifying fixed value with +/-1 difference, we try choosing middle then which seems to be aligned to 2
2010-08-02 10:37:18 +00:00
dmitrykos
d9d12f6b82 alsa:
- improved host buffer size calculation: taking into account obligatory double buffering utilising formula (userFrames + MAX( userFrames, SR * suggestedLatency)), aligning host buffer with user buffer size, additional testing of host buffer size to avoid failure on snd_pcm_hw_params_set_period_size_near, additional logging for more convenient debugging
2010-07-30 10:44:18 +00:00
dmitrykos
55ca7ea7d5 alsa:
- fixed seg.fault (caused by assertion) when using non-interleaved host i/o, now paNonInterleaved flag is provided to PaUtil_InitializeBufferProcessor to signal processor about host format being non-interleaved
2010-07-29 18:54:45 +00:00
dmitrykos
71e6e5f6a5 alsa: reverted broken specification (by me) according device latency being not dependent on user buffer size, now framesPerBuffer parameter and suggestedLatency set overall stream latency 2010-06-28 21:19:15 +00:00
dmitrykos
c8414a679e alsa:
- fixed latency setting dependence on user buffer size, now it is completely independent and user is able to set lowest possible/audible latency (approx. 3-4ms)
 - fixed fixed min. latency for non-MMAPed devices, they do behave similar to MMAPed devices now without a limitation
2010-06-03 20:09:33 +00:00
dmitrykos
d031474d95 alsa: - if polling loop is timed out (paTimedOut) PaAlsaStream_WaitForFrames will not report any frames available 2010-06-01 12:45:09 +00:00
dmitrykos
ddfac9891b alsa: - releasing memory of non-MMAPed buffer on stream closure by Pa_CloseStream 2010-05-31 06:00:16 +00:00
dmitrykos
770a597583 alsa:
- reverted buffer size (2048) hardcoding for non-MMAPed devices to avoid crash on wrong buffer size usage (whole area requires more work)
 - optimized non-MMAPed device operation to avoid malloc(memset)/free usage on every processing call avoiding significant performance penalty
2010-05-30 22:14:00 +00:00
dmitrykos
768ce2169e alsa:
- fixed deadlock in PaAlsaStream_WaitForFrames if device is paused, poll() results are now checked for 0 and if 64 times exceeded an error (paTimedOut) is returned
 - removed hardcoded low-limit of latency for non-MMAPed devices, it is an obligation for user to set an acceptable/desired latency value
 - tuned XRUN recovery sequence for MMAPed devices
2010-05-30 07:28:41 +00:00
aknudsen
a9238346fe Fix latency calculation in PA ALSA 2009-06-03 18:57:56 +00:00
aknudsen
822c292009 Add PA ALSA extension to allow setting number of retries when busy 2009-05-24 17:02:10 +00:00
aknudsen
85a522fc4a Apply Kevin Kofler's non-mmap patch 2009-05-24 16:54:22 +00:00
bjornroche
c1e1d067d2 moved trunk into place 2008-03-20 14:24:39 +00:00