하드웨어 오프로드 오디오 드라이버 구현
오프로드된 오디오용 드라이버를 구현할 때 오프로드된 오디오 스트림을 처리하고 Windows 오디오 시스템에 해당 기능을 노출할 수 있는 드라이버를 개발합니다.
이 항목에서는 하드웨어 오프로드 오디오 스트림을 처리할 수 있는 오디오 어댑터용으로 개발된 오디오 드라이버에 대한 구현 세부 정보를 제공합니다.
이 섹션의 이러한 추가 topics 오프로드된 오디오 스트림을 처리하기 위해 하드웨어 오디오 엔진을 구현하는 오디오 어댑터용 오디오 드라이버를 개발할 때 알아야 할 문제에 대해 설명합니다.
오프로드된 오디오 처리를 위한 Portcls 도우미 인터페이스
하드웨어 오프로드 - KS 필터 토폴로지
Windows는 온보드 하드웨어 오디오 엔진을 사용하여 오디오 스트림을 처리할 수 있는 오디오 어댑터의 사용을 지원합니다. 이러한 오디오 어댑터를 개발할 때 연결된 오디오 드라이버는 오디오 시스템이 이 어댑터와 해당 드라이버의 기능을 검색, 사용 및 적절하게 노출할 수 있도록 특정 방식으로 사용자 모드 오디오 시스템에 이 사실을 노출해야 합니다.
노드 설명자에 대한 KSNODETYPE_AUDIO_ENGINE GUID
오디오 어댑터가 오프로드된 오디오 스트림을 처리할 수 있는 경우 어댑터의 오디오 드라이버는 어댑터에 대한 KS 필터의 노드를 사용하여 이 기능을 노출합니다.
오디오 어댑터가 오프로드된 오디오 스트림을 처리할 수 있는 경우 어댑터의 오디오 드라이버는 어댑터에 대한 KS 필터의 특정 노드를 사용하여 이 기능을 노출합니다.
오디오 스트림의 경로에 있는 각 노드에는 노드 설명자가 있습니다. 하드웨어가 로드되지 않으면 드라이버는 Type GUID를 KSNODETYPE_AUDIO_ENGINE 설정해야 합니다.
다음은 드라이버가 이 노드에 대한 노드 설명자를 구성하는 방법의 예입니다.
typedef struct _KSNODE_DESCRIPTOR {
const KSAUTOMATION_TABLE *AutomationTable; // drv specific
const GUID *Type; // must be set to KSNODETYPE_AUDIO_ENGINE
const GUID *Name; // drv specific (KSNODETYPE_AUDIO_ENGINE?)
} KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;
이름 GUID가 KSNODETYPE_AUDIO_ENGINE 설정된 경우 이 노드에 대한 기본 이름 문자열을 만들어야 합니다. 그런 다음 ks.inf에 해당 문자열을 추가하여 드라이버를 설치하는 동안 문자열을 사용하여 MediaCategories 레지스트리 키를 채울 수 있습니다.
노드 형식에 대한 GUID 정의( KSNODETYPE_AUDIO_ENGINE)는 다음과 같습니다.
Code style
#define STATIC_KSNODETYPE_AUDIO_ENGINE\
0x35caf6e4, 0xf3b3, 0x4168, 0xbb, 0x4b, 0x55, 0xe7, 0x7a, 0x46, 0x1c, 0x7e
DEFINE_GUIDSTRUCT("35CAF6E4-F3B3-4168-BB4B-55E77A461C7E", KSNODETYPE_AUDIO_ENGINE);
#define KSNODETYPE_AUDIO_ENGINE DEFINE_GUIDNAMED(KSNODETYPE_AUDIO_ENGINE)
자세한 내용은 ksmedia.h 헤더 파일을 참조하세요.
앞의 정보에 따라 미니포트 노드에 대한 설명자는 다음과 같이 표시할 수 있습니다.
PCNODE_DESCRIPTOR MiniportNodes[] =
{
// KSNODE_WAVE_AUDIO_ENGINE
{
0, // Flags
NULL, // AutomationTable
&KSNODETYPE_AUDIO_ENGINE, // Type KSNODETYPE_AUDIO_ENGINE
NULL // Name
}
};
오디오 엔진에 대해 설정된 KSPROPSETID_AudioEngine KS 속성
KSPROPSETID_AudioEngine 속성 집합은 하드웨어 오디오 엔진 및 하드웨어 오프로드 오디오 처리를 지원하는 데 사용됩니다. 따라서 오프로드된 오디오 스트림을 처리할 수 있는 어댑터의 드라이버는 이 새 속성 집합의 속성을 지원해야 합니다.
KSPROPSETID_AudioEngine 속성 집합은 다음과 같이 정의됩니다.
#define STATIC_KSPROPSETID_AudioEngine\
0x3A2F82DCL, 0x886F, 0x4BAA, 0x9E, 0xB4, 0x8, 0x2B, 0x90, 0x25, 0xC5, 0x36
DEFINE_GUIDSTRUCT("3A2F82DC-886F-4BAA-9EB4-082B9025C536", KSPROPSETID_AudioEngine);
#define KSPROPSETID_AudioEngine DEFINE_GUIDNAMED(KSPROPSETID_AudioEngine)
이 속성 집합의 속성 이름은 KSPROPERTY_AUDIOENGINE 열거형에 정의되며 드라이버는 이러한 이름을 지원해야 합니다.
KSPROPSETID_AudioEngine 속성 집합의 속성은 다음과 같습니다.
KSPROPERTY_AUDIOENGINE_BUFFER_SIZE_RANGE
KSPROPERTY_AUDIOENGINE_DESCRIPTOR
KSPROPERTY_AUDIOENGINE_DEVICEFORMAT
KSPROPERTY_AUDIOENGINE_GFXENABLE
KSPROPERTY_AUDIOENGINE_LFXENABLE
KSPROPERTY_AUDIOENGINE_LOOPBACK_PROTECTION
KSPROPERTY_AUDIOENGINE_MIXFORMAT
KSPROPERTY_AUDIOENGINE_SUPPORTEDDEVICEFORMATS
KSPROPERTY_AUDIOENGINE_VOLUMELEVEL
KSPROPSETID_ Audio 속성 집합의 필수 속성
드라이버는 KSPROPSETID_AudioEngine 속성 집합의 속성을 지원하는 것 외에도 KSPROPSETID_Audio 속성 집합에서 다음과 같은 기존 속성을 지원해야 합니다.
또한 하드웨어 오프로드 오디오 처리에 대한 드라이버 지원 구현을 완료하기 위해 KSPROPSETID_ Audio 속성 집합에서 속성을 사용할 수 있습니다.
KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION
KSPROPERTY_AUDIO_PRESENTATION_POSITION
KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION
포트 클래스 드라이버 업데이트 및 결함 보고
Windows 포트 클래스 드라이버는 하드웨어 오프로드 오디오 처리를 위해 이전 섹션에서 설명한 지원 외에도 오프로드된 오디오 스트림으로 작업할 수 있는 드라이버를 간단하게 개발할 수 있도록 "도우미 인터페이스"를 제공합니다. 그리고 이러한 드라이버가 결함을 감지하면 드라이버가 결함 오류를 보고할 수 있는 메커니즘이 있습니다. 다음 topics 도우미 인터페이스 및 결함 보고에 대한 자세한 내용을 제공합니다.
오프로드된 오디오 처리를 위한 Portcls 도우미 인터페이스 Windows 포트 클래스 드라이버에는 하드웨어 오프로드 오디오 처리에 대한 이전 섹션에서 설명한 지원 외에도 오프로드된 오디오 스트림으로 작업할 수 있는 드라이버를 간단하게 개발할 수 있도록 하는 "도우미 인터페이스"가 포함되어 있습니다. 그리고 이러한 드라이버가 결함을 감지하면 드라이버가 결함 오류를 보고할 수 있는 메커니즘이 있습니다. 다음 topics 도우미 인터페이스 및 결함 보고에 대한 자세한 내용을 제공합니다.