Поделиться через


Метод IMiniportWaveRTStream::AllocateAudioBuffer (portcls.h)

Метод AllocateAudioBuffer выделяет циклический буфер для звуковых данных.

Синтаксис

NTSTATUS AllocateAudioBuffer(
  ULONG               RequestedSize,
  PMDL                *AudioBufferMdl,
  ULONG               *ActualSize,
  ULONG               *OffsetFromFirstPage,
  MEMORY_CACHING_TYPE *CacheType
);

Параметры

RequestedSize

Указывает запрошенный размер (в байтах) звукового буфера.

AudioBufferMdl

Выходной указатель для списка дескрипторов памяти (MDL), описывающего звуковой буфер. Этот параметр указывает на переменную указателя, выделенную вызывающим объектом, в которую метод записывает указатель на MDL. Общие сведения о многомерных библиотеках ядра Windows см. в разделе Использование mdls.

ActualSize

Указатель вывода для фактического размера выделенного буфера (в байтах). Этот параметр указывает на переменную ULONG, в которую метод записывает значение размера.

OffsetFromFirstPage

Выходной указатель для смещения буфера (в байтах) с начала первой страницы MDL. Этот параметр указывает на выделенную вызывающим объектом переменную ULONG, в которую метод записывает значение смещения.

CacheType

Указывает тип кэширования, запрашиваемого клиентом для звукового буфера. Этот параметр является значением перечисления MEMORY_CACHING_TYPE. Дополнительные сведения см. в разделе Примечания ниже.

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

Этот метод возвращает NTSTATUS. Функция AllocateAudioBuffer возвращает STATUS_SUCCESS, если вызов был выполнен успешно. В противном случае метод возвращает соответствующий код состояния ошибки. В следующей таблице показаны некоторые из возможных кодов состояния ошибок.

Код возврата Описание
STATUS_UNSUCCESSFUL Драйвер не поддерживает указанное сочетание атрибутов буфера.
STATUS_INSUFFICIENT_RESOURCES Для выделения буфера недостаточно памяти.
STATUS_DEVICE_NOT_READY Устройство не готово.

Комментарии

Примечание. Мини-порты для intel High Definition Audio Codecs должны указывать Тип кэша MmWriteCombined, чтобы обеспечить когерентность кэша. Это связано с тем, что контроллер Intel High Definition Audio Controller может быть настроен для операций, отличных от snoop.

Получив запрос KSPROPERTY_RTAUDIO_BUFFER от клиента, драйвер порта вызывает метод AllocateAudioBuffer, чтобы выделить циклический буфер, который драйвер порта впоследствии сможет сопоставить с виртуальным адресным пространством клиента.

Во время вызова AllocateAudioBuffer драйвер мини-порта выделяет циклический буфер путем вызова IPortWaveRTStream::AllocatePagesForMdl или IPortWaveRTStream::AllocateContiguousPagesForMdl. Драйвер мини-порта также программируют звуковое оборудование для воспроизведения или записи в этот буфер, но он не запускает передачу DMA, пока драйвер порта не вызовет IMiniportWaveRTStream::SetState с State=KSSTATE_RUN. Выходные параметры метода AllocateAudioBuffer включают MDL для звукового буфера, фактический размер буфера, выделенного драйвером, и смещение начала буфера с начала первой страницы В MDL.

RequestedSize — это входной параметр, указывающий размер, запрашиваемый клиентом для звукового буфера. ActualSize — это выходной параметр, указывающий фактический размер звукового буфера.

Звуковому устройству может потребоваться, чтобы звуковой буфер начинался и заканчиваться на границах выборки или соответствовать другим типам аппаратных ограничений выравнивания. Если доступно достаточно памяти, фактический размер буфера — это запрошенный размер, округленный (вверх или вниз) до ближайшей выборки или другой ограниченной аппаратной границы. Фактический размер должен быть не ниже запрошенного; В противном случае обработчик аудиоданных API сеансов звука (WASAPI) не будет использовать буфер, и создание потока завершится ошибкой.

Требования

Требование Значение
Заголовок portcls.h
IRQL PASSIVE_LEVEL

См. также раздел

IMiniPortWaveRTStream