Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #include "LadybugCamera.h"
00009
00010 using nifti::dc1394::Camera;
00011
00012 namespace nifti {
00013 namespace dc1394 {
00014
00015 const uint64_t LadybugCamera::IMAGE_SELECTION_REGISTER = 0x1E88;
00016 const uint32_t LadybugCamera::ALL_CAMERAS = 0xffffff;
00017 const uint32_t LadybugCamera::CAMERA_0 = 0xf00000;
00018 const uint32_t LadybugCamera::CAMERA_1 = 0x0f0000;
00019 const uint32_t LadybugCamera::CAMERA_2 = 0x00f000;
00020 const uint32_t LadybugCamera::CAMERA_3 = 0x000f00;
00021 const uint32_t LadybugCamera::CAMERA_4 = 0x0000f0;
00022 const uint32_t LadybugCamera::CAMERA_5 = 0x00000f;
00023 const uint32_t LadybugCamera::CAMERA_0_BAYER_CHANNEL_0 = 0x800000;
00024 const uint32_t LadybugCamera::CAMERA_0_BAYER_CHANNEL_1 = 0x400000;
00025 const uint32_t LadybugCamera::CAMERA_0_BAYER_CHANNEL_2 = 0x200000;
00026 const uint32_t LadybugCamera::CAMERA_0_BAYER_CHANNEL_3 = 0x100000;
00027 const uint32_t LadybugCamera::CAMERA_1_BAYER_CHANNEL_0 = 0x080000;
00028 const uint32_t LadybugCamera::CAMERA_1_BAYER_CHANNEL_1 = 0x040000;
00029 const uint32_t LadybugCamera::CAMERA_1_BAYER_CHANNEL_2 = 0x020000;
00030 const uint32_t LadybugCamera::CAMERA_1_BAYER_CHANNEL_3 = 0x010000;
00031 const uint32_t LadybugCamera::CAMERA_2_BAYER_CHANNEL_0 = 0x008000;
00032 const uint32_t LadybugCamera::CAMERA_2_BAYER_CHANNEL_1 = 0x004000;
00033 const uint32_t LadybugCamera::CAMERA_2_BAYER_CHANNEL_2 = 0x002000;
00034 const uint32_t LadybugCamera::CAMERA_2_BAYER_CHANNEL_3 = 0x001000;
00035 const uint32_t LadybugCamera::CAMERA_3_BAYER_CHANNEL_0 = 0x000800;
00036 const uint32_t LadybugCamera::CAMERA_3_BAYER_CHANNEL_1 = 0x000400;
00037 const uint32_t LadybugCamera::CAMERA_3_BAYER_CHANNEL_2 = 0x000200;
00038 const uint32_t LadybugCamera::CAMERA_3_BAYER_CHANNEL_3 = 0x000100;
00039 const uint32_t LadybugCamera::CAMERA_4_BAYER_CHANNEL_0 = 0x000080;
00040 const uint32_t LadybugCamera::CAMERA_4_BAYER_CHANNEL_1 = 0x000040;
00041 const uint32_t LadybugCamera::CAMERA_4_BAYER_CHANNEL_2 = 0x000020;
00042 const uint32_t LadybugCamera::CAMERA_4_BAYER_CHANNEL_3 = 0x000010;
00043 const uint32_t LadybugCamera::CAMERA_5_BAYER_CHANNEL_0 = 0x000008;
00044 const uint32_t LadybugCamera::CAMERA_5_BAYER_CHANNEL_1 = 0x000004;
00045 const uint32_t LadybugCamera::CAMERA_5_BAYER_CHANNEL_2 = 0x000002;
00046 const uint32_t LadybugCamera::CAMERA_5_BAYER_CHANNEL_3 = 0x000001;
00047
00048 const uint32_t LadybugCamera::CAMERAS[NUM_CAMERAS] = { 0xf00000, 0x0f0000, 0x00f000, 0x000f00, 0x0000f0, 0x00000f };
00049
00050 const int LadybugCamera::RAW_WIDTH = 1616;
00051 const int LadybugCamera::RAW_HEIGHT = 1232;
00052 const int LadybugCamera::RAW_HALF_HEIGHT = 616;
00053 const int LadybugCamera::RAW_NUM_IMAGES = 6;
00054 const int LadybugCamera::MONO_WIDTH = 808;
00055 const int LadybugCamera::MONO_HEIGHT = 616;
00056 const int LadybugCamera::MONO_HALF_HEIGHT = 308;
00057 const int LadybugCamera::MONO_NUM_IMAGES = 24;
00058
00059 void LadybugCamera::format7FrameInfo(const dc1394video_mode_t videoMode, int& frameWidth, int& frameHeight, int& imageWidth, int& imageHeight, int& numImages) {
00060 switch (videoMode) {
00061 case DC1394_VIDEO_MODE_FORMAT7_0:
00062 case DC1394_VIDEO_MODE_FORMAT7_6:
00063 default:
00064 imageWidth = RAW_WIDTH;
00065 imageHeight = RAW_HEIGHT;
00066 numImages = RAW_NUM_IMAGES;
00067 break;
00068 case DC1394_VIDEO_MODE_FORMAT7_2:
00069 imageWidth = RAW_WIDTH;
00070 imageHeight = RAW_HALF_HEIGHT;
00071 numImages = RAW_NUM_IMAGES;
00072 break;
00073 case DC1394_VIDEO_MODE_FORMAT7_1:
00074 case DC1394_VIDEO_MODE_FORMAT7_7:
00075 imageWidth = MONO_WIDTH;
00076 imageHeight = MONO_HEIGHT;
00077 numImages = MONO_NUM_IMAGES;
00078 break;
00079 case DC1394_VIDEO_MODE_FORMAT7_3:
00080 imageWidth = MONO_WIDTH;
00081 imageHeight = MONO_HALF_HEIGHT;
00082 numImages = MONO_NUM_IMAGES;
00083 break;
00084 }
00085
00086 frameWidth = imageWidth;
00087 frameHeight = imageHeight * numImages;
00088 }
00089
00090 LadybugCamera::LadybugCamera(dc1394camera_t* camera) :
00091 Camera(camera), selectedImages(LadybugCamera::ALL_CAMERAS) {
00092 }
00093
00094 LadybugCamera::LadybugCamera() :
00095 Camera(), selectedImages(LadybugCamera::ALL_CAMERAS) {
00096 }
00097
00098 LadybugCamera::~LadybugCamera() {
00099 }
00100
00101 void LadybugCamera::setFormat7Roi(dc1394video_mode_t videoMode, int32_t packetSize) {
00102 printf("LadybugCamera::setFormat7Roi(): video mode: %i, packet size: %i.\n",
00103 videoMode, packetSize);
00104
00105 int frameWidth, frameHeight, imageWidth, imageHeight, numImages;
00106 format7FrameInfo(videoMode, frameWidth, frameHeight, imageWidth, imageHeight, numImages);
00107
00108 Camera::setFormat7Roi(videoMode, DC1394_COLOR_CODING_RAW8, packetSize, 0, 0, frameWidth, frameHeight);
00109 }
00110
00111 uint32_t LadybugCamera::getSelectedImages() {
00112 selectedImages = getControlRegister(IMAGE_SELECTION_REGISTER) & ALL_CAMERAS;
00113 return selectedImages;
00114 }
00115 void LadybugCamera::setSelectedImages(uint32_t images) {
00116 lockCapture();
00117
00118 selectedImages = images;
00119 setControlRegister(IMAGE_SELECTION_REGISTER, selectedImages);
00120
00121
00122
00123
00124
00125
00126 unlockCapture();
00127 }
00128 bool LadybugCamera::areImagesSelected(uint32_t images) {
00129
00130 return (selectedImages & images) == images;
00131 }
00132 int LadybugCamera::getNumSelectedImages() {
00133
00134 int numImages = 0;
00135 for (int iCam = 0; iCam < NUM_CAMERAS; iCam++) {
00136 if (areImagesSelected(CAMERAS[iCam])) {
00137 numImages++;
00138 }
00139 }
00140 return numImages;
00141 }
00142
00143 }
00144 }