Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema wird beschrieben, wie ACX-Formattypen von einem Treiber zum Nachverfolgen, Verwalten und Vergleichen von Signaldatenformaten verwendet werden. Eine allgemeine Übersicht über ACX und eine Liste allgemeiner ACX-Begriffe finden Sie unter ACX Audio Class Extensions Overview. 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 in der Zusammenfassung von ACX-Objekten.
ACX verwendet die ACX_DATAFORMAT_TYPE-Aufzählung, 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. Es 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 einem bestimmten Signalverarbeitungsmodus zuordnen, indem er AcxDataFormatListCreate für ein bestimmtes WDFDEVICE, wie zum Beispiel einen ACXPIN, verwendet.
NTSTATUS AcxDataFormatListCreate(device, attributes, <format cfg>, &ACXDATAFORMATLIST)
Ein Treiber kann eine Formatliste abrufen, die einer bestimmten Pin zugeordnet ist, mithilfe von AcxPinRetrieveModeDataFormatList.
Ein Treiber kann ein Format aus einer bestimmten Liste mithilfe von AcxDataFormatListRemoveDataFormat entfernen. Wenn dieses Format auch das Standardformat ist, wählt ACX das erste format aus, das in der Liste als Standard verfügbar ist (sofern 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 eine Formatliste durchlaufen und Änderungen als Gruppe mithilfe der folgenden DDIs 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 obigen DDIs entfernen die Notwendigkeit, dass der Treiber die folgenden Rückrufe implementiert:
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;
Die oben genannten DDIs entfernen außerdem die Notwendigkeit, dass der Treiber die folgenden Ereignisse implementiert (ACX löst dieses Ereignis automatisch aus, nachdem die Liste geändert wurde):
// 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 entfernen außerdem die Notwendigkeit, dass der Treiber die Modi und Formate des Speichers selbst verwaltet.
Der Treiber muss weiterhin den folgenden DDI unterstützen, wenn die In-/Out-Formate nicht identisch sind (DSP-Schaltkreis). Dieser DDI ist datenstromunabhängig, schaltkreisspezifisch und wird nur für Nicht-s/w-Streaming-Pins unterstützt.
PFN_ACX_PIN_SET_DATAFORMAT EvtAcxPinSetDataFormat;
Siehe auch
übersicht über ACX Audio Class Extensions