Requisiti per una pin factory non PCM

In Windows XP e versioni successive e Microsoft Windows Me i driver che giocano formati WAVEFORMATEX non PCM devono esporre i pin non PCM in base alle linee guida seguenti.

Prima di tutto, definire una pin factory per il formato di dati non PCM separato da qualsiasi pin factory PCM. PCM e non PCM non possono condividere la stessa factory di pin a istanza singola perché l'unica istanza di pin viene allocata automaticamente a KMixer. Se la pin factory supporta più istanze, PCM e non PCM possono coesistere nella stessa fabbrica di pin. In questo caso, tuttavia, non è possibile garantire che queste istanze di pin siano disponibili per un client non PCM in fase di esecuzione: i client PCM potrebbero già averli allocati. L'opzione più sicura consiste nel fornire una factory di pin separata per il formato non PCM.

Per individuare e usare il pin da DirectSound 8, definire questa fabbrica di pin non PCM in un filtro che supporta già PCM. In caso contrario, DirectSound non rileverà il pin non PCM. Ciò significa anche che un dispositivo che non supporta PCM in tutto non può supportare un formato non PCM.

In secondo luogo, implementare un gestore di intersezione dati nel pin non PCM. PortCls fornisce un gestore predefinito, ma questo gestore predefinito sceglie sempre PCM, quindi è consigliabile aggiungere il proprio gestore per i formati non PCM. Non è consigliabile supportare WAVE_FORMAT_PCM nel gestore di intersezione per il pin non PCM. Si noti che questo gestore può essere chiamato con un outputBufferLength di 0, nel qual caso il chiamante chiede solo le dimensioni dell'intervallo di dati preferito, non per i dati stessi. In questo caso, il gestore deve rispondere copiando le dimensioni dell'intervallo di dati non PCM nel parametro ResultantFormatLength e restituendo STATUS_BUFFER_OVERFLOW. L'esempio Msvad in Windows Driver Kit (WDK) contiene il codice per una routine DataRangeIntersection che è possibile usare come gestore di esempio. Per testare la routine DataRangeIntersection , usare l'utilità KsStudio per creare un'istanza del pin-it chiama prima il gestore dell'intersezione per determinare un formato predefinito accettabile. Per supportare un formato non PCM, il driver deve gestirlo correttamente nelle posizioni seguenti: