Saving a Filter Graph to a GraphEdit File
Microsoft DirectShow 9.0 |
Saving a Filter Graph to a GraphEdit File
The following code example shows how to save a filter graph to a GraphEdit (.grf) file. This can be useful for debugging your applications.
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; }
For example, the following code builds a file playback graph and saves it to a file named MyGraph.grf:
void __cdecl main(void) { HRESULT hr; IGraphBuilder *pGraph; CoInitialize(NULL); // Create the Filter Graph Manager and render a file. 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(); }
For more information about the StgCreateDocfile function, see the Platform SDK documentation.