다음을 통해 공유


프로그래밍 방식으로 GraphEdit 파일 로드

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

애플리케이션은 IPersistStream 인터페이스를 사용하여 GraphEdit(.grf) 파일을 로드할 수 있습니다. 다음 코드를 사용합니다.

HRESULT LoadGraphFile(IGraphBuilder *pGraph, const WCHAR* wszName)
{
    IStorage *pStorage = 0;
    if (S_OK != StgIsStorageFile(wszName))
    {
        return E_FAIL;
    }
    HRESULT hr = StgOpenStorage(wszName, 0, 
        STGM_TRANSACTED | STGM_READ | STGM_SHARE_DENY_WRITE, 
        0, 0, &pStorage);
    if (FAILED(hr))
    {
        return hr;
    }
    IPersistStream *pPersistStream = 0;
    hr = pGraph->QueryInterface(IID_IPersistStream,
             reinterpret_cast<void**>(&pPersistStream));
    if (SUCCEEDED(hr))
    {
        IStream *pStream = 0;
        hr = pStorage->OpenStream(L"ActiveMovieGraph", 0, 
            STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &pStream);
        if(SUCCEEDED(hr))
        {
            hr = pPersistStream->Load(pStream);
            pStream->Release();
        }
        pPersistStream->Release();
    }
    pStorage->Release();
    return hr;
}

참고

이전 코드 예제에서 IPersistStream::Load 를 호출하면 DirectShow 오류 또는 성공 코드가 반환될 수 있습니다. 가능한 반환 값 목록은 오류 및 성공 코드를 참조하세요.

 

GraphEdit 파일은 테스트 및 디버깅에만 사용됩니다. 최종 사용자 애플리케이션에서 사용하기 위한 것이 아닙니다.

GraphEdit를 사용하여 그래프 빌드 시뮬레이션

StgIsStorageFile

StgOpenStorage