home *** CD-ROM | disk | FTP | other *** search
- unit FormMain;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, DXCapture, StdCtrls, ComCtrls;
-
- type
- TMainForm = class(TForm)
- lstOptionDialogs: TListBox;
- lstAudioDevices: TComboBox;
- lstVideoDevices: TComboBox;
- lstResolution: TComboBox;
- rbFrameRate15: TRadioButton;
- rbFrameRate30: TRadioButton;
- rbFrameRate10: TRadioButton;
- rbFrameRate5: TRadioButton;
- sbMain: TStatusBar;
- lstAudioFormat: TComboBox;
- cmdBitmap: TButton;
- cmdStart: TButton;
- cmdStop: TButton;
- cmdJpeg: TButton;
- procedure FormCreate(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure lstOptionDialogsClick(Sender: TObject);
- procedure lstVideoDevicesChange(Sender: TObject);
- procedure lstAudioDevicesChange(Sender: TObject);
- procedure lstResolutionChange(Sender: TObject);
- procedure rbFrameRate5Click(Sender: TObject);
- procedure rbFrameRate10Click(Sender: TObject);
- procedure rbFrameRate15Click(Sender: TObject);
- procedure rbFrameRate30Click(Sender: TObject);
- procedure lstAudioFormatChange(Sender: TObject);
- procedure cmdBitmapClick(Sender: TObject);
- procedure cmdStartClick(Sender: TObject);
- procedure cmdStopClick(Sender: TObject);
- procedure cmdJpegClick(Sender: TObject);
- public
- Capture: TCapture;
- VideoDevice : String;
- AudioDevice : String;
- procedure OnVideoFrame( Frame : Cardinal; Buffer : Pointer; Size : Integer );
- procedure OnAudioFrame( Frame : Cardinal; Buffer : Pointer; Size : Integer );
- procedure OnVideoFormat( Sender : TObject );
- procedure OnAudioFormat( Sender : TObject );
- procedure OnChangeDevice( Sender : TObject );
- procedure OnCaptureProgress( Sender: TObject );
- end;
-
- var
- MainForm: TMainForm;
-
- implementation
-
- {$R *.dfm}
-
- // new video frame has been grabbed
- procedure TMainForm.OnVideoFrame( Frame : Cardinal; Buffer : Pointer; Size : Integer );
- begin
- sbMain.Panels[0].Text := 'Video-Frame: ' + IntToStr( Frame );
- end;
-
- // new audio frame has been grabbed
- procedure TMainForm.OnAudioFrame( Frame : Cardinal; Buffer : Pointer; Size : Integer );
- begin
- sbMain.Panels[1].Text := 'Audio-Frame: ' + IntToStr( Frame );
- end;
-
- // capture devices has been changed
- procedure TMainForm.OnChangeDevice( Sender : TObject );
- var
- DeviceOptions : TDeviceOptions;
- i : Integer;
- begin
- // get a pointer to capture device option dialog handler class
- DeviceOptions := Capture.DeviceOptions;
- // cleanup the listbox
- lstOptionDialogs.Clear;
- // add a video header
- lstOptionDialogs.Items.Add( 'Video Options' );
- // add video option dialogs
- i := 0;
- while i < DeviceOptions.Count do begin
- if DeviceOptions.IsVideo[i] then lstOptionDialogs.Items.Add( '+ ' + DeviceOptions.Captions[i] );
- Inc( i );
- end;
- // add a audio header
- lstOptionDialogs.Items.Add( 'Audio Options' );
- // add audio option dialogs
- i := 0;
- while i < DeviceOptions.Count do begin
- if not DeviceOptions.IsVideo[i] then lstOptionDialogs.Items.Add( '+ ' + DeviceOptions.Captions[i] );
- Inc( i );
- end;
- end;
-
- // video format can be set now
- procedure TMainForm.OnVideoFormat( Sender : TObject );
- begin
- // we don't set the video format here :)
-
- // resize capture control
- Capture.SetBounds( 220, 8, Capture.VideoWidth, Capture.VideoHeight );
- end;
-
- // audio format can be set now
- procedure TMainForm.OnAudioFormat( Sender : TObject );
- begin
- // we don't set the audio format here :)
- end;
-
- // capturing in progress ... :)
- procedure TMainForm.OnCaptureProgress( Sender: TObject );
- begin
- sbMain.Panels[2].Text := 'Frames Captured ' + IntToStr( Capture.NotDropped )
- + '. Frames Dropped ' + IntToStr( Capture.FramesDropped ) + '.';
- end;
-
- procedure TMainForm.FormCreate(Sender: TObject);
- var
- StringList : TStringList;
- i : Integer;
- begin
-
- // create the capture class
- Capture := TCapture.Create( Self );
- // we must set the parent property if we havn't installed capture component in delphi
- Capture.Parent := Self;
- // intialize capture class
- if not Capture.Init then begin
- MessageBox( Handle, 'No capture devices found.', PChar( Application.Title ), MB_ICONSTOP or MB_OK );
- end;
- // set grabber handlers
- Capture.VideoGrabber.ProcessBuffer := OnVideoFrame;
- Capture.AudioGrabber.ProcessBuffer := OnAudioFrame;
- // set capture event handlers
- Capture.OnVideoFormatChange := OnVideoFormat;
- Capture.OnAudioFormatChange := OnAudioFormat;
- Capture.OnChangeDevice := OnChangeDevice;
- Capture.OnCaptureProgress := OnCaptureProgress;
-
- // get available video devices
- StringList := GetVideoDevicesList;
- // empty video device listbox
- lstVideoDevices.Clear;
- // add all video devices
- i := 0;
- while i < StringList.Count do begin
- lstVideoDevices.Items.Add( StringList.Strings[i] );
- Inc( i );
- end;
-
- // take first device for capturing
- if StringList.Count > 0 then begin
- VideoDevice := StringList.Strings[0];
- lstVideoDevices.ItemIndex := 0;
- end else begin
- VideoDevice := '';
- end;
-
- // get available video devices
- StringList := GetAudioDevicesList;
- // empty video device listbox
- lstAudioDevices.Clear;
- // add all video devices
- i := 0;
- while i < StringList.Count do begin
- lstAudioDevices.Items.Add( StringList.Strings[i] );
- Inc( i );
- end;
-
- // take first device for capturing
- if StringList.Count > 0 then begin
- AudioDevice := StringList.Strings[0];
- lstAudioDevices.ItemIndex := 0;
- end else begin
- AudioDevice := '';
- end;
-
- // setup component states...
- lstResolution.ItemIndex := 10;
- lstAudioFormat.ItemIndex := 4;
- rbFrameRate10.Checked := True;
-
- // setup video format
- Capture.SetVideoFormat( 352, 288, 24, 10 );
- // setup audio format
- Capture.SetAudioFormat( 8000, 1, 16 );
- // set bounds of capture control
- Capture.SetBounds( 220, 8, Capture.VideoWidth, Capture.VideoHeight );
- // begin capturing
- Capture.ChooseDevices( VideoDevice, AudioDevice );
-
- end;
-
- procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- // free capture class if we havn't installed capture component in delphi
- Capture.Free;
- end;
-
- procedure TMainForm.lstOptionDialogsClick(Sender: TObject);
- begin
- if lstOptionDialogs.ItemIndex < 0 then Exit;
- // open options dialog
- Capture.DeviceOptions.Dialog( Copy( lstOptionDialogs.Items[lstOptionDialogs.ItemIndex], 3, $FFFF ) );
- end;
-
- procedure TMainForm.lstVideoDevicesChange(Sender: TObject);
- begin
- if lstVideoDevices.ItemIndex < 0 then Exit;
- // get new video device from listbox
- VideoDevice := lstVideoDevices.Items[lstVideoDevices.ItemIndex];
- // begin capturing...
- Capture.ChooseDevices( VideoDevice, AudioDevice );
- end;
-
- procedure TMainForm.lstAudioDevicesChange(Sender: TObject);
- begin
- if lstAudioDevices.ItemIndex < 0 then Exit;
- // get new video device from listbox
- AudioDevice := lstAudioDevices.Items[lstAudioDevices.ItemIndex];
- // begin capturing...
- Capture.ChooseDevices( VideoDevice, AudioDevice );
- end;
-
- procedure TMainForm.lstResolutionChange(Sender: TObject);
- var
- szTmp : String;
- iWidth, iHeight, iBpp : Integer;
- begin
- if lstResolution.ItemIndex < 0 then Exit;
- szTmp := lstResolution.Items[lstResolution.ItemIndex];
- iWidth := StrToInt( Copy( szTmp, 0, Pos( 'x', szTmp ) - 1 ) );
- szTmp := Copy( szTmp, Pos( 'x', szTmp ) + 1, 99 );
- iHeight := StrToInt( Copy( szTmp, 0, Pos( 'x', szTmp ) - 1 ) );
- szTmp := Copy( szTmp, Pos( 'x', szTmp ) + 1, 99 );
- iBpp := StrToInt( szTmp );
- Capture.SetVideoFormat( iWidth, iHeight, iBpp, Capture.VideoFrameRate );
- Capture.ChooseDevices( VideoDevice, AudioDevice );
- end;
-
- procedure TMainForm.lstAudioFormatChange(Sender: TObject);
- var
- szTmp : String;
- iSampleRate, iBitRate, iChannels : Integer;
- begin
- if lstAudioFormat.ItemIndex < 0 then Exit;
- szTmp := lstAudioFormat.Items[lstAudioFormat.ItemIndex];
- szTmp := StringReplace( szTmp, ' Hz - ', 'x', [] );
- szTmp := StringReplace( szTmp, ' Bit - ', 'x', [] );
- iSampleRate := StrToInt( Copy( szTmp, 0, Pos( 'x', szTmp ) - 1 ) );
- szTmp := Copy( szTmp, Pos( 'x', szTmp ) + 1, 99 );
- iBitRate := StrToInt( Copy( szTmp, 0, Pos( 'x', szTmp ) - 1 ) );
- szTmp := Copy( szTmp, Pos( 'x', szTmp ) + 1, 99 );
- iChannels := StrToInt( Copy( szTmp, 0, 1 ) );
- Capture.SetAudioFormat( iSampleRate, iChannels, iBitRate );
- Capture.ChooseDevices( VideoDevice, AudioDevice );
- end;
-
- procedure TMainForm.rbFrameRate5Click(Sender: TObject);
- begin
- rbFrameRate5.Checked := True;
- rbFrameRate10.Checked := False;
- rbFrameRate15.Checked := False;
- rbFrameRate30.Checked := False;
- Capture.SetVideoFormat( Capture.VideoWidth, Capture.VideoHeight, Capture.VideoBitCount, 5 );
- Capture.ChooseDevices( VideoDevice, AudioDevice );
- end;
-
- procedure TMainForm.rbFrameRate10Click(Sender: TObject);
- begin
- rbFrameRate5.Checked := False;
- rbFrameRate10.Checked := True;
- rbFrameRate15.Checked := False;
- rbFrameRate30.Checked := False;
- Capture.SetVideoFormat( Capture.VideoWidth, Capture.VideoHeight, Capture.VideoBitCount, 10 );
- Capture.ChooseDevices( VideoDevice, AudioDevice );
- end;
-
- procedure TMainForm.rbFrameRate15Click(Sender: TObject);
- begin
- rbFrameRate5.Checked := False;
- rbFrameRate10.Checked := False;
- rbFrameRate15.Checked := True;
- rbFrameRate30.Checked := False;
- Capture.SetVideoFormat( Capture.VideoWidth, Capture.VideoHeight, Capture.VideoBitCount, 15 );
- Capture.ChooseDevices( VideoDevice, AudioDevice );
- end;
-
- procedure TMainForm.rbFrameRate30Click(Sender: TObject);
- begin
- rbFrameRate5.Checked := False;
- rbFrameRate10.Checked := False;
- rbFrameRate15.Checked := False;
- rbFrameRate30.Checked := True;
- Capture.SetVideoFormat( Capture.VideoWidth, Capture.VideoHeight, Capture.VideoBitCount, 30 );
- Capture.ChooseDevices( VideoDevice, AudioDevice );
- end;
-
- procedure TMainForm.cmdBitmapClick(Sender: TObject);
- begin
- Capture.ImageFile := 'capture.bmp';
- Capture.SaveAsBitmap;
- end;
-
- procedure TMainForm.cmdJpegClick(Sender: TObject);
- begin
- Capture.ImageFile := 'capture.jpg';
- Capture.SaveAsJpeg( 100 );
- end;
-
- procedure TMainForm.cmdStartClick(Sender: TObject);
- begin
- if Capture.Capturing then Exit;
- Capture.UseTempFile := True;
- Capture.TempCaptureFileName := 'capture~.avi';
- Capture.CaptureFileName := 'capture.avi';
-
- // start capturing
- if Capture.StartCapture( true ) then begin
- // set button states
- cmdBitmap.Enabled := False;
- cmdStart.Enabled := False;
- cmdStop.Enabled := True;
- end;
-
- end;
-
- procedure TMainForm.cmdStopClick(Sender: TObject);
- begin
- if not Capture.Capturing then Exit;
- Capture.StopCapture;
- // back to preview mode
- Capture.ChooseDevices( VideoDevice, AudioDevice );
- // set button states
- cmdBitmap.Enabled := True;
- cmdStart.Enabled := True;
- cmdStop.Enabled := False;
- end;
-
- end.
-