高手帮忙解决filter连接的问题,xvid MPEG-4 codec 和Avi Mux连接失败??

时间:2022-10-14 20:05:59
我重新编码一个avi文件,GraphEdit里filter连接顺序为source.avi--->Avi splitter--->Avi Decompressor--->Xvid MPEG-4 Codec--->Avi Mux--->new.avi,运行得到的new.avi确实是xvid编码(用Gspot检查过)。

程序里建立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。

#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;
 }

#5


"e:\1.avi"应该写成"e:\\1.avi"

#1


我觉得你这是个很常见的链接,从流程看没有问题,而且我也这么连过,运行过,没有问题。
    问题可能出在你创建的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;
 }

#5


"e:\1.avi"应该写成"e:\\1.avi"