DirectShow DirectShow 의 사용법 GraphEdit 에 의한 그래프 생성의 시뮬레이션 GraphEdit 파일에의 필터 그래프의 보존 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
다음 샘플 코드는 GraphEdit (. grf) 파일에 필터 그래프를 보존하는 방법을 나타내고 있다. 이 예는, 애플리케이션의 디버그에 이용할 수 있다.
HRESULT SaveGraphFile(IGraphBuilder *pGraph, WCHAR *wszPath)
{
const WCHAR wszStreamName[] = L"ActiveMovieGraph";
HRESULT hr;
IStorage *pStorage = NULL;
hr = StgCreateDocfile(
wszPath,
STGM_CREATE | STGM_TRANSACTED | STGM_READWRITE | STGM_SHARE_EXCLUSIVE,
0, &pStorage);
if(FAILED(hr))
{
return hr;
}
IStream *pStream;
hr = pStorage->CreateStream(
wszStreamName,
STGM_WRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE,
0, 0, &pStream);
if (FAILED(hr))
{
pStorage->Release();
return hr;
}
IPersistStream *pPersist = NULL;
pGraph->QueryInterface(IID_IPersistStream, (void**) &pPersist);
hr = pPersist->Save(pStream, TRUE);
pStream->Release();
pPersist->Release();
if (SUCCEEDED(hr))
{
hr = pStorage->Commit(STGC_DEFAULT);
}
pStorage->Release();
return hr;
}
예를 들어, 다음 코드는 파일 재생 그래프를 생성 해, MyGraph.grf 라고 하는 파일에 보존한다.
void __cdecl main(void)
{
HRESULT hr;
IGraphBuilder *pGraph;
CoInitialize(NULL);
// 필터 그래프 매니저를 생성 해, 파일을 렌더링 한다.
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, reinterpret_cast<void**>(&pGraph));
hr = pGraph->RenderFile(L"C:\\Video.avi", NULL);
if (SUCCEEDED(hr))
{
hr = SaveGraphFile(pGraph, L"C:\\MyGraph.grf");
}
pGraph->Release();
CoUninitialize();
}
StgCreateDocfile 함수의 더 자세한 정보는, Platform SDK 의 문서를 참조할것.