Метод 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 |