2011-09-13 5 views
1

DirectShow.Net을 사용 중이고 클래스에 ISampleGrabberCB를 구현하려고합니다.ISampleGrabber 콜백이 호출되지 않습니다.

  1. SampleGrabber 객체

  2. MediaType에 형식을 정의 만들기 : 그래프에서 그래버를 설정하기 위해

    , 나는이 체크리스트에 따라 (AMMediaType : 비디오, RGB, VideoInfo을)과 SampleGrabber 객체로 설정합니다. HRESULT는 0이므로 괜찮다고 생각합니다.

  3. 콜백을 sampleGrabber.SetCallback (this, 0)으로 설정했습니다. ISampleGrabber가 구현되어 클래스 자체에 정의되기 때문에 "this"를 전달합니다. 두 번째 매개 변수는 0이므로 SampleCB 메서드를 호출해야합니다.

  4. 마지막으로 그래프에 필터를 추가합니다. HRESULT는 다시 0입니다.

그러나 ISampleGrabber.SampleCB 메서드는 호출되지 않습니다.

이 비행의 원인에 대해 알고 계십니까?

내가 여기에 무슨 일이 일어나고 있는지 발견 한

[편집]! 하지만 여전히 도움이 필요합니다. 내가 소유하고있는 두 웹캠 모두 YUY2 하위 형식의 비디오 형식을 반환합니다. 위에서 언급했듯이, 내가 사용하고있는 코드는 MediaType을 RGB24로 강제합니다. 런타임에 HResult가 0임을 알 수 있습니다. 따라서 괜찮습니다. 그러나 "호환되지 않기"때문에 샘플 콜백이 호출되지 않습니다. Subtype 명시 적 정의를 제거하면 콜백이 발생합니다. 그러나 내가받는 프레임은 YUY2입니다. 유효한 비트 맵이 아니므로 "손상된", "왜곡 된"것처럼 보입니다.

이 시점에서 어떻게 성공적으로 RGB24 형식을 강제 적용 할 수 있는지 또는 비디오 프레임을 RGB24 형식으로 변환 할 수 있는지 알고 싶습니다.

유효한 답변을 찾기 위해 Google에서 상당한 시간을 보냈지만 운이 없었습니다.

아이디어가 있으십니까?

건배. Gianluca.

+1

몇 가지 코드를 볼 수 있습니까? – Goz

+0

@ Goz : 코드가 광범위하며 여러 기능으로 나뉩니다. 어떤 부분을보고 싶습니까? –

+0

귀하의 편집 내용에 비추어 볼 때 필터를 연결하는 부분을 보는 것이 좋습니다 – Goz

답변

0

YUY2 to RGB 변환기를 추가해야합니다.

찾아보기 Color Converter DSP 입력 핀을 YUY2로 설정하고 출력 핀을 RGB32로 설정하십시오. 그 다음 샘플 그래버를 추가하십시오.

위의 필터는 DMO 필터이므로 DirectShow DMO wrapper을 사용해야합니다. 링크에는이를 사용하는 좋은 예가 있습니다.

+0

답변 해 주셔서 감사합니다! DirectShow에서 첫 발걸음을 옮기고 있기 때문에, 내가하는 말을하는 방법에 대해서는 확신이 없습니다. 나를 도울 수있는 몇 가지 링크를 지적 해 주시겠습니까? 미리 감사드립니다! –

+0

@ Gianluca Colucci : 어떻게해야할지 모르십니까? – Goz

+0

grpBuilder.RenderStream (PinCategory.Capture, MediaType.Video, this.capDev, null, (IBaseFilter) smpGrabber)과 함께 작동하도록했습니다. 그것 없이는 그래버가 연결되지 않았고 어쨌든 그것이 어떻게 작동하는지 이해할 수 없습니다. 더 아래로 나는있다 : hr = grpBuilder.RenderStream (PinCategory.Preview, MediaType.Video, this.capDev, null, Renderer); 그것은 작동합니다. 그러나 개념적으로 맞습니까? –

1

그래프 내에서 샘플 그래버를 연결한다는 것은 결코 알 수 없으며 분명히 필수적입니다. 어떤 시점에서 콜백을 당연히해야 할 것입니다. 물론 연결 방법에 따라 미디어 파이프 라인의 문제를 해결하고 효과적인 필터 그래프 토폴로지를 먼저 확인해야합니다.

24 비트 RGB 하위 유형은 일종의 미디어 유형의 공통 분모이므로 거의 항상 샘플 그래버에서 얻을 수 있습니다.이를 위해 주요 유형 및 하위 유형으로 샘플 그래버 형식을 초기화합니다. 그러나 형식 유형을 지정할 필요는 없습니다. RGB 24 디코더가 자동으로 제공됩니다.

무엇인가가 작동하지 않으면 결국 얻을 수있는 토폴로지를 알고 싶습니다. 샘플 그래버는 적절한 초기화가 필요합니다.