다음을 통해 공유


형식 협상

애플리케이션이 오디오 처리를 시작한 후 그래프 작성기에서 SAPO를 오디오 그래프로 구성하고 SAPO를 초기화합니다. 그런 다음 오디오 서비스는 LFX sAPO와 협상하여 sAPO의 입력 및 출력에서 오디오 데이터의 형식을 설정합니다. 이 협상 프로세스를 형식 협상이라고 합니다.

Windows Vista에 오디오 시스템 효과를 제공하는 모든 SAP에는 특정 인터페이스와 메서드가 있어야 합니다. sAPO 및 오디오 엔진에서 데이터 형식을 협상하는 데 사용하는 메서드는 IAudioProcessingObject 인터페이스의 IsInputFormatSupported 메서드와 IAudioProcessingObjectConfiguration 인터페이스의 LockForProcessUnlockForProcess 메서드입니다.

형식 협상을 시작하기 위해 오디오 서비스는 먼저 LFX sAPO의 출력을 기본 float32 기반 형식으로 설정합니다. 그런 다음 오디오 서비스는 LFX sAPO의 IAudioProcessingObject::IsInputFormatSupported 메서드를 호출하고, 기본 형식을 제안하고, 이 메서드의 HRESULT 응답을 모니터링합니다. LFX sAPO가 제안된 형식을 지원할 수 있는 경우 지원되는 형식에 대한 참조와 함께 S_OK 반환합니다. LFX sAPO가 제안된 형식을 지원할 수 없는 경우 제안된 형식과 가장 일치하는 형식에 대한 참조와 함께 S_FALSE 반환합니다. LFX sAPO가 제안된 형식을 지원할 수 없고 일치하는 항목이 없으면 APOERR_FORMAT_NOT_SUPPORTED 반환합니다. GFX sAPO는 LFX sAPO의 출력 형식으로 작동합니다. 따라서 GFX sAPO는 형식 협상 프로세스에 포함되지 않습니다.

오디오 데이터를 처리하기 위해 데이터 형식을 선택한 후 오디오 처리 그래프 작성기는 SAPO의 IAudioProcessingObjectConfiguration::LockForProcess 메서드를 호출하여 형식 선택이 완료됩니다.

LockForProcess 메서드 호출에 대한 응답으로 Windows Vista sAPO가 래핑 사용자 지정 sAPO에 오류를 반환하는 경우 사용자 지정 sAPO는 sAPO 인스턴스화 시도가 실패할 때 CoCreateInstance의 오류를 처리하는 것과 동일한 방식으로 오류를 처리해야 합니다. 시스템에서 제공하는 LockForProcess 메서드를 덮어쓰는 방법에 대한 자세한 내용은 Spkrfill.cpp 파일을 참조하세요.

오디오 서비스가 작동하는 방식 때문에 LFX 및 GFX sAPO는 데이터 형식과 관련된 오디오 서비스의 쿼리에 서로 독립적으로 응답할 수 있어야 합니다.

중요 Windows Vista LFX sAPO를 래핑하는 사용자 지정 sAPO를 구현하는 경우 사용자 지정 sAPO의 등록 속성에 APO_FLAG_FRAMESPERSECOND_MUST_MATCH 플래그를 지정하지 마세요. 이 플래그를 지정하면 Windows Vista LFX sAPO에서 스피커 채우기, 헤드폰 가상화 또는 가상 서라운드를 수행할 수 없습니다. 또한 사용자 지정 sAPO는 오디오 스트림을 다운 믹스할 수 없습니다. 예를 들어 사용자 지정 sAPO는 5.1 오디오 스트림을 2 채널 스테레오 오디오 스트림으로 혼합할 수 없습니다.