Graph 관리자 필터링

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngineMedia Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

필터 그래프 관리자는 필터 그래프를 빌드하고 제어합니다. 이 개체는 DirectShow의 중앙 구성 요소입니다. 애플리케이션은 이를 사용하여 필터 그래프를 빌드하고 제어합니다. 필터 그래프 관리자는 필터 그래프 제어의 동기화, 이벤트 알림 및 기타 측면도 처리합니다. CoCreateInstance를 호출하여 이 개체를 만듭니다.

CLSID

필터 그래프 관리자를 만들기 위한 두 가지 CLSID가 있습니다.

CLSID Description
CLSID_FilterGraph 공유 작업자 스레드에서 Filter Graph Manager를 만듭니다.
CLSID_FilterGraphNoThread 애플리케이션 스레드에서 Filter Graph Manager를 만듭니다.

 

일반적으로 애플리케이션은 CLSID_FilterGraph 사용해야 합니다. 두 CLSID 모두 동일한 개체를 만들지만 서로 다른 스레딩 모델을 사용합니다.

  • CLSID_FilterGraph 동일한 프로세스 내의 모든 CLSID_FilterGraph 인스턴스에서 공유하는 작업자 스레드에 필터 그래프 관리자를 만듭니다. 스레드는 필터에서 보낸 메시지를 디스패치하고 필터에서 만든 모든 창의 수명을 제어합니다.
  • CLSID_FilterGraphNoThread 애플리케이션의 스레드에 필터 그래프 관리자를 만듭니다. 이 CLSID를 사용하는 경우 CoCreateInstance 를 호출하는 스레드에는 메시지를 발송하는 메시지 루프가 있어야 합니다. 그렇지 않으면 교착 상태가 발생할 수 있습니다. 또한 애플리케이션 스레드가 종료되기 전에 Filter Graph Manager 및 모든 그래프 개체(예: 필터, 핀, 참조 클록 등)를 해제해야 합니다.

인터페이스

Filter Graph Manager는 다음 인터페이스를 노출합니다.

DirectShow 개체