Video Renderer에서 형식 변경 처리

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

이 섹션에서는 디코더 필터 또는 변환 필터가 비디오 렌더러의 형식 변경을 처리하는 방법을 설명합니다.

비디오 렌더러 필터

이전 Video Renderer 필터가 연결되면 기본 모니터의 표시 형식과 일치하는 RGB 형식이 필요합니다. 이렇게 하면 DirectDraw를 사용할 수 없는 경우 렌더링에 GDI를 사용할 수 있습니다. 재생이 시작되면 Video Renderer가 DirectDraw 호환 형식으로 전환할 수 있습니다. 업스트림 필터가 새 형식을 지원할 수 있는지 여부를 확인하기 위해 Video Renderer는 업스트림 필터의 출력 핀에서 IPin::QueryAccept를 호출합니다. 업스트림 필터가 새 형식을 수락하면 QueryAccept 메서드는 S_OK 반환합니다. Video Renderer는 새 형식의 미디어 형식을 할당자가 반환한 다음 미디어 샘플에 연결하여 형식을 전환합니다. 업스트림 필터는 각 샘플에서 IMediaSample::GetMediaType을 호출하여 형식 변경에 대해 검사 합니다. Video Renderer는 스트리밍 중에 언제든지 원래 형식과 새 형식 간에 전환할 수 있습니다. 첫 번째 형식이 변경된 후에 는 QueryAccept 를 호출하지 않습니다. 업스트림 필터가 새 형식을 수락하면 앞뒤로 전환할 수 있어야 합니다.

업스트림 필터는 QueryAccept에서 S_FALSE 반환하여 형식 변경을 거부할 수 있습니다. 이 경우 Video Renderer는 원래 형식으로 GDI를 계속 사용합니다.

비디오 혼합 렌더러 필터

비디오 혼합 렌더러 필터(VMR-7 및 VMR-9)는 시스템의 그래픽 하드웨어에서 지원하는 모든 형식과 연결됩니다. VMR-7은 항상 렌더링에 DirectDraw를 사용하고 업스트림 필터가 연결되면 기본 DirectDraw 표면을 할당합니다. VMR-9는 항상 렌더링에 Direct3D를 사용하고 업스트림 필터가 연결되면 기본 Direct3D 표면을 할당합니다.

그래픽 하드웨어는 이미지 너비보다 더 큰 표면 보폭이 필요할 수 있습니다. 이 경우 VMR은 QueryAccept를 호출하여 새 형식을 요청합니다. BITMAPINFOHEADERbiWidth 멤버에서 화면 보폭을 비디오 형식으로 보고합니다. 업스트림 필터가 QueryAccept에서 S_OK 반환하지 않으면 VMR은 형식을 거부하고 업스트림 필터에서 보급된 다음 형식을 사용하여 연결을 시도합니다. VMR은 미디어 형식을 새 형식으로 첫 번째 미디어 샘플에 연결합니다. 첫 번째 샘플 후에는 형식이 일정하게 유지되며, 그래프가 실행되는 동안 VMR은 형식을 전환하지 않습니다.

향상된 비디오 렌더링(EVR)

EVR은 항상 렌더링에 Direct3D를 사용합니다. 더 큰 표면 보폭이 필요한 경우 EVR은 VMR과 동일한 QueryAccept 메커니즘을 사용합니다.

QueryAccept(업스트림)