【发布时间】:2015-06-05 19:52:57
【问题描述】:
我正在使用 Video Resizer DSP Video Resizer DSP 来调整我的视频大小。 我使用 Lazarus Free Pascal 和 DSPack。
本站说明如何使用:http://alax.info/blog/1371
- CoCreateInstance DSP 作为 DMO 并将其添加到 DMO Wrapper Filter
- 使用 IWMResizerProps::SetFullCropRegion 初始化 DSP
- 连接输入引脚
- 通过 IMediaObject::SetOutputType 设置输出类型
- IGraphBuilder::ConnectDirect 输出引脚
我写这个:
//Create Resizer DMO
hr := CoCreateInstance(CLSID_DMOWrapperFilter, NIL, CLSCTX_ALL,
IID_IBaseFilter, FResizerDMO);
if FAILED(hr) then EXIT;
//CLSID_CVideoResizerDMO = '{1ea1ea14-48f4-4054-ad1a-e8aee10ac805}'
Hr := (FResizerDMO as IDMOWrapperFilter).Init( CLSID_CVideoResizerDMO,
DMOCATEGORY_VIDEO_EFFECT );
if FAILED(Hr) then EXIT;
//Add filter to graph
(fgRender as IGraphBuilder).AddFilter( FResizerDMO, 'Resizer' );
if FAILED(Hr) then EXIT;
// end create FResizerDMO in my graph
// Set output type via IMediaObject::SetOutputType and create structure
ZeroMemory(@mt, sizeof(DMO_MEDIA_TYPE));
mt.majortype := MEDIATYPE_Video;
mt.subtype := MEDIASUBTYPE_RGB32;
mt.formattype := FORMAT_VideoInfo;
mt.lSampleSize := pVIH.bmiHeader.biSize;
FillChar(pVIH, SizeOf(TVideoInfoHeader), 0);
mt.pbFormat := CoTaskMemAlloc(sizeof(VIDEOINFOHEADER));
pVIH := TVideoInfoHeader(mt.pbFormat^);
pVIH.bmiHeader.biWidth := 720;
pVIH.bmiHeader.biHeight := 576;
pVIH.bmiHeader.biXPelsPerMeter:=9;
pVIH.bmiHeader.biYPelsPerMeter:=16;
pVIH.bmiHeader.biSize := SizeOf(TBitmapInfoHeader);
pVIH.bmiHeader.biSizeImage := 720 * 576 * 4;
// connect pin and next
hr := (FResizerDMO as IMediaObject).SetOutputType
(0,@mt,DMO_SET_TYPEF_CLEAR);
在小时内我收到 DMO_E_TYPE_NOT_ACCEPTED。 我哪里错了?谁能帮我?谢谢。
【问题讨论】:
标签: video directshow pascal lazarus