DirectShow删除链路 和 删除graph中的所有filter

一般应用DirectShow的时候,我们会封装一个类。

一般情况下,如果摄像头被占用,就无法再次开启。


这里举个例子,如:


在类中声明主要变量;

清理变量;


CCaptureCam

{


IGraphBuilder* m_pGraphBuilder;
IFilterGraph*           m_pFilterGraph;
ICaptureGraphBuilder2 * m_pCaptureGraphBuilder2;

IMediaControl *         m_pMediaControl; 
    IVideoWindow *          m_pVideoWindow;  
    IMediaSeeking *         m_pMediaSeeking; 
    IBaseFilter *           m_pSrcFilter;     
    IBaseFilter *           m_pRenderFilter; 
IBasicVideo * m_pBasicVideo;
 

IBaseFilter * m_pGrabber; 


IMediaEvent *           m_pMediaEvent;

IAMVideoProcAmp * m_pProcAmp;



~CCaptureVideo()

{

//假定变量已经创建,链路已经建立运行;


//删除链路中的所有Filter;

// Stop the graph.
m_pMediaControl->Stop();
// Enumerate the filters in the graph.
IEnumFilters *pEnum = NULL;
hr = m_pGraphBuilder->EnumFilters(&pEnum);
if (SUCCEEDED(hr))
{
IBaseFilter *pFilter = NULL;
while (S_OK == pEnum->Next(1, &pFilter, NULL))
{
// Remove the filter.
m_pGraphBuilder->RemoveFilter(pFilter);
// Reset the enumerator.
pEnum->Reset();
pFilter->Release();
}
pEnum->Release();
}



//释放变量资源;如果仅仅释放资源,上述中的Filter和链路没有被删;
if(m_pMediaControl)
{
m_pMediaControl->Release();
m_pMediaControl=NULL;
}
if(m_pMediaEvent)
{
m_pMediaEvent->Release();
m_pMediaEvent=NULL;
}
if(m_pVideoWindow)
{
m_pVideoWindow->Release();
m_pVideoWindow = NULL;
}
if(m_pBasicVideo)
{
m_pBasicVideo->Release();
m_pBasicVideo = NULL;
}
if(m_pMediaSeeking)
{
m_pMediaSeeking->Release();


}
if(m_pSrcFilter)
{
m_pSrcFilter->Release();
}
if(m_pRenderFilter)
{
m_pRenderFilter->Release();
}




if(m_pGrabber)
{
m_pGrabber->Release();
}
if(m_pProcAmp)
{
m_pProcAmp->Release();
}

}



}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chinabinlang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值