Difference between revisions of "WebCam with Free Pascal"

From Lazarus wiki
Jump to navigationJump to search
(SysRec added.)
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{***************************************************************
+
==Freepascal VideoTest==
* Name:      VideoTest
+
Freepascal VideoTest is a simple application that demonstrates how to use a web cam from Free Pascal.
* Author:    Denis Gottardello (info@denisgottardello.it)
+
It is available from https://sourceforge.net/projects/freepascalvideo/ for Windows and Linux.
* Created:   2010-08-12
 
* Copyright: Denis Gottardello (www.denisgottardello.it)
 
* License:
 
**************************************************************}
 
  
unit TFMainForm;
+
==SysRec==
 +
[[SysRec]] is a versatile Lazarus application that supports Windows computers. It is available as source code.
  
{$mode objfpc}{$H+}
+
[[Category: Hardware]]
 
+
[[Category:Devices]]
interface
+
[[Category:Multimedia]]
 
+
[[Category:Video]]
uses
 
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, TFCamera,
 
  ComCtrls, Buttons, StdCtrls, ExtCtrls, VFW;
 
 
 
type RVideoCapDevice= record
 
  szDeviceName: array[0..79] of Char;
 
  szDeviceVersion: array[0..79] of Char;
 
end;
 
 
 
type AImageIn= array of Byte;
 
type PAImageIn= ^AImageIn;
 
type Av_capability= array of RVideoCapDevice;
 
 
 
type
 
 
 
  { TMainForm }
 
 
 
  TMainForm = class(TForm)
 
    BitBtn1: TBitBtn;
 
    TBBCamera: TBitBtn;
 
    GroupBox2: TGroupBox;
 
    TMLog: TMemo;
 
    TEDriver: TEdit;
 
    TECard: TEdit;
 
    TEBusInfo: TEdit;
 
    TEVersion: TEdit;
 
    TECapabilities: TEdit;
 
    TEReserved: TEdit;
 
    GroupBox1: TGroupBox;
 
    Label1: TLabel;
 
    Label2: TLabel;
 
    Label3: TLabel;
 
    Label4: TLabel;
 
    Label5: TLabel;
 
    Label6: TLabel;
 
    TLBVideoCards: TListBox;
 
    StatusBar1: TStatusBar;
 
    procedure FormCreate(Sender: TObject);
 
    procedure FormDestroy(Sender: TObject);
 
    procedure TBBCameraClick(Sender: TObject);
 
    procedure FormShow(Sender: TObject);
 
    procedure TLBVideoCardsClick(Sender: TObject);
 
  private
 
    AAv_capability: Av_capability;
 
    TSLInterfacesList: TStringList;
 
    Camera: TCamera;
 
    IsCameraConnected: Boolean;
 
    FHandle: Integer;
 
  public
 
    { public declarations }
 
  end;
 
 
 
var
 
  MainForm: TMainForm;
 
 
 
implementation
 
 
 
uses
 
  Windows;
 
 
 
{ TMainForm }
 
 
 
procedure TMainForm.FormShow(Sender: TObject);
 
var
 
  VideoCapDevice: RVideoCapDevice;
 
  I: Integer;
 
begin
 
  SetLength(AAv_capability, 0);
 
  for I:= 0 to 99 do begin
 
    if capGetDriverDescription(I, @VideoCapDevice.szDeviceName, sizeof(VideoCapDevice.szDeviceName), @VideoCapDevice.szDeviceVersion, sizeof(VideoCapDevice.szDeviceVersion)) then begin
 
      SetLength(AAv_capability, Length(AAv_capability)+ 1);
 
      AAv_capability[Length(AAv_capability)- 1]:= VideoCapDevice;
 
      TLBVideoCards.Items.Append(VideoCapDevice.szDeviceName +', '+ VideoCapDevice.szDeviceVersion);
 
    end;
 
  end;
 
end;
 
 
 
procedure TMainForm.TBBCameraClick(Sender: TObject);
 
var
 
  FDriverCaps: TCapDriverCaps;
 
begin
 
  if not IsCameraConnected then begin
 
    Camera:= TCamera.Create(Self);
 
    Camera.FHandle:= @FHandle;
 
    FHandle:= capCreateCaptureWindow(nil, WS_CHILDWINDOW or WS_VISIBLE or WS_CLIPCHILDREN or WS_CLIPSIBLINGS , Camera.TPCamera.Left+ 5, Camera.TPCamera.Top+ 5, Camera.TPCamera.Width- 10, Camera.TPCamera.Height-10, Camera.TPCamera.Handle, 0);
 
    if (FHandle<> 0) and capDriverConnect(FHandle, TLBVideoCards.ItemIndex) then begin
 
      if capDriverGetCaps(FHandle, @FDriverCaps, SizeOf(TCapDriverCaps)) then begin
 
        if FDriverCaps.fHasOverlay then begin
 
          TMLog.Lines.Append('Driver connected, accepts overlay');
 
          if not capPreviewRate(FHandle, 0) then TMLog.Lines.Append('Error capPreviewRate(FHandle, 0)!');
 
          if capOverlay(FHandle, True) then TMLog.Lines.Append('Video Capture - Overlay (Hardware)');
 
        end else begin
 
          TMLog.Lines.Append('Driver connected, software rendering');
 
          if not capPreviewRate(FHandle, 33) then TMLog.Lines.Append('Error capPreviewRate(FHandle, 33)!');
 
          if capPreview(FHandle, True) then TMLog.Lines.Append('Video Capture - Preview (Software)');
 
        end;
 
        IsCameraConnected:= true;
 
        TBBCamera.Caption:= 'Stop';
 
      end;
 
    end;
 
    Camera.Show();
 
  end else begin
 
    if capCaptureStop(FHandle) and capDriverDisconnect(FHandle) then begin
 
      Camera.Free;
 
      IsCameraConnected:= false;
 
      TBBCamera.Caption:= 'Start';
 
    end;
 
  end;
 
end;
 
 
 
procedure TMainForm.FormCreate(Sender: TObject);
 
begin
 
  TSLInterfacesList:= TStringList.Create();
 
  IsCameraConnected:= false;
 
end;
 
 
 
procedure TMainForm.FormDestroy(Sender: TObject);
 
begin
 
  TSLInterfacesList.Free;
 
end;
 
 
 
procedure TMainForm.TLBVideoCardsClick(Sender: TObject);
 
begin
 
  if (TLBVideoCards.ItemIndex> -1) and (TLBVideoCards.ItemIndex< TLBVideoCards.Items.Count) then begin
 
    TEDriver.Text:= AAv_capability[TLBVideoCards.ItemIndex].szDeviceName;
 
    TEVersion.Text:= AAv_capability[TLBVideoCards.ItemIndex].szDeviceVersion;
 
    TBBCamera.Enabled:= true;
 
  end;
 
end;
 
 
 
initialization
 
  {$I TFMainForm.lrs}
 
 
 
end.
 

Latest revision as of 16:30, 26 August 2015

Freepascal VideoTest

Freepascal VideoTest is a simple application that demonstrates how to use a web cam from Free Pascal. It is available from https://sourceforge.net/projects/freepascalvideo/ for Windows and Linux.

SysRec

SysRec is a versatile Lazarus application that supports Windows computers. It is available as source code.