Requisitos para una fábrica de patillas que no sea PCM
En Windows XP y versiones posteriores, y Microsoft Windows Me, los controladores que reproducen formatos WAVEFORMATEX que no son PCM deben exponer sus patillas que no son PCM según las siguientes directrices.
En primer lugar, defina un generador de patillas para el formato de datos que no sea PCM que sea independiente de cualquier factoría de patillas PCM. PCM y no PCM no pueden compartir el mismo generador de patillas de instancia única porque la única instancia de patilla se asigna automáticamente a KMixer. Si el generador de patillas admite varias instancias, PCM y no PCM pueden coexistir en el mismo generador de patillas. Sin embargo, en este caso, no se puede garantizar que estas instancias de patilla estén disponibles para un cliente que no sea PCM en tiempo de ejecución: es posible que los clientes PCM ya los hayan asignado. La opción más segura es proporcionar un generador de patillas independiente para el formato que no sea PCM.
Para que directSound 8 detecte y use el pin, defina esta fábrica de patillas que no sea PCM en un filtro que ya admita PCM. De lo contrario, DirectSound no detectará el pin que no sea PCM. Esto también significa que un dispositivo que no admite PCM en absoluto no puede admitir un formato no PCM.
En segundo lugar, implemente un controlador de intersección de datos en el pin que no sea PCM. PortCls proporciona un controlador integrado, pero este controlador predeterminado siempre elige PCM, por lo que debe agregar su propio controlador para formatos que no son PCM. No debe admitir WAVE_FORMAT_PCM en el controlador de intersección para el pin que no sea PCM. Tenga en cuenta que se puede llamar a este controlador con outputBufferLength de 0, en cuyo caso el autor de la llamada solicita solo el tamaño del intervalo de datos preferido, no para los propios datos. En este caso, el controlador debe responder copiando el tamaño del intervalo de datos que no es PCM en el parámetro ResultantFormatLength y devolviendo STATUS_BUFFER_OVERFLOW. El ejemplo Msvad del Kit de controladores de Windows (WDK) contiene el código de una rutina DataRangeIntersection que puede usar como controlador de ejemplo. Para probar la rutina DataRangeIntersection , use la utilidad KsStudio para crear una instancia de la pin--it primero llama al controlador de intersección con el fin de determinar un formato predeterminado aceptable. Para admitir un formato que no sea PCM, el controlador debe controlarlo correctamente en las siguientes ubicaciones:
Métodos del controlador Miniport Init y NewStream (por ejemplo, vea IMiniportWavePci::Init e IMiniportWavePci::NewStream).)
Método Miniport-stream SetFormat (Por ejemplo, vea IMiniportWavePciStream::SetFormat).