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


Вспомогательные интерфейсы Portcls для разгрузки аудиообработки

В этом разделе представлены вспомогательные интерфейсы, добавленные корпорацией Майкрософт в свой драйвер класса аудиопорта (PortCls), чтобы упростить реализацию драйверов, поддерживающих обработку разгрузки аудио.

При разработке драйвера miniport WaveRT, который будет работать с аудиоадаптером, способным обрабатывать аппаратно-разгруженные аудиопотоки, драйвер минипорта работает с PortCls для потоковой передачи и (или) обработки звуковых данных.

PortCls может обрабатывать все связанные с разгрузкой свойства потоковой передачи ядра (KS), что упрощает разработку драйвера мини-порта WaveRT для предоставления поддержки обработки аппаратно-разгруженных аудиопотоков. В результате обновлений PortCls вызывает только базовый драйвер мини-порта для аппаратных и (или) конкретных операций драйвера через два недавно определенных интерфейса:

Для работы с этими интерфейсами необходимо разработать два класса, по одному для каждого интерфейса.

Работа с IMiniportAudioEngineNode

Класс, который вы разрабатываете для работы с IMiniportAudioEngineNode, также должен наследоваться от IMiniportWaveRT. Методы, определенные в IMiniportAudioEngineNode , позволяют драйверу использовать свойства KS, которые обращаются к обработчику звука через дескриптор фильтра KS. Иерархия классов и интерфейсов выглядит следующим образом:

Схема, показывающая пользовательский класс мини-порта WaveRT, наследующий от IMiniportWaveRT и IMiniportAudioEngineNode.

Таким образом, если, например, вы разрабатываете класс CYourMiniportWaveRT, то, как видно на предыдущей схеме, CYourMiniportWaveRT должен реализовать все методы (показанные как Operations), определенные для двух родительских интерфейсов.

Скелетный шаблон для такого класса будет содержать следующий код:

class CMiniportWaveRT : 
    public IMiniportWaveRT,
    public IMiniportAudioEngineNode,
    public CUnknown
{
...

    IMP_IMiniportWaveRT;
    IMP_IMiniportAudioEngineNode;
...

};

Файл заголовка Portcls.h определяет эти интерфейсы.

Работа с IMiniportStreamAudioEngineNode

Класс, который вы разрабатываете для работы со вторым интерфейсом IMiniportStreamAudioEngineNode, также должен наследоваться от IMiniportWaveRTStreamNotification. Методы, определенные в IMiniportStreamAudioEngineNode , позволяют драйверу использовать свойства KS, которые обращаются к обработчику звука через маркер экземпляра контактов. Иерархия классов и интерфейсов выглядит следующим образом:

Схема, показывающая пользовательский класс минипорта потока WaveRT, наследующий от IMiniportWaveRTStreamNotification и IMiniportStreamAudioEngineNode.

Таким образом, если, например, вы разрабатываете класс CYourMiniportWaveRTStream, то, как видно на предыдущей схеме, CYourMiniportWaveRTStream должен реализовать все методы, определенные для двух родительских интерфейсов.

Скелетный шаблон для такого класса будет содержать следующий код:

class CMiniportWaveRTStream : 
    public IMiniportWaveRTStreamNotification,
    public IMiniportStreamAudioEngineNode,
    public CUnknown
{
...
    IMP_IMiniportWaveRTStream;
    IMP_IMiniportWaveRTStreamNotification;
    IMP_IMiniportStreamAudioEngineNode;
...

};

Файл заголовка Portcls.h определяет эти интерфейсы. Дополнительные сведения о разработке драйвера, который может обрабатывать аппаратно-разгруженные аудиопотоки, см. в статье Реализация аппаратного драйвера аудиодрайва.