Статусная структура PCM канала
#include <sys/asoundlib.h>
typedef struct snd_pcm_channel_status {
int32_t channel;
int32_t mode;
int32_t status;
uint32_t scount;
struct timeval stime;
uint64_t ust_stime;
int32_t frag;
int32_t count;
int32_t free;
int32_t underrun;
int32_t overrun;
int32_t overrange;
uint32_t subbuffered;
uint8_t reserved[124];
} snd_pcm_channel_status_t;
Структура snd_pcm_channel_status_t
описывает статус PCM канала. Поля структуры включают:
- channel
- Ориентация канала. Одно из значений:
- SND_PCM_CHANNEL_CAPTURE
- SND_PCM_CHANNEL_PLAYBACK
- mode
- Режим передачи:
SND_PCM_MODE_BLOCK
(значение SND_PCM_MODE_STREAM
устарело). - status
- Состояние канала. Допустимые значения:
- SND_PCM_STATUS_NOTREADY
- Драйвер не готов к выполнению операций. После успешного вызова snd_pcm_channel_params(), состояние меняется на
SND_PCM_STATUS_READY
. - SND_PCM_STATUS_READY
- Драйвер готов к выполнению операций. Вызов mmap() для мапирования аудио буфера может быть выполнен только в этом состоянии, но сэмплы еще не могут быть переданы. После успешного вызова snd_pcm_channel_prepare(), snd_pcm_capture_prepare(), snd_pcm_playback_prepare() или snd_pcm_plugin_prepare(), состояние меняется на
SND_PCM_STATUS_PREPARED
. - SND_PCM_STATUS_PREPARED
- Драйвер подготовлен к выполнению передачи данных. Сэмплы могут быть переданы в этом состоянии.
- SND_PCM_STATUS_RUNNING
- Драйвер активно выполняет передачу данных с использованием оборудования. Сэмплы могут быть переданы в этом состоянии.
- SND_PCM_STATUS_UNDERRUN
- Канал воспроизведения находится в состоянии underrun (очередь на отправку опустошена). Драйвер полностью опустошил буферы перед получением новых данных. Следует повторно выполнить подготовку канала перед продолжением воспроизведения посредством вызова snd_pcm_channel_prepare(), snd_pcm_playback_prepare() или snd_pcm_plugin_prepare() (см. wave.c).
- SND_PCM_STATUS_OVERRUN
- Канал захвата находится в состоянии overrun (очередь на получение переполнена). Драйвер записывает данные в буфер быстрее, чем они успевают обрабатываться. Передачи в канале застопорились. Следует повторно выполнить подготовку канала перед продолжением захвата посредством вызова snd_pcm_channel_prepare(), snd_pcm_capture_prepare() или snd_pcm_plugin_prepare() (см. waverec.c).
- SND_PCM_STATUS_PAUSED
- Воспроизведение поставлено на паузу (не поддерживается аудио стеком).
- scount
- Число байт данных, обработанных с последнего начала воспроизведения/захвата. Это значение обрезается, когда достигает значения
SND_PCM_BOUNDARY
и сбрасывается при подготовке канала. - stime
- Время начала процедуры воспроизведения/захвата в формате gettimeofday(). Это поле имеет корректное значение только при установке флага time в структуре snd_pcm_channel_params_t.
- ust_stime
- Время начала процедуры воспроизведения/захвата в формате UST. Это поле имеет корректное значение только при установке флага ust_time в структуре snd_pcm_channel_params_t.
- frag
- Текущее число фрагментов (доступно только в блочном режиме).
- count
- Число байт данных в очереди/буфере (см. замечание ниже).
- free
- Размер свободных байт данных в очереди/буфере (см. замечание ниже).
- underrun
- Число underrun событий воспроизведения с момента последнего получения статусной информации.
- overrun
- Число overrun событий захвата с момента последнего получения статусной информации.
- overrange
- Число обнаруженных overrun событий ADC с момента последнего получения статусной информации.
- subbuffered
- Число байт данных, буферизированных в плагине.
ЗОСРВ «Нейтрино»
Предыдущий раздел: Библиотека libasound