функция обратного вызова 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 (после вызова одной из подпрограмм "ВыделитьXxx"DmaEngine в DDI hd Audio DDI). Дополнительные сведения см. в IMiniportWavePciStream::SetFormat.

Требования

Требование Ценность
целевая платформа Настольный
заголовка hdaudio.h (include 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