VMR-7에 대한 사용자 지정 Allocator-Presenter 제공
[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, 그리고 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngine 및 Audio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
할당자-발표자는 DirectDraw 표면을 할당하고 렌더링을 위한 비디오 프레임을 표시합니다. 대부분의 시나리오에서 기본 할당자-발표자의 기능은 애플리케이션의 요구 사항에 충분합니다. 그러나 사용자 지정 할당자-발표자를 연결하면 애플리케이션이 비디오 비트에 직접 액세스하고 렌더링 프로세스를 완전히 제어할 수 있습니다. 이 향상된 성능의 대가로는 애플리케이션이 DirectDraw 표면 관리의 복잡성을 처리해야 한다는 것입니다.
사용하여
앞의 그림에서는 VMR 및 할당자-발표자가 사용하는 통신 인터페이스를 보여 줍니다. 모든 기본 할당 및 프레젠테이션 기능을 재정의하는 사용자 지정 할당자-발표자는 IVMRImagePresenter 및 IVMRSurfaceAllocator 인터페이스를 구현해야 하며, 선택적으로 IVMRWindowlessControl을 구현할 수 있습니다.
기본 할당자-발표자를 대체하기 위해 애플리케이션은 IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator 메서드를 호출하고 새 할당자-발표자에 대한 포인터를 전달합니다. 이 호출에 대한 응답으로 VMR은 할당자-발표자의 IVMRSurfaceAllocator::AdviseNotify 메서드를 호출하여 VMR의 IVMRSurfaceAllocatorNotify 인터페이스에 대한 포인터를 제공합니다. allocator-presenter는 IVMRSurfaceAllocatorNotify::NotifyEvent 메서드를 사용하여 VMR에 이벤트를 전달할 때 이 인터페이스 포인터를 사용합니다.
대체 솔루션으로 애플리케이션은 자체 할당자-발표자와 기본 할당자-발표자를 모두 사용할 수 있습니다. 이 시나리오에서 사용자 지정 할당자-발표자는 사용자 지정 기능이 필요한 호출만 처리하고 VMR의 나머지 호출을 기본 할당자-발표자로 전달합니다. 대부분의 경우 IVMRImagePresenter 인터페이스를 재정의하기만 하면 됩니다.
두 명의 할당자-발표자
사용자 지정 할당자-발표자와 기본 할당자-발표자를 모두 사용하기 위해 애플리케이션은 먼저 IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator 호출하여 새 할당자-발표자에 대한 포인터를 제공합니다. 이렇게 하면 기본 할당자-발표자가 제거되므로 애플리케이션은 VMR에서 QueryInterface 호출하고 IVMRSurfaceAllocator 인터페이스를 요청하여 다른 인스턴스를 만들어야 합니다. 앞의 그림과 같이 사용자 지정 할당자-발표자는 IVMRImagePresenter 인터페이스 메서드를 재정의하며, 모든 호출을 기본 구현의 IVMRSurfaceAllocator 인터페이스로 전달합니다. 또한 이 그림은 할당자-발표자에서 구현되는 IVMRWindowlessControl 인터페이스를 보여줍니다.
관련 항목
-
VMR-9 대한 사용자 지정 Allocator-Presenter 제공