用DSPack开发DirectShow Render无法得到InputPin问题(自己已解决)(50分)

  • 主题发起人 主题发起人 johnnywww
  • 开始时间 开始时间
J

johnnywww

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DSPack编写了一个Render,注册后,用TBaseFilter控件的Filter Editor可以看见这个Filter,但是Filter没有Input Pin,而且Filter Editor无法退出。代码如下:
unit UGSMVideoRender;

interface

uses
Windows, ActiveX, BaseClass, DirectShow9, DSUtil, UInfGSMDataTransfer;

const
CLSID_GSMVideoTransferRender: TGUID =
'{4FD16F79-7648-41BD-9672-FC877DE8F184}';

type

IInfCarMonitorService = interface(IUnknown)
['{6A215DC7-6D65-466D-9C0E-F5135B777A36}']
procedure SetGSMDataTransfer(InfGSMDataTransfer: IInfGSMDataTransfer);
stdcall;
end;


TGSMVideoRender = class(TBCBaseRenderer, IInfCarMonitorService)
private
FCarMonitor: IInfGSMDataTransfer;
public
functiondo
RenderSample(MediaSample: IMediaSample): HResult;
override;
function CheckMediaType(MediaType: PAMMediaType): HResult;
override;
procedure SetGSMDataTransfer(InfGSMDataTransfer: IInfGSMDataTransfer);
stdcall;
end;


implementation

{ TGSMVideoRender }

function TGSMVideoRender.CheckMediaType(MediaType: PAMMediaType): HResult;
begin

if not (Assigned(MediaType)) then

begin

Result := E_POINTER;
Exit;
end;


// the major type must match
//
if IsEqualGUID(MediaType.majortype, MEDIATYPE_Video) then

begin

Result := E_INVALIDARG;
Exit;
end;


// the sub type must match
//
if IsEqualGUID(MediaType.subtype, MEDIASUBTYPE_ARGB32) then

begin

Result := E_INVALIDARG;
Exit;
end;

Result := 0;

end;


function TGSMVideoRender.DoRenderSample(
MediaSample: IMediaSample): HResult;
var
Data: PByte;
DataLen: Cardinal;
begin

if not Assigned(@MediaSample) then

begin

Result := E_POINTER;
Exit;
end;


MediaSample.GetPointer(Data);
DataLen := MediaSample.GetActualDataLength;
if (DataLen > 0) and (Assigned(FCarMonitor)) then

begin

FCarMonitor.SendData(Data, DataLen);
end;

Result := 0;
end;


procedure TGSMVideoRender.SetGSMDataTransfer(
InfGSMDataTransfer: IInfGSMDataTransfer);
begin

FCarMonitor := InfGSMDataTransfer;
end;


initialization
TBCClassFactory.CreateFilter(TGSMVideoRender, 'GSM Video Transfer Render',
CLSID_GSMVideoTransferRender, CLSID_LegacyAmFilterCategory,
MERIT_DO_NOT_USE, 0, nil);

end.
 
有没有人看一下
 
而且大富翁的全文检索网站www.richserach.com无法打开
 
自己解决了,感谢有位大侠给我发短消息。由于好久没有来大富翁,所以对短消息机制不了解,这条信息没有看清楚。
添加如下代码:
constructor TGSMVideoRender.CreateFromFactory(Factory: TBCClassFactory;
const Controller: IInterface);
var
hr: HRESULT;
begin

Create(CLSID_GSMVideoTransferRender, PChar(Factory.Name), Controller, hr);

end;
 
解决了就好三,
是不是也把此问题解决了^_^
 
浪人情哥刚才是你给我发短消息吗?
 
楼主在吗?我刚接触dspack,在这里向你拜师啦,我想用电脑摄像头和麦克风做视频广播 ,用 ASFwriter,但是不知道怎么做啊,看例子没有声音,也不能调摄像头的分辨率,请指点!!
 
后退
顶部