Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Подпрограмма TransferCodecVerbs передает одну или несколько команд в кодеки или кодеки и извлекает ответы на эти команды.
Тип указателя функции для подпрограммы TransferCodecVerbs определяется следующим образом.
Синтаксис
PTRANSFER_CODEC_VERBS PtransferCodecVerbs;
NTSTATUS PtransferCodecVerbs(
[in] PVOID _context,
[in] ULONG Count,
[in, out] PHDAUDIO_CODEC_TRANSFER CodecTransfer,
[in] PHDAUDIO_TRANSFER_COMPLETE_CALLBACK Callback,
[in] PVOID Context
)
{...}
Параметры
[in] _context
Указывает значение контекста из элемента Контекста структуры HDAUDIO_BUS_INTERFACE, HDAUDIO_BUS_INTERFACE_V2или структурыHDAUDIO_BUS_INTERFACE_BDL.
[in] Count
Указывает количество элементов в массиве codecTransfer .
[in, out] CodecTransfer
Указатель на массив HDAUDIO_CODEC_TRANSFER структур. Каждый элемент массива представляет собой структуру, содержащую хранилище для как выходной команды вызывающего объекта, так и соответствующего входного ответа из кодека.
[in] Callback
Указатель функции на подпрограмму обратного вызова. Этот параметр является указателем функции типа HDAUDIO_TRANSFER_COMPLETE_CALLBACK. Параметр можно указать как NULL. Дополнительные сведения см. в следующем разделе "Примечания".
[in] Context
Значение контекста для подпрограммы обратного вызова. Вызывающий объект приводит значение контекста к типу PVOID. После выполнения команд асинхронно драйвер шины HD Audio передает контекстное значение подпрограмме обратного вызова в качестве параметра вызова.
Возвращаемое значение
TransferCodecVerbs возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае подпрограмма возвращает соответствующий код ошибки. В следующей таблице показан возможный код состояния возврата.
| Код возврата | Описание |
|---|---|
|
Указывает, что запрос не удалось добавить в очередь команд из-за нехватки непагаченной памяти. |
Замечания
Эта подпрограмма отправляет одну или несколько команд кодека драйверу шины HD Audio. Драйвер шины выдает команды кодекам, извлекает ответы кодеков на команды и выводит ответы вызывающему объекту.
Вызывающий объект задает команды в массиве HDAUDIO_CODEC_TRANSFER структур. Каждая структура содержит хранилище как для команды, так и для ответа кодека этой команды. Перед вызовом TransferCodecVerbs вызывающий объект заполняет команды в каждой из структур в массиве. По завершении каждой команды драйвер аудиошины HD извлекает ответ кодека и записывает его в структуру. После завершения последней команды вызывающий объект может считывать ответы из массива.
Подпрограмма может работать синхронно или асинхронно:
- Если вызывающий объект задает значение NULL для обратного вызова входного параметра, драйвер шины HD Audio завершает команды в массиве codecTransfer синхронно. (Другими словами, подпрограмма возвращается только после того, как кодеки обработали все команды и ответы на эти команды доступны.)
- Если вызывающий объект задает значение, отличное от NULL для параметра обратного вызова , подпрограмма работает асинхронно. (Другими словами, подпрограмма возвращается сразу после добавления команд в внутреннюю очередь, не ожидая обработки всех команд кодеков. После обработки команд кодеки драйвер hd Audio bus вызывает подпрограмму обратного вызова. В асинхронном случае вызывающий объект не должен пытаться считывать ответы на команды, прежде чем водитель шины вызывает подпрограмму обратного вызова.
typedef VOID
(*PHDAUDIO_TRANSFER_COMPLETE_CALLBACK)
(HDAUDIO_CODEC_TRANSFER *, PVOID);
Первый параметр вызова — это указатель на элемент массива codecTransfer , содержащий команду codec и ответ, который активировал обратный вызов. Второй параметр вызова — это то же значение контекста, которое было указано ранее в параметре callbackContext подпрограммы TransferCodecVerbs.
В случае успешного выполнения TransferCodecVerbs возвращает STATUS_SUCCESS. Смысл этого кода состояния зависит от того, работает ли подпрограмма синхронно или асинхронно:
- В синхронном случае (обратный вызов имеет значение NULL), STATUS_SUCCESS означает, что драйвер шины имеет все команды в массиве codecTransfer к кодекам и что подпрограмма написала все ответы на эти команды в массив. Однако вызывающий объект должен проверить отдельные ответы, чтобы определить, являются ли они допустимыми. Отдельные ответы могут быть недопустимыми из-за времени ожидания кодека или переполнения FIFO.
- В асинхронном случае (обратный вызов не имеет значения NULL), STATUS_SUCCESS означает, что подпрограмма успешно добавила команды во внутреннюю очередь драйвера аудиоконференции HD. Вызывающий объект не должен пытаться прочитать ответы на эти команды, пока водитель шины не вызовет подпрограмму обратного вызова.
Если параметр обратного вызова имеет значение NULL, вызывающий объект должен работать в irQL PASSIVE_LEVEL. Если обратный вызов не имеет значения NULL, вызывающий объект может вызывать TransferCodecVerbs в IRQL <= DISPATCH_LEVEL, в этом случае вызов возвращается немедленно, не ожидая обработки кодеков всех команд; после завершения команд драйвер HD Audio bus вызывает подпрограмму обратного вызова в IRQL DISPATCH_LEVEL.
Вызывающий объект должен выделить массив codecTransfer из непагированного пула.
Требования
| Требование | Ценность |
|---|---|
| целевая платформа | Рабочий стол |
| Заголовок | hdaudio.h (include Hdaudio.h) |
| IRQL | См. раздел "Примечания". |