DirectShow DirectShow 의 사용법 스트림 버퍼 엔진의 사용법 스트림 버퍼 그래프의 생성 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
이 주제는 Windows XP Service Pack 1에만 적용.
스트림 버퍼 엔진은 복수의 필터 그래프를 사용한다.
또, 싱크 그래프는 영속적 녹화도 생성 한다. 녹화된 데이터는 스트림 버퍼 소스 필터를 사용해 다음에 표시할 수 있다. 현재, 스트림 버퍼 엔진은, MPEG-2 비디오와 디지털 비디오 (DV) 소스를 지원 한다.
싱크 그래프를 생성 하려면 , 다음의 처리를 실시한다.
그래프가 정지 하면, 프로파일의 잠금은 자동적으로 해제된다.
MPEG-2 컨텐츠의 경우,MPEG-2 디멀티플렉서 필터와 스트림 버퍼 싱크 필터간에 직접 MPEG-2 비디오 analyzer 필터를 삽입한다. 비디오 analyzer 필터에 의해, 소스 그래프는 4 배를 넘는 속도나 0 보다 작은 속도 (역방향 재생)를 취급할 수 있다.
싱크 그래프의 캡춰 부분의 생성에 대해서는, 다음 주제를 참조할것.
소스 그래프를 생성 하려면 , 다음의 처리를 실시한다.
다음 코드는 소스 그래프를 생성 하는 방법을 나타내고 있다. 간단하기 때문에, 에러 체크는 생략 했다.
// 필터 그래프를 생성 한다.
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 인터페이스를 사용할 수 있다. 라이브 컨텐츠에는, 이러한 인터페이스를 사용하지 않는 것. 자세한 것은, 「스트림 버퍼 소스 필터 」를 참조할것.