DirectShow DirectShow 레퍼런스 DirectShow 의 필터 비디오 렌더러 필터   [목차열람] [주소복사] [슬롯비우기]
비디오 렌더러 필터
 
Microsoft DirectX 9.0

비디오 렌더러 필터

비디오 렌더러 필터는, 견뢰한 다목적 비디오 필터이다.

 :  Microsoft Windows XP 에서는, Video Mixing Renderer (VMR)가 기정의 비디오 렌더러이다. VMR 도 비디오 렌더러도, 프렌들리명은 같은 "Video Renderer" 이다. 다른 모든 플랫폼에서는, 비디오 렌더러는 기정의 렌더러이지만, 애플리케이션으로 고도의 렌더링 기능을 필요로 하는 경우는, VMR-9 도 사용할 수 있다.

비디오 카드가 지원 하고 있으면, 비디오 렌더러 필터는 Microsoft® DirectDraw® 및 오버레이 표면을 사용한다. 필터 그래프 매니저는, 애플리케이션이 비디오 렌더러의 프로퍼티를 설정 및 취득할 수 있도록(듯이)하기 위한 ,IVideoWindow 인터페이스를 공개한다. 신형의 비디오 카드를 사용하고 있는 경우는, 비디오 렌더러를 사용해 풀 스크린 렌더링을 실행할 수 있다. 구형의 비디오 카드의 경우, 풀 스크린 모드에 들어갈 때는, 필터 그래프 매니저가 자동적으로풀 스크린 렌더링 필터로 전환한다. 더 자세한 정보는, 「IVideoWindow::put_FullScreenMode 」를 참조할것.

중요 :  보통, 이 필터의 비디오 윈도우는, 필터 그래프 매니저에 의해 생성 된 워커 thread의 메시지를 처리한다. 그러나, 애플리케이션이 CoCreateInstance 를 사용해 직접 필터를 생성 했을 경우, 비디오 윈도우는 애플리케이션 thread의 메시지를 처리한다. 그 경우, 애플리케이션 thread는, 비디오 윈도우에 메시지를 디스패치하기 위한 메시지 루프를 가지고 있을 필요가 있다. 또 thread는, 필터 그래프 매니저가 셧다운 했을 때에 발생하는, 비디오 렌더러에의 마지막 Release 호출까지 종료해서는 안 된다. 이와 같이 하지 않으면 애플리케이션이 데드 록에 빠지는 일이 있다.

필터 인터페이스 IBaseFilter ,IBasicVideo ,IBasicVideo2 ,IDirectDrawVideo ,IKsPropertySet ,IMediaPosition ,IMediaSeeking ,IQualityControl ,IQualProp ,IVideoWindow
입력 핀 미디어 타입 MEDIATYPE_Video
입력 핀인타페이스 IMemInputPin ,IOverlay ,IPin ,IPinConnection ,IQualityControl
출력 핀 미디어 타입 해당 없음.
출력 핀인타페이스 해당 없음.
필터 CLSID CLSID_VideoRenderer
프로퍼티 페이지 CLSID 프로퍼티 페이지 없음.
실행 모듈 quartz.dll
메리트 Windows 98, Me, NT,2000: MERIT_PREFERRED

Windows XP: MERIT_UNLIKELY

필터 카테고리 CLSID_LegacyAmFilterCategory

주의

Quartz.dll 의 디버그 버전에서는, LOG_TRACE 디버그 레벨이 5 이상으로 설정되어 있는 경우, 비디오 렌더러는, 각 프레임의 타임 스탬프를 비디오 윈도우에 표시한다. 이러한 번호는, 리테일 버전의 DLL 에서는 표시되지 않는다. 더 자세한 정보는, 「디버그 출력 함수」를 참조할것.

필터 개발자는, 이하의 점에 주의 해야 한다.

비디오 렌더러는, 비디오 그래픽 카드가 YUV 오버레이 표면을 지원 하는 경우는, YUV 포맷을 취급할 수가 있다. 다만, 최초로 업 스트림 필터에 접속할 때, 비디오 렌더러는, 현재의 모니터 설정의 색깊이에 합치하는 RGB 포맷을 필요로 한다. 예를 들어, 현재의 디스플레이 설정이 24 비트 컬러의 경우는, 업 스트림 필터측에서 24 비트 RGB 비디오를 제공할 수 있어야 한다. 필터 그래프가 실행 상태에 바뀌면 비디오 렌더러는, 적절한 YUV 색공간(color space)에의 동적인 포맷 변경을 네고시에이트 한다.

RGB 타입에 접속하는 것에 의해, 비디오 렌더러는, DirectDraw 를 사용할 수 없을 때에 GDI 를 사용할 수 있게 된다. 다른 애플리케이션이 비디오 메모리를 사용하고 있어, 비디오 표시 직사각형이 복수의 모니터 시스템으로 2 개의 모니터에 걸치고 있는 경우, 또는 비디오 직사각형이 완전하게 화면상의 다른 윈도우에 의해 숨겨지고 있는 경우, 비디오 렌더러는 GDI 로 전환한다.

 :  Video Mixing Renderer 는, 렌더링에 GDI 를 사용하지 않기 때문에, 이러한 동적 포맷 변경을 실행하지 않고, RGB 미디어 타입도 필요로 하지 않는다.

포맷 변경을 네고시에이트 할 때, 비디오 렌더러는, 새로운 미디어 타입을 사용해 IPin::QueryAccept 를 호출한다. 업 스트림 필터가 S_OK 를 돌려주었을 경우, 비디오 렌더러는, 새로운 미디어를 다음 샘플에 Attach 한다. 업 스트림 필터는, 각 샘플로 IMediaSample::GetMediaType 를 호출할 필요가 있다. GetMediaType 가 NULL 이외의 값을 돌려주었을 경우는, 포맷 변경을 나타내고 있다. 그 경우, 업 스트림 필터는, 출력 타입을 변경하는 것으로 이것에 응답할 필요가 있다. (QueryAccept 메서드내에서 타입을 변경하지 않는 것. ) 업 스트림 필터는, 적어도 주요한 RGB 타입을 처리할 수 있어야 한다. 게다가 일반적인 YUV 타입도 지원 하는 것이 바람직한다. 스트림중, 비디오 렌더러는, YUV 와 RGB 타입의 사이에 몇번이나 바꾸는 일이 있다. 비디오 렌더러는, 업 스트림 필터가 시작 한 동적 포맷 변경은 받아들이지 않는다.

비디오 렌더러가 DirectDraw 오버레이 표면에 드로잉(Drawing) 할 때, 입력 핀에 단일의 버퍼를 할당한다. 업 스트림 필터가 복수의 버퍼를 사용해 접속을 강제했을 경우, 비디오 렌더러는, 오버레이 표면을 사용할 수 없다.

↑TOP