DirectShow DirectShow 의 사용법 Video Mixing Renderer 의 사용법 VMR-9 필터 그래프의 생성   [목차열람] [주소복사] [슬롯비우기]
VMR-9 필터 그래프의 생성
 
Microsoft DirectX 9.0

VMR-9 필터 그래프의 생성

Video Mixing Renderer 9 필터 (VMR-9)는 디폴트 비디오 렌더러는 아니기 때문에, VMR-9 를 사용하는 애플리케이션은 명시적으로 VMR-9 를 그래프에 추가해, 접속할 필요가 있다. 여기에서는, VMR-9 를 사용하는 필터 그래프를 생성 하는 2 개가 다른 방법을 나타낸다.

Capture Graph Builder 의 사용법

Capture Graph Builder 는, 커스텀 필터 그래프를 생성하기 위한 헬퍼-개체이다. Capture Graph Builder 를 사용해, 다음과 같이 VMR-9 그래프를 생성 할 수 있다.

  1. Capture Graph Builder 에 대하며」의 설명에 따라,Capture Graph Builder 를 생성 해, 초기화한다.
  2. CoCreateInstance 를 호출해, VMR-9 를 생성 한다.
    IBaseFilter *pVmr = NULL;
    hr = CoCreateInstance(CLSID_VideoMixingRenderer9, 0, 
        CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**) &pVmr);
    
  3. 필터 그래프 매니저로 IFilterGraph::AddFilter 를 호출해, VMR-9 를 필터 그래프에 추가한다.
    hr = pGraph->AddFilter(pVmr, L"VMR9");
    
  4. IGraphBuilder::AddSourceFilter 를 호출해, 비디오 파일용의 소스 필터를 추가한다.
    IBaseFilter *pSource;
    hr = pGraph->AddSourceFilter(L"C:\\Example.avi", L"Source1", &pSource);
    
  5. ICaptureGraphBuilder2::RenderStream 메서드를 호출해, 비디오 스트림을 VMR 에 렌더링 한다.
    hr = pBuild->RenderStream(0, 0, pSource, 0, pVmr);  
    
  6. 옵션으로서 다시 RenderStream 를 호출해, 오디오 스트림을 렌더링 한다.
    hr = pBuild->RenderStream(0, &MEDIATYPE_Audio, pSource, 0, NULL);
    

각 소스 파일용의 AddSourceFilterRenderStream 를 호출해, 복수의 비디오 스트림을 믹싱 할 수 있다.

필터 그래프 매니저의 사용법

Capture Graph Builder 를 사용하고 싶지 않은 경우는, 다음의 순서에 따라, 필터 그래프 매니저로 메서드를 사용해, VMR-9 그래프를 생성 할 수 있다.

  1. 전의 순서로 설명한 것처럼, VMR-9 를 생성 해 그래프에 추가한다.
  2. 전의 순서로 설명한 것처럼,AddSourceFilter 를 사용해 비디오 파일용의 소스 필터를 추가한다.
  3. 오디오를 렌더링 하는 경우는,DirectSound 렌더러 필터의 인스턴스를 생성 해, 필터 그래프에 추가한다.
  4. IBaseFilter::EnumPins 메서드를 사용해, 소스 필터로 출력 핀을 검색한다. 더 자세한 정보는, 「핀의 열거」를 참조할것.
  5. 필터 그래프 매니저로 IFilterGraph2 인터페이스를 문의한다.
  6. AM_RENDEREX_RENDERTOEXISTINGRENDERERS 플래그를 사용해 IFilterGraph2::RenderEx 를 호출한다. 이 메서드를 호출하면, 이미 그래프에 있는 렌더링 필터 (여기에서는 VMR-9 및 DirectSound 렌더러)만을 사용해, 출력 파일이 렌더링 된다. 그 때문에, 인텔리전트 접속 논리가 디폴트 비디오 렌더러를 그래프에 추가해 VMR-9 를 미접속으로 할 것은 없다.

참조

↑TOP