функция обратного вызова PCHANGE_BANDWIDTH_ALLOCATION (hdaudio.h)

Эта подпрограмма ChangeBandwidthAllocation изменяет распределение пропускной способности модуля DMA в HD Audio Link.

Тип указателя функции для ChangeBandwidthAllocation подпрограммы определяется следующим образом.

Синтаксис

PCHANGE_BANDWIDTH_ALLOCATION PchangeBandwidthAllocation;

NTSTATUS PchangeBandwidthAllocation(
  [in]  PVOID _context,
  [in]  HANDLE Handle,
  [in]  PHDAUDIO_STREAM_FORMAT StreamFormat,
  [out] PHDAUDIO_CONVERTER_FORMAT ConverterFormat
)
{...}

Параметры

[in] _context

Задает значение контекста из элемента Contextструктуры HDAUDIO_BUS_INTERFACE, HDAUDIO_BUS_INTERFACE_V2 или HDAUDIO_BUS_INTERFACE_BDL .

[in] Handle

Дескриптор идентификации подсистемы DMA. Это значение дескриптора было получено из предыдущего вызова Метода AllocateCaptureDmaEngine или AllocateRenderDmaEngine.

[in] StreamFormat

Задает запрошенный формат потока. Этот параметр указывает на структуру, выделенную вызывающим объектом, с типом HDAUDIO_STREAM_FORMAT , которая задает формат данных для потока.

[out] ConverterFormat

Извлекает формат преобразователя. Этот параметр указывает на структуру, выделенную вызывающим объектом, с типом HDAUDIO_CONVERTER_FORMAT , в которую подпрограмма записывает закодированный формат. Дополнительные сведения см. в разделе "Примечания".

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

ChangeBandwidthAllocation возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае подпрограмма возвращает соответствующий код ошибки. В следующей таблице показаны некоторые возможные коды ошибок возврата.

Код возврата Описание
STATUS_UNSUCCESSFUL
Указывает, что вызывающий объект работает на слишком высоком уровне IRQL.
STATUS_INVALID_HANDLE
Указывает, что значение параметра дескриптора недопустимо.
STATUS_INVALID_PARAMETER
Указывает, что одно из значений параметра неправильно (неправильный указатель или недопустимый формат потока).
STATUS_BUFFER_TOO_SMALL
Указывает, что подсистеме DMA не удается выделить достаточное внутреннее хранилище FIFO для поддержки запрошенного формата потока.
STATUS_INSUFFICIENT_RESOURCES
Указывает, что для выполнения запроса недостаточно пропускной способности.
STATUS_INVALID_DEVICE_REQUEST
Указывает, что поток не находится в состоянии сброса или что для подсистемы DMA по-прежнему выделен буфер.

Комментарии

Вызывающий объект получает начальное выделение пропускной способности для подсистемы DMA, вызывая Метод AllocateCaptureDmaEngine или AllocateRenderDmaEngine. После этого вызывающий объект может изменить распределение пропускной способности, вызвав .ChangeBandwidthAllocation

С помощью параметра converterFormat подпрограмма выводит значение дескриптора потока, которое вызывающий объект может использовать для программирования входных или выходных преобразователей. Подпрограмма кодирует сведения из параметра streamFormat в 16-битовое целое число. Дополнительные сведения см. в разделе HDAUDIO_CONVERTER_FORMAT.

Эта подпрограмма завершается сбоем и возвращает код ошибки STATUS_INVALID_DEVICE_REQUEST в любом из следующих случаев:

  • Ранее выделенный буфер DMA не был освобожден (путем вызова FreeDmaBuffer или FreeContiguousDmaBuffer).
  • Поток находится в состоянии, отличном от сброса.
Если вызов завершается ChangeBandwidthAllocation сбоем, существующее резервирование пропускной способности остается в силе. Распределение пропускной способности изменяется только в том случае, если вызов выполнен успешно.

В Windows Vista и более поздних версиях драйвер волнового минипорта вызывает эту подпрограмму во время выполнения метода SetFormat (после вызова одной из подпрограмм AllocateXxxDmaEngine в HD Audio DDI). Дополнительные сведения см. в разделе IMiniportWavePciStream::SetFormat.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть hdaudio.h (включая Hdaudio.h)
IRQL PASSIVE_LEVEL

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

AllocateCaptureDmaEngine

AllocateRenderDmaEngine

FreeContiguousDmaBuffer

FreeDmaBuffer

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_BDL

HDAUDIO_BUS_INTERFACE_V2

HDAUDIO_CONVERTER_FORMAT

HDAUDIO_STREAM_FORMAT

IMiniportWavePciStream::SetFormat