Partager via


Formats de données audio ACX et listes de formats de données

Cette rubrique décrit comment les types de format ACX sont utilisés par un pilote pour suivre, gérer et comparer les formats de données de signal. Pour obtenir une vue d’ensemble générale d’ACX et une liste de termes ACX courants, consultez la vue d’ensemble des extensions de classe audio ACX. Pour obtenir des informations générales sur les formats d’encodage audio, consultez Formats de données audio.

Objets ACXDATAFORMAT et ACXDATAFORMATLIST

Deux objets ACX sont utilisés pour utiliser des formats de données.

  • ACXDATAFORMAT qui représente un format de données pris en charge par l’appareil audio.
  • ACXDATAFORMATLIST, qui est une liste de formats de données audio disponibles pour une utilisation.

Pour plus d’informations sur l’utilisation d’objets ACX, consultez Résumé des objets ACX.

ACX utilise l’énumération ACX_DATAFORMAT_TYPE, qui fait référence à une structure KSDATAFORMAT pour spécifier un format de données.

ACXDATAFORMAT

ACXDATAFORMAT fournit un handle à un objet de format de données. Les pilotes créent ces objets à l’aide de la fonction AcxDataFormatCreate et peuvent les comparer à l’aide d’AcxDataFormatIsEqual.

ACXDATAFORMATLIST

ACXDATAFORMATLIST est un conteneur pour les objets de format de données. Lorsque le pilote crée un ACXPIN, ACX crée automatiquement une liste de format de données vide pour le mode de traitement du signal brut. Un pilote peut accéder à la liste à l’aide d’AcxPinGetRawDataFormatList. Il retourne ACXDATAFORMATLIST pour l’ACXPIN spécifié.

Un pilote peut ajouter un format à une liste spécifique à l’aide d’AcxDataFormatListAddDataFormat.

    // The raw processing mode list is associated with each single circuit
    // by ACX. A driver uses AcxPinGetRawDataFormatList to retrieve the built-in raw
    // data-format list.
    //
    RETURN_NTSTATUS_IF_TRUE(CodecCaptureHostPin >= CodecCapturePinCount, STATUS_INVALID_PARAMETER);
    formatList = AcxPinGetRawDataFormatList(Pin[CodecCaptureHostPin]);
    RETURN_NTSTATUS_IF_TRUE(formatList == nullptr, STATUS_INSUFFICIENT_RESOURCES);

    //
    // The driver uses AcxDataFormatListAddDataFormat to add data formats to the raw
    // processing mode list associated with the current circuit.
    //
    RETURN_NTSTATUS_IF_FAILED(AcxDataFormatListAddDataFormat(formatList, formatPcm44100c1));
    RETURN_NTSTATUS_IF_FAILED(AcxDataFormatListAddDataFormat(formatList, formatPcm48000c1));

Un pilote peut créer des listes de format de données supplémentaires et les associer à un mode de traitement de signal spécifique à l’aide d’AcxDataFormatListCreate pour un WDFDEVICE spécifique, tel que ACXPIN.

NTSTATUS AcxDataFormatListCreate(device, attributes, <format cfg>, &ACXDATAFORMATLIST)

Un pilote peut récupérer une liste de formats associée à une broche spécifique à l’aide d’AcxPinRetrieveModeDataFormatList.

Un pilote peut supprimer un format d’une liste spécifique à l’aide d’AcxDataFormatListRemoveDataFormat. Notez que si ce format est également le format par défaut, ACX sélectionne le premier disponible dans la liste comme valeur par défaut (le cas échéant).

Un pilote peut spécifier un format par défaut dans la liste à l’aide d’AcxDataFormatListAssignDefaultDataFormat. Le format par défaut doit être présent dans la liste, sinon il sera ajouté.

Un pilote peut récupérer un format par défaut dans la liste à l’aide d’AcxDataFormatListRetrieveDefaultDataFormat.

Un pilote peut itérer sur une liste de formats et apporter des modifications en tant que groupe à l’aide des DDIS suivantes.

Notez que les modifications sont appliquées uniquement après la fin de l’itération du pilote.

VOID AcxDataFormatListBeginIteration(ACXDATAFORMATLIST, PACX_DATAFORMAT_LIST_ITERATOR)
NTSTATUS AcxDataFormatListRetrieveNextDataFormat(ACXDATAFORMATLIST,  PACX_DATAFORMAT_LIST_ITERATOR, &ACXFORMAT);
VOID AcxDataFormatListEndIteration(ACXDATAFORMATLIST, PACX_DATAFORMAT_LIST_ITERATOR)

Les DDIS ci-dessus suppriment la nécessité pour le pilote d’implémenter les rappels suivants :

PFN_ACX_PIN_GET_SIGNALPROCESSING_MODES      	EvtAcxPinGetSignalProcessingModes;
PFN_ACX_PIN_GET_DATAFORMATS                     EvtAcxPinGetDataFormats;
PFN_ACX_PIN_GET_DEFAULT_DATAFORMAT              EvtAcxPinGetDefaultDataFormat;
PFN_ACX_PIN_PROPOSE_DATAFORMAT                  EvtAcxPinProposeDataFormat;

Les DDIS ci-dessus suppriment également la nécessité pour le pilote d’implémenter les événements suivants (ACX déclenche cet événement automatiquement une fois la liste modifiée) :

// Clients enable this event to receive format change notifications. Drivers fire this even when it detects a dynamic format change on the specified pin (h/w pin).
//
    KSEVENT_PINCAPS_FORMATCHANGE(pin)

Les DDIS ci-dessus suppriment également la nécessité pour le pilote de gérer lui-même le stockage des modes et des formats.

Le pilote doit toujours prendre en charge la DDI suivante si les formats entrants/sortants ne sont pas identiques (circuit DSP). Cette DDI est indépendante du flux, spécifique à la broche de circuit, et uniquement prise en charge sur les broches de diffusion non s/w.

PFN_ACX_PIN_SET_DATAFORMAT              EvtAcxPinSetDataFormat;

Voir aussi

en-tête acxdataformat.h

formats de données audio

Structure KSDATAFORMAT

vue d’ensemble des extensions de classe audio ACX