查找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的目录: 可改进的地方:循环压缩深层次目录的所以文件: 实现断点续传,或断点下载: {************** ...
随机推荐
- [搬运] DotNetAnywhere:可供选择的 .NET 运行时
原文 : DotNetAnywhere: An Alternative .NET Runtime 作者 : Matt Warren 译者 : 张很水 我最近在收听一个名为DotNetRock 的优质播 ...
- python中的线程
1.线程的创建 1.1 通过thread类直接创建 import threading import time def foo(n): time.sleep(n) print("foo fun ...
- ABP官方文档翻译 3.3 仓储
仓储 默认仓储 自定义仓储 自定义仓储接口 自定义仓储实现 基础仓储方法管理数据库连接 查询 获取单个实体 获取实体列表 关于IQueryable 自定义返回值 插入 更新 删除 其他 关于异步方法 ...
- 51NOD 1220 约数之和 [杜教筛]
1220 约数之和 题意:求\(\sum_{i=1}^n \sum_{j=1}^n \sigma_1(ij)\) \[ \sigma_0(ij) = \sum_{x\mid i}\sum_{y\mi ...
- BZOJ 4710: [Jsoi2011]分特产 [容斥原理]
4710: [Jsoi2011]分特产 题意:m种物品分给n个同学,每个同学至少有一个物品,求方案数 对于每种物品是独立的,就是分成n组可以为空,然后可以用乘法原理合起来 容斥容斥 \[ 每个同学至少 ...
- web前端 ajax请求上传图片数据类型处理
form: function (url, paras, files, success) {//上传的文件类型是MultipartFile[]//如果把需要的参数直接传入,则会请求错误//设置请求参数的 ...
- CocosCreator游戏开发---菜鸟学习之路(一)
PS(废话): 辞职后在家好久好久了,久到经济不允许了,接着就准备再次出去找工作了,然而工作哪有那么好找,特别是像我这种菜鸟.而且我还准备转行,准备去做游戏,技能等级接近于0,那工作就更难找了.既然如 ...
- Redis Sentinel安装与部署,实现redis的高可用
前言 对于生产环境,高可用是避免不了要面对的问题,无论什么环境.服务,只要用于生产,就需要满足高可用:此文针对的是redis的高可用. 接下来会有系列文章,该系列是对spring-session实现分 ...
- Filezilla Server 出现Error, could not connect to server解决办法
打开任务管理器:Win+R:services.msc找到Filezilla Server并启动服务
- 从Vue.js源码角度再看数据绑定
写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出.文章的原地址:https://github.com/an ...