LadybugCamera.cpp
Go to the documentation of this file.
00001 /*
00002  * LadybugCamera.cpp
00003  *
00004  *  Created on: Sep 2, 2010
00005  *      Author: petrito1@cmp.felk.cvut.cz
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: // JPEG-compressed
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: // JPEG-compressed
00075     imageWidth = MONO_WIDTH;
00076     imageHeight = MONO_HEIGHT;
00077     numImages = MONO_NUM_IMAGES;
00078     break;
00079   case DC1394_VIDEO_MODE_FORMAT7_3: // JPEG-compressed
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   // TODO: Reduce ROI to contain valid images.
00122 //  int imageHeight = 1232;
00123 //  int frameHeight = getNumSelectedImages() * imageHeight;
00124 //  Camera::setFormat7Roi(DC1394_VIDEO_MODE_FORMAT7_0, DC1394_COLOR_CODING_RAW8, 9792, 0, 0, 1616, frameHeight);
00125 
00126   unlockCapture();
00127 }
00128 bool LadybugCamera::areImagesSelected(uint32_t images) {
00129   //  return (getSelectedImages() & images) == images;
00130   return (selectedImages & images) == images;
00131 }
00132 int LadybugCamera::getNumSelectedImages() {
00133   // TODO: Fix for mono images.
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 }
 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