Q&A

  • dspack 으로 tv 수신 카드 display
procedure TVideoForm.OnSelectDevice(sender: TObject);
var
  CaptureGraph: ICaptureGraphBuilder2;
  SourceFilter, DestFilter: IBaseFilter;
begin
  FilterGraph.ClearGraph;
  FilterGraph.Active := false;
  Filter.BaseFilter.Moniker := SysDev.GetMoniker(TMenuItem(Sender).tag);
  FilterGraph.Active := true;
  FilterGraph.QueryInterface(ICaptureGraphBuilder2, CaptureGraph);
  Filter.QueryInterface(IBaseFilter, SourceFilter);
  VideoWindow.QueryInterface(IBaseFilter, DestFilter);
  CaptureGraph.RenderStream(@PIN_CATEGORY_PREVIEW, nil, SourceFilter, nil, nil);
  CaptureGraph.RenderStream(nil, nil, SourceFilter, nil, DestFilter);

  FilterGraph.Play;

  CaptureGraph := nil;
  SourceFilter := nil;
  DestFilter   := nil;
end;

위 예제와 같이 코딩하여 실행시키면 activemovie window라는 창이 뜨면서 display이 되고
Tvideowindow에도 display이 되거든요.....

제가 필요한 것은 activemovie window창은 안 뜨면서 Tvideowindow에서만 display시키고 싶거든요?

그래서  CaptureGraph.RenderStream(@PIN_CATEGORY_PREVIEW, nil, SourceFilter, nil, nil);
여기 부분을 삭제하고 실행시키면 아무것도 display안 되고요....

제가 미숙하여 당최 알수가 없네요

고수님들의 조언 부탁드립니다.

아니면 간단하게 overlay(preview 아님)시킬수 있는 다른 컴포넌트가 있는지요?
전에는 Tvideocap 컴포넌트를 사용했거든요...

참고로 수신카드는 ATI optimus 9000 pro(vivo)고 OS는 98을 씁니다.

쓰다보니깐 두서없이 썼네요

그럼 수고 하십시오.....

4  COMMENTS
  • Profile
    박상윤 2003.04.16 23:21
    일단 DestFilter를 받아서 처리하지 마시고 TvideoWindow에서
    직접합번 받아보시고

    if SUCCEEDED(VideoWindow.QueryInterface(IBaseFilter, DestFilter)) then
    begin

    end;
    에러처리를 함해보시거
    DestFilter 의 포인터가 제대로 넘어 오는지 검사를 해보시기 바랍니다.
    그리고  
    필터 그래프 에티터에서
    ATI optimus 9000 pro(vivo)카드의 속성도 한번 확인 해보시구여
  • Profile
    김병곤 2003.04.12 01:05
    CaptureGraph.RenderStream(@PIN_CATEGORY_PREVIEW, nil, SourceFilter, nil, nil);
    CaptureGraph.RenderStream(nil, nil, SourceFilter, nil, DestFilter);
    저도 DShow를 공부중입니다만... 왜 렌더를 두번하셨는지? ^^;
    CaptureGraph.RenderStream(@PIN_CATEGORY_PREVIEW, nil, SourceFilter, nil, DestFilter);
    이 하나의 렌더로 가능합니다만...ㅡㅡ;;
    허접한 답변이었습니다...^^


  • Profile
    안기연 2003.04.14 19:41

    답변 감사합니다.

    그런데 저도

    CaptureGraph.RenderStream(@PIN_CATEGORY_PREVIEW, nil, SourceFilter, nil, DestFilter);

    요렇게 해봤거든요...

    아무것도 Display 되지 않더라고요....

    그래서
    CaptureGraph.RenderStream(@PIN_CATEGORY_PREVIEW, nil, SourceFilter, nil, nil);

    요렇게하면 activemovie window라는 창만 뜨고요...

    제가 원하는 것은 Tvideowindow 에만 Display 되는 것을 원하거든요..

    귀찮으시더라도 답변부탁드립니다....

    그럼 수고하십시오...

  • Profile
    김병곤 2003.04.15 00:15
    그렇게 해도 안 되신다면 제가 유추해볼때는
    VideoWindow의 FilterGraph 프라퍼티 항목을 안 채우신게 아닌가 하는
    생각이 드네요.
    제가 보기에도 소스에는 문제가 없는듯하고 그리고 액티브 윈도우로는
    화면이 디스플레이 된다고 하시니 아무래도 필터그래프를 비디오 윈도우에
    연결을 안 하신게 아닌가 싶군요.
    VideoWindow.FilterGraph:= FilterGraph;
    당연한거지만 그래도 혹시나 하는 마음에 말씀드려 보는겁니다.
    저도 공부하는중이라 이문제도 아니면 저도 잘 모르겠네요...^^;
    그럼 즐푸하세요....