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


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

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

Синтаксис

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

Параметры

RequestedSize

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

AudioBufferMdl

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

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 должны указывать cacheType mmWriteCombined для обеспечения совместного использования кэша. Это связано с тем, что контроллер аудио с высоким определением Intel может быть настроен для операции, отличной от snoop.

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

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

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

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

Требования

Требование Ценность
заголовка portcls.h
IRQL PASSIVE_LEVEL

См. также

IMiniPortWaveRTStream