GraphEdit 应用
GraphEdit 是一个用于建立和测试Filter graph 的可视化工具。在DirectX SDK.中附带一个可执行程序版本(在SDK目录中的Bin/DXUtils/graphedt.exe)。你可以快速测试你建立的Filter graph是否达到预期的效果,你也可以查看由另一个程序建立的Filter graph。GraphEdit有标准的Windows用户界面,如图:
// pUnkGraph:Filter Graph Manager对象指针
// pdwRegister:成功注册后返回的一个ID
HRESULT AddToRot(IUnknown *pUnkGraph, DWORD *pdwRegister)
{
IMoniker * pMoniker;
IRunningObjectTable *pROT;
if (FAILED(GetRunningObjectTable(0, &pROT))) {
return E_FAIL;
}
WCHAR wsz[256];
wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());
HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);
if (SUCCEEDED(hr)) {
hr = pROT->Register(0, pUnkGraph, pMoniker, pdwRegister);
pMoniker->Release();
}
pROT->Release();
return hr;
}
在销毁Filter Graph Manager对象之前,还必须调用RemoveFromRot进行反注册
// pdwRegister为成功调用AddToRot函数后返回的ID
void RemoveFromRot(DWORD pdwRegister)
{
IRunningObjectTable *pROT;
if (SUCCEEDED(GetRunningObjectTable(0, &pROT))) {
pROT->Revoke(pdwRegister);
pROT->Release();
}
}
应用程序中的整个操作过程如下:
IGraphBuilder *pGraph;
DWORD dwRegister;
// Create the filter graph manager.
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraph);
#ifdef _DEBUG
hr = AddToRot(pGraph, &dwRegister);
#endif
// Rest of the application (not shown).
#ifdef _DEBUG
RemoveFromRot(dwRegister);
#endif
pGraph->Release();
IGraphBuilder *pGraph;
DWORD dwRegister;
// Create the filter graph manager.
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraph);
#ifdef _DEBUG
hr = AddToRot(pGraph, &dwRegister);
#endif
// Rest of the application (not shown).
#ifdef _DEBUG
RemoveFromRot(dwRegister);
#endif
pGraph->Release();
在用GraphEdit显示应用程序中构建的Filter Graph之前,把应用程序和GraphEdit同时执行,然后执行GraphEdit菜单命令File | Connect to Remote Graph…,随后将弹出如图1.5的对话框,选中一个Filter Graph的注册条目后按下“OK”按钮即可
注意:转贴请注明出处,谢谢合作。
IGraphBuilder *pGraph;
DWORD dwRegister;
// Create the filter graph manager.
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraph);
#ifdef _DEBUG
hr = AddToRot(pGraph, &dwRegister);
#endif
// Rest of the application (not shown).
#ifdef _DEBUG
RemoveFromRot(dwRegister);
#endif
pGraph->Release();
GraphEdit 应用相关推荐
- 【转】FFmpeg获取DirectShow设备数据(摄像头,录屏)
这两天研究了FFmpeg获取DirectShow设备数据的方法,在此简单记录一下以作备忘.本文所述的方法主要是对应Windows平台的. 1. 列设备 ffmpeg -list_devic ...
- API Monitor(API监控工具)
概观 API Monitor是一个免费软件,可以让你监视和控制应用程序和服务,取得了API调用. 它是一个强大的工具,看到的应用程序和服务是如何工作的,或跟踪,你在自己的应用程序的问题. 产品特点 6 ...
- DirectShow基础编程 最简单的源Filter的编写步骤 (转)
转自: http://blog.csdn.net/bwmwm/article/details/5463852 1.创建一个空的Dll工程,添加5个空文件分别名为:MyOutputPin.h.MySou ...
- DirectShow开发快速入门之慨述
DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布.那么,DirectShow能够做些什么呢?且看,DirectShow为多媒体流的捕 ...
- FFmpeg获取DirectShow设备数据(摄像头,录屏)
这两天研究了FFmpeg获取DirectShow设备数据的方法,在此简单记录一下以作备忘.本文所述的方法主要是对应Windows平台的. 1. 列设备 [plain] view plain ...
- 最简单的基于FFmpeg的AVDevice例子(读取摄像头)
===================================================== 最简单的基于FFmpeg的AVDevice例子文章列表: 最简单的基于FFmpeg的AVDe ...
- 基于DirectShow的局域网内音视频流的多机共享
1. 引言 在局域网内传输音.视频等多媒体数据主要有两种方案:下载和流式传送.下载的主要缺点是,必须等全部内容传输完毕,然后才能在本地机器打开:而采用流式传输方案,多媒体数据流可以连续.实时地向用户 ...
- DirectShow系统初级指南
流媒体的处理,以其复杂性和技术性,一向广受工业界的关注.特别伴随着因特网的普及,流媒体在网络上的广泛应用,怎样使流媒体的处理变得简单而富有成效逐渐成为了焦点问题.选择一种合适的应用方案,事半功倍.此时 ...
- (转) mp4编码全介绍 (一)
1) 什么是MP4?听闻它是一种"容器格式",那是什么?容器格式允许你将不同种类的多媒体数据流(多为视频流和音频流)合并在一个单一的文件内. 多媒体容器格式,就是我们熟知的AVI( ...
最新文章
- 对于任天堂你了解多少?
- python中对集合的操作
- 微信v3app支付php,php微信支付之APP支付方法_php技巧
- No relevant classes found. No output generated、metaObject连接错误
- 前后端分离的项目部署到tomcat_如何在开发时部署和运行前后端分离的JavaWeb项目...
- Pytorch中的 torch.as_tensor() 和 torch.from_numpy() 的区别
- source insight 配置
- WCF 基础 契约 和 绑定
- SAP 打印自动导出PDF本地文件(自己做的例子)
- cpu占用过高解决方案实践
- 网络攻防学习心得一(20159320)学习小结
- mac上的PCB设计软件现状
- 计算机容差技术CAT最新应用,cat是计算机辅助什么?
- 1.Linux目录管理
- 大厂可能真不像你想象的那样系列之阿里
- php:::值传递战援引传递
- 5.3.4 消费组稳定后,原有消费者重新加入消费组
- 全球及中国炼油工业市场供需规模及竞争格局咨询报告2021版
- 【AI视野·今日CV 计算机视觉论文速览 第185期】Tue, 15 Sep 2020
- c/c++ libuv_Tcp服务器搭建