Speichern eines Filtergraphen in einer GraphBearbeiten-Datei
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]
Das folgende Codebeispiel zeigt, wie Ein Filtergraph in einer GraphEdit-Datei (GRF) gespeichert wird. Dies kann beim Debuggen Ihrer Anwendungen nützlich sein.
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;
}
Mit dem folgenden Code wird beispielsweise ein Dateiwiedergabediagramm erstellt und in einer Datei namens MyGraph.grf gespeichert:
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();
}
Zugehörige Themen