You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
3.5 KiB
C

/*=========================================================================
Program: Visualization Toolkit
Module: vtkWin32VideoSource.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkWin32VideoSource
* @brief Video-for-Windows video digitizer
*
* vtkWin32VideoSource grabs frames or streaming video from a
* Video for Windows compatible device on the Win32 platform.
* @warning
* With some capture cards, if this class is leaked and ReleaseSystemResources
* is not called, you may have to reboot before you can capture again.
* vtkVideoSource used to keep a global list and delete the video sources
* if your program leaked, due to exit crashes that was removed.
*
* @sa
* vtkVideoSource vtkMILVideoSource
*/
#ifndef vtkWin32VideoSource_h
#define vtkWin32VideoSource_h
#include "vtkIOVideoModule.h" // For export macro
#include "vtkVideoSource.h"
class vtkWin32VideoSourceInternal;
class VTKIOVIDEO_EXPORT vtkWin32VideoSource : public vtkVideoSource
{
public:
static vtkWin32VideoSource* New();
vtkTypeMacro(vtkWin32VideoSource, vtkVideoSource);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Standard VCR functionality: Record incoming video.
*/
void Record() override;
/**
* Standard VCR functionality: Play recorded video.
*/
void Play() override;
/**
* Standard VCR functionality: Stop recording or playing.
*/
void Stop() override;
/**
* Grab a single video frame.
*/
void Grab() override;
//@{
/**
* Request a particular frame size (set the third value to 1).
*/
void SetFrameSize(int x, int y, int z) override;
void SetFrameSize(int dim[3]) override { this->SetFrameSize(dim[0], dim[1], dim[2]); }
//@}
/**
* Request a particular frame rate (default 30 frames per second).
*/
void SetFrameRate(float rate) override;
/**
* Request a particular output format (default: VTK_RGB).
*/
void SetOutputFormat(int format) override;
//@{
/**
* Turn on/off the preview (overlay) window.
*/
void SetPreview(int p);
vtkBooleanMacro(Preview, int);
vtkGetMacro(Preview, int);
//@}
/**
* Bring up a modal dialog box for video format selection.
*/
void VideoFormatDialog();
/**
* Bring up a modal dialog box for video input selection.
*/
void VideoSourceDialog();
/**
* Initialize the driver (this is called automatically when the
* first grab is done).
*/
void Initialize() override;
/**
* Free the driver (this is called automatically inside the
* destructor).
*/
void ReleaseSystemResources() override;
//@{
/**
* For internal use only
*/
void LocalInternalGrab(void*);
void OnParentWndDestroy();
//@}
protected:
vtkWin32VideoSource();
~vtkWin32VideoSource() override;
char WndClassName[16];
int BitMapSize;
int Preview;
vtkWin32VideoSourceInternal* Internal;
void CheckBuffer();
void UnpackRasterLine(char* outptr, char* inptr, int start, int count) override;
void DoVFWFormatSetup();
void DoVFWFormatCheck();
private:
vtkWin32VideoSource(const vtkWin32VideoSource&) = delete;
void operator=(const vtkWin32VideoSource&) = delete;
};
#endif