程序里建立filter为CLSID_AsyncReader--->CLSID_AviSplitter--->CLSID_AVIDec--->CLSID_Xvid(通过枚举VideoCompressorCategory得到)--->CLSID_AviDest--->CLSID_FileWriter。
单步运行程序显示CLSID_Xvid--->CLSID_AviDest连接建立失败
是不是我的filter连接顺序有问题,还是需要什么其他的filter??
急问!盼答!thx~~
5 个解决方案
#1
我觉得你这是个很常见的链接,从流程看没有问题,而且我也这么连过,运行过,没有问题。
问题可能出在你创建的Filter不正确,所以你创建Filter后,获取FilterInfo看一下,是不是你需要创建的Filter,有时可能因为GUID不一样,创建成功了,但不是你想要的Filter。
问题可能出在你创建的Filter不正确,所以你创建Filter后,获取FilterInfo看一下,是不是你需要创建的Filter,有时可能因为GUID不一样,创建成功了,但不是你想要的Filter。
#2
连接我检查好了,完成了建立,运行hr = pControl->Run();出错,返回hr为-值!这是什么问题啊?
#3
运行hr = pControl->Run();出错,返回hr为-2147024864,换算到16进制FFFFFFFF80070020
#4
我改成CLSID_AsyncReader--->CLSID_AviSplitter--->CLSID_AVIDec--->CLSID_Xvid(通过枚举VideoCompressorCategory得到)--->CLSID_VideoRenderer就能够运行hr = pControl->Run();
难道说是写文件的filter出错?代码如下,达人帮忙看一下吧
hr = ::CoCreateInstance(CLSID_FileWriter,NULL,CLSCTX_ALL,IID_IBaseFilter,(void**)&pFileDest);
if(hr!=S_OK)
{
TRACE("Create File Write => Failsed\n");
pFileDest->Release();
return;
}
IFileSinkFilter * pdes = NULL;
hr = pFileDest->QueryInterface(IID_IFileSinkFilter,(void**)&pdes);
if(hr!=S_OK)
{
TRACE("Create File Write Interface => Failsed\n");
pdes->Release();
return;
}
hr = pdes->SetFileName(L"e:\1.avi",NULL);
if(hr!=S_OK)
{
TRACE("Set File Write => Failsed\n");
pdes->Release();
return;
}
难道说是写文件的filter出错?代码如下,达人帮忙看一下吧
hr = ::CoCreateInstance(CLSID_FileWriter,NULL,CLSCTX_ALL,IID_IBaseFilter,(void**)&pFileDest);
if(hr!=S_OK)
{
TRACE("Create File Write => Failsed\n");
pFileDest->Release();
return;
}
IFileSinkFilter * pdes = NULL;
hr = pFileDest->QueryInterface(IID_IFileSinkFilter,(void**)&pdes);
if(hr!=S_OK)
{
TRACE("Create File Write Interface => Failsed\n");
pdes->Release();
return;
}
hr = pdes->SetFileName(L"e:\1.avi",NULL);
if(hr!=S_OK)
{
TRACE("Set File Write => Failsed\n");
pdes->Release();
return;
}
#5
"e:\1.avi"应该写成"e:\\1.avi"
#1
我觉得你这是个很常见的链接,从流程看没有问题,而且我也这么连过,运行过,没有问题。
问题可能出在你创建的Filter不正确,所以你创建Filter后,获取FilterInfo看一下,是不是你需要创建的Filter,有时可能因为GUID不一样,创建成功了,但不是你想要的Filter。
问题可能出在你创建的Filter不正确,所以你创建Filter后,获取FilterInfo看一下,是不是你需要创建的Filter,有时可能因为GUID不一样,创建成功了,但不是你想要的Filter。
#2
连接我检查好了,完成了建立,运行hr = pControl->Run();出错,返回hr为-值!这是什么问题啊?
#3
运行hr = pControl->Run();出错,返回hr为-2147024864,换算到16进制FFFFFFFF80070020
#4
我改成CLSID_AsyncReader--->CLSID_AviSplitter--->CLSID_AVIDec--->CLSID_Xvid(通过枚举VideoCompressorCategory得到)--->CLSID_VideoRenderer就能够运行hr = pControl->Run();
难道说是写文件的filter出错?代码如下,达人帮忙看一下吧
hr = ::CoCreateInstance(CLSID_FileWriter,NULL,CLSCTX_ALL,IID_IBaseFilter,(void**)&pFileDest);
if(hr!=S_OK)
{
TRACE("Create File Write => Failsed\n");
pFileDest->Release();
return;
}
IFileSinkFilter * pdes = NULL;
hr = pFileDest->QueryInterface(IID_IFileSinkFilter,(void**)&pdes);
if(hr!=S_OK)
{
TRACE("Create File Write Interface => Failsed\n");
pdes->Release();
return;
}
hr = pdes->SetFileName(L"e:\1.avi",NULL);
if(hr!=S_OK)
{
TRACE("Set File Write => Failsed\n");
pdes->Release();
return;
}
难道说是写文件的filter出错?代码如下,达人帮忙看一下吧
hr = ::CoCreateInstance(CLSID_FileWriter,NULL,CLSCTX_ALL,IID_IBaseFilter,(void**)&pFileDest);
if(hr!=S_OK)
{
TRACE("Create File Write => Failsed\n");
pFileDest->Release();
return;
}
IFileSinkFilter * pdes = NULL;
hr = pFileDest->QueryInterface(IID_IFileSinkFilter,(void**)&pdes);
if(hr!=S_OK)
{
TRACE("Create File Write Interface => Failsed\n");
pdes->Release();
return;
}
hr = pdes->SetFileName(L"e:\1.avi",NULL);
if(hr!=S_OK)
{
TRACE("Set File Write => Failsed\n");
pdes->Release();
return;
}
#5
"e:\1.avi"应该写成"e:\\1.avi"