Partager via


Implémentation du pilote audio déchargé sur 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 de l’implémentation d’un pilote audio développé pour une carte audio capable de traiter les flux audio déchargés par le matériel.

Ces rubriques supplémentaires de cette section décrivent les points importants à connaître lorsque vous développez un pilote pour une carte audio dotée d'un moteur audio matériel chargé de gérer les flux audio déchargés.

Interfaces d’assistance "Portcls" pour le traitement audio externalisé

Rapport de glitch pour l’audio déchargé

Décharge matérielle - Topologie de filtre KS

Windows prend en charge l'utilisation d'un adaptateur audio qui peut utiliser un moteur audio matériel embarqué pour traiter les flux audio. Lorsque vous développez une telle carte audio, le pilote audio associé doit exposer ce fait au système audio en mode utilisateur de 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œud

Si une carte audio est capable de traiter les 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 les 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 du chemin d’accès du flux audio a un descripteur de nœud. Pour le déchargement matériel, le pilote doit définir le GUID Type sur KSNODETYPE_AUDIO_ENGINE.

Voici un exemple de configuration du 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 du nom est défini sur KSNODETYPE_AUDIO_ENGINE, vous devez alors créer une chaîne de caractères de nom par défaut pour ce nœud. Vous ajoutez ensuite cette chaîne à ks.inf, de sorte que pendant l’installation du pilote, la chaîne peut ê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 à ce qui suit :

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

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

L'ensemble de propriétés KSPROPSETID_AudioEngine est utilisé pour prendre en charge les moteurs audio matériels et le traitement audio déchargé vers le matériel. Par conséquent, le pilote d’un adaptateur capable de traiter les flux audio déchargés doit prendre en charge les propriétés de ce nouvel ensemble de propriétés.

Le jeu 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 cet ensemble 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 de l’ensemble 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 (Formats d'appareils pris en charge par AudioEngine)

KSPROPERTY_AUDIOENGINE_VOLUMELEVEL

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

Outre la prise en charge des 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

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

KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION

KSPROPERTY_AUDIO_PRESENTATION_POSITION

KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION

Mise à jour du pilote de classe port et rapport de dysfonctionnements

Outre la prise en charge décrite dans les sections précédentes pour le traitement audio délégué au matériel, le pilote de classe de port Windows fournit des « interfaces d'aide » pour faciliter le développement d’un pilote capable de fonctionner avec des flux audio déchargés. Et quand un tel pilote détecte des problèmes, il existe un mécanisme en place pour permettre au pilote de signaler les erreurs de glitch. Les rubriques suivantes fournissent plus d’informations sur les interfaces d’assistance et les rapports de problèmes :

Interfaces d’assistance portcls pour le traitement audio transféré Outre la prise en charge décrite dans les sections précédentes pour le traitement audio transféré du matériel, le pilote de classe port Windows inclut également des « interfaces d’assistance » pour simplifier le développement d’un pilote qui peut fonctionner avec des flux audio transférés. Et quand un tel pilote détecte des problèmes, il existe un mécanisme en place pour permettre au pilote de signaler les erreurs de glitch. Les rubriques suivantes fournissent plus d’informations sur les interfaces d’assistance et les rapports de problèmes :

Objets de traitement audio Windows