Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #include "CameraContext.h"
00009
00010 #include <dc1394/dc1394.h>
00011
00012 #include "CameraException.h"
00013
00014
00015
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
00068
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 }