次の方法で共有


ACX オーディオ データ形式とデータ形式リスト

このトピックでは、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 ヘッダー する

オーディオ データ形式 する

KSDATAFORMAT 構造体

ACX オーディオ クラス拡張機能の概要