grabber 필터 샘플
grabber 필터 샘플
이 샘플은,샘플 grabber 필터의 수정한 소스 코드를 제공한다. 기존의 샘플 grabber와 경합 하지 않게, 다음과 같은 변경을 했다.
- 이 샘플 필터는, 샘플 처리인 것을 나타내도록(듯이) "SampleGrabber Example" 와 이름이 변경되었다.
- CLSID 는, CLSID_GrabberSample 로 변경되었다.
- 필터는, 새로운 인터페이스 IGrabberSample 를 지원 하고 있다.
패스
소스 : (SDK 루트) \Samples\C++\DirectShow\Filters\Grabber
샘플의 설명
grabber란, 스트림을 통해서 이동하는 데이터를 캡춰 해, 콜백을 통해서 애플리케이션에 통지하는 필터이다. 인 플레이스 변환을 실행하므로, 추가 버퍼나 복사는 필요없다. 다만, 콜백 함수의 처리에 시간이 걸릴 때는, 이 이점이 현저하게 손상되게 된다.
원의 샘플 grabber 필터의 제한 사항
DirectX 에 동고 되는 샘플 grabber에는, 다음과 같은 제한이 있다.
- 비디오 타입의 경우는,VIDEOINFOHEADER 포맷이 필요하다. VIDEOINFOHEADER2 나 DVINFO 등, 다른 형식의 포맷을 필요로 하는 필터에는 접속할 수 없다. 따라서, MPEG-2 나 DV 비디오, 필드 베이스의 비디오와는 호환성이 없다.
- 업 스트림 필터가 워커 thread의 샘플을 큐에 넣을 때 등, 경우에 따라서는 one-shot 모드가 올바르게 동작하지 않는다.
- 애플리케이션이 렌더링 필터를 필요로 하지 않은 (그 때문에 Null 렌더링 필터라고 부른다) 경우에서도, 렌더링 필터에 접속할 필요가 있다.
grabber 필터의 소스 코드는, 개발자에게, 필요에 따라서 개선이나 수정을 할 수 있을 기회를 제공하고 있다.
사용 위에의 추천 사항
grabber 샘플 필터를 사용하는 경우는, 다음의 가이드 라인에 따르는 것.
- IGraphBuilder::RenderFile 를 호출하지 않고, 또, 필터 그래프 매니저가 필터를 필터 최인내의 올바른 장소에 삽입했다고 가정하지 않는 것. 필터가 올바르게 접속되고 있어, 예상 대로의 미디어 타입을 사용하고 있는 것을 확인한다.
- 필터의 출력 핀을 다운 스트림 필터에 접속할 필요가 있다. 스트림으로부터 데이터를 렌더링 하지 않고 얻어온다 경우는, NULL 렌더링 필터를 사용한다.
- 그래프의 기준 클럭을 오프로 해, 필터 그래프를 할 수 있는 한 빨리 실행한다. 값 NULL 를 지정해,IMediaFilter::SetSyncSource 메서드를 호출한다.
- 필터는, 자신을 메인 애플리케이션 thread와 동기 시킬 것은 없기 때문에, 애플리케이션이 multi-thread에 관한 문제를 해결할 필요가 있다.
- 샘플 grabber 필터와는 달라, grabber 샘플은 데이터의 버퍼링도 "one-shot" 모드의 지원도 하지 않는다.
더 자세한 정보는,DirectX Developer Center 의 「Microsoft DirectShow 필터 그래프로부터 데이터를 얻어온다 방법」을 참조할것.
참조