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


Требования к фабрике контактов без PCM

В Windows XP и более поздних версиях и Microsoft Windows Me драйверы, которые играют в форматах WAVEFORMATEX , отличных от PCM, должны предоставлять свои контакты, не относящиеся к PCM, в соответствии со следующими рекомендациями.

Во-первых, определите фабрику контактов для формата данных, отличного от любых фабрик контактов PCM. PCM и не pcm не могут совместно использовать одну и ту же фабрику контактов с одним экземпляром, так как единственный экземпляр контактов автоматически выделяется для KMixer. Если фабрика контактов поддерживает несколько экземпляров, PCM и не PCM могут сосуществовать в одной фабрике контактов. В этом случае, однако, вы не можете гарантировать, что эти экземпляры контактов будут доступны клиенту, не использующему PCM, во время выполнения . Возможно, клиенты PCM уже выделили их. Самый безопасный вариант — предоставить отдельную фабрику контактов для формата, отличного от PCM.

Чтобы обнаружить и использовать контакт в DirectSound 8, определите эту фабрику контактов, не относящихся к PCM, в фильтре, который уже поддерживает PCM. В противном случае DirectSound не обнаружит контакт, отличный от PCM. Это также означает, что устройство, которое вообще не поддерживает PCM, не поддерживает формат, отличный от PCM.

Во-вторых, реализуйте обработчик пересечения данных на контакте, отличном от PCM. PortCls предоставляет встроенный обработчик, но этот обработчик по умолчанию всегда выбирает PCM, поэтому следует добавить собственный обработчик для форматов, отличных от PCM. Не следует поддерживать WAVE_FORMAT_PCM в обработчике пересечения для контакта, отличного от PCM. Обратите внимание, что этот обработчик можно вызывать с outputBufferLength 0. В этом случае вызывающий объект запрашивает только размер предпочтительного диапазона данных, а не сами данные. В этом случае обработчик должен ответить, скопировав размер диапазона данных, не относящихся к PCM, в параметр ResultantFormatLength и возвратив STATUS_BUFFER_OVERFLOW. Пример Msvad в комплекте драйверов Windows (WDK) содержит код для подпрограммы DataRangeIntersection , которую можно использовать в качестве примера обработчика. Чтобы протестировать подпрограмму DataRangeIntersection , используйте служебную программу KsStudio для создания экземпляра пин-кода. Она сначала вызывает обработчик пересечения, чтобы определить приемлемый формат по умолчанию. Для поддержки формата, отличного от PCM, драйвер должен правильно обрабатывать его в следующих расположениях: