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;