如何将DirectShow的Async Sample 和应用程序写到一起《DS开发指南》上第4章有个TRANSFORM filter和应用程序集成的实例
请问对于source filter 如何做

解决方案 »

  1.   

    <<DS实务精选>>3.3视频点播
    用是就是这个Async做的Source Filter
    可以参考.
      

  2.   

    把Async的代码加到工程中,到时直接用其指针,就不用COM了。
      

  3.   

    不同意楼上观点
    要用COM来做
    否则每个里面都要加入代码吗?没有源码的怎么办?你说的这个是Tans Filter
    Source Filter要难写些,iamwiner(烛泪)说的VOD点播中确实要用到SourceFilter,学习一下吧
      

  4.   

    CAsyncFilter* pAsyncflt = new CAsyncFilter(NULL,&hr);
    pAsyncflt->AddRef();
    IBaseFilter *pFileSourceFilter = NULL;
    pAsyncflt->QueryInterface(IID_IBaseFilter,(void**)&pFileSourceFilter);
    if (FAILED(pigb->AddFilter(pFileSourceFilter, L"kyc Source")))
    {
    MessageBox(ghApp, "Cannot source filter in Graph!!!", "Error", MB_ICONSTOP);
    return;
    }

    // Get file source interface
    IFileSourceFilter *pifsf = NULL;
    if (FAILED(pFileSourceFilter->QueryInterface(IID_IFileSourceFilter, (void **) &pifsf)))
    {
    HELPER_RELEASE(pFileSourceFilter);
    MessageBox(ghApp, "Cannot get IFileSourceFilter interface!!!", "Error", MB_ICONSTOP);
    return;
    }

    if (FAILED(pifsf->Load(wFile, NULL)))
    {
    HELPER_RELEASE(pifsf);
    HELPER_RELEASE(pFileSourceFilter);
    MessageBox(ghApp, "Cannot load source file!!!", "Error", MB_ICONSTOP);
    return;
    }
    HELPER_RELEASE(pifsf);

    // Find Audio PCM input for MP3
    IPin *pPin = GetPin(pFileSourceFilter, 0);
    if (pPin == NULL)
    {
    MessageBox(ghApp, "Cannot find File Source pin 0!!!", "Error", MB_ICONSTOP);
    HELPER_RELEASE(pFileSourceFilter);
    return;
    }
    if (FAILED(pigb->Render(pPin)))
    {
    MessageBox(ghApp, "Cannot render source pin 0!!!", "Error", MB_ICONSTOP);
    HELPER_RELEASE(pFileSourceFilter);
    HELPER_RELEASE(pPin);
    return;
    }
    HELPER_RELEASE(pPin);
    HELPER_RELEASE(pFileSourceFilter);
      

  5.   

    怎么会没有源码呢,将DShow带的示例改一下就可。另可将这些做成一个静态库,直接链接在工程有一个好处,就是其它程序无法使用你的Filter。
      

  6.   

    当然用COM也未尝不可,只不是接口“暴露”了而已。