如何更改rcTarget
中的filter
?
Source and Target Rectangles in Video Renderers
我想要,例如免费的pascal和DSpack。
我的项目是使用720x576
视频格式。如果我可以更改过滤器rcTarget
ex。:LAVSplitter
pin VIDEO,我解决了我的问题。
我想解释一下我的问题:
我的项目并与DSPack和lazarus共同开发。 我必须运行媒体文件播放列表并添加文本滚动。 输出DeckLink卡模拟或类似。用于连接电视监视器 S-视频。
现在我在连接到DeckLink的桌面和电视监视器上看到,只有原始视频720x576。
我想要运行所有视频格式。 msdn网站: Source and Target Rectangles in Video Renderers 介绍如何在videoinfoheader中更改rcTarget。我不知道如何写pascal,用过dspack。还是有另一种方法来调整视频大小? 我必须构建一个新的过滤器,或者我可以在rcTarget过滤器示例中更改属性:LAVSplitter?
我的图表 |的资源文件| - > 1920x1080 | LAV Splitter | - > 720x576 | LAV解码器| - > T恤过滤器| - > videowindows和DeckLink渲染
在互联网上有许多调整外部设备捕获网络摄像头大小的例子, 我找不到示例代码外部设备输出。 为此我请求帮助。
我有一个MPEG-2的例子,没有用。哪里出错?
// var
// mt : AM_Media_Type;
// seqHdr : array [0..0] of byte; //this is right?
// pWIH : MPEG2VIDEOINFO;
ZeroMemory(@Mt, sizeof(AM_MEDIA_TYPE));
Mt.MajorType := MEDIATYPE_Video;
Mt.SubType := MEDIASUBTYPE_RGB32;
Mt.FormatType := FORMAT_MPEG2_VIDEO;
Mt.cbFormat := sizeof(MPEG2VIDEOINFO) + sizeof(seqHdr);
mt.pbFormat := CoTaskMemAlloc(mt.cbFormat);
if (mt.pbFormat = NULL) then exit; // ERROR
ZeroMemory(mt.pbFormat, mt.cbFormat);
{ RCSRC.Left := 0;
RCSRC.Top:= 0;
RCSRC.Right := 0;
RCSRC.Bottom := 0;
}
pWIH.hdr.rcSource.Left:=0;
pWIH.hdr.rcSource.Top:=0;
pWIH.hdr.rcSource.Right:=0;
pWIH.hdr.rcSource.Bottom:=0;
// pWIH.hdr.rcSource := RCSRC;
// pWIH.hdr.rcTarget := Rect(0,0,720,576);
pWIH.hdr.rcTarget.Left:=0;
pWIH.hdr.rcTarget.Top:=0;
pWIH.hdr.rcTarget.Right:=576;
pWIH.hdr.rcTarget.Bottom:=720;
pWIH.hdr.AvgTimePerFrame := 278335;
pWIH.hdr.dwPictAspectRatioX := 4;
pWIH.hdr.dwPictAspectRatioY := 3;
pWIH.hdr.bmiHeader.biSize := 40;
pWIH.hdr.bmiHeader.biWidth := 720;
pWIH.hdr.bmiHeader.biHeight := 576;
pWIH.cbSequenceHeader := sizeof(seqHdr);
CopyMemory(@pwih.dwSequenceHeader, @seqHdr, sizeof(seqhdr));
//-------------------------------------
SourceFilter.FindPin('Output',PinOutSource);
(VideoWindow1 as IBaseFilter).FindPin('Input',PIn_input);
PinOutSource.Connect(PIn_input,@mt);
答案 0 :(得分:0)
在网站alax.info中:
以上是正确的吗?
我写这个:
var pVIH :VIDEOINFOHEADER; mt :DMO_MEDIA_TYPE;
ZeroMemory(@mt, sizeof(DMO_MEDIA_TYPE));
mt.majortype := MEDIATYPE_Video;
mt.subtype := MEDIASUBTYPE_RGB32;
mt.formattype := FORMAT_VideoInfo;
// ** I can not translate this **
// VIDEOINFOHEADER * pVIH = (VIDEOINFOHEADER *)pmt->pbFormat;
// pVIH := TVideoInfoHeader(mt.pbFormat^); ????
pVIH.bmiHeader.biWidth := 720;
pVIH.bmiHeader.biHeight := 576;
pVIH.bmiHeader.biXPelsPerMeter:=9;
pVIH.bmiHeader.biYPelsPerMeter:=16;
pVIH.bmiHeader.biSizeImage := 720 * 480 * 3;
hr := (FResizerDMO as IMediaObject).SetOutputType(0,@mt,DMO_SET_TYPEF_CLEAR);
if hr <> S_OK then showmessage('error'); // I receive error
纠正这条路? 如果它是正确的,你可以提供帮助,因为它不起作用。