Freigeben über


ACX-Audiodatenformate und -Datenformatlisten

In diesem Thema wird beschrieben, wie ACX-Formattypen von einem Treiber verwendet werden, um Signaldatenformate nachzuverfolgen, zu verwalten und zu vergleichen. Eine allgemeine Übersicht über ACX und eine Liste allgemeiner ACX-Begriffe finden Sie unter Übersicht über ACX-Audioklassenerweiterungen. Allgemeine Informationen zu Audiocodierungsformaten finden Sie unter Audiodatenformate.

ACXDATAFORMAT- und ACXDATAFORMATLIST-Objekte

Zum Arbeiten mit Datenformaten werden zwei ACX-Objekte verwendet.

  • ACXDATAFORMAT, das ein vom Audiogerät unterstütztes Datenformat darstellt.
  • ACXDATAFORMATLIST, eine Liste der zur Verwendung verfügbaren Audiodatenformate.

Weitere Informationen zum Arbeiten mit ACX-Objekten finden Sie unter Zusammenfassung der ACX-Objekte.

ACX verwendet die ACX_DATAFORMAT_TYPE-Enumeration, die auf eine KSDATAFORMAT-Struktur verweist, um ein Datenformat anzugeben.

ACXDATAFORMAT

ACXDATAFORMAT stellt ein Handle für ein Datenformatobjekt bereit. Treiber erstellen diese Objekte mithilfe der AcxDataFormatCreate-Funktion und können sie mithilfe von AcxDataFormatIsEqual vergleichen.

ACXDATAFORMATLIST

ACXDATAFORMATLIST ist ein Container für Datenformatobjekte. Wenn der Treiber eine ACXPIN erstellt, erstellt ACX automatisch eine leere Datenformatliste für den Rohsignalverarbeitungsmodus. Ein Treiber kann mithilfe von AcxPinGetRawDataFormatList auf die Liste zugreifen. Er gibt die ACXDATAFORMATLIST für die angegebene ACXPIN zurück.

Ein Treiber kann einer bestimmten Liste mithilfe von AcxDataFormatListAddDataFormat ein Format hinzufügen.

    // 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));

Ein Treiber kann zusätzliche Datenformatlisten erstellen und diese einem bestimmten Signalverarbeitungsmodus zuordnen, indem AcxDataFormatListCreate für ein bestimmtes WDFDEVICE wie ACXPIN verwendet wird.

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

Ein Treiber kann mithilfe von AcxPinRetrieveModeDataFormatList eine Formatliste abrufen, die einer bestimmten Pin zugeordnet ist.

Ein Treiber kann mithilfe von AcxDataFormatListRemoveDataFormat ein Format aus einer bestimmten Liste entfernen. Beachten Sie, dass ACX, wenn dieses Format auch das Standardformat ist, das erste in der Liste verfügbare Format als Standard auswählt (falls vorhanden).

Ein Treiber kann ein Standardformat in der Liste mithilfe von AcxDataFormatListAssignDefaultDataFormat angeben. Das Standardformat muss in der Liste vorhanden sein, andernfalls wird es hinzugefügt.

Ein Treiber kann ein Standardformat in der Liste mithilfe von AcxDataFormatListRetrieveDefaultDataFormat abrufen.

Ein Treiber kann mithilfe der folgenden DDIs eine Formatliste durchlaufen und als Gruppe Änderungen vornehmen.

Beachten Sie, dass die Änderungen erst angewendet werden, nachdem der Treiber die Iteration beendet hat.

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

Die oben genannten DDIs machen es für den Treiber überflüssig, die folgenden Rückrufe zu implementieren:

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;

Durch die oben genannten DDIs muss der Treiber außerdem die folgenden Ereignisse nicht implementieren (ACX löst dieses Ereignis automatisch aus, nachdem sich die Liste geändert hat):

// 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)

Die oben genannten DDIs machen es außerdem überflüssig, dass der Treiber den Speicher für Modi und Formate selbst verwaltet.

Der Treiber muss weiterhin den folgenden DDI unterstützen, wenn die Ein-/Ausgabeformate nicht identisch sind (DSP-Verbindung). Dieser DDI ist streamunabhängig, spezifisch für einen Verbindungs-Pin und wird nur für Nicht-Software-Streaming-Pins unterstützt.

PFN_ACX_PIN_SET_DATAFORMAT              EvtAcxPinSetDataFormat;

Weitere Informationen

acxdataformat.h header

Audiodatenformate

KSDATAFORMAT-Struktur

Übersicht über ACX-Audioklassenerweiterungen