컴퍼지션 공간에서 비디오 사각형 배치 및 이동

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

VMR은 여러 입력 스트림을 혼합할 때 "컴퍼지션 공간"이라는 정규화된 사각형 내에 각 스트림을 배치합니다. 컴퍼지션 공간 내에서 좌표(0.0, 0.0)에서 (1.0, 1.0)로 표시되는 비디오 사각형을 형성합니다. 이 사각형 외부에 있는 모든 좌표가 잘립니다.

애플리케이션은 해당 스트림의 컴퍼지션 공간에서 대상 사각형을 변경하여 입력 스트림에서 비디오를 이동, 스트레칭 및 축소하여 특수 효과를 수행할 수 있습니다. 지정된 사각형이 네이티브 비디오 사각형과 다른 크기인 경우 네이티브 비디오가 축소되거나 맞게 늘어나게 됩니다. 대상 사각형은 IVMRMixerControl::SetOutputRect 메서드를 호출하여 지정됩니다.

예를 들어 스트림 0(핀 0에 해당)에 기본 비디오 스트림이 포함되어 있고 스트림 1(핀 1에 해당)에 보조 비디오가 포함되어 있다고 가정합니다. 스트림 1은 정규화된 직사각형 { -1.0f, 0.0f, 0.0f, 1.0f }을 지정하여 화면 을 완전히 벗어날 수 있습니다. 그런 다음 SetOutputRect에 대한 연속 호출에서 사각형의 왼쪽과 오른쪽을 수정하여 스트림 1을 표시 영역으로 이동할 수 있습니다.

레이블
Time 직사각형
t + 0 { -1.0f, 0.0f, 0.0f, 1.0f }
t + 1 { -0.9f, 0.0f, 0.1f, 1.0f }
t + 2 { -0.8f, 0.0f, 0.2f, 1.0f }
... ...
t + 10 { 0.0f, 0.0f, 1.0f, 1.0f }

 

컴퍼지션 공간에서 비디오 스트림 이동

t+10이면 스트림 1의 비디오가 완전히 표시됩니다. 이 예제에서는 이동하는 동안 스트림 1의 네이티브 크기가 유지되었습니다. 사각형을 늘이거나 축소하여 흥미로운 효과를 생성할 수도 있습니다. 아래쪽보다 위쪽에 더 큰 값을 지정하거나 오른쪽보다 왼쪽에 더 큰 값을 지정하여 비디오를 가로로 미러 비디오를 세로로 대칭 전환할 수도 있습니다.

VMR 혼합 모드 사용