查找IFileSourceFilter上的Pin
创建了IFileSourceFilter,可IFileSourceFilter好像不是从IBaseFilter继承来的,没有EnumPins,那应该怎么查找IFileSourceFilter上的pin啊?
IGraphBuilder *pigb = NULL;
IMediaControl *pimc = NULL;
IMediaEventEx *pimex = NULL;
IVideoWindow *pivw = NULL;
IMediaSeeking *pims = NULL;
HRESULT AddSourceByFilterCLSID(IGraphBuilder *pGraph,const GUID& clsid, LPCWSTR wszName,LPCWSTR wszFileName)
{
if (!pGraph) return E_POINTER;
IBaseFilter *pF = 0;
HRESULT hr = S_OK;
hr = CoCreateInstance(clsid, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast<void**>(&pF));
if (SUCCEEDED(hr))
{
hr = pGraph->AddFilter(pF, wszName);
if (SUCCEEDED(hr))
{
IFileSourceFilter *pSF = NULL;
hr = pF->QueryInterface(IID_IFileSourceFilter, (void**)&pSF);
if (SUCCEEDED(hr))
{
pSF->Load(wszFileName, NULL);
pSF->Release();
}
}
if (SUCCEEDED(hr))
{
IEnumPins *pEnum;
IPin *pPin;
hr = pF->EnumPins(&pEnum);
if (SUCCEEDED(hr))
{
while(pEnum->Next(1, &pPin, 0) == S_OK)
{
PIN_DIRECTION pinDirThis;
pPin->QueryDirection(&pinDirThis);
if (PINDIR_OUTPUT == pinDirThis)
{
hr = pGraph->Render(pPin);
if (FAILED(hr))
{
break;
}
}
pPin->Release();
}
pEnum->Release();
}
}
pF->Release();
}
return hr;
}
HRESULT RenderAVI(LPCTSTR szFilePath,IGraphBuilder * gb)
{
LPCTSTR szExt = _tcsrchr(szFilePath,'.');//过滤avi文件
if(!szExt)
{
return E_FAIL;
}
++szExt;
if(_tcsicmp(szExt,_T("avi"))!=0) return E_INVALIDARG;
USES_CONVERSION;
const GUID CLSID_AviSource={0xCEA8DEFF,0x0AF7,0x4DB9,{0x9A,0x38,0xFB,0x3C,0x3A,0xEF,0xC0,0xDE}};
CComPtr<IBaseFilter> spAviSource;
HRESULT hr = AddSourceByFilterCLSID(gb,CLSID_AviSource,L"SOURCE FILTER",T2W(szFilePath));
if(spAviSource==NULL) return hr;
/* CComQIPtr<IFileSourceFilter> FileSource(spAviSource);
hr = FileSource->Load(T2W(szFilePath),NULL);
if(FAILED(hr)) return hr;
CComPtr<IEnumPins> ep;
hr = spAviSource->EnumPins(&ep);
if(FAILED(hr)) return hr;
CComPtr<IPin> pin;
DWORD dwCount;
int i = 0;
for(;;)
{
dwCount = 0;
hr = ep->Next(1,&pin,&dwCount);
if(hr!=NOERROR)
{
if(i) hr = NOERROR;
break;
}
hr = gb->Render(pin);
if(hr==NOERROR) ++i;
pin = NULL;
}
return hr;*/
return NOERROR;
}
void CTestFilterDlg::OnButton4()
{
// TODO: Add your control notification handler code here
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
NULL,
CLSCTX_INPROC_SERVER,
IID_IGraphBuilder,
(void **)&pigb);
pigb->QueryInterface(IID_IMediaControl, (void **)&pimc);
pigb->QueryInterface(IID_IMediaEventEx, (void **)&pimex);
pigb->QueryInterface(IID_IMediaSeeking, (void **)&pims);
pigb->QueryInterface(IID_IVideoWindow, (void **)&pivw);
// hr = pigb->RenderFile(L"d:\\temp\\bmw.MPG", NULL);//
hr = RenderAVI("F:\\FFOutput\\ff640480.avi",pigb);
if (hr)
{
MessageBox("ERR RENDERAVI!");
}
HWND m_hwndScreen = m_Screen2.GetSafeHwnd();
RECT rc;
hr = pivw->put_Owner((OAHWND)m_hwndScreen);
hr = pivw->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN);
m_Screen2.GetClientRect(&rc);
hr = pivw->SetWindowPosition(0, 0, (rc.right), (rc.bottom));
hr = pivw->put_Visible(OATRUE);//*/
hr = pimc->Run();
}
查找IFileSourceFilter上的Pin的更多相关文章
- Unity3D开发之查找面板上某个脚本(包括Missing)
原地址:http://blog.csdn.net/lihandsome/article/details/24265411 有时候我们需要知道某个脚本在场景上面哪里用到,或者那个脚本被删除了但又没有把相 ...
- Unity3D开发之查找面板上某个脚本(包含Missing)
有时候我们须要知道某个脚本在场景上面哪里用到,或者那个脚本被删除了但又没有把相关游戏场景的关联东西删掉,那样我们就要一个脚本来查找一下了: PS:以下两个脚本都要放到assets/Editor以下哦. ...
- 用 TWebBrowser 查找网页上的按钮,编辑框,
Form1.wb1.Navigate(Aurl); <table> <tr> <td style="text-align:right;">< ...
- 如何查找Mac上的USB存储设备使用痕迹
最近刚好有个案子的证物主机是MBP, OS X版本为El Capitan,案况与营业秘密外泄有关,当中要找有关USB存储设备的使用痕迹. 要提醒大家的是,不同版本的OS X,各种迹证的存放文件名称及路 ...
- sql server 查找字段上的约束
1. 当字段没有默认值或者约束的时候可以使用: alter table [table_name] drop column [column_name] 来删除. 当有默认值的时候应该先删除默认值,然后再 ...
- tomcat服务器用Servlet类查找磁盘文件上的Json信息,如果匹配则在浏览器上显示出该条内容的全部信息
package com.swift; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOE ...
- 如何查找Windows上安装的DB2的端口号Port
1.db2com打开控制台 2.db2 get dbm cfg 可以通过db2 get dbm cfg,查询数据库管理器配置参数,就可以查到端口号或端口名. 示例: $ db2 get dbm cfg ...
- [原创]C#应用WindowsApi实现查找\枚举(FindWindow、EnumChildWindows)窗体控件,并发送消息。
首先介绍基本WindowsApi: public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 函 ...
- 5、利用控件TVCLZip和TIdFTP压缩文件并上传到FTP的线程单元pas 改进版
用到临界区 保护写日志的函数: 递归函数 删除目录下的所有文件: 循环创建或判断FTP的目录: 可改进的地方:循环压缩深层次目录的所以文件: 实现断点续传,或断点下载: {************** ...
随机推荐
- MySQL笔记-turncat、drop、delete的区别
TRUNCATE 语法: TRUNCATE TABLE [schema.] table [{DROP | REUSE} STORAGE]功能: 删除整个表的数据并释放空间 描述: 由于Trunca ...
- Tomcat学习
一:项目默认部署路径: eclipse中,默认new一个server,项目默认会部署在:workspace\(工作空间)\.metadata\.plugins\org.eclipse.wst.serv ...
- centos 7 配置 到多站点设置
背景 : 前面配置了 win2008 WAMP环境, 这次因为一些事情 新买了服务器 只有 win2003 和 win2012, 试着配置2012 WAMP环境 发现比 2008 缺的配置文件多很多 ...
- pandas中的分组技术
目录 1 分组操作 1.1 按照列进行分组 1.2 按照字典进行分组 1.3 根据函数进行分组 1.4 按照list组合 1.5 按照索引级别进行分组 2 分组运算 2.1 agg 2 ...
- jQuery源码研究——解决命名冲突
在项目中难免不去使用多个插件,如此一来这些插件就有可能出现一样的名称,当出现同名变量时后一个将会覆盖上一个,这样的话我们就无法同时使用多个插件了. 当遇到这种情况我们可以手动去修改插件源码把它的名字改 ...
- sql sever基本语法总结
一.数据库导入表 1.先用sql语句创建相应的表,包括表的字段和字段类型 2.导入数据,选择相应的表名,不带'$'符号的表名 二.创建数据库 create datatable 数据库名 三.查看表里的 ...
- EntityFramework Core 2.0执行原始查询如何防止SQL注入?
前言 接下来一段时间我们来讲讲EntityFramework Core基础,精简的内容,深入浅出,希望为想学习EntityFramework Core的童鞋提供一点帮助. EntityFramewor ...
- maven常用命令介绍
mvn 3.0.4 创建maven项目命令 mvn archetype:generate -DgroupId=damocles-autocredit -DartifactId=damocles ...
- centos/linux下的安装Nginx
1.安装gcc编译器 先查看gcc编译器是否安装 在shell控制台输入gcc-v 如果没有安装请看下一步 使用yuma安装gcc yum intsall gcc 看到如下视图则说明安装成功 2.安装 ...
- js获取对象长度和名称
1.对象的长度不能用.length获取,用js原生的Object.keys可以获取到 var obj = {'name' : 'Tom' , 'sex' : 'male' , 'age' : '14' ...