Udostępnij przez


Formaty danych audio ACX i listy formatów danych

W tym temacie opisano, jak typy formatów ACX są używane przez sterownik do śledzenia i porównywania formatów danych sygnału i zarządzania nimi. Aby zapoznać się z ogólnym omówieniem acX i listą typowych terminów ACX, zobacz Omówienie rozszerzeń klas audio ACX. Aby uzyskać ogólne informacje na temat formatów kodowania audio, zobacz Formaty danych audio.

Obiekty ACXDATAFORMAT i ACXDATAFORMATLIST

Dwa obiekty ACX są używane do pracy z formatami danych.

  • ACXDATAFORMAT, który reprezentuje format danych obsługiwany przez urządzenie audio.
  • ACXDATAFORMATLIST, która jest listą formatów danych audio dostępnych do użycia.

Aby uzyskać więcej informacji na temat pracy z obiektami ACX, zobacz Podsumowanie obiektów ACX.

AcX używa wyliczenia ACX_DATAFORMAT_TYPE, które odwołuje się do struktury KSDATAFORMAT w celu określenia formatu danych.

ACXDATAFORMAT

ACXDATAFORMAT udostępnia dojście do obiektu formatu danych. Sterowniki tworzą te obiekty przy użyciu funkcji AcxDataFormatCreate i mogą je porównać przy użyciu acxDataFormatIsEqual.

ACXDATAFORMATLIST

ACXDATAFORMATLIST to kontener obiektów formatu danych. Gdy sterownik tworzy ACXPIN, ACX automatycznie tworzy pustą listę formatów danych dla nieprzetworzonego trybu przetwarzania sygnału. Sterownik może uzyskać dostęp do listy przy użyciu polecenia AcxPinGetRawDataFormatList. Zwraca wartość ACXDATAFORMATLIST dla określonego AXPIN.

Sterownik może dodać format do określonej listy przy użyciu 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));

Sterownik może utworzyć dodatkowe listy formatów danych i skojarzyć je z określonym trybem przetwarzania sygnału przy użyciu acxDataFormatListUtwórz dla określonego urządzenia WDFDEVICE, takiego jak ACXPIN.

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

Sterownik może pobrać listę formatów skojarzoną z określonym pinem przy użyciu AcxPinRetrieveModeDataFormatList.

Sterownik może usunąć format z określonej listy przy użyciu AcxDataFormatListRemoveDataFormat Należy pamiętać, że jeśli ten format jest również formatem domyślnym, acX wybiera pierwszy dostępny na liście jako domyślny (jeśli istnieje).

Sterownik może określić domyślny format na liście przy użyciu acxDataFormatListAssignDefaultDataFormat. Format domyślny musi znajdować się na liście, w przeciwnym razie zostanie dodany.

Sterownik może pobrać domyślny format na liście przy użyciu acxDataFormatListRetrieveDefaultDataFormat.

Sterownik może przechodzić przez listę formatów i wprowadzać zmiany jako grupę przy użyciu następujących identyfikatorów DDI.

Należy pamiętać, że zmiany są stosowane tylko po zakończeniu iteracji przez sterownik.

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

Powyższe identyfikatory DDI usuwają potrzebę zaimplementowania następujących wywołań zwrotnych przez sterownik:

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;

Powyższe identyfikatory DDI usuwają również potrzebę zaimplementowania przez sterownik następujących zdarzeń (acX wyzwala to zdarzenie automatycznie po zmianie listy):

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

Powyższe interfejsy DDI usuwają również potrzebę samodzielnego zarządzania przez sterownik trybami i formatami przechowywania.

Sterownik nadal musi obsługiwać następujące interfejsy DDI, jeśli formaty wejściowe i wyjściowe nie są takie same (układ DSP). Ten DDI jest niezależny od strumienia, specyficzny dla konkretnych wyprowadzeń obwodów i obsługiwany tylko na wyprowadzeniach strumieniowych innych niż s/w.

PFN_ACX_PIN_SET_DATAFORMAT              EvtAcxPinSetDataFormat;

Zobacz także

nagłówek acxdataformat.h

Formaty danych audio

STRUKTURA KSDATAFORMAT

Omówienie rozszerzeń klas audio ACX