drird
驱动牛犊
驱动牛犊
  • 注册日期2001-09-19
  • 最后登录2005-09-18
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1866回复:4

关于directShow编程?

楼主#
更多 发布于:2003-07-07 13:21


//After loading the source filter,
//retrieve a pointer to the IKsPropertySet, as follows.
CoInitialize(NULL);
IBaseFilter *pSrcFilter;
IKsPropertySet *pIPropertySet;
pSrcFilter->QueryInterface( IID_IKsPropertySet,(PVOID *)&pIPropertySet );//????
CoUninitialize();

这段程序如何理解?
此外我想知道为什么我执行queryinterface时出错(编译通过,运行时报告该内存不能读)??
是不是因为我没有用CoCreateInstance创建一个IBaseFilter?如果是,该如何创建?

谢谢!

最新喜欢:

HuYuguangHuYugu...
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-08 09:26
因为你的 pSrcFilter 相当于未初始化。你需要用相关API创建一个IBaseFilter。
你的认可是对我最大的鼓励!
Xman
驱动大牛
驱动大牛
  • 注册日期2001-08-24
  • 最后登录2011-10-07
  • 粉丝0
  • 关注0
  • 积分343分
  • 威望127点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-08 18:35
 
因为你的 pSrcFilter 相当于未初始化。你需要用相关API创建一个IBaseFilter。



请教大虾:具体如何做呢?给个引子吧! :P
[img]http://www.driverdevelop.com/forum/upload/Xman/2004-04-05_2004324183110706.jpg[/img]
mike_wang
驱动中牛
驱动中牛
  • 注册日期2003-01-22
  • 最后登录2012-01-04
  • 粉丝0
  • 关注0
  • 积分91分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-10 15:18
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,
IID_IGraphBuilder, (void **)&pGraph);

// Create the capture graph builder.
CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC,
IID_ICaptureGraphBuilder2, (void **)&pBuilder);
if(pGraph==NULL||pBuilder==NULL)
{
printf(\"1build base graph error\\n\");
CoUninitialize();
return;
}

pBuilder->SetFiltergraph(pGraph);    
// Create the system device enumerator.
ICreateDevEnum *pDevEnum = NULL;
CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
IID_ICreateDevEnum, (void **)&pDevEnum);

// Create an enumerator for video capture devices.
IEnumMoniker *pClassEnum = NULL;
pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pClassEnum, 0);


if (pClassEnum->Next(1, &pMoniker, &cFetched) == S_OK)
{
// Bind the first moniker to a filter object.
pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pSrc);
pMoniker->Release();
}
pClassEnum->Release();
pDevEnum->Release();
if(pSrc)
{
ll_return=pGraph->AddFilter(pSrc, L\"Video Capture\");
if(ll_return==S_OK)
{
printf(\"add video capture ok\\n\");
}
ll_return=pSrc->QueryInterface(IID_IAMCameraControl ,(void**)&pRemote);
if(ll_return==S_OK)
{
printf(\"get camera ok\\n\");
}
else
{
printf(\"get camera false\\n\");
}
}

[编辑 -  7/10/03 by  mike_wang]
wookin
驱动牛犊
驱动牛犊
  • 注册日期2002-08-05
  • 最后登录2004-07-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-23 20:53
//After loading the source filter,
//retrieve a pointer to the IKsPropertySet, as follows.
CoInitialize(NULL);
IBaseFilter* pSrcFilter=NULL;
IKsPropertySet* pIPropertySet=NULL;
//-------------
//....create your pSrcFilter
//-------------
if(pSrcFilter)
{
pSrcFilter->QueryInterface( IID_IKsPropertySet,(PVOID *)&pIPropertySet );//????
}
CoUninitialize();
游客

返回顶部