int RunCamera( PGRGuid guid ) { const int k_numImages = 200; Error error; Camera cam; // Connect to a camera error = cam.Connect(&guid); if (error != PGRERROR_OK) { PrintError( error ); return -1; } // Get the camera information CameraInfo camInfo; error = cam.GetCameraInfo(&camInfo); if (error != PGRERROR_OK) { PrintError( error ); return -1; } PrintCameraInfo(&camInfo); // Start capturing images printf( "Start capturing... \n" ); error = cam.StartCapture(); if (error != PGRERROR_OK) { PrintError( error ); return -1; } AVIRecorder aviRecorder; char AVIFileName[512]; sprintf( AVIFileName, "AviTest%u.avi", camInfo.serialNumber ); AVIOption option; // Check if the camera supports the FRAME_RATE property PropertyInfo propInfo; propInfo.type = FRAME_RATE; error = cam.GetPropertyInfo( &propInfo ); if (error != PGRERROR_OK) { PrintError( error ); return -1; } if ( propInfo.present == true ) { // Get the frame rate Property prop; prop.type = FRAME_RATE; error = cam.GetProperty( &prop ); if (error != PGRERROR_OK) { PrintError( error ); return -1; } // Set the frame rate. // Note that the actual recording frame rate may be slower, // depending on the bus speed and disk writing speed. option.frameRate = prop.absValue; } else { // Frame rate property does not appear to be supported. // Set to a proper value, 15.0fps for example. option.frameRate = 15.0; } // Open the AVI file for appending images error = aviRecorder.AVIOpen(AVIFileName, &option ); if (error != PGRERROR_OK) { PrintError( error ); return -1; } Image rawImage; printf( "Grab %d images and Save as AVI file: %s ... \n", k_numImages, AVIFileName ); for ( int imageCnt=0; imageCnt < k_numImages; imageCnt++ ) { // Retrieve an image error = cam.RetrieveBuffer( &rawImage ); if (error != PGRERROR_OK) { PrintError( error ); continue; } // Append the image to AVI file error = aviRecorder.AVIAppend( &rawImage ); if (error != PGRERROR_OK) { PrintError( error ); return -1; } printf( "Grabbed and appended image %d\n", imageCnt ); } // Close the AVI file error = aviRecorder.AVIClose( ); if (error != PGRERROR_OK) { PrintError( error ); return -1; } // Stop capturing images error = cam.StopCapture(); if (error != PGRERROR_OK) { PrintError( error ); return -1; } // Disconnect the camera error = cam.Disconnect(); if (error != PGRERROR_OK) { PrintError( error ); return -1; } return 0; }
void SaveAviHelper( AviType aviType, std::vector<Image>& vecImages, std::string aviFileName, float frameRate) { Error error; AVIRecorder aviRecorder; // Open the AVI file for appending images switch (aviType) { case UNCOMPRESSED: { AVIOption option; option.frameRate = frameRate; error = aviRecorder.AVIOpen(aviFileName.c_str(), &option); } break; case MJPG: { MJPGOption option; option.frameRate = frameRate; option.quality = 75; error = aviRecorder.AVIOpen(aviFileName.c_str(), &option); } break; case H264: { H264Option option; option.frameRate = frameRate; option.bitrate = 1000000; option.height = vecImages[0].GetRows(); option.width = vecImages[0].GetCols(); error = aviRecorder.AVIOpen(aviFileName.c_str(), &option); } break; } if (error != PGRERROR_OK) { PrintError(error); return; } cout << endl; cout << "Appending " << vecImages.size() << " images to AVI file: " << aviFileName.c_str() << endl; for (int imageCnt = 0; imageCnt < vecImages.size(); imageCnt++) { // Append the image to AVI file error = aviRecorder.AVIAppend(&vecImages[imageCnt]); if (error != PGRERROR_OK) { PrintError(error); continue; } cout << "Appended image " << imageCnt << "..." << endl; } // Close the AVI file error = aviRecorder.AVIClose( ); if (error != PGRERROR_OK) { PrintError(error); return; } }