Transfer PCM data from the capture channel (plugin-aware)
#include <sys/asoundlib.h> ssize_t snd_pcm_plugin_read( snd_pcm_t *handle, void *buffer, size_t size );
The snd_pcm_plugin_read() function reads samples from the device which must be in the proper format specified by snd_pcm_plugin_params().
This function may suspend the client application if block behavior is active (see snd_pcm_nonblock_mode()) and no data is available for reading.
A positive value that represents the number of bytes that were successfully read from the device if the capture was successful, or a negative errno if an error occurred. The errno values are available in the errno.h file.
QNX Neutrino
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | Yes |
Thread | Read the Caveats |
This function is not thread safe if handle (snd_pcm_t) is used across multiple threads.
This function is the plugin-aware version of snd_pcm_read() . It functions exactly the same way, with only one caveat (see below). However, make sure that you don't mix and match plugin- and nonplugin-aware functions in your application, or you may get undefined behavior and misleading results.
The plugin-aware versions of the PCM read and write calls don't require that you work with multiples of fragment-size blocks (the nonplugin-aware versions do). This is because one of the plugins in the lib sub-buffers the data for you. You can disable this plugin by setting the PLUGIN_BUFFER_PARTIAL_BLOCKS bit with snd_pcm_plugin_set_disable() , in which case, the plugin-aware versions also fail on reads and writes that aren't multiples of the fragment size.
Either way, interleaved stereo data has to be aligned by the sample size times the number of channels (i.e. each write must have the same number of samples for the left and right channels).