Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique traite de la composition de plusieurs circuits ACX. Pour obtenir une vue d’ensemble générale d’ACX et de la liste des termes ACX, consultez la vue d’ensemble des extensions de classe audio ACX.
Comme décrit dans Résumé des objets ACX, un AcxCircuit représente un chemin audio partiel ou complet vers un appareil audio perçu par l’utilisateur (haut-parleurs, micro, etc.). AcxCircuit a au moins une broche d’entrée et une broche de sortie (ACXPIN) et peut agréger un ou plusieurs objets de type AcxElements. Pour plus d’informations, consultez Circuits ACX.
Composition du circuit ACX
ACX lie les circuits jusqu’à ce qu’ils forment un chemin audio complet. ACX utilise des liaisons audio pour connecter des circuits audio ensemble. En même temps, chaque circuit ACX est converti en filtre KS, ces filtres KS sont ensuite détectés par le Générateur de points de terminaison audio (AEB) qui s’exécute en tant que service en mode utilisateur. AEB analyse le graphique de filtre KS détecté et crée le point de terminaison audio logiciel représentant l’infrastructure audio sous-jacente à la détection d'un chemin audio complet.
Le diagramme suivant montre les objets ACX utilisés par ACX pour détecter, générer et surveiller les circuits constituant le point de terminaison audio composite.
Important
Notez que seuls les types affichés en bleu sont publics : ACXCIRCUITTEMPLATE, ACXCOMPOSITETEMPLATE (non affiché), ACXMANAGER, ACXCIRCUITFACTORY et ACXCIRCUIT. Tous les types affichés en violet sont internes et sont répertoriés ici uniquement à des fins d’illustration. Les types internes ne sont pas garantis pour rester identiques, ou être disponibles dans différentes versions d’ACX, et ne doivent pas être appelés ou utilisés directement.
Le gestionnaire ACX analyse les modèles de circuit lors de l'initialisation du pilote lorsque les pilotes ACX les inscrivent auprès du gestionnaire ACX. Les pilotes ACX inscrivent des modèles/liaisons composites à l’aide d’ACXCIRCUTTEMPLATES (#1).
Lorsque le gestionnaire ACX reçoit un modèle de circuit, il vérifie s’il s’agit d’un modèle d’instance ou d’un modèle de classe générique.
Pour les modèles d’instance, ACX crée un ACXCOMPOSITEMANAGER (#4), pour les modèles de classes génériques, ACX crée un ACXCOMPOSITEFACTORY (#2), qui est responsable de la création d’éléments ACXCOMPOSITEMANAGER (#3) lorsqu’il détecte le circuit « core » du composite. Les circuits principaux sont les circuits qui donnent l’identité à un point de terminaison audio composite.
ACXCOMPOSITEMANAGER crée à son tour acXCOMPOSITE (#5) pour représenter le point de terminaison audio composite souligné. Le gestionnaire composite est chargé de surveiller tout segment de circuit facultatif qui peut apparaître après la création/l’initialisation du composite.
AcXCOMPOSITE crée à son tour un ACXCIRCUITMANAGER (#6) pour chaque circuit qui fait partie du composite. ACXCIRCUITMANAGER est responsable de la création, de la surveillance et du contrôle d’un seul circuit (#7).
Il peut être possible qu’un circuit soit étiqueté à la demande, dans ce cas, l’ACXCIRCUITMANAGER trouve sa fabrique de circuits et demande un nouveau circuit pour le composite (#8). ACXCIRCUITFACTORY crée un ACXCIRCUIT en réponse à la requête (#9).
Lorsque tous les ACXCIRCUIT sont détectés et actifs, ACXCOMPOSITE devient actif et indique à ACXCIRCUITMANAGERS d’activer les interfaces « audio » pour leurs circuits.
Le diagramme de séquence suivant montre comment deux circuits ACX (circuit A et B) sont liés ensemble pour créer un chemin audio complet, représenté par le générateur de points de terminaison audio (AEB) avec un périphérique audio logiciel.
Négociation de format multi circuit
Cette section décrit la négociation de format qui prend place lorsque le point de terminaison audio est composé de deux circuits ou plus. Pour obtenir des informations générales sur les circuits ACX, consultez les communications entre pilotes multi stack ACX.
Broches de pont de niveau inférieur
Les broches de pont en aval sont celles qui envoient des données à un périphérique audio physique (rendu) ou reçoivent des données de ce dernier (capture), directement ou indirectement. Ce type de broches peut avoir ou non des ACXMODEFORMATLISTs associés. Ces goupilles de pont ont un type « AcxPinQualifierBridgeB » ou « AcxPinQualifierBridgeDevice ». Pour plus d’informations sur ACXMODEFORMATLIST, consultez l’en-tête acxdataformat.h.
Dans ce diagramme et cet article, le niveau supérieur et le niveau inférieur sont utilisés pour décrire la direction du flux, car la direction du flux de flux vers le haut ou vers le bas dépend si les broches envoient des données (rendu) ou reçoivent des données (capture).
Broches de pont de niveau inférieur sans ACXMODEFORMATLIST(s)
Un pilote peut choisir de ne pas exposer les listes de formats de mode sur sa broche de niveau inférieur. Si les listes de format de mode ne sont pas disponibles sur une broche de pont de niveau inférieur, un utilisateur (via le panneau de configuration audio) ou d’autres entités logicielles ne peuvent pas directement contrôler/spécifier le format audio de cette broche et des flux associés. Voici quelques scénarios où ces listes ne sont pas nécessaires :
Circuits en streaming uniquement qui peuvent être connectés à un circuit DSP, à un circuit CODEC ou directement à l’appareil audio. Ces circuits déplacent simplement les données du point A au point B sans la modifier. Ces circuits ne modifient pas le taux d’échantillonnage de données du ou des flux entrants/sortants. Dans ce cas, les listes de formats de mode sont associées à la broche de niveau supérieur.
Circuits de flux uniques sans éléments qui modifient le taux d’échantillonnage entrant/sortant. Voici un exemple de circuit de périphérique audio USB. Dans ce scénario, les listes au format mode sont associées à la broche de mise à niveau.
L’absence de la liste de format de données implique que le format de données du flux provenant de cette broche soit compatible avec l’un des formats de données de la broche de niveau supérieur du circuit attaché.
Broches de pont de niveau inférieur avec ACXMODEFORMATLIST(s)
Un pilote peut choisir d’exposer des listes de modes et formats sur ses connecteurs inférieurs. Si les listes de format de mode sont disponibles sur une broche de pont de bas niveau, un utilisateur (via le panneau de configuration audio) ou une autre entité logicielle peut directement contrôler/spécifier le format audio de cette broche et des flux associés.
Voici quelques scénarios valides dans lesquels ces listes de format de mode sont utilisées :
- Circuits DSP : normalement ce type de circuits prend en charge plusieurs flux s’exécutant à différents taux d’échantillonnage, ces flux sont convertis en interne en un taux d’échantillonnage commun et mélangés avant que les données ne passent au circuit suivant. La liste de formats de données contrôle/spécifie le taux d’échantillonnage final (pour ce circuit).
Lorsque la liste de formats de données est présente, ces formats doivent correspondre aux échantillons de format de données dans la broche supérieure du circuit suivant. Notez que les modes n’ont pas besoin de correspondre, consultez la discussion des modes, dans les sections ci-dessous.
Les listes de format de bas niveau permettent à l’utilisateur/à la couche supérieure de contrôler le format du flux résultant, dans ce cas, la valeur par défaut de la liste est le taux d’échantillonnage utilisé jusqu’à ce qu’une action explicite soit effectuée pour modifier le format sur cette broche.
Pour plus d’informations sur les listes de formats, consultez l’en-tête acxdataformat.h.
Broches de pont de niveau supérieur
Les broches de connexion de niveau supérieur sont celles qui reçoivent des données pour le rendu ou envoient des données pour la capture à un module logiciel, directement ou indirectement. Ce type d’épingles doit être associé à ACXMODEFORMATLISTs. Ces broches de pont ont un type « AcxPinQualifierBridgeA ».
Le diagramme précédent présenté ici à nouveau peut également être utilisé pour afficher le rendu et capturer le flux de données entre une broche de diffusion en continu, deux circuits et un appareil.
Élever de niveau les broches [Bridge] sans ACXMODEFORMATLIST(s)
Les broches de niveau supérieur sans listes de format de mode ne sont pas une combinaison valide et cela entraîne un point de terminaison mal configuré. Le point de terminaison n’est pas visible du point de vue de l’utilisateur.
Améliorer les épingles [Bridge] en utilisant ACXMODEFORMQATLIST(s)
Les broches de niveau supérieur doivent toujours avoir au moins un ACXMODEFORMATLIST. Les listes de format de mode spécifient tous les taux d’échantillonnage possibles pour un mode et son taux d’échantillonnage par défaut. Différents modes peuvent avoir différents ensembles de taux d’échantillonnage. Le taux d’échantillonnage par défaut est le taux d’échantillonnage préféré pour ce mode.
Modes et circuits
Les broches de mise à niveau des circuits à flux unique ou à flux multiples peuvent prendre en charge une ou plusieurs listes de formats de mode. Les circuits à flux unique ont un mode actif à la fois, tandis que les circuits à flux multiples peuvent avoir deux ou plusieurs flux s'exécutant en même temps, en utilisant possiblement différents modes.
Mappage de mode
Cette section présente brièvement les modes standard et explique pourquoi le mappage « mode » est utilisé.
Mode RAW : le flux/circuit n’applique aucun effet sur le flux (à l’exception des contraintes de volume, de désactivation et de sécurité, comme la protection de l’orateur).
Mode PAR DÉFAUT : le flux/le circuit effectue un effet par défaut.
<mode_name> mode : le flux/circuit applique des effets spécifiques au mode <mode_name> sélectionné.
Il est obligatoire que les broches de diffusion en continu prennent en charge le mode brut et/ou par défaut. Il est facultatif pour les broches de diffusion en continu de prendre en charge un autre <mode_name> modes.
Dans un point de terminaison composite, il est possible que le circuit de niveau supérieur puisse prendre en charge plusieurs modes et que les circuits de niveau inférieur prennent uniquement en charge RAW et/ou DEFAULT.
Exemple dans un point de terminaison à deux circuits :
La broche de niveau supérieur du circuit de niveau supérieur prend en charge les modes et les formats associés m1{f1,f2} et m2{f3,f4}, c’est-à-dire que le flux de la broche a un format f1 ou f2 quand m1 est utilisé, ou un format de f3 ou f4 lorsque m2 est utilisé. Cela suppose que le circuit de niveau supérieur est un circuit de flux unique.
La broche de niveau supérieur du circuit de niveau inférieur prend en charge le mode par défaut{f1,f2,f3}.
Dans ce cas, le mode du flux est converti de <mode_name> mode en mode par défaut tout en conservant les mêmes taux d’échantillonnage.
m1/f1 à > défaut/f1
m1/f2 vers > par défaut/f2
m2/f3 par > défaut/f3
Entrée non valide : m2/f4 vers > Aucun
Le mappage de mode est effectué par le pilote à l’aide d’ACX. Dans le tableau ci-dessus, la dernière entrée n’est pas valide, la broche de niveau supérieur du circuit de niveau inférieur doit supprimer l’option m2/f4 comme option pour ses formats pris en charge. Notez que cela aurait pu se produire dans l’inverse, c’est-à-dire que la broche de niveau supérieur du circuit de niveau inférieur aurait pu prendre en charge également f4 et f5. Dans ce cas, default-f4 a été pris en charge, mais pas default-f5. Dans ce cas, c’est la broche supérieure du circuit inférieur qui est responsable de ne pas inclure m ?/f5 comme option dans sa liste. D’autres sections ci-dessous expliquent ce processus.
Mettre en forme les négociations
Avant que ACX n’active les interfaces audio des circuits qui composent l’appareil composite, il garantit que les circuits peuvent négocier le mode/les formats des données audio. ACX effectue cette notification de circuit en appelant le rappel d'initialisation du composite sur tous les circuits du composite. La séquence passe du niveau inférieur (côté appareil) au niveau supérieur (côté système). Les circuits ont la possibilité de mettre à jour leurs formats pendant cette phase.
Affichage du format du panneau de contrôle de l’appareil
La logique actuelle du panneau de configuration audio affiche la liste des formats d’appareil comme suit :
- Si l’appareil audio prend en charge un élément de moteur audio, la liste des formats de données affichés dans le panneau de configuration est la liste des formats de données de l’appareil, c’est-à-dire la liste de format de données attachée à la broche de niveau inférieur (qui est connectée à la broche de sortie de l’élément du moteur audio).
- Si l’appareil audio ne prend pas en charge un élément d'algorithme de traitement audio, la liste des formats de données affichés dans le panneau de configuration est la liste des formats de données de la broche de streaming, c’est-à-dire la liste de formats de données attachée à la broche de niveau supérieur.
Création automatique de flux descendants multi-circuit
ACX utilise les objets ACXSTREAMBRIDGE associés à une broche de pont de niveau inférieur pour propager automatiquement les requêtes de création de flux vers les circuits distants.
Lorsqu’une application cliente crée un flux, cette demande est d’abord reçue par un point de diffusion en continu. ACX notifie le pilote associé à la broche de streaming de la demande de création de flux par le biais du callback spécifié au moment de la création du circuit. Dans le rappel, le pilote crée un objet ACXSTREAM représentant le flux, puis retourne le contrôle à ACX. Lorsque ACX reçoit le contrôle, il vérifie s’il doit transférer cette demande de création au circuit suivant (de bas niveau). Si vous le souhaitez, le pilote peut transférer la demande de création au circuit suivant (niveau inférieur) avant de retourner de son rappel de création de flux. Cette dernière option permet au pilote d’effectuer toutes les opérations post après que les circuits de niveau inférieur ont eu la possibilité de traiter leurs demandes de création.
ACX utilise la logique par défaut suivante pour la création de flux :
- S’il n’y a pas de broche de pont de bas niveau, tout est fait.
- Si le pilote a déjà associé manuellement le flux à un ACXSTREAMBRIDGE, tout est terminé.
- Si la broche de pont de niveau inférieur n’a pas d’ACXSTREAMBRIDGE pour le MODE spécifié, effectuez l’échec de la requête.
- ACX ajoute le nouveau flux que le pilote a créé avec acXSTREAMBRIDGE récupéré.
ACXSTREAMBRIDGE agit en tant que multi-entrées/sortie unique. Tant qu'il y a un flux d'entrée, ACXSTREAMBRIDGE maintient un flux de sortie présent. Le flux sortant est supprimé uniquement lorsque le dernier flux entrant est supprimé. ACXSTREAMBRIDGE utilise les ACXDATAFORMATLISTs associés à la broche de pont de niveau inférieur lors du choix du mode et du format à utiliser pour le circuit distant.
ACXSTREAMBRIDGE utilise la logique suivante pour sélectionner le mode et le format de données du flux sortant :
Si MODE pour le flux sortant n’est pas spécifié, vérifiez s’il existe une liste de format « par défaut ».
Si MODE pour le flux sortant n’est pas spécifié et que la liste de formats « par défaut » n’est pas présente, vérifiez s’il existe une liste de formats « brute ».
Si MODE est NULL_GUID, vérifiez s’il existe une liste de format associée au MODE du premier flux.
Si MODE est spécifié, vérifiez s’il existe une liste de formats pour ce MODE.
Si une liste de formats est trouvée, récupérez le format par défaut de la liste de formats.
Si le format est introuvable, ACXSTREAMBRIDGE utilise le format du premier flux entrant.
ACXSTREAMBRIDGE crée une demande de création de flux à l’aide d’ACXTARGETSTREAM à l’aide du mode récupéré et du format de données comme suit :
- Si MODE a été spécifié, ce MODE est utilisé.
- Si le MODE est NULL_GUID, le MODE du premier flux est utilisé.
- Sinon, aucun mode n’est utilisé.
ACX s’occupe de supprimer/fermer le flux cible lorsque le dernier flux in-stream est supprimé.
Un autre travail d’ACXSTREAMCIRCUIT consiste à propager automatiquement un état de flux le long de la chaîne de diffusion en continu.
Un pilote a la possibilité de désactiver la création du pont de flux distant du circuit par défaut en appelant AcxCircuitInitDisableDefaultStreamBridgeHandling ou en associant manuellement l’objet ACXSTREAM à acXSTREAMBRIDGE avant de retourner le contrôle à ACXSTREAM. Dans ce dernier cas, le flux distant est créé avant le retour du pilote à partir de la fonction de rappel « create-stream » EVT_ACX_CIRCUIT_CREATE_STREAM.
Pour les circuits utilisant plusieurs broches de capture/rendu, comme host/offload/loopback/kws, c’est-à-dire lorsque l'élément audio-engine est pris en charge, le pilote doit créer un pont de flux sans spécifier aucun mode en entrée, et ajouter manuellement les objets ACXSTREAM entrants au pont de flux lors du traitement du rappel de création de flux.
Pour plus d’informations sur la façon de créer une passerelle de flux, consultez :
Propagation automatique de l'état du flux multi-circuit vers des flux de niveau inférieur.
ACXSTREAMBRIDGE propage automatiquement une demande d’état de flux de bas niveau vers les circuits distants. Lorsque l’état d’un flux change, ACXSTREAMBRIDGE calcule l’état mixte du flux sortant et envoie cette nouvelle requête « stream-state » au flux distant à l’aide de ACXTARGETSTREAM.
AcXSTREAM avec ACXSTREAMBRIDGE utilise la logique suivante :
Modifiez d’abord les états des flux de niveau supérieur dans les scénarios suivants :
- Afficher && passage de Stop->Run
- Capturer && passer depuis Run-Stop>
- Autre && passant de Run-Stop>
Modifiez les états des flux de niveau supérieur en dernier dans les scénarios suivants :
- Afficher le && à partir de Run-Stop>
- Capturer && passer de Stop-Run>
- Autre && passant de Stop-Run
Les pilotes ont la possibilité d’inverser cet ordre via un paramètre de configuration.
Remarque
Il est nécessaire qu’un pilote/circuit/flux réussisse toujours les transitions de flux de l’exécution à l’arrêt. En revanche, il est permis à un conducteur d’échouer dans la transition, c’est-à-dire d’arrêt à rouler.
Voir aussi
Vue d’ensemble des extensions de classe audio ACX