共用方式為


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(例如 ACXPIN)將其關聯至特定的訊號處理模式。

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

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

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

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

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

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

請注意,只有在驅動程式結束反覆專案之後,才會套用變更。

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

上述 DDI 消除驅動程式需要實作下列回呼的需求:

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;

上述 DDI 也不需要驅動程式實作下列事件 (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)

上述 DDI 也消除驅動程式自行管理模式和格式的儲存需求。

如果輸入/輸出格式不相同,驅動程式仍需要支援下列 DDI (DSP 線路) 。 此 DDI 與串流無關、特定於電路引腳,且僅支援非軟體串流引腳。

PFN_ACX_PIN_SET_DATAFORMAT              EvtAcxPinSetDataFormat;

另請參閱

acxdataformat.h 標頭

音訊數據格式

KSDATAFORMAT 結構

ACX 音訊類別延伸模組概觀