Hier das ist der Code, mit dem was ich bis jetzt neu eigebaut habe:
Delphi-Quellcode:
//Initialisieren des Bildes im VideoWindow
procedure TCapSource.StartCapture(Lbindex:integer; VideoWindow:TVideoWindow);
var index:integer;
vw:tvideowindow;
begin
//Klassen instanziieren
Filtergraph:=TFiltergraph.Create(VideoWindow);
Filter:=TFilter.Create(VideoWindow);
SampleGrabber:=TSampleGrabber.Create(VideoWindow);
try
VideoWindow.FilterGraph:=Filtergraph;
SampleGrabber.FilterGraph:=Filtergraph;
Filter.FilterGraph:=Filtergraph;
Filtergraph.ClearGraph;
Filtergraph.Active:=False;
Filter.BaseFilter.Moniker := Capenum.GetMoniker(Lbindex);
Filtergraph.GraphEdit := true;
Filtergraph.Mode := gmCapture;
FilterGraph.Active := True;
with Filtergraph as ICaptureGraphBuilder2 do
RenderStream (@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter,
SampleGrabber as IBaseFilter, VideoWindow as IBaseFilter);
FilterGraph.Play;
except
Filtergraph.Stop;
FreeandNil(Filtergraph);
FreeandNil(Filter);
FreeandNil(Samplegrabber);
index:=lbindex;
vw:=videowindow;
capsource.StartCapture(index, vw);
end;
end;
ich stoppe in dem except block auch erst mal den Filtergraph. Mit dem prüfen ob die Objekte scho existieren bin ich noch nicht klar gekommen.