DirectShow DirectShow 의 사용법 스트림 버퍼 엔진의 사용법 스트림 버퍼 그래프의 생성   [목차열람] [주소복사] [슬롯비우기]
스트림 버퍼 그래프의 생성
 
Microsoft DirectX 9.0

스트림 버퍼 그래프의 생성

이 주제는 Windows XP Service Pack 1에만 적용.

스트림 버퍼 엔진은 복수의 필터 그래프를 사용한다.

스트림 버퍼 엔진 필터 그래프

또, 싱크 그래프는 영속적 녹화도 생성 한다. 녹화된 데이터는 스트림 버퍼 소스 필터를 사용해 다음에 표시할 수 있다. 현재, 스트림 버퍼 엔진은, MPEG-2 비디오와 디지털 비디오 (DV) 소스를 지원 한다.

싱크 그래프를 생성 하려면 , 다음의 처리를 실시한다.

  1. 필터 그래프 매니저의 인스턴스를 생성한다.
  2. 스트림 버퍼 싱크 필터를 생성 해, 필터 그래프에 추가한다.
  3. 보통의 DirectShow 캡춰 그래프 또는 TV 그래프를 생성 하지만, 보통의 렌더링 필터에 보내는 대신에, 스트림 버퍼 싱크 필터에 모든 스트림을 루팅 한다.
  4. 스트림 버퍼 싱크 필터에 IStreamBufferSink 인터페이스를 문의한다.
  5. IStreamBufferSink::LockProfile 메서드를 호출한다. 이 메서드는 다음의 처리를 실시한다.

    그래프가 정지 하면, 프로파일의 잠금은 자동적으로 해제된다.

MPEG-2 컨텐츠의 경우,MPEG-2 디멀티플렉서 필터와 스트림 버퍼 싱크 필터간에 직접 MPEG-2 비디오 analyzer 필터를 삽입한다. 비디오 analyzer 필터에 의해, 소스 그래프는 4 배를 넘는 속도나 0 보다 작은 속도 (역방향 재생)를 취급할 수 있다.

MPEG-2 싱크 그래프

싱크 그래프의 캡춰 부분의 생성에 대해서는, 다음 주제를 참조할것.

소스 그래프를 생성 하려면 , 다음의 처리를 실시한다.

  1. 필터 그래프 매니저의 새로운 인스턴스를 생성한다.
  2. 스트림 버퍼 소스 필터를 생성 해, 필터 그래프에 추가한다.
  3. 다음의 몇개의 처리를 실시해, 스트림 버퍼 소스 필터의 소스를 설정한다.
  4. 스트림 버퍼 소스 필터의 출력 핀을 열거한다.
  5. 각 핀에 IGraphBuilder::Render 를 호출해 스트림을 렌더링 한다.

다음 코드는 소스 그래프를 생성 하는 방법을 나타내고 있다. 간단하기 때문에, 에러 체크는 생략 했다.

// 필터 그래프를 생성 한다.
CComPtr<IGraphBuilder> pSourceGraph;
hr = pSourceGraph.CoCreateInstance(CLSID_FilterGraph);

// 스트림 버퍼 소스 필터를 그래프에 추가한다.
CComPtr<IStreamBufferSource> pSource;
hr = pSource.CoCreateInstance(CLSID_StreamBufferSource);
CComQIPtr<IBaseFilter> pSourceF(pSource);
hr = pSourceGraph->AddFilter(pSourceF, L"SBESource");

// 스트림 싱크를 설정한다.
hr = pSource->SetStreamSink(pSink);
// 또는 다음과 같이 파일명을 건네준다.
// CComQIPtr<IFileSourceFilter> pFileSource(pSource);
// pFileSource->Load(L"StubFileNameHere", 0);

// 각 출력 핀을 렌더링 한다.
CComPtr<IPin> pSourcePinOut;
CComPtr<IEnumPins> pPinEnum;
hr = pSourceF->EnumPins(&pPinEnum);
while (hr = pPinEnum->Next(1, &pSourcePinOut, 0), hr == S_OK)
{
    hr = pSourceGraph->Render(pSourcePinOut);
    pSourcePinOut.Release();
}

캡춰를 시작 하려면 , 싱크 그래프를 실행한다. 재생을 시작 하려면 , 소스 그래프를 실행한다. 소스 그래프는, 싱크 그래프와는 독립해 실행, 포즈, 정지가 가능하다.

보통, 표시 세션 또는 녹화 세션이 종료할 때까지 소스 그래프를 정지할 필요는 없다. 싱크 그래프는 링 버퍼를 사용하기 (위해)때문에, 일시 배킹 파일의 전체 사이즈는 미리 설정한 최대치를 넘지 않는다. 소스 그래프를 정지 하면, 녹화 내용에 공백 부분이 생긴다. TV 소스의 경우, 소스 그래프의 실행중으로 채널을 변경할 수 있다.

소스 그래프를 시크 하려면 , 스트림 버퍼 소스 필터로 직접IStreamBufferMediaSeeking 인터페이스를 사용한다. 완성한 녹음에는, 필터 그래프 매니저의 IMediaSeeking 인터페이스 또는 IMediaPosition 인터페이스를 사용할 수 있다. 라이브 컨텐츠에는, 이러한 인터페이스를 사용하지 않는 것. 자세한 것은, 「스트림 버퍼 소스 필터 」를 참조할것.

↑TOP