ACX 오디오 데이터 형식 및 데이터 형식 목록
이 항목에서는 드라이버에서 ACX 형식 형식을 사용하여 신호 데이터 형식을 추적, 관리 및 비교하는 방법을 설명합니다. ACX에 대한 일반적인 개요 및 일반적인 ACX 용어 목록은 ACX 오디오 클래스 확장 개요를 참조하세요. 오디오 인코딩 형식에 대한 일반적인 내용은 오디오 데이터 형식을 참조 하세요.
ACXDATAFORMAT 및 ACXDATAFORMATLIST 개체
두 개의 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을 사용하여 목록에서 기본 형식을 검색할 수 있습니다.
드라이버는 다음 DPI를 사용하여 형식 목록을 반복하고 그룹으로 변경할 수 있습니다.
변경 내용은 드라이버가 반복을 종료한 후에만 적용됩니다.
VOID AcxDataFormatListBeginIteration(ACXDATAFORMATLIST, PACX_DATAFORMAT_LIST_ITERATOR)
NTSTATUS AcxDataFormatListRetrieveNextDataFormat(ACXDATAFORMATLIST, PACX_DATAFORMAT_LIST_ITERATOR, &ACXFORMAT);
VOID AcxDataFormatListEndIteration(ACXDATAFORMATLIST, PACX_DATAFORMAT_LIST_ITERATOR)
위의 DPI는 드라이버가 다음 콜백을 구현할 필요가 없습니다.
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;
또한 위의 DPI는 드라이버가 다음 이벤트를 구현할 필요가 없습니다(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)
또한 위의 DPI는 드라이버가 자체적으로 모드 및 포맷 스토리지를 관리할 필요가 없습니다.
인/아웃 형식이 동일하지 않은 경우 드라이버는 여전히 다음 DDI를 지원해야 합니다(DSP 회로). 이 DDI는 스트림 독립적이며 회로 핀에 따라 다르며 s/w가 아닌 스트리밍 핀에서만 지원됩니다.
PFN_ACX_PIN_SET_DATAFORMAT EvtAcxPinSetDataFormat;