DirectShow删除链路 和 删除graph中的所有filter
来源:互联网 发布:c语言多进程编程 编辑:程序博客网 时间:2024/06/06 17:58
一般应用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();
}
}
}
- DirectShow删除链路 和 删除graph中的所有filter
- DirectShow编程(3.4) - 关于DirectShow - Filter Graph中的数据流
- DirectShow编程(3.4) - 关于DirectShow - Filter Graph中的数据流
- DirectShow编程(3.4) - 关于DirectShow - Filter Graph中的数据流
- DirectShow编程(3.4) - 关于DirectShow - Filter Graph中的数据流
- DirectShow编程(3.4) - 关于DirectShow - Filter Graph中的数据流
- DirectShow编程(3.4) - 关于DirectShow - Filter Graph中的数据流
- DirectShow编程(3.4) - 关于DirectShow - Filter Graph中的数据流
- DirectShow编程(3.4) - 关于DirectShow - Filter Graph中的数据流
- DirectShow--过滤器图表(Filter Graph)和它的组件
- DirectShow编程(3.2)- 关于DirectShow - Filter Graph和它的组件
- DirectShow编程(3.2)- 关于DirectShow - Filter Graph和它的组件
- DirectShow编程(3.2)- 关于DirectShow - Filter Graph和它的组件
- DirectShow编程(3.2)- 关于DirectShow - Filter Graph和它的组件
- DirectShow编程(3.2)- 关于DirectShow - Filter Graph和它的组件
- DirectShow编程(3.2)- 关于DirectShow - Filter Graph和它的组件
- DirectShow中 Filter Graph及其组成
- DirectShow中 Filter Graph及其组成
- [Python网络编程]使用select,poll
- 魅族千元新机曝光:处理器不错!
- Eclipse集成Tomcat
- 继承
- Working tutorial to install AIR native extensions in Flash Develop 4
- DirectShow删除链路 和 删除graph中的所有filter
- 安装虚拟机后 不能显示 /mnt/hgfs共享文件夹
- 隐藏(不显示)CNZZ流量统计代码
- tomcat异常关闭自动启动
- Lua 结合c++ 编程1
- 如何做到每天写代码?
- Matlab中交叉检验——crossvalind()
- Win7、Ubuntu双系统正确卸载Ubuntu系统
- 安装双系统后,开机unknown filesystem