仿DirectShow中字幕显示c语言范例调用GetMixingPrefs失败

icewolf13 2012-09-11 11:47:11
仿directshow中VMR的TEXT范例 改写delphi用例 发现在调用IVMRMixerControl的GetMixingPrefs时老是返回2147500035
c语言版的调试很正常 不知道怎么回事

var
FGB:IGraphBuilder;
v_BF:IBaseFilter;
v_VMRFC:IVMRFilterConfig;
FVMRWC:IVMRWindowlessControl;
v_VMRMC:IVMRMixerControl;
v_dwPrefs:DWORD;
FVMRFB:IVMRMixerBitmap;

if Succeeded(CoCreateInstance(CLSID_FilterGraph,nil,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,FGB)) then
begin
try
Result:=CoCreateInstance(CLSID_VideoMixingRenderer,nil,CLSCTX_INPROC,IID_IBaseFilter,v_BF);
if Succeeded(Result) then
begin
Result:=FGB.AddFilter(v_BF, 'Video Mixing Renderer');
if Succeeded(Result) then
begin
Result:=v_BF.QueryInterface(IID_IVMRFilterConfig,v_VMRFC);
if Succeeded(Result) then
begin
Result:=v_VMRFC.SetRenderingMode(VMRMode_Windowless);
Result:=v_VMRFC.SetNumberOfStreams(2);
v_VMRFC:=nil;
end;
Result:=v_BF.QueryInterface(IID_IVMRWindowlessControl,FVMRWC);
if Succeeded(Result) then
begin
Result:=FVMRWC.SetVideoClippingWindow(FormPlay.Handle);
Result:=FVMRWC.SetBorderColor(RGB(0,0,0));
end;

Result:=v_BF.QueryInterface(IID_IVMRMixerControl,v_VMRMC);
if Succeeded(Result) then
begin
v_dwPrefs:=0;
Result:=v_VMRMC.GetMixingPrefs(v_dwPrefs);
if Succeeded(Result) then
begin
// v_dwPrefs:= v_dwPrefs or MixerPref_PointFiltering;
// v_dwPrefs:= (MixerPref_BiLinearFiltering xor $FF) and v_dwPrefs;
v_dwPrefs:= MixerPref_BiLinearFiltering xor v_dwPrefs;
Result:=v_VMRMC.SetMixingPrefs(v_dwPrefs);
Result:=v_BF.QueryInterface(IID_IVMRMixerBitmap,FVMRFB);
end;
v_VMRMC:=nil;
end;
v_BF:=nil;
end;
end;
end;
...全文
157 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧