このトピックでは、ACX 形式の種類を追跡、管理、および信号データ形式を比較するドライバーによって使用される方法について説明します。 ACX の一般的な概要と一般的な ACX 用語の一覧については、「 ACX Audio Class Extensions Overview」を参照してください。 オーディオ エンコード形式の一般的な情報については、「 オーディオ データ形式」を参照してください。
ACXDATAFORMAT オブジェクトと ACXDATAFORMATLIST オブジェクト
データ形式の操作には、2 つの ACX オブジェクトが使用されます。
- オーディオ デバイスでサポートされるデータ形式を表す ACXDATAFORMAT。
- 使用できるオーディオ データ形式の一覧である ACXDATAFORMATLIST。
ACX オブジェクトの操作の詳細については、 ACX オブジェクトの概要を参照してください。
ACX は、データ形式を指定するために KSDATAFORMAT 構造体を参照するACX_DATAFORMAT_TYPE列挙体を使用します。
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));
ドライバーは、ACXPIN などの特定の WDFDEVICE の AcxDataFormatListCreate を使用して、追加のデータ形式リストを作成し、特定の信号処理モードに関連付けることができます。
NTSTATUS AcxDataFormatListCreate(device, attributes, <format cfg>, &ACXDATAFORMATLIST)
ドライバーは、 AcxPinRetrieveModeDataFormatList を使用して、特定のピンに関連付けられている形式リストを取得できます。
ドライバーは、 AcxDataFormatListRemoveDataFormat を使用して、特定のリストから形式を削除できます。 この形式も既定の形式である場合、ACX はリストで使用可能な最初の形式を既定として選択します (存在する場合)。
ドライバーは、 AcxDataFormatListAssignDefaultDataFormat を使用して、リスト内の既定の形式を指定できます。 既定の形式はリストに存在する必要があります。それ以外の場合は追加されます。
ドライバーは、 AcxDataFormatListRetrieveDefaultDataFormat を使用して、リスト内の既定の形式を取得できます。
ドライバーは、次の DDI を使用して、書式リストを反復処理し、グループとして変更を行うことができます。
- AcxDataFormatListBeginIteration の
- AcxDataFormatListRetrieveNextFormat の
- AcxDataFormatListEndIteration の
変更は、ドライバーがイテレーションを終了した後にのみ適用されることに注意してください。
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 ヘッダー を する
オーディオ データ形式 を する