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.