directshow render 示例代码

#include <dshow.h>

 

void main(void)

{

    IGraphBuilder *pGraph = NULL;

    IMediaControl *pControl = NULL;

    IMediaEvent   *pEvent = NULL;

 

    // Initialize the COM library.

    HRESULT hr = CoInitialize(NULL);

    if (FAILED(hr))

    {

        printf("ERROR - Could not initialize COM library");

        return;

    }

 

    // Create the filter graph manager and query for interfaces.

    hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 

                        IID_IGraphBuilder, (void **)&pGraph);

    if (FAILED(hr))

    {

        printf("ERROR - Could not create the Filter Graph Manager.");

        return;

    }

 

    hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);

    hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);

 

       IBaseFilter* pFilter;

       pGraph->AddSourceFilter(L"C://1.avi",L"test",&pFilter);

 

       IPin * pPin;

       IEnumPins *pEnum = NULL;

       pFilter->EnumPins(&pEnum);

       while(pEnum->Next(1,&pPin,NULL)==S_OK)

       {

              PIN_DIRECTION PinDir;

              pPin->QueryDirection(&PinDir);

 

              if(PinDir == PINDIR_OUTPUT)

              {

                     IPin *pTemp;

                     if(SUCCEEDED(pPin->ConnectedTo(&pTemp)))

                     {

                            pTemp->Release();

                     }

                     else

                     {

                            pGraph->Render(pPin);  

                     }

              }

       }

    if (SUCCEEDED(hr))

    {

        // Run the graph.

        hr = pControl->Run();

        if (SUCCEEDED(hr))

        {

            // Wait for completion.

            long evCode;

            pEvent->WaitForCompletion(INFINITE, &evCode);

        }

    }

    pControl->Release();

    pEvent->Release();

    pGraph->Release();

    CoUninitialize();

}


经测试,代码可以顺利编译并播放指定的avi文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值