//======================================================================================
// implimetation of functions for IEEE1394 camera (for Point Gray Inc.)
//======================================================================================
// initialize camera
bool IEEE1394Cam::Opens() {
#ifdef WIN32
	FlyCaptureError fe;

	// Open the camera
	fe = flycaptureCreateContext( &_flycapture );
	if (fe != FLYCAPTURE_OK) {
		return false;
	}

	// Initialize the WebIEEE1394Cam context
	fe = flycaptureInitialize( _flycapture, 0 );
	if (fe != FLYCAPTURE_OK) {
		return false;
	}

	// Get camera information
	fe = flycaptureGetCameraInfo( _flycapture, &_pInfo );
	if (fe != FLYCAPTURE_OK) {
		return false;
	}

	// set video mode
	_videoMode = FLYCAPTURE_VIDEOMODE_ANY;

	if ( _pInfo.CameraModel == FLYCAPTURE_BUMBLEBEE2 || _pInfo.CameraModel == FLYCAPTURE_FLEA2 || _pInfo.CameraModel == FLYCAPTURE_FLEA ) {
		// start transfering the image from camera
		if (!_use_stereo) {
			// flea, flea2
			fe = flycaptureStart( _flycapture, _videoMode, FLYCAPTURE_FRAMERATE_ANY);
		} else {
			// bumblebee2
			fe = flycaptureStartCustomImage( _flycapture, 3, 0, 0, 640, 480, 100, FLYCAPTURE_RAW16);
		}
		
		if (fe != FLYCAPTURE_OK) {
			return false;
		}
	} else {
		// camera is not supported by this class
		return false;
	}

	FlyCaptureImage flycaptureImage;
	// Grab an image from the camera
	fe = flycaptureGrabImage2( _flycapture, &flycaptureImage );
	if (fe != FLYCAPTURE_OK) {
		return false;
	}
	
	_height = flycaptureImage.iRows;
	_width = flycaptureImage.iCols;
	_row_size =	flycaptureImage.iRowInc;

	_activated = true;
	return true;
#else
	return false;
#endif //WIN32
}
//=============================================================================
// Main Program
//=============================================================================
int 
main(  )
{
   FlyCaptureContext context;
   FlyCaptureImage fwImage;
   FlyCaptureError error;
   // Create the context.
   error = flycaptureCreateContext( &context );
   _HANDLE_ERROR(error, "flycaptureCreateContext()"  );
   configureExternalTriggerCamera(context);
   //
   // Start camera.  This is done after setting the trigger so that
   // excess images isochronously streamed from the camera don't fill up 
   // the internal buffers.
   //
   //printf( "Starting camera.\n" );
   int width=400;
   int height=300;
   // error = flycaptureStartCustomImage(context,0, (1024-width)/2,(1024-height)/2, width,height,100,FlyCapturePixelFormat::FLYCAPTURE_MONO8 );
	
  error = flycaptureStart( 
      context, 
      FLYCAPTURE_VIDEOMODE_ANY,
      FLYCAPTURE_FRAMERATE_ANY );
   _HANDLE_ERROR(error, "flycaptureStart()" );

   //
   // Set the grab timeout so that calls to flycaptureGrabImage2 will return 
   // after TIMEOUT milliseconds if the trigger hasn't fired.
   //
   error = flycaptureSetGrabTimeoutEx( context, TIMEOUT );
   _HANDLE_ERROR(error, "flycaptureSetGrabTimeoutEx()" );

   printf( "This program will quit after %d images are grabbed.\n", IMAGES );

   for( int iImage = 0; iImage < IMAGES; iImage++ )
   {

#ifdef SOFTWARE_TRIGGER_CAMERA

#ifdef USE_SOFT_ASYNC_TRIGGER
      //
      // Check that the camera actually supports the PGR SOFT_ASYNC_TRIGGER
      // method of software triggering
      //
      error = checkSoftwareTriggerPresence( context, SOFT_ASYNC_TRIGGER );
      if( error == FLYCAPTURE_OK )
      {
         checkTriggerReady( context );
         
         //
         // Camera is now ready to be triggered, so generate software trigger
         // by writing a '0' to bit 31
         //
         printf( "Press the Enter key to initiate a software trigger.\n" );
         getchar();
         error = flycaptureSetCameraRegister( 
            context, SOFT_ASYNC_TRIGGER, 0x80000000 );
         _HANDLE_ERROR( "flycaptureSetCameraRegister()", error );
      }
      else
      {
         printf( "SOFT_ASYNC_TRIGGER not implemented! Grab will timeout.\n" );
      }
#else
      //
      // Check that the camera actually supports the DCAM SOFTWARE_TRIGGER
      // method of software triggering    
      //
      error = checkSoftwareTriggerPresence( context, SOFTWARE_TRIGGER );
      if( error == FLYCAPTURE_OK )
      {
         error = checkTriggerReady( context );
         
         //
         // Camera is now ready to be triggered, so generate software trigger
         // by writing a '1' to bit 0
         //
         printf( "Press the Enter key to initiate a software trigger.\n" );
         getchar();
         error = flycaptureSetCameraRegister( 
            context, SOFTWARE_TRIGGER, 0x80000000 );
         _HANDLE_ERROR( "flycaptureSetCameraRegister()", error );
      }
      else
      {
         printf( "SOFTWARE_TRIGGER not implemented! Grab will timeout.\n" );
      }
#endif

#endif
      //
      // Do an image grab.  This call will block until the camera
      // is externally triggered.
      //
      error = flycaptureGrabImage2( context, &fwImage );
      if( error == FLYCAPTURE_TIMEOUT )
      {
     printf( "Grab #%d timed out after %d milliseconds.\n", iImage, TIMEOUT );
      }
      else if( error != FLYCAPTURE_OK )
      {
     _HANDLE_ERROR(error, "flycaptureGrabImage2()" );
      }      
      else
      {     
		  if(iImage%60==0)printf( "Grab %d !\n", iImage );     
      }
   }   

   //
   // Stop the camera and destroy the context.
   //
   flycaptureStop( context );
   flycaptureDestroyContext( context );

   printf( "Done!  (hit enter)" );
   getchar();

   return 0;
}
void configureExternalTriggerCamera(FlyCaptureContext  context){
	FlyCaptureError    error;
   FlyCaptureImage      image;

   //printf( "Initializing camera.\n" );

      
   //
   // Initialize the first camera on the bus.
   //
   error = flycaptureInitialize( context, 0 );
   _HANDLE_ERROR(error, "flycaptureInitialize()" );

  /* //
   // Reset the camera to default factory settings by asserting bit 0
   //
   error = flycaptureSetCameraRegister( context, INITIALIZE, 0x80000000 );
   _HANDLE_ERROR(error, "flycaptureSetCameraRegister()" );*/

   //
   // Power-up the camera (for cameras that support this feature)
   //
   error = flycaptureSetCameraRegister( context, CAMERA_POWER, 0x80000000 );
   _HANDLE_ERROR(error, "flycaptureSetCameraRegister()" );

   //
   // Determine whether or not the camera supports external trigger mode.
   // If it does, put the camera into external trigger mode and otherwise 
   // exit.
   //
   bool bTriggerPresent;

   error = flycaptureQueryTrigger( 
      context, &bTriggerPresent, NULL, NULL, NULL, NULL, NULL, NULL, NULL );
   _HANDLE_ERROR(error, "flycaptureQueryTrigger()" );

   if( !bTriggerPresent)
   {
      printf("This camera does not support external trigger... exiting\n");
   }

   int   iPolarity;
   int   iSource;
   int   iRawValue;
   int   iMode;

   error = flycaptureGetTrigger( 
      context, NULL, &iPolarity, &iSource, &iRawValue, &iMode, NULL );
   _HANDLE_ERROR(error, "flycaptureGetTrigger()" );

   //printf( "Going into asynchronous Trigger_Mode_0.\n" );
   //
   // Ensure the camera is in Trigger Mode 0 by explicitly setting it, 
   // as the camera could have a different default trigger mode
   //
#ifdef SOFTWARE_TRIGGER_CAMERA
   //
   // We are triggering the camera using the internal software trigger.
   // If we are using the DCAM SOFTWARE_TRIGGER functionality, we must
   // change the Trigger_Source to reflect the Software Trigger ID = 7.
   //
   error = flycaptureSetTrigger( 
      context, true, iPolarity, 7, 0, 0 );
   _HANDLE_ERROR( "flycaptureSetCameraTrigger()", error );
#else
   //
   // We are triggering the camera using an external hardware trigger.
   //
   error = flycaptureSetTrigger( 
      context, true, iPolarity, iSource, 0, 0 );
   _HANDLE_ERROR(error, "flycaptureSetCameraTrigger()" );

#endif

   // 
   // Poll the camera to make sure the camera is actually in trigger mode
   // before we start it (avoids timeouts due to the trigger not being armed)
   //
   checkTriggerReady( context );

   //
   // Start the camera and grab any excess images that are already in the pipe.
   // Although it is extremely rare for spurious images to occur, it is
   // possible for the grab call to return an image that is not a result of a
   // user-generated trigger. To grab excess images, set a zero-length timeout.
   // A value of zero makes the grab call non-blocking.
   //
   //printf( "Checking for any buffered images..." );
   error = flycaptureSetGrabTimeoutEx( context, 0 );
   _HANDLE_ERROR(error, "flycaptureSetGrabTimeoutEx()" );
      
   error = flycaptureStart(
      context, FLYCAPTURE_VIDEOMODE_ANY, FLYCAPTURE_FRAMERATE_ANY );
   _HANDLE_ERROR(error, "flycaptureStart()" );

   //
   // Grab the image immediately whether or not trigger present
   //
   error = flycaptureGrabImage2( context, &image );
   if( error == FLYCAPTURE_OK )
   {
      ;//printf( "buffered image found. Flush successful.\n" );
   }
   else if( error == FLYCAPTURE_TIMEOUT )
   {
      ;//printf( "no flush required! (normal behaviour)\n" );
   }
   else
   {
      _HANDLE_ERROR(error, "flycaptureGrabImage2()" );
   }

   error = flycaptureStop( context );
   _HANDLE_ERROR(error, "flycaptureStop()" );

}
Exemple #4
0
//=============================================================================
// Main Program
//=============================================================================
int 
main( int /* argc */, char* /* argv[] */ )
{
   FlyCaptureError	error;
   FlyCaptureContext	context;
   FlyCaptureImage      image;

   printf( "Initializing camera.\n" );

   //
   // Create the context.
   //
   error = flycaptureCreateContext( &context );
   HANDLE_ERROR( "flycaptureCreateContext()", error );
      
   //
   // Initialize the first camera on the bus.
   //
   error = flycaptureInitialize( context, 0 );
   HANDLE_ERROR( "flycaptureInitialize()", error );

   //
   // Reset the camera to default factory settings by asserting bit 0
   //
   error = flycaptureSetCameraRegister( context, INITIALIZE, 0x80000000 );
   HANDLE_ERROR( "flycaptureSetCameraRegister()", error );

   //
   // Power-up the camera (for cameras that support this feature)
   //
   error = flycaptureSetCameraRegister( context, CAMERA_POWER, 0x80000000 );
   HANDLE_ERROR( "flycaptureSetCameraRegister()", error );

   //
   // Determine whether or not the camera supports external trigger mode.
   // If it does, put the camera into external trigger mode and otherwise 
   // exit.
   //
   bool bTriggerPresent;

   error = flycaptureQueryTrigger( 
      context, &bTriggerPresent, NULL, NULL, NULL, NULL, NULL, NULL, NULL );
   HANDLE_ERROR( "flycaptureQueryTrigger()", error );

   if( !bTriggerPresent)
   {
      printf("This camera does not support external trigger... exiting\n");
      return 1;
   }

   int   iPolarity;
   int   iSource;
   int   iRawValue;
   int   iMode;

   error = flycaptureGetTrigger( 
      context, NULL, &iPolarity, &iSource, &iRawValue, &iMode, NULL );
   HANDLE_ERROR( "flycaptureGetTrigger()", error );

   printf( "Going into asynchronous Trigger_Mode_0.\n" );
   //
   // Ensure the camera is in Trigger Mode 0 by explicitly setting it, 
   // as the camera could have a different default trigger mode
   //
#ifdef SOFTWARE_TRIGGER_CAMERA
   //
   // We are triggering the camera using the internal software trigger.
   // If we are using the DCAM SOFTWARE_TRIGGER functionality, we must
   // change the Trigger_Source to reflect the Software Trigger ID = 7.
   //
   error = flycaptureSetTrigger( 
      context, true, iPolarity, 7, 0, 0 );
   HANDLE_ERROR( "flycaptureSetCameraTrigger()", error );
#else
   //
   // We are triggering the camera using an external hardware trigger.
   //
   error = flycaptureSetTrigger( 
      context, true, iPolarity, iSource, 0, 0 );
   HANDLE_ERROR( "flycaptureSetCameraTrigger()", error );

#endif

   // 
   // Poll the camera to make sure the camera is actually in trigger mode
   // before we start it (avoids timeouts due to the trigger not being armed)
   //
   checkTriggerReady( context );

   //
   // Start the camera and grab any excess images that are already in the pipe.
   // Although it is extremely rare for spurious images to occur, it is
   // possible for the grab call to return an image that is not a result of a
   // user-generated trigger. To grab excess images, set a zero-length timeout.
   // A value of zero makes the grab call non-blocking.
   //
   printf( "Checking for any buffered images..." );
   error = flycaptureSetGrabTimeoutEx( context, 0 );
   HANDLE_ERROR( "flycaptureSetGrabTimeoutEx()", error );
      
   error = flycaptureStart(
      context, FLYCAPTURE_VIDEOMODE_ANY, FLYCAPTURE_FRAMERATE_ANY );
   HANDLE_ERROR( "flycaptureStart()", error );

   //
   // Grab the image immediately whether or not trigger present
   //
   error = flycaptureGrabImage2( context, &image );
   if( error == FLYCAPTURE_OK )
   {
      printf( "buffered image found. Flush successful.\n" );
   }
   else if( error == FLYCAPTURE_TIMEOUT )
   {
      printf( "no flush required! (normal behaviour)\n" );
   }
   else
   {
      HANDLE_ERROR( "flycaptureGrabImage2()", error );
   }

   error = flycaptureStop( context );
   HANDLE_ERROR( "flycaptureStop()", error );

   //
   // Start camera.  This is done after setting the trigger so that
   // excess images isochronously streamed from the camera don't fill up 
   // the internal buffers.
   //
   printf( "Starting camera.\n" );
   error = flycaptureStart( 
      context, 
      FLYCAPTURE_VIDEOMODE_ANY,
      FLYCAPTURE_FRAMERATE_ANY );
   HANDLE_ERROR( "flycaptureStart()", error );

   //
   // Set the grab timeout so that calls to flycaptureGrabImage2 will return 
   // after TIMEOUT milliseconds if the trigger hasn't fired.
   //
   error = flycaptureSetGrabTimeoutEx( context, TIMEOUT );
   HANDLE_ERROR( "flycaptureSetGrabTimeoutEx()", error );

   printf( "This program will quit after %d images are grabbed.\n", IMAGES );

#ifndef SOFTWARE_TRIGGER_CAMERA
   printf( "Trigger the camera by sending a trigger pulse to GPIO%d.\n", 
      iSource );
#endif

   for( int iImage = 0; iImage < IMAGES; iImage++ )
   {

#ifdef SOFTWARE_TRIGGER_CAMERA

#ifdef USE_SOFT_ASYNC_TRIGGER
      //
      // Check that the camera actually supports the PGR SOFT_ASYNC_TRIGGER
      // method of software triggering
      //
      error = checkSoftwareTriggerPresence( context, SOFT_ASYNC_TRIGGER );
      if( error == FLYCAPTURE_OK )
      {
         checkTriggerReady( context );
         
         //
         // Camera is now ready to be triggered, so generate software trigger
         // by writing a '0' to bit 31
         //
         printf( "Press the Enter key to initiate a software trigger.\n" );
         getchar();
         error = flycaptureSetCameraRegister( 
            context, SOFT_ASYNC_TRIGGER, 0x80000000 );
         HANDLE_ERROR( "flycaptureSetCameraRegister()", error );
      }
      else
      {
         printf( "SOFT_ASYNC_TRIGGER not implemented! Grab will timeout.\n" );
      }
#else
      //
      // Check that the camera actually supports the DCAM SOFTWARE_TRIGGER
      // method of software triggering    
      //
      error = checkSoftwareTriggerPresence( context, SOFTWARE_TRIGGER );
      if( error == FLYCAPTURE_OK )
      {
         error = checkTriggerReady( context );
         
         //
         // Camera is now ready to be triggered, so generate software trigger
         // by writing a '1' to bit 0
         //
         printf( "Press the Enter key to initiate a software trigger.\n" );
         getchar();
         error = flycaptureSetCameraRegister( 
            context, SOFTWARE_TRIGGER, 0x80000000 );
         HANDLE_ERROR( "flycaptureSetCameraRegister()", error );
      }
      else
      {
         printf( "SOFTWARE_TRIGGER not implemented! Grab will timeout.\n" );
      }
#endif

#endif
      //
      // Do an image grab.  This call will block until the camera
      // is externally triggered.
      //
      error = flycaptureGrabImage2( context, &image );
      if( error == FLYCAPTURE_TIMEOUT )
      {
	 printf( "Grab #%d timed out after %d milliseconds.\n", iImage, TIMEOUT );
      }
      else if( error != FLYCAPTURE_OK )
      {
	 HANDLE_ERROR( "flycaptureGrabImage2()", error );
      }      
      else
      {
	 printf( "Grab %d successful!\n", iImage );	 
      }
   }   

   //
   // Stop the camera and destroy the context.
   //
   flycaptureStop( context );
   flycaptureDestroyContext( context );

   printf( "Done!  (hit enter)" );
   getchar();

   return 0;
}
Exemple #5
0
void ofxffmv::initFFMV(int wid,int hei, int rate,int startX,int startY )
{
	//camNum= 1;
	/*
    for(int i=0;i<camNum;i++)
    {
	*/
		std::cout <<"initFFMV.Camera:" << fcCameraID << std::endl ;
    //
	// Create the context. This call must be made before any other calls to
	// to the context are made, as a valid context is needed for all
	// camera-specific FlyCapture library calls. This call sets the context
	// to the default settings, but flycaptureInitialize() must be called
	// below to fully initialize the camera for use.
	flycaptureCreateContext( &context[0] );
	printf("initFFMV.A\n");
	//
	// Initialize the camera. This call initializes one of the cameras on the
	// bus with the FlyCaptureContext that is passed in. This should generally
	// be called right after creating the context but before doing anything
	// else.
	//
	// This call performs several functions. It sets the camera to communicate
	// at the proper bus speed, turns on color processing (if available) and
	// sets the Bayer orientation to the correct setting. Finally, it also
	// initializes the white balance tables for cameras that support that
	// function.
	//
	//flycaptureInitialize( context[i], i );
	flycaptureInitialize( context[0], fcCameraID );
	printf("VinitFFMV.B\n");



	//now we load the camera settings from the Memory Channel. With this we could manage the settings in the flycap.exe and save the data into the channel for later use

	unsigned int puiCurrentChannel;
	unsigned int puiNumChannels;

	//flycaptureGetMemoryChannel(FlyCaptureContext  context,unsigned int*     puiCurrentChannel,unsigned int*     puiNumChannels )
	flycaptureGetMemoryChannel(context[0], &puiCurrentChannel, &puiNumChannels );
	std::cout <<"puiCurrentChannel:"<<puiCurrentChannel<<"| puiNumChannels:"<<puiNumChannels << std::endl;

		//flycaptureRestoreFromMemoryChannel(FlyCaptureContext  context,unsigned long     ulChannel );
	if(fcMemoryChannel != NULL && fcMemoryChannel <= puiNumChannels){
		std::cout <<"Using XML Data for Memory Channel:"<<fcMemoryChannel << std::endl;
		flycaptureRestoreFromMemoryChannel(context[0],fcMemoryChannel);
	}else if (puiCurrentChannel != NULL) {
		std::cout <<"Using puiCurrentChannel Data for Memory Channel:"<<puiCurrentChannel << std::endl;
		flycaptureRestoreFromMemoryChannel(context[0],puiCurrentChannel);
	}
//-----------------------------------

	//
	// Start grabbing images in the current videomode and framerate. Driver
	// level image buffer allocation is performed at this point. After this
	// point, images will be constantly grabbed by the camera and stored
	// in the buffers on the PC.
	/*
	if(wid==640)
	flycaptureStartCustomImage(context[i],0,startX,startY,640,480,100,FLYCAPTURE_MONO8);
	else if(wid==320)
	flycaptureStartCustomImage(context[i],1,startX,startY,320,240,100,FLYCAPTURE_MONO8);
	flycaptureGrabImage2( context[i], &fcImage[i] );
	*/

	//http://nuigroup.com/forums/viewthread/6643/#42007

	FlyCaptureVideoMode videoMode;
    switch(wid)
    {
        case 640:
            videoMode = FLYCAPTURE_VIDEOMODE_640x480Y8;
            break;
        case 800:
            videoMode = FLYCAPTURE_VIDEOMODE_800x600Y8;
            break;
        case 1024:
            videoMode = FLYCAPTURE_VIDEOMODE_1024x768Y8;
            break;
        case 1280:
            videoMode = FLYCAPTURE_VIDEOMODE_1280x960Y8;
            break;
        case 1600:
            videoMode = FLYCAPTURE_VIDEOMODE_1600x1200Y8;
            break;
        default:
            videoMode = FLYCAPTURE_VIDEOMODE_640x480Y8;
    }

    FlyCaptureFrameRate frameRate;
    switch(rate)
    {
        case 15:
            frameRate = FLYCAPTURE_FRAMERATE_15;
            break;
        case 30:
            frameRate = FLYCAPTURE_FRAMERATE_30;
            break;
        case 60:
            frameRate = FLYCAPTURE_FRAMERATE_60;
            break;
        case 120:
            frameRate = FLYCAPTURE_FRAMERATE_120;
            break;
        case 240:
            frameRate = FLYCAPTURE_FRAMERATE_240;
            break;
        default:
            frameRate = FLYCAPTURE_FRAMERATE_30;
    }

    bool result;
    flycaptureCheckVideoMode(context[0], videoMode, frameRate, &result);
	printf("VinitFFMV.C\n");
    if(result)
    {
        flycaptureStart(context[0], videoMode, frameRate);
		printf("VinitFFMV.D\n");
       // flycaptureGrabImage2(context[i], &fcImage[i] );
		printf("VinitFFMV.E\n");
    }
    else printf("Video mode not supported\n");

	flycaptureGrabImage2( context[0], &fcImage[0] );//Für getWidth()/Hight()
	//camWidth=fcImage.iCols;
	//camHeight=fcImage.iRows;
   // }//end of for loop
	printf("VinitFFMV.F\n");
}