Habe ein Problem mit dem DSPACK und kann das Problem nicht finden.
Ich kann die Komponente leider nur ohne Install nutzen, weil HDGuard den Schulrechner sperrt.
Ich will mit meiner Webcam ein Bild aufnehmen.
Wenn ich das DSPACK auf meinen Rechner installiere geht es ohne
Probleme und der Code funktioniert. Aber wenn ich alle Objecte selbst aufrufe, gibt es Fehler.
Hat jemand eine Idee ?
Hier mein Quellcode
var
Form1: TForm1;
FilterGraph : TFilterGraph;
VideoWindow : TVideoWindow;
Filter : TFilter;
SampleGrabber : TSampleGrabber;
SysDev : TSysDevEnum;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var I : Integer;
Device : TMenuItem;
begin
FilterGraph := TFilterGraph.Create(Self);
FilterGraph.Mode := gmCapture;
FilterGraph.GraphEdit := TRUE;
Filter := TFilter.Create(Self);
Filter.FilterGraph := FilterGraph;
SampleGrabber := TSampleGrabber.Create(Self);
SampleGrabber.FilterGraph := FilterGraph;
VideoWindow := TVideoWindow.Create(Self);
VideoWindow.Parent := Form1;
VideoWindow.Left := 10;
VideoWindow.Top := 10;
VideoWindow.FilterGraph := FilterGraph;
//Hardware Laden
SysDev := TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
if SysDev.CountFilters > 0 then
for i := 0 to SysDev.CountFilters - 1 do
begin
Device := TMenuItem.Create(Devices);
Device.Caption := SysDev.Filters[i].FriendlyName;
Device.Tag := i;
Device.OnClick := OnSelectDevice;
Devices.Add(Device);
end;
end;
procedure TForm1.OnSelectDevice(sender: TObject);
begin
FilterGraph.ClearGraph;
FilterGraph.Active := false;
Filter.BaseFilter.Moniker := SysDev.GetMoniker(TMenuItem(Sender).tag);
FilterGraph.Active := true;
// Hier ist wahrscheinlich die Fehlerquelle //
// with FilterGraph as ICaptureGraphBuilder2 do
// RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter as
IBaseFilter, SampleGrabber as IBaseFilter, VideoWindow as
IbaseFilter);
// FilterGraph.Play;
end;