Implémentation du pilote audio déchargé par le matériel

Lorsque vous implémentez un pilote pour l’audio déchargé, vous développez un pilote capable de traiter les flux audio déchargés et d’exposer cette capacité au système audio Windows.

Cette rubrique présente les détails d’implémentation d’un pilote audio développé pour un adaptateur audio capable de traiter des flux audio déchargés par le matériel.

Ces rubriques supplémentaires de cette section décrivent les problèmes que vous devez connaître lorsque vous développez un pilote audio pour une carte audio qui implémente un moteur audio matériel pour gérer les flux audio déchargés.

Interfaces Portcls Helper pour le traitement audio déchargé

Rapport de problèmes pour l’audio déchargé

Déchargement matériel - Topologie de filtre KS

Windows prend en charge l’utilisation d’une carte audio qui peut utiliser un moteur audio matériel intégré pour traiter les flux audio. Lorsque vous développez un tel adaptateur audio, le pilote audio associé doit exposer ce fait au système audio en mode utilisateur d’une manière spécifique, afin que le système audio puisse découvrir, utiliser et exposer correctement les fonctionnalités de cet adaptateur et de son pilote.

Diagramme montrant un système équipé de DSP implémentant des effets dans le matériel.

GUID KSNODETYPE_AUDIO_ENGINE pour les descripteurs de nœuds

Si une carte audio est capable de traiter des flux audio déchargés, le pilote audio de l’adaptateur expose cette fonctionnalité à l’aide d’un nœud dans le filtre KS de l’adaptateur.

Si une carte audio est capable de traiter des flux audio déchargés, le pilote audio de l’adaptateur expose cette fonctionnalité à l’aide d’un nœud spécifique dans le filtre KS de l’adaptateur.

Chaque nœud dans le chemin d’accès du flux audio a un descripteur de nœud. Pour le matériel hors charge, le pilote doit définir le GUID de typesur KSNODETYPE_AUDIO_ENGINE.

Voici un exemple de la façon dont le pilote peut configurer le descripteur de nœud pour ce nœud :

typedef struct _KSNODE_DESCRIPTOR {
  const KSAUTOMATION_TABLE *AutomationTable;    // drv specific
  const GUID               *Type;       // must be set to KSNODETYPE_AUDIO_ENGINE
  const GUID               *Name;       // drv specific (KSNODETYPE_AUDIO_ENGINE?)  
} KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;

Si le GUID nom est défini sur KSNODETYPE_AUDIO_ENGINE, vous devez créer une chaîne de nom par défaut pour ce nœud. Vous ajoutez ensuite cette chaîne à ks.inf, afin que lors de l’installation du pilote, la chaîne puisse être utilisée pour remplir la clé de Registre MediaCategories .

La définition du GUID pour le type de nœud , KSNODETYPE_AUDIO_ENGINE, est la suivante :

Code style
#define STATIC_KSNODETYPE_AUDIO_ENGINE\
    0x35caf6e4, 0xf3b3, 0x4168, 0xbb, 0x4b, 0x55, 0xe7, 0x7a, 0x46, 0x1c, 0x7e
DEFINE_GUIDSTRUCT("35CAF6E4-F3B3-4168-BB4B-55E77A461C7E", KSNODETYPE_AUDIO_ENGINE);
#define KSNODETYPE_AUDIO_ENGINE DEFINE_GUIDNAMED(KSNODETYPE_AUDIO_ENGINE)

Pour plus d’informations, consultez le fichier d’en-tête ksmedia.h .

En fonction des informations précédentes, un descripteur pour un nœud miniport peut ressembler à ceci :

PCNODE_DESCRIPTOR MiniportNodes[] =
{
    // KSNODE_WAVE_AUDIO_ENGINE
    {
        0,                          // Flags
        NULL,                       // AutomationTable
        &KSNODETYPE_AUDIO_ENGINE,   // Type  KSNODETYPE_AUDIO_ENGINE
        NULL                        // Name
    }
};

Propriété KS KSPROPSETID_AudioEngine définie pour les moteurs audio

Le jeu de propriétés KSPROPSETID_AudioEngine est utilisé pour prendre en charge les moteurs audio matériels et le traitement audio déchargé par le matériel. Par conséquent, le pilote d’un adaptateur qui peut traiter les flux audio déchargés doit prendre en charge les propriétés de ce nouveau jeu de propriétés.

L’ensemble de propriétés , KSPROPSETID_AudioEngine, est défini comme suit :

#define STATIC_KSPROPSETID_AudioEngine\
    0x3A2F82DCL, 0x886F, 0x4BAA, 0x9E, 0xB4, 0x8, 0x2B, 0x90, 0x25, 0xC5, 0x36
DEFINE_GUIDSTRUCT("3A2F82DC-886F-4BAA-9EB4-082B9025C536", KSPROPSETID_AudioEngine);
#define KSPROPSETID_AudioEngine DEFINE_GUIDNAMED(KSPROPSETID_AudioEngine)

Les noms des propriétés de ce jeu de propriétés sont définis dans l’énumération KSPROPERTY_AUDIOENGINE , et le pilote doit prendre en charge ces noms.

Voici les propriétés dans le jeu de propriétés KSPROPSETID_AudioEngine :

KSPROPERTY_AUDIOENGINE_BUFFER_SIZE_RANGE

KSPROPERTY_AUDIOENGINE_DESCRIPTOR

KSPROPERTY_AUDIOENGINE_DEVICEFORMAT

KSPROPERTY_AUDIOENGINE_GFXENABLE

KSPROPERTY_AUDIOENGINE_LFXENABLE

KSPROPERTY_AUDIOENGINE_LOOPBACK_PROTECTION

KSPROPERTY_AUDIOENGINE_MIXFORMAT

KSPROPERTY_AUDIOENGINE_SUPPORTEDDEVICEFORMATS

KSPROPERTY_AUDIOENGINE_VOLUMELEVEL

Propriétés requises dans le jeu de propriétés audio KSPROPSETID_

En plus de prendre en charge les propriétés dans le jeu de propriétés KSPROPSETID_AudioEngine , le pilote doit également prendre en charge les propriétés existantes suivantes dans le jeu de propriétés KSPROPSETID_Audio :

KSPROPERTY_AUDIO_MUTE

KSPROPERTY_AUDIO_PEAKMETER2

KSPROPERTY_AUDIO_VOLUMELEVEL

Et pour terminer l’implémentation de la prise en charge du pilote pour le traitement audio déchargé du matériel, les propriétés sont disponibles pour l’ensemble de propriétés audio KSPROPSETID_ .

KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION

KSPROPERTY_AUDIO_PRESENTATION_POSITION

KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION

Mises à jour des pilotes de classe de port et rapports sur les problèmes

En plus de la prise en charge décrite dans les sections précédentes pour le traitement audio déchargé du matériel, le pilote de classe de port Windows fournit des « interfaces d’assistance » pour faciliter le développement d’un pilote qui peut fonctionner avec des flux audio déchargés. Et lorsqu’un tel pilote détecte des problèmes, un mécanisme est en place pour permettre au pilote de signaler les erreurs de problème. Les rubriques suivantes fournissent plus de détails sur les interfaces d’assistance et les rapports de problèmes :

Interfaces Portcls Helper pour le traitement audio déchargé En plus de la prise en charge décrite dans les sections précédentes pour le traitement audio déchargé du matériel, le pilote de classe de port Windows inclut également des « interfaces d’assistance » pour faciliter le développement d’un pilote qui peut fonctionner avec des flux audio déchargés. Et lorsqu’un tel pilote détecte des problèmes, un mécanisme est en place pour permettre au pilote de signaler les erreurs de problème. Les rubriques suivantes fournissent plus de détails sur les interfaces d’assistance et les rapports de problèmes :

Implémentation du pilote audio déchargé par le matériel

Objets de traitement audio Windows