Videocap.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:41k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit Videocap;
  2. interface
  3.  uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls,stdctrls,
  5.   ExtCtrls,vfw,mmsystem,syncobjs;
  6.  ///////////////////////////////////////////////////////////////////////////////
  7. // Video Capturing
  8. type
  9. // Types for audio-settings
  10.  TChannel = (Stereo, Mono);
  11.  TFrequency = (f8000Hz, f11025Hz, f22050Hz, f44100Hz);
  12.  TResolution  = (r8Bit, r16Bit);
  13. // Types for event-procedures
  14. type
  15.   TCapStatusProc = procedure(Sender: TObject) of object;
  16.   TCapStatusCallback = procedure (Sender:TObject;nID:integer;status:string) of object;
  17.   TVideoStream = procedure (sender:TObject;lpVhdr:PVIDEOHDR) of object;
  18.   TAudioStream = procedure (sender:TObject;lpWHdr:PWAVEHDR) of object;
  19.   TError       = procedure (sender:TObject;nID:integer; errorstr:string) of object;
  20. // Exceptions
  21. type ENoDriverException      = class(Exception);
  22. type ENoCapWindowException   = class(Exception);
  23. type ENotConnectException    = class(Exception);
  24. type ENoOverlayException     = class(Exception);
  25. type EFalseFormat            = class(Exception);
  26. type ENotOpen                = class(Exception);
  27. type EBufferFileError        = class(Exception);
  28. type
  29. TAudioFormat = class (TPersistent)
  30.    private
  31.     FChannels :TChannel;
  32.     FFrequency:TFrequency;
  33.     FRes      :TResolution;
  34.   private
  35.     procedure SetAudio(handle:Thandle); // Setting Audio Data to Capture Window
  36.   public
  37.    constructor create;
  38.    published
  39.      property Channels: TChannel read FChannels write Fchannels     default Mono;
  40.      property Frequency: TFrequency read FFrequency write fFrequency default f8000Hz;
  41.      property Resolution : TResolution read FRes write FRes         default r8Bit;
  42.  end;
  43. type
  44.   TVideoCap = class(TCustomControl)
  45.   private
  46.    fdriverIndex:integer;   // Videodriver index
  47.    fVideoDriverName     : string;  // name of videodriver
  48.    fhCapWnd             : THandle;  // handle for CAP-Window
  49.    fpDrivercaps         : PCapDriverCaps; // propertys of videodriver
  50.    fpDriverStatus       : pCapStatus; // status of capdriver
  51.    fscale               : boolean;  // window scaling
  52.    fprop                : boolean;  // proportional scaling
  53.    fpreviewrate         : word;  // Frames p. sec during preview
  54.    fmicrosecpframe      : cardinal; // framerate as microsconds
  55.    fCapVideoFileName    : string; // name of the capture file
  56.    fTempFileName        : String; // Name of temporary avi-file
  57.    fTempFileSize        : word; // size of Tmp- File in MB
  58.    fCapSingleImageFileName : string; // name of the file for a single image
  59.    fcapAudio               :boolean; // Capture also audio stream
  60.    fcapTimeLimit           :word;    // Time limit for captureing
  61.    fIndexSize             :cardinal; // size of the index in the capture file
  62.    fcapToFile             : boolean;  // Write frames to file druing capturing
  63.    FAudioFormat           : TAudioFormat;// Audio Format
  64.    fCapStatusProcedure     : TCapStatusProc;      // Event procedure for internal component status
  65.    fcapStatusCallBack      : TCapStatusCallback;  // Event procedure for status of then driver
  66.    fcapVideoStream         : TVideoStream;        // Event procedure for each Video frame during capturing
  67.    fcapAudioStream         : TAudiostream;        // Event procedure for each Audio buffer
  68.    fcapFrameCallback       : TVideoStream;        // Event procedure for each Video frame during preview
  69.    fcapError               : TError;              // Event procedure for Error
  70.    procedure setsize(var msg:TMessage); message WM_SIZE;  // Changing size of cap window
  71.    function GetDriverCaps:boolean;                        // get driver capitiyties
  72.    procedure DeleteDriverProps;                           // delete driver capitilyites
  73.    procedure CreateTmpFile(drvopn:boolean); // Create or delete a temp avi