DirectShow DirectShow 의 사용법 GraphEdit 에 의한 그래프 생성의 시뮬레이션 GraphEdit 파일에의 필터 그래프의 보존   [목차열람] [주소복사] [슬롯비우기]
GraphEdit 파일에의 필터 그래프의 보존
 
Microsoft DirectX 9.0

GraphEdit 파일에의 필터 그래프의 보존

다음 샘플 코드는 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 의 문서를 참조할것.

↑TOP