VMR-7에 대한 사용자 지정 Allocator-Presenter 제공

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

할당자-발표자는 DirectDraw 표면을 할당하고 렌더링을 위한 비디오 프레임을 표시합니다. 대부분의 시나리오에서 기본 할당자-발표자의 기능은 애플리케이션의 요구 사항에 충분합니다. 그러나 사용자 지정 할당자-발표자를 연결하면 애플리케이션이 비디오 비트에 직접 액세스하고 렌더링 프로세스를 완전히 제어할 수 있습니다. 이 향상된 전원의 장단 점은 애플리케이션이 DirectDraw 표면 관리의 복잡성을 추가로 처리해야 한다는 것입니다.

사용자 지정 할당자-발표자 사용

앞의 그림은 VMR 및 할당자-발표자가 사용하는 통신 인터페이스를 보여 줍니다. 모든 기본 할당 및 프레젠테이션 기능을 재정의하는 사용자 지정 할당자-발표자는 IVMRImagePresenterIVMRSurfaceAllocator 인터페이스 및 선택적으로 IVMRWindowlessControl을 구현해야 합니다.

기본 할당자-발표자를 바꾸기 위해 애플리케이션은 IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator 메서드를 호출하고 새 할당자-발표자에 대한 포인터를 전달합니다. 이 호출에 대한 응답으로 VMR은 할당자-발표자의 IVMRSurfaceAllocator::AdviseNotify 메서드를 호출하여 VMR의 IVMRSurfaceAllocatorNotify 인터페이스에 대한 포인터를 제공합니다. allocator-presenter는 IVMRSurfaceAllocatorNotify::NotifyEvent 메서드를 사용하여 VMR 에 이벤트를 전달할 때 이 인터페이스 포인터를 사용합니다.

대체 솔루션으로 애플리케이션은 자체 할당자-발표자와 기본 할당자-발표자를 모두 사용할 수 있습니다. 이 시나리오에서 사용자 지정 할당자-발표자는 사용자 지정 기능이 필요한 호출만 처리하고 VMR의 나머지 호출을 기본 할당자-발표자로 전달합니다. 대부분의 경우 IVMRImagePresenter 인터페이스를 재정의하기만 하면 됩니다.

두 할당자-발표자 사용

사용자 지정 할당자-발표자와 기본 할당자-발표자를 모두 사용하기 위해 애플리케이션은 먼저 IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator 를 호출하여 새 할당자-발표자에 대한 포인터를 제공합니다. 이로 인해 기본 할당자-발표자가 제거되므로 애플리케이션은 VMR에서 QueryInterface를 호출하고 IVMRSurfaceAllocator 인터페이스를 요청하여 다른 instance 만들어야 합니다. 앞의 그림과 같이 사용자 지정 할당자-발표자는 IVMRImagePresenter 인터페이스 메서드를 재정의하고 모든 호출을 IVMRSurfaceAllocator 인터페이스에 기본 구현으로 전달합니다. 또한 이 그림은 할당자-발표자에서 구현되는 IVMRWindowlessControl 인터페이스를 보여줍니다.

VMR-9에 대한 사용자 지정 Allocator-Presenter 제공

VMR 렌더링리스 재생 모드(사용자 지정 할당자-발표자)