⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pgrcamera.cpp

📁 VideoMan is a very easy image acquisition library. It is able to manage many video inputs at the sam
💻 CPP
字号:
//#include "StdAfx.h"

#ifdef VM_PGR

#include "PGRCamera.h"
#include "pgrerror.h"
#include <sstream>
#include "AVIGenerator.h"

PGRCamera::PGRCamera(void)
{
	controller = NULL;
	context = NULL;
	guiContext = NULL;
	controller = NULL;

	recording = false;
	started = false;
	
	convertForTheRenderer = false;
	imageConverted.pData = NULL;

	serialNumber = 0;

	act = 0;
}


PGRCamera::~PGRCamera(void)
{
	FlyCaptureError capError;
	
	stopGrabRecord();

	if ( started )
	{
		capError = flycaptureStop( context );
		checkCaptureError( capError, "flycaptureStop()" );
	}
	started = false;
	

	capError = flycaptureDestroyContext( context );
	checkCaptureError( capError, "flycaptureDestroyContext()" );

	if ( imageConverted.pData != NULL )
	{
		delete [] imageConverted.pData;
		imageConverted.pData = NULL; 
	}

	pgrcamguiDestroyContext( guiContext );

	recording = false;
}


bool PGRCamera::checkCaptureError( FlyCaptureError error, std::string message )
{
	if( error != FLYCAPTURE_OK )
	{
		std::string textError = message;
		textError = textError + flycaptureErrorToString( error );
		PGR_ERROR_MESSAGE( textError.c_str() );
		return false;
	}
	return true;
}


bool PGRCamera::checkGuiError( CameraGUIError error, std::string message )
{
	if( error != PGRCAMGUI_OK )
	{
		PGR_ERROR_MESSAGE( message.c_str() );
		return false;
	}
	return true;
}


bool PGRCamera::initCamera( unsigned long aSerialNumber, VideoManInputFormat *aFormat )
{	
	FlyCaptureError capError;
	CameraGUIError guiError;

	capError = flycaptureCreateContext( &context );
	if ( !checkCaptureError( capError, "flycaptureCreateContext()" ) )	
		return false;

	guiError = pgrcamguiCreateContext( &guiContext );	
	if ( !checkGuiError( guiError, "pgrcamguiCreateContext() Error creating GUI context." ) )
		return false;

	format = *aFormat;

	serialNumber = aSerialNumber;
	// Show the camera selection dialog.		
	if ( aFormat->showDlg )
	{
		int		iDialogStatus;
		//The user must select the camera
		guiError = ::pgrcamguiShowCameraSelectionModal(	guiContext, context, &serialNumber,	&iDialogStatus );
		if ( !checkGuiError( guiError, "pgrcamguiShowCameraSelectionModal() Error showing camera selection dialog." ) || serialNumber == 0 )
			return false;
	}
	
	//Check the bus index
	FlyCaptureInfoEx  arInfo[ 32 ];
	unsigned int	     uiSize = 32;
	FlyCaptureError error = flycaptureBusEnumerateCamerasEx( arInfo, &uiSize );
	if ( !checkCaptureError( error, "flycaptureBusEnumerateCamerasEx()" ) )	
		return false;
	if ( uiSize == 0 )
		return false;
	uiBusIndex = 0;
	bool found = false;
	while ( uiBusIndex < uiSize && !found)
	{
		FlyCaptureInfoEx* pinfo = &arInfo[ uiBusIndex ];
		if ( pinfo->SerialNumber == serialNumber )
		{
			found = true;
		}
		uiBusIndex++;
	}

	//Take the first camera of the bus
    if ( !found )
	{
		uiBusIndex = 0;
		FlyCaptureInfoEx* pinfo = &arInfo[ uiBusIndex ];
		serialNumber = pinfo->SerialNumber;
	}	
	else
		uiBusIndex--;

	/*capError = flycaptureInitializeFromSerialNumber( context, serialNumber );
	if ( !checkCaptureError( capError, "flycaptureInitializeFromSerialNumber()" ) )
		return false;*/
	//serialNumber = aSerialNumber;
	/*initBuffers( *aFormat ); //

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -