여러 스트림이 있는 VMR(혼합 모드)

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

VMR은 여러 입력 스트림을 렌더링할 수 있습니다. 혼합 모드라고 하는 이 구성에서 VMR은 믹서와 작성기를 로드하여 렌더링 전에 혼합 및 혼합을 수행합니다. VMR이 창 모드 또는 창 없는 모드에 있는 동안 혼합 모드를 사용할 수 있습니다.

혼합 모드를 사용하려면 그래픽 드라이버가 DDCAPS_BLTFOURCC 및 DDCAPS_BLTSTRETCH 기능 플래그(각각 색 공간 변환 및 스트레치 블리팅)를 지원해야 합니다. 거의 모든 새로운 그래픽 드라이버에는 이러한 기능이 있습니다. 또한 드라이버는 현재 디스플레이 픽셀 깊이에 대한 Direct3D 렌더링 대상 만들기를 지원해야 합니다. 디스플레이가 픽셀당 24비트로 설정된 경우 일부 디바이스는 Direct3D 작업을 지원하지 않습니다. 자세한 내용은 DirectX Graphics SDK 설명서를 참조하세요.

참고

VMR이 여러 비디오 스트림을 혼합하는 경우 필터 그래프가 올바르게 검색되지 않습니다. 여러 비디오 스트림을 검색해야 하는 경우 동일한 사용자 지정 할당자-발표자 개체를 공유하는 별도의 필터 그래프를 만들어야 합니다.

 

여러 스트림에 대한 VMR-7 구성

VMR-7을 사용하여 여러 입력 스트림을 렌더링하려면 다음을 수행합니다.

  1. VMR의 입력 핀을 연결하기 전에 스트림 수를 사용하여 IVMRFilterConfig::SetNumberOfStreams 메서드를 호출합니다. 이렇게 하면 VMR이 믹서 및 작성기를 로드하고 지정된 수의 입력 핀을 만듭니다.
  2. IVMRFilterConfig::SetRenderingPrefs를 호출하여 다양한 렌더링 기본 설정을 지정합니다.
  3. 핀을 업스트림 필터에 연결합니다. 이 작업을 수행하는 가장 쉬운 방법은 각 입력 스트림에 대해 IGraphBuilder::RenderFile 을 호출하는 것입니다. 업스트림 필터의 출력 핀(일반적으로 디코더)과 VMR의 입력 핀이 연결에 동의할 수 없는 경우 기본 설정이 있는 VMR의 새 instance 만들어집니다. 그러면 제목 표시줄에 "ActiveMovie"가 있는 새 창이 생성됩니다. 이 문제를 방지하려면 애플리케이션은 항상 IPin::ConnectedTo와 같은 메서드를 호출하여 VMR의 올바른 instance 사용되고 있는지 확인해야 합니다. 또 다른 옵션은 원본 필터를 추가한 다음 IGraphBuilder::Connect를 사용하여 핀을 연결하는 것입니다.
  4. VMR의 IVMRMixerControl 인터페이스를 사용하여 알파 값, Z 순서 및 출력 사각형과 같은 각 스트림에 대한 매개 변수를 제어합니다.
  5. 필터 그래프를 실행합니다.

여러 스트림에 대한 VMR-9 구성

기본적으로 VMR-9는 4개의 입력 핀을 만듭니다. 4개 이상의 비디오 스트림을 혼합하려면 입력 핀을 연결하기 전에 IVMRFilterConfig9::SetNumberOfStreams 를 호출합니다. IVMRMixerControl9 인터페이스를 사용하여 알파, Z 순서 및 위치와 같은 스트림 매개 변수를 설정합니다.

VMR 혼합 모드 사용