2014-03-03 5 views
0

CBaseFilter를 기본 클래스로 사용하여 필터를 작성하고 있습니다. 입력 미디어 샘플을 그래프의 outputp로 전달하는 작업을하고 있습니다.왜이 필터가 작동하지 않습니까?

두 개의 핀 클래스를 만들었습니다. 하나는 출력용이고 다른 하나는 입력 용입니다. 나는 전달 방법을 통해 입력 핀에서 데이터를 전달합니다. 여기서 전달 방법은 전달을 사용하여 전달합니다. 메드가 호출 될 때마다 로그 파일 항목을 작성 했으므로 이러한 메서드가 실제로 호출됩니다.

그러나 그래프를 사용하면 그 그래프를 멈출 때까지 파일에 데이터가 기록되지 않습니다. 그런 다음 파일에 항상 64KB를 씁니다.

결과 avi 파일은 물론 재생할 수 없습니다.

그럼이 64KB의 데이터는 무엇입니까? 데이터 흐름을 작동시키기 위해 CBaseInputPin :: Receive와 CBaseOutputpin :: deliver 이외의 다른 메서드를 정의해야합니까?

답변

1

왜 CBaseFilter를 사용하고 있습니까? 입력과 출력을 가진 Filter의 경우, CTransformFilter의 directshow baseclass가 있습니다. 하나의 입력과 하나의 출력 핀이 있다면 CTransInPlaceFilter입니다.

"EZRGB24 Filter Sample"CTransformFilter를 구현하는 방법에 대한 DirectShow 샘플도 있습니다.

64Kb 데이터는 그래프를 중지 한 후에 기록되는 Avi-Header라고 생각합니다.

+0

최종 필터에 입력 핀이 3 개 이상 있기 때문에 CBaseFilter를 사용합니다. – Luke

0

그래프의 모양과 작성하려는 데이터의 종류를 모른 채 질문에 대답 할 방법이 없습니다. GraphEditPlus를 사용하여 파일에 쓰지 않고 그래프에 흐르는 데이터를 볼 수 있습니다. 몇 가지 샘플 그래버 인스턴스를 삽입하고 상황에 맞는 메뉴 (오른쪽 클릭)에서 "grabbed sample watch"를 선택하기 만하면됩니다.

관련 문제