gpt4 book ai didi

delphi - 如果在主机选项卡不可见时启动图形 (TVideoWindow),DirectShow 渲染窗口将显示黑色

转载 作者:行者123 更新时间:2023-12-03 15:57:15 27 4
gpt4 key购买 nike

我有一个使用 DirectShow DSPACK 组件套件的 Delphi 6 应用程序。它有一个 TVideoWindow 组件,可以渲染过滤器图表中的图像。 TVideoWindow 组件位于页面组件的选项卡上。如果当我运行过滤器图表时选项卡可见,则视频显示得很好。另外,我可以切换到另一个选项卡并返回,视频仍然很好。但是,如果我在选项卡不可见时运行过滤器图表,那么当我切换到该选项卡时,视频窗口区域将为黑色。我尝试切换到另一个选项卡并返回,最小化主机窗体并恢复它,它保持黑色。我想知道这是否是窗口/组件句柄生命周期问题?我该如何解决这个问题?

最佳答案

直接使用 COM 对象(例如将 EVR 设置为随后显示的隐藏面板)时,不会发生此问题。我建议花时间摆脱 TVideoWindow 并直接使用 VMR9 和 EVR 等渲染器会更有效率。您不必删除 DSPack 即可执行此操作,类似于

  FDisplayControl: IMFVideoDisplayControl;
FEVR: IBaseFilter;
R: TNormalizedRect;
R: TRect;

hr := Succeeded(CoCreateInstance(CLSID_EnhancedVideoRenderer, nil, CLSCTX_INPROC, IID_IBaseFilter, FEVR));
if (hr <> S_OK) then
begin
showmessage(GetErrorString(hr) + ' (Could not create the enhanced video renderer : ' + inttohex(hr,8) + ')');
Exit;
end;
(FilterGraph as IFilterGraph2).AddFilter().AddFilter(FEVR, PWideChar(WideString('EVR')));
(FEVR as IMFGetService).GetService(MR_VIDEO_RENDER_SERVICE, IID_IMFVideoDisplayControl, FDisplayControl);
FDisplayControl.SetVideoWindow(Panel.Handle);
NR.Left := 0;
NR.Top := 0;
NR.Right := 1;
NR.Bottom := 1;
R := ClientRect;
FDisplayControl.SetVideoPosition(@nr, @r);
FDisplayControl.SetAspectRatioMode(MFVideoARMode_None);

注意:以上需要EVR.pas

关于delphi - 如果在主机选项卡不可见时启动图形 (TVideoWindow),DirectShow 渲染窗口将显示黑色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8775426/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com