snd_pcm_plugin_write()

Передача PCM данных в канал воспроизведения (плагино-зависимая функция)

Прототип:

#include <sys/asoundlib.h>
ssize_t snd_pcm_plugin_write( snd_pcm_t *handle,
const void *buffer,
size_t size );

Аргументы:

handle
Дескриптор PCM устройства, созданный с помощью snd_pcm_open() или snd_pcm_open_preferred().
buffer
Указатель на буфер с данными.
size
Размер буфера в байтах.

Библиотека:

libasound

Описание:

Функция snd_pcm_plugin_write() записывает сэмплы в устройство, определяемое дескриптором handle. Формат сэмплов должен быть задан через snd_pcm_plugin_params().


Note: Аргументы handle и buffer должны быть корректными.

Если используется режим SND_SRC_MODE_ACTUAL или SND_SRC_MODE_ASYNC (см. snd_pcm_plugin_set_src_mode()), следует вызвать snd_pcm_plugin_update_src() после каждого вызова snd_pcm_plugin_write().

Возвращаемое значение:

>=0
Число успешно записанных в устройство данных в байтах, если воспроизведение было успешным. В противном случае следует проверить errno и вызвать snd_pcm_plugin_status().
-EAGAIN
Субустройство открыто в неблокирующем режиме и не готово к отправке данных, следует попробовать позднее.
-EINVAL
Частичная буферизация блоков данных отключена, но size не соответствует размеру полного блока данных.
-EIO
Одно из следующих условий:
-EWOULDBLOCK
Операция записи могла быть заблокирована (при неблокирующей записи).

Примеры:

См. wave.c.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

Функция является плагино-зависимым аналогом snd_pcm_write(). Следует убедиться, что плагино-зависимый и независимый вызовы не смешиваются в приложении. В противном случае поведение будет непредсказуемым.

Плагино-зависмые версии вызово чтения и записи не требуют того, чтобы операции производитись с данными, кратными размеру фрагмента (в отличие от плагино-независимых вызовов). Это связано с логикой работы плагина буферизации (см. snd_pcm_plugin_set_disable()). Отключить его можно с помощью бита PLUGIN_DISABLE_BUFFER_PARTIAL_BLOCKS параметра функции snd_pcm_plugin_set_disable(). В этом случае плагино-зависимые функции буду возвращать ошибку при попытке работы с данными не кратными размеру фрагмента.

В любом случае чредующиеся стерео данные должны быть выровнены по размеру сэмплов (по числу каналов). Например, каждая запись должна иметь такое же число сэмплов для левого и правого каналов.

Тематические ссылки:

snd_pcm_plugin_read(), snd_pcm_plugin_set_disable(), snd_pcm_plugin_set_src_mode(), snd_pcm_plugin_update_src(), snd_pcm_write()




Предыдущий раздел: Библиотека libasound