Einzelnen Beitrag anzeigen

chris_82

Registriert seit: 26. Aug 2003
112 Beiträge
 
Delphi 6 Enterprise
 
#1

Bekomm immer Fehlermeldung:Schnittstelle nicht unterstützt

  Alt 25. Nov 2003, 21:49
Schreib grad an nem Proggi zum darstellen eines Bildes einer Webcam, mittels DirectShow, verwende dazu das DSPack.

Möchte verschiedene Klassen verwenden. Bekomm nun aber beim initialisieren des Bildes immer ne Zugriffsverletzung, aber zu compilieren gehts? Woran kann das liegen?

Poste hier mal die beiden Klassen:

Hier die Klasse des Form:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,unit2, StdCtrls, DSPack;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    VideoWindow1: TVideoWindow;
    procedure FormCreate(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  capsource:tcapsource;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
capsource:=TCapSource.Create;
if capsource.GetDevices.Count > 0 then
 begin
  for i:=0 to capsource.GetDevices.Count-1 do
    Listbox1.Items.Add(capsource.GetDevices.Strings[i]);
 end
else
 begin
  Listbox1.Items.Add('Keine Videoquelle verfügbar!');
  Listbox1.Enabled:=False;
 end;
end;



procedure TForm1.ListBox1Click(Sender: TObject);
begin
Capsource.StartCapture(Listbox1.ItemIndex, VideoWindow1)
end;

end.
Hier die der Webcam:

Delphi-Quellcode:
unit Unit2;

interface

uses DSPack,DSUtil,DirectShow9,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type TCapSource = class
 function GetDevices:TStringList;
 procedure StartCapture(Lbindex:integer; VideoWindow:TVideoWindow);
private
 FDevices:TStringlist;
published
 property Devices:TStringlist read GetDevices;
end;

var capenum:TSysDevEnum;
    FilterGraph:TFilterGraph;
    Filter:Tfilter;
    SampleGrabber:TSampleGrabber;
implementation

function TCapSource.GetDevices:TStringList;
var i:integer;
DeviceListe:TStringList;
begin
  Deviceliste:=TStringlist.Create;
  Capenum:=TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
  for i:=0 to Capenum.CountFilters - 1 do
   DeviceListe.Add(Capenum.Filters[i].FriendlyName);
   GetDevices:=Deviceliste;
end;

procedure TCapSource.StartCapture(Lbindex:integer; VideoWindow:TVideoWindow);
begin
Filtergraph.ClearGraph;
Filtergraph.Active:=False;
Filter.BaseFilter.Moniker := Capenum.GetMoniker(Lbindex);
FilterGraph.Active := True;
with Filtergraph as ICaptureGraphBuilder2 do
 RenderStream (@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter,
 SampleGrabber as IBaseFilter, VideoWindow as IBaseFilter);
 FilterGraph.Play;
end;

end.
....oop und nun...??
http://www.sengewald.info
  Mit Zitat antworten Zitat