共用方式為


ACX 音訊數據格式和數據格式清單

本主題描述驅動程式如何使用 ACX 格式類型來追蹤、管理和比較訊號數據格式。 如需 ACX 的一般概觀,以及一般 ACX 詞彙的清單,請參閱 ACX 音訊類別延伸模組概觀。 如需音訊編碼格式的一般資訊,請參閱 音訊數據格式

ACXDATAFORMAT 和 ACXDATAFORMATLIST 物件

兩個 ACX 物件可用來處理數據格式。

  • ACXDATAFORMAT,代表音訊裝置支持的數據格式。
  • ACXDATAFORMATLIST 是可供使用的音訊數據格式清單。

如需使用 ACX 對象的詳細資訊,請參閱 ACX 物件的摘要。

ACX 會使用 ACX_DATAFORMAT_TYPE 列舉,其會參考 KSDATAFORMAT 結構 來指定數據格式。

ACXDATAFORMAT

ACXDATAFORMAT 提供數據格式物件的句柄。 驅動程式會使用 AcxDataFormatCreate 函式建立這些物件,並使用 AcxDataFormatIsEqual 加以比較

ACXDATAFORMATLIST

ACXDATAFORMATLIST 是數據格式物件的容器。 當驅動程式建立 ACXPIN 時,ACX 會自動建立原始訊號處理模式的空白數據格式清單。 驅動程式可以使用 AcxPinGetRawDataFormatList 來存取清單。 它會傳回指定 ACXPIN 的 ACXDATAFORMATLIST。

驅動程式可以使用 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));

驅動程式可以使用 AcxDataFormatListCreate 建立特定 WDFDEVICE 的特定 WDFDEVICE,建立其他數據格式清單,並將其關聯至特定訊號處理模式,例如 ACXPIN。

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

驅動程式可以使用 AcxPinRetrieveModeDataFormatList 擷取與特定釘選相關聯的格式清單。

驅動程式可以使用 AcxDataFormatListRemoveDataFormat 從特定清單中移除格式。 請注意,如果此格式也是預設格式,ACX 會選取清單中的第一個可用格式作為預設值(如果有的話)。

驅動程式可以使用 AcxDataFormatListAssignDefaultDataFormat 在列表中指定預設格式。 默認格式必須存在於清單中,否則將會新增。

驅動程式可以使用 AcxDataFormatListRetrieveDefaultDataFormat 來擷取清單中的預設格式。

驅動程式可以使用下列 DIS 逐一查看格式清單,並以群組身分進行變更。

請注意,只有在驅動程序結束反覆項目之後,才會套用變更。

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

上述 DIS 可移除驅動程式實作下列回呼的需求:

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;

上述 DIS 也會移除驅動程式實作下列事件的需求(ACX 會在列表變更後自動觸發此事件):

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

上述 DIS 也會移除驅動程式自行管理模式和格式化記憶體的需求。

如果 in/out 格式不同,驅動程式仍需要支援下列 DDI (DSP 線路)。 此 DDI 是與數據流無關的線路針腳,且僅支援非 s/w 串流針腳。

PFN_ACX_PIN_SET_DATAFORMAT              EvtAcxPinSetDataFormat;

另請參閱

acxdataformat.h 標頭

音訊數據格式

KSDATAFORMAT 結構

ACX 音訊類別延伸模組概觀