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.
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 :
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 :