CameraContext.cpp
Go to the documentation of this file.
00001 /*
00002  * CameraContext.cpp
00003  *
00004  *  Created on: Jul 9, 2010
00005  *      Author: petrito1@cmp.felk.cvut.cz
00006  */
00007 
00008 #include "CameraContext.h"
00009 
00010 #include <dc1394/dc1394.h>
00011 
00012 #include "CameraException.h"
00013 
00014 // Point Grey Research Inc. Organizationally Unique Identifier
00015 //#define PGR_OUI 0x00B09D
00016 
00017 namespace nifti {
00018 namespace dc1394 {
00019 
00020 CameraContext::CameraContext() {
00021   printf("CameraContext::CameraContext()\n");
00022   context = dc1394_new();
00023   if (!context) {
00024     throw CameraException(DC1394_SUCCESS, "Failed to initialize camera context.");
00025   }
00026 }
00027 
00028 CameraContext::~CameraContext() {
00029   printf("CameraContext::~CameraContext()\n");
00030 
00031   std::vector<dc1394camera_t*>::iterator iter;
00032   for (iter = cameras.begin(); iter < cameras.end(); iter++) {
00033     dc1394_iso_release_all(*iter);
00034     printf("dc1394_camera_free %s %s...\n", (*iter)->vendor, (*iter)->model);
00035     dc1394_camera_free(*iter);
00036   }
00037   printf("dc1394_free...\n");
00038   dc1394_free(context);
00039 }
00040 
00041 Camera CameraContext::getCamera() {
00042   printf("getCamera\n");
00043 
00044   Camera camera(getDc1394Camera());
00045   return camera;
00046 }
00047 
00048 LadybugCamera CameraContext::getLadybugCamera(uint32_t serialNumber) {
00049   printf("getLadybugCamera\n");
00050 
00051   LadybugCamera ladybugCamera(getDc1394Camera(serialNumber));
00052   return ladybugCamera;
00053 }
00054 
00055 dc1394camera_t* CameraContext::getDc1394Camera(uint32_t serialNumber) {
00056 
00057   dc1394camera_list_t* list;
00058   dc1394error_t error;
00059   error = dc1394_camera_enumerate(context, &list);
00060   CAMERA_EXCEPTION(error, "Failed to enumerate cameras.");
00061 
00062   if (list->num == 0) {
00063     dc1394_camera_free_list(list);
00064     throw CameraException(DC1394_SUCCESS, "No cameras found.");
00065   }
00066 
00067   //unsigned long oui = (list->ids[0].guid >> 40) & 0xFFFFFFUL;
00068   //unsigned long ser = list->ids[0].guid & 0xFFFFFFFFUL;
00069   for (uint32_t iCamera = 0; iCamera < list->num; iCamera++) {
00070     if ((serialNumber == 0) || (list->ids[iCamera].guid & 0xFFFFFFFF) == serialNumber) {
00071       dc1394camera_t* camera = dc1394_camera_new(context, list->ids[0].guid);
00072       cameras.push_back(camera);
00073       printf("getDc1394Camera: %u %s %u %s\n", camera->vendor_id, camera->vendor, camera->model_id, camera->model);
00074       dc1394_camera_free_list(list);
00075       return camera;
00076     }
00077   }
00078 
00079   dc1394_camera_free_list(list);
00080   throw CameraException(DC1394_SUCCESS, "Camera not found.");
00081 }
00082 
00083 }
00084 }
 All Classes Namespaces Files Functions Variables Typedefs Defines


omnicamera
Author(s): Tomas Petricek / petrito1@cmp.felk.cvut.cz
autogenerated on Tue Dec 10 2013 14:26:53