Camera.cpp
Go to the documentation of this file.
00001 /*
00002  * Camera.cpp
00003  *
00004  *  Created on: Jul 9, 2010
00005  *      Author: petrito1@cmp.felk.cvut.cz
00006  */
00007 
00008 #include <opencv2/highgui/highgui.hpp>
00009 #include <opencv2/imgproc/imgproc.hpp>
00010 
00011 #include "Camera.h"
00012 #include "CameraException.h"
00013 
00014 namespace nifti {
00015 namespace dc1394 {
00016 
00017 Camera::Camera() :
00018   camera(NULL), bayerMethod(DC1394_BAYER_METHOD_HQLINEAR) {
00019   pthread_mutex_init(&captureMutex, NULL);
00020 }
00021 
00022 Camera::Camera(dc1394camera_t* camera) :
00023   camera(camera), bayerMethod(DC1394_BAYER_METHOD_HQLINEAR) {
00024   pthread_mutex_init(&captureMutex, NULL);
00025 }
00026 
00027 Camera::~Camera() {
00028   // Camera is freed by its associated context.
00029   unlockCapture();
00030 }
00031 
00032 void Camera::setup() {
00033   printf("Camera::setup()\n");
00034 
00035   setOperationMode(DC1394_OPERATION_MODE_1394B);
00036   setIsoSpeed(DC1394_ISO_SPEED_800);
00037   setVideoMode(DC1394_VIDEO_MODE_FORMAT7_0);
00038   setFormat7Roi(DC1394_VIDEO_MODE_FORMAT7_0, DC1394_COLOR_CODING_RAW8, 9792, 0, 0, 1616, 7392);
00039 }
00040 
00041 dc1394color_coding_t Camera::getFormat7ColorCoding() {
00042   dc1394color_coding_t colorCoding;
00043   dc1394error_t error;
00044   error = dc1394_format7_get_color_coding(camera, DC1394_VIDEO_MODE_FORMAT7_0, &colorCoding);
00045   CAMERA_EXCEPTION(error, "Could not get Format 7 color coding.");
00046   return colorCoding;
00047 }
00048 
00049 dc1394color_filter_t Camera::getFormat7ColorFilter() {
00050   dc1394color_filter_t colorFilter;
00051   dc1394error_t error;
00052   error = dc1394_format7_get_color_filter(camera, DC1394_VIDEO_MODE_FORMAT7_0, &colorFilter);
00053   CAMERA_EXCEPTION(error, "Could not get Format 7 color filter.");
00054   return colorFilter;
00055 }
00056 
00057 float Camera::getFormat7FrameInterval() {
00058   float frameInterval;
00059   dc1394error_t error;
00060   error = dc1394_format7_get_frame_interval(camera, DC1394_VIDEO_MODE_FORMAT7_0, &frameInterval);
00061   CAMERA_EXCEPTION(error, "Could not get Format 7 frame interval.");
00062   return frameInterval;
00063 }
00064 
00065 uint32_t Camera::getFormat7PacketsPerFrame() {
00066   uint32_t packetsPerFrame;
00067   dc1394error_t error;
00068   error = dc1394_format7_get_packets_per_frame(camera, DC1394_VIDEO_MODE_FORMAT7_0, &packetsPerFrame);
00069   CAMERA_EXCEPTION(error, "Could not get Format 7 packets per frame.");
00070   return packetsPerFrame;
00071 }
00072 
00073 uint32_t Camera::getFormat7PacketSize() {
00074   uint32_t packetSize;
00075   dc1394error_t error;
00076   error = dc1394_format7_get_packet_size(camera, DC1394_VIDEO_MODE_FORMAT7_0, &packetSize);
00077   CAMERA_EXCEPTION(error, "Could not get Format 7 packet size.");
00078   return packetSize;
00079 }
00080 
00081 uint32_t Camera::getFormat7RecommendedPacketSize() {
00082   uint32_t packetSize;
00083   dc1394error_t error;
00084   error = dc1394_format7_get_recommended_packet_size(camera, DC1394_VIDEO_MODE_FORMAT7_0, &packetSize);
00085   CAMERA_EXCEPTION(error, "Could not get Format 7 recommended packet size.");
00086   return packetSize;
00087 }
00088 
00089 dc1394operation_mode_t Camera::getOperationMode() {
00090   printf("Camera::getOperationMode()\n");
00091   dc1394operation_mode_t operationMode;
00092   dc1394error_t error;
00093   error = dc1394_video_get_operation_mode(camera, &operationMode);
00094   CAMERA_EXCEPTION(error, "Could not get operation mode.");
00095   printf("Camera::getOperationMode(): %i\n", operationMode);
00096   return operationMode;
00097 }
00098 
00099 void Camera::setOperationMode(dc1394operation_mode_t operationMode) {
00100   printf("Camera::setOperationMode(): %i\n", operationMode);
00101   dc1394error_t error;
00102   error = dc1394_video_set_operation_mode(camera, operationMode);
00103   CAMERA_EXCEPTION(error, "Could not set operation mode.");
00104 }
00105 
00106 dc1394speed_t Camera::getIsoSpeed() {
00107   printf("Camera::getIsoSpeed()\n");
00108   dc1394speed_t isoSpeed;
00109   dc1394error_t error;
00110   error = dc1394_video_get_iso_speed(camera, &isoSpeed);
00111   CAMERA_EXCEPTION(error, "Could not get ISO speed.");
00112   printf("Camera::getIsoSpeed(): %i\n", isoSpeed);
00113   return isoSpeed;
00114 }
00115 
00116 void Camera::setIsoSpeed(dc1394speed_t isoSpeed) {
00117   printf("Camera::setIsoSpeed(): %i\n", isoSpeed);
00118   dc1394error_t error;
00119   error = dc1394_video_set_iso_speed(camera, isoSpeed);
00120   CAMERA_EXCEPTION(error, "Could not set ISO speed.");
00121 }
00122 
00123 dc1394video_mode_t Camera::getVideoMode() {
00124   printf("Camera::getVideoMode()\n");
00125   dc1394video_mode_t videoMode;
00126   dc1394error_t error;
00127   error = dc1394_video_get_mode(camera, &videoMode);
00128   CAMERA_EXCEPTION(error, "Could not get video mode.");
00129   printf("Camera::getVideoMode(): %i\n", videoMode);
00130   return videoMode;
00131 }
00132 
00133 void Camera::setVideoMode(dc1394video_mode_t videoMode) {
00134   printf("Camera::setVideoMode(): %i\n", videoMode);
00135   dc1394error_t error;
00136   error = dc1394_video_set_mode(camera, videoMode);
00137   CAMERA_EXCEPTION(error, "Could not set video mode.");
00138 }
00139 
00140 void Camera::getFormat7Roi(dc1394video_mode_t videoMode, dc1394color_coding_t* colorCoding, uint32_t* packetSize,
00141     uint32_t* left, uint32_t* top, uint32_t* width, uint32_t* height) {
00142   printf("Camera::getFormat7Roi()\n");
00143   dc1394error_t error;
00144   error = dc1394_format7_get_roi(camera, videoMode, colorCoding, packetSize, left, top, width, height);
00145   CAMERA_EXCEPTION(error, "Could not get Format 7 ROI.");
00146   printf(
00147       "Camera::getFormat7Roi(): video mode: %i, color coding: %i, packet size: %i, left: %i, top: %i, width: %i, height: %i\n",
00148       videoMode, *colorCoding, *packetSize, *left, *top, *width, *height);
00149 }
00150 
00151 void Camera::setFormat7Roi(dc1394video_mode_t videoMode, dc1394color_coding_t colorCoding, int32_t packetSize,
00152     int32_t left, int32_t top, int32_t width, int32_t height) {
00153   printf(
00154       "Camera::setFormat7Roi(): video mode: %i, color coding: %i, packet size: %i, left: %i, top: %i, width: %i, height: %i\n",
00155       videoMode, colorCoding, packetSize, left, top, width, height);
00156   dc1394error_t error;
00157   error = dc1394_format7_set_roi(camera, videoMode, colorCoding, packetSize, left, top, width, height);
00158   CAMERA_EXCEPTION(error, "Could not set Format 7 ROI.");
00159 }
00160 
00161 void Camera::setupCapture() {
00162 
00163   printf("Camera::setupCapture()\n");
00164   dc1394error_t error;
00165   // TODO: Set up DMA buffer... 1-sized buffer is probably not good.
00166 //  error = dc1394_capture_setup(camera, 1, DC1394_CAPTURE_FLAGS_DEFAULT);
00167   error = dc1394_capture_setup(camera, 2, DC1394_CAPTURE_FLAGS_DEFAULT);
00168   CAMERA_EXCEPTION(error, "Could not setup capture.");
00169 }
00170 
00171 void Camera::stopCapture() {
00172 
00173   dc1394error_t error;
00174   error = dc1394_capture_stop(camera);
00175   CAMERA_EXCEPTION(error, "Could not stop capture.");
00176 }
00177 
00178 void Camera::startVideoTransmission() {
00179   printf("Camera::startVideoTransmission()\n");
00180   dc1394error_t error;
00181   error = dc1394_video_set_transmission(camera, DC1394_ON);
00182   CAMERA_EXCEPTION(error, "Could not start video transmission.");
00183 }
00184 
00185 void Camera::stopVideoTransmission() {
00186 
00187   dc1394error_t error;
00188   error = dc1394_video_set_transmission(camera, DC1394_OFF);
00189   CAMERA_EXCEPTION(error, "Could not stop video transmission");
00190 }
00191 
00192 void Camera::flushFrames() {
00193 
00194   lockCapture();
00195 
00196   dc1394video_frame_t* frame;
00197   dc1394error_t error;
00198 
00199   error = dc1394_capture_dequeue(camera, DC1394_CAPTURE_POLICY_POLL, &frame);
00200   CAMERA_EXCEPTION(error, "Capture dequeue failed while flushing frames.");
00201 
00202   while (frame) {
00203     error = dc1394_capture_enqueue(camera, frame);
00204     CAMERA_EXCEPTION(error, "Capture enqueue failed while flushing frames.");
00205     error = dc1394_capture_dequeue(camera, DC1394_CAPTURE_POLICY_POLL, &frame);
00206     CAMERA_EXCEPTION(error, "Capture dequeue failed while flushing frames.");
00207   }
00208 
00209   unlockCapture();
00210 }
00211 
00212 void Camera::dropFrames(int n) {
00213 
00214   lockCapture();
00215 
00216   dc1394video_frame_t* frame;
00217   dc1394error_t error;
00218 
00219   for (int i = 0; i < n; i++) {
00220     error = dc1394_capture_dequeue(camera, DC1394_CAPTURE_POLICY_WAIT, &frame);
00221     CAMERA_EXCEPTION(error, "Capture dequeue failed while dropping frames.");
00222     error = dc1394_capture_enqueue(camera, frame);
00223     CAMERA_EXCEPTION(error, "Capture enqueue failed while dropping frames.");
00224   }
00225 
00226   unlockCapture();
00227 }
00228 
00229 void Camera::startOneShot() {
00230 
00231   dc1394error_t error;
00232   error = dc1394_video_set_one_shot(camera, DC1394_ON);
00233   CAMERA_EXCEPTION(error, "Failed to start one shot video.");
00234 }
00235 
00236 void Camera::stopOneShot() {
00237 
00238   dc1394error_t error;
00239   error = dc1394_video_set_one_shot(camera, DC1394_OFF);
00240   CAMERA_EXCEPTION(error, "Failed to stop one shot video.");
00241 }
00242 
00243 void Camera::lockCapture() {
00244   pthread_mutex_lock(&captureMutex);
00245 }
00246 
00247 void Camera::unlockCapture() {
00248   pthread_mutex_unlock(&captureMutex);
00249 }
00250 
00251 dc1394video_frame_t* Camera::dequeueFrame(const dc1394capture_policy_t capturePolicy) {
00252 
00253   lockCapture();
00254   dc1394error_t error;
00255   dc1394video_frame_t* frame;
00256   error = dc1394_capture_dequeue(camera, capturePolicy, &frame);
00257   CAMERA_EXCEPTION(error, "Failed to dequeue frame.");
00258 
00259   dequeuedFrames.push(frame);
00260   unlockCapture();
00261 
00262   return frame;
00263 }
00264 
00265 bool Camera::isFrameCorrupt(dc1394video_frame_t* frame) {
00266   return dc1394_capture_is_frame_corrupt(camera, frame) == DC1394_TRUE;
00267 }
00268 
00269 void Camera::enqueueFrameLater(const dc1394video_frame_t* frame) {
00270 
00271   lockCapture();
00272   framesToEnqueue.insert(const_cast<dc1394video_frame_t*> (frame));
00273   unlockCapture();
00274 }
00275 
00276 void Camera::enqueueFrames() {
00277 
00278   lockCapture();
00279 
00280   // Enqueue all frames marked as ready, in the order of dequeuing.
00281   while (framesToEnqueue.find(dequeuedFrames.front()) != framesToEnqueue.end()) {
00282 
00283     dc1394error_t error;
00284     error = dc1394_capture_enqueue(camera, dequeuedFrames.front());
00285     CAMERA_EXCEPTION(error, "Failed to enqueue frame.");
00286 
00287     framesToEnqueue.erase(dequeuedFrames.front());
00288     dequeuedFrames.pop();
00289   }
00290 
00291   unlockCapture();
00292 }
00293 
00294 void Camera::debayerFrame(dc1394video_frame_t* in, dc1394video_frame_t* out) {
00295   // Init output frame with target settings.
00296   out->color_coding = DC1394_COLOR_CODING_RGB8;
00297   out->image = NULL;
00298   out->allocated_image_bytes = 0;
00299 
00300   dc1394error_t error;
00301   error = dc1394_debayer_frames(in, out, bayerMethod);
00302   if (error != DC1394_SUCCESS) {
00303     free(out->image);
00304   }
00305   CAMERA_EXCEPTION(error, "Could not debayer frames.");
00306 }
00307 
00308 void Camera::captureColorMat(cv::Mat& bgrMat,  uint64_t& timestamp, bool wait) {
00309   // Initialize an empty matrix for case of any errors
00310   // or when no frame is available.
00311   bgrMat.create(0, 0, CV_8UC3);
00312 
00313   dc1394capture_policy_t capturePolicy = wait ? DC1394_CAPTURE_POLICY_WAIT : DC1394_CAPTURE_POLICY_POLL;
00314   dc1394video_frame_t* capturedFrame = dequeueFrame(capturePolicy);
00315 
00316   // Return an empty image if no frame is captured.
00317   // This may happen for polling captures.
00318   if (!capturedFrame) {
00319     return;
00320   }
00321 
00322   // TODO: Move to LadybugCamera. JPEG compression for particular video mode is Ladybug-specific.
00323   // Decompress JPEG frames.
00324   // opencv example
00325   /*
00326   static bool
00327 mjpeg_to_rgb24 (int width, int height,
00328   unsigned char *src, int length,
00329   unsigned char *dst)
00330 {
00331 cv::Mat temp=cv::imdecode(cv::Mat(std::vector<uchar>(src, src + length)), 1);
00332 if( !temp.data || temp.cols != width || temp.rows != height )
00333   return false;
00334 memcpy(dst, temp.data, width*height*3);
00335 return true;
00336 }
00337   */
00338 //http://libdc1394-22.sourcearchive.com/documentation/2.0.2/ladybug_8c-source.html
00339   if (capturedFrame->video_mode == DC1394_VIDEO_MODE_FORMAT7_6) {
00340     cv::Mat decodedFrame(capturedFrame->size[1], capturedFrame->size[0], CV_8UC1);
00341 
00342     unsigned int jpgadr, jpgsize, adr;
00343     for (int cam = 0; cam < 6; cam++) {
00344       adr = 0x340 + (5 - cam) * 32;
00345       jpgadr = (((unsigned int)*(capturedFrame->image + adr)) << 24)+
00346           (((unsigned int)*(capturedFrame->image + adr + 1)) << 16)+
00347           (((unsigned int)*(capturedFrame->image + adr + 2)) << 8)+
00348           (((unsigned int)*(capturedFrame->image + adr + 3)));
00349       adr += 4;
00350       jpgsize = (((unsigned int)*(capturedFrame->image + adr)) << 24)+
00351           (((unsigned int)*(capturedFrame->image+adr + 1)) << 16)+
00352           (((unsigned int)*(capturedFrame->image+adr + 2)) << 8)+
00353           (((unsigned int)*(capturedFrame->image+adr + 3)));
00354 
00355       if (jpgsize != 0) {
00356 //        fwrite((unsigned char *)(jpgadr+frame->image),jpgsize,1,fd);
00357         // capturedFrame->image + jpgadr + jpgsize - 1?
00358         cv::Mat decodedImage = cv::imdecode(cv::Mat(std::vector<uchar>(capturedFrame->image + jpgadr, capturedFrame->image + jpgadr + jpgsize)), -1);
00359         if (decodedImage.empty()) {
00360           printf("Decoding failed.\n");
00361           enqueueFrameLater(capturedFrame);
00362           enqueueFrames();
00363           return;
00364         }
00365         cv::Mat targetRowRange = decodedFrame.rowRange(cam * 1232, (cam + 1) * 1232);
00366         decodedImage.copyTo(targetRowRange);
00367       }
00368     }
00369     memcpy(capturedFrame->image, decodedFrame.data, capturedFrame->size[1] * capturedFrame->size[0]);
00370 
00371     // NB: Buffer of captured frame is managed by DMA and must not be released.
00372 //    cv::Mat encoded(capturedFrame->size[1], capturedFrame->size[0], CV_8UC1, capturedFrame->image);
00373     // NB: Buffer of decoded image should not be release before converted to result.
00374 //    cv::Mat decoded = cv::imdecode(cv::Mat(std::vector<uchar>(capturedFrame->image, capturedFrame->image + capturedFrame->allocated_image_bytes)), 0);
00375 //    if (decoded.empty()) {
00376 //      printf("Decoding failed.\n");
00377 //      enqueueFrameLater(capturedFrame);
00378 //      enqueueFrames();
00379 //      return;
00380 //    }
00381 //
00382 //    memcpy(capturedFrame->image, decoded.data, capturedFrame->size[1] * capturedFrame->size[0]);
00383   }
00384 
00385   // Enqueue the frame and return an empty image if the frame is corrupted.
00386   if (isFrameCorrupt(capturedFrame)) {
00387     dc1394_log_warning("Frame corrupted.");
00388     enqueueFrameLater(capturedFrame);
00389     enqueueFrames();
00390     return;
00391   }
00392 
00393   timestamp = capturedFrame->timestamp;
00394 
00395   printf("Frame captured: frames behind: %u, id: %u, timestamp: %lu\n", capturedFrame->frames_behind, capturedFrame->id,
00396       static_cast<unsigned long>(capturedFrame->timestamp));
00397 
00398   // Init output frame with target settings.
00399   dc1394video_frame_t rgbFrame;
00400   debayerFrame(capturedFrame, &rgbFrame);
00401 
00402   enqueueFrameLater(capturedFrame);
00403   enqueueFrames();
00404 
00405   cv::Mat rgbMat(rgbFrame.size[1], rgbFrame.size[0], CV_8UC3, rgbFrame.image);
00406   cv::cvtColor(rgbMat, bgrMat, CV_RGB2BGR);
00407 
00408   free(rgbFrame.image);
00409 }
00410 
00411 void Camera::powerOn() {
00412 
00413   dc1394error_t error;
00414   error = dc1394_camera_set_power(camera, DC1394_ON);
00415   CAMERA_EXCEPTION(error, "Could not power on the camera.");
00416 }
00417 
00418 void Camera::powerOff() {
00419 
00420   dc1394error_t error;
00421   error = dc1394_camera_set_power(camera, DC1394_OFF);
00422   CAMERA_EXCEPTION(error, "Could not power off the camera.");
00423 }
00424 
00425 void Camera::reset() {
00426 
00427   dc1394error_t error;
00428   error = dc1394_camera_reset(camera);
00429   CAMERA_EXCEPTION(error, "Camera reset failed.");
00430 }
00431 
00432 void Camera::resetBus() {
00433 
00434   dc1394error_t error;
00435   error = dc1394_reset_bus(camera);
00436   CAMERA_EXCEPTION(error, "Reseting bus failed.");
00437 }
00438 
00439 void Camera::releaseAll() {
00440 
00441   dc1394error_t error;
00442   error = dc1394_iso_release_all(camera);
00443   CAMERA_EXCEPTION(error, "Releasing ISO channels and bandwidth failed.");
00444 }
00445 
00446 dc1394bayer_method_t Camera::getBayerMethod() {
00447   return bayerMethod;
00448 }
00449 
00450 void Camera::setBayerMethod(dc1394bayer_method_t method) {
00451   bayerMethod = method;
00452 }
00453 
00454 uint32_t Camera::getRegister(uint64_t offset) {
00455   uint32_t value;
00456   dc1394error_t err;
00457   err = dc1394_get_register(camera, offset, &value);
00458   CAMERA_EXCEPTION(err, "Getting camera register failed.");
00459   return value;
00460 }
00461 
00462 void Camera::setRegister(uint64_t offset, uint32_t value) {
00463   dc1394error_t err;
00464   err = dc1394_set_register(camera, offset, value);
00465   CAMERA_EXCEPTION(err, "Setting camera register failed.");
00466 }
00467 
00468 uint32_t Camera::getControlRegister(uint64_t offset) {
00469   uint32_t value;
00470   dc1394error_t err;
00471   err = dc1394_get_control_register(camera, offset, &value);
00472   CAMERA_EXCEPTION(err, "Getting camera control register failed.");
00473   return value;
00474 }
00475 
00476 void Camera::setControlRegister(uint64_t offset, uint32_t value) {
00477   dc1394error_t err;
00478   err = dc1394_set_control_register(camera, offset, value);
00479   CAMERA_EXCEPTION(err, "Setting camera control register failed.");
00480 }
00481 
00482 bool Camera::isFeaturePresent(dc1394feature_t feat) {
00483   dc1394error_t err;
00484   dc1394bool_t f_pres;
00485   err = dc1394_feature_is_present(camera, feat, &f_pres);
00486   CAMERA_EXCEPTION(err, "Getting feature present failed.");
00487   return f_pres == DC1394_TRUE;
00488 }
00489 
00490 bool Camera::isFeatureReadable(dc1394feature_t feat) {
00491   dc1394error_t err;
00492   dc1394bool_t f_read;
00493   err = dc1394_feature_is_readable(camera, feat, &f_read);
00494   CAMERA_EXCEPTION(err, "Getting feature readable failed.");
00495   return f_read == DC1394_TRUE;
00496 }
00497 
00498 bool Camera::isFeatureSwitchable(dc1394feature_t feat) {
00499   dc1394error_t err;
00500   dc1394bool_t f_sw;
00501   err = dc1394_feature_is_switchable(camera, feat, &f_sw);
00502   CAMERA_EXCEPTION(err, "Getting feature switchable failed.");
00503   return f_sw == DC1394_TRUE;
00504 }
00505 
00506 bool Camera::isFeaturePowerOn(dc1394feature_t feat) {
00507   dc1394error_t err;
00508   dc1394switch_t f_pwr;
00509   err = dc1394_feature_get_power(camera, feat, &f_pwr);
00510   CAMERA_EXCEPTION(err, "Getting feature power failed.");
00511   return f_pwr == DC1394_ON;
00512 }
00513 
00514 dc1394feature_mode_t Camera::getFeatureMode(dc1394feature_t feat) {
00515   dc1394error_t err;
00516   dc1394feature_mode_t f_mode;
00517   err = dc1394_feature_get_mode(camera, feat, &f_mode);
00518   CAMERA_EXCEPTION(err, "Getting feature mode failed.");
00519   return f_mode;
00520 }
00521 
00522 bool Camera::isFeatureAbsoluteControlAvailable(dc1394feature_t feat) {
00523   dc1394error_t err;
00524   dc1394bool_t f_avail;
00525   err = dc1394_feature_has_absolute_control(camera, feat, &f_avail);
00526   CAMERA_EXCEPTION(err, "Getting feature absolute control available failed.");
00527   return f_avail == DC1394_TRUE;
00528 }
00529 
00530 bool Camera::isFeatureAbsoluteControlOn(dc1394feature_t feat) {
00531   dc1394error_t err;
00532   dc1394switch_t f_sw;
00533   err = dc1394_feature_get_absolute_control(camera, feat, &f_sw);
00534   CAMERA_EXCEPTION(err, "Getting feature absolute control failed.");
00535   return f_sw == DC1394_ON;
00536 }
00537 
00538 uint32_t Camera::getFeatureMinBoundary(dc1394feature_t feat) {
00539   dc1394error_t err;
00540   uint32_t bound_min;
00541   uint32_t bound_max;
00542   err = dc1394_feature_get_boundaries(camera, feat, &bound_min, &bound_max);
00543   CAMERA_EXCEPTION(err, "Getting feature boundaries failed.");
00544   return bound_min;
00545 }
00546 
00547 uint32_t Camera::getFeatureMaxBoundary(dc1394feature_t feat) {
00548   dc1394error_t err;
00549   uint32_t bound_min;
00550   uint32_t bound_max;
00551   err = dc1394_feature_get_boundaries(camera, feat, &bound_min, &bound_max);
00552   CAMERA_EXCEPTION(err, "Getting feature boundaries failed.");
00553   return bound_max;
00554 }
00555 
00556 uint32_t Camera::getFeatureValue(dc1394feature_t feat) {
00557   dc1394error_t err;
00558   uint32_t val;
00559   err = dc1394_feature_get_value(camera, feat, &val);
00560   CAMERA_EXCEPTION(err, "Getting feature value failed.");
00561   return val;
00562 }
00563 
00564 float Camera::getFeatureMinAbsoluteBoundary(dc1394feature_t feat) {
00565   dc1394error_t err;
00566   float bound_min;
00567   float bound_max;
00568   err = dc1394_feature_get_absolute_boundaries(camera, feat, &bound_min, &bound_max);
00569   CAMERA_EXCEPTION(err, "Getting feature absolute boundaries failed.");
00570   return bound_min;
00571 }
00572 
00573 float Camera::getFeatureMaxAbsoluteBoundary(dc1394feature_t feat) {
00574   dc1394error_t err;
00575   float bound_min;
00576   float bound_max;
00577   err = dc1394_feature_get_absolute_boundaries(camera, feat, &bound_min, &bound_max);
00578   CAMERA_EXCEPTION(err, "Getting feature absolute boundaries failed.");
00579   return bound_max;
00580 }
00581 
00582 float Camera::getFeatureAbsoluteValue(dc1394feature_t feat) {
00583   dc1394error_t err;
00584   float abs_val;
00585   err = dc1394_feature_get_absolute_value(camera, feat, &abs_val);
00586   CAMERA_EXCEPTION(err, "Getting feature absolute value failed.");
00587   return abs_val;
00588 }
00589 
00590 void Camera::setFeaturePowerOn(dc1394feature_t feat) {
00591   dc1394error_t err;
00592   err = dc1394_feature_set_power(camera, feat, DC1394_ON);
00593   CAMERA_EXCEPTION(err, "Setting feature power on failed.");
00594 }
00595 
00596 void Camera::setFeaturePowerOff(dc1394feature_t feat) {
00597   dc1394error_t err;
00598   err = dc1394_feature_set_power(camera, feat, DC1394_OFF);
00599   CAMERA_EXCEPTION(err, "Setting feature power failed.");
00600 }
00601 
00602 void Camera::setFeaturetMode(dc1394feature_t feat, dc1394feature_mode_t mode) {
00603   dc1394error_t err;
00604   err = dc1394_feature_set_mode(camera, feat, mode);
00605   CAMERA_EXCEPTION(err, "Setting feature mode failed.");
00606 }
00607 
00608 void Camera::setFeatureAbsoluteControlOn(dc1394feature_t feat) {
00609   dc1394error_t err;
00610   err = dc1394_feature_set_absolute_control(camera, feat, DC1394_ON);
00611   CAMERA_EXCEPTION(err, "Setting feature absolute control on failed.");
00612 }
00613 
00614 void Camera::setFeatureAbsoluteControlOff(dc1394feature_t feat) {
00615   dc1394error_t err;
00616   err = dc1394_feature_set_absolute_control(camera, feat, DC1394_OFF);
00617   CAMERA_EXCEPTION(err, "Setting feature absolute control off failed.");
00618 }
00619 
00620 void Camera::setFeatureValue(dc1394feature_t feat, uint32_t value) {
00621   dc1394error_t err;
00622   err = dc1394_feature_set_value(camera, feat, value);
00623   CAMERA_EXCEPTION(err, "Setting feature value failed.");
00624 }
00625 
00626 void Camera::setFeatureAbsoluteValue(dc1394feature_t feat, float value) {
00627   dc1394error_t err;
00628   err = dc1394_feature_set_absolute_value(camera, feat, value);
00629   CAMERA_EXCEPTION(err, "Setting feature absolute value failed.");
00630 }
00631 
00632 uint32_t Camera::getWhiteBalanceBlue() {
00633   uint32_t u_b_value;
00634   uint32_t v_r_value;
00635   dc1394error_t err;
00636   err = dc1394_feature_whitebalance_get_value(camera, &u_b_value, &v_r_value);
00637   CAMERA_EXCEPTION(err, "Getting camera whitebalance feature failed.");
00638   return u_b_value;
00639 }
00640 
00641 uint32_t Camera::getWhiteBalanceRed() {
00642   uint32_t u_b_value;
00643   uint32_t v_r_value;
00644   dc1394error_t err;
00645   err = dc1394_feature_whitebalance_get_value(camera, &u_b_value, &v_r_value);
00646   CAMERA_EXCEPTION(err, "Getting camera whitebalance feature failed.");
00647   return v_r_value;
00648 }
00649 
00650 void Camera::setWhiteBalance(uint32_t u_b_value, uint32_t v_r_value) {
00651   dc1394error_t err;
00652   err = dc1394_feature_whitebalance_set_value(camera, u_b_value, v_r_value);
00653   CAMERA_EXCEPTION(err, "Setting camera whitebalance feature failed.");
00654 }
00655 
00656 void Camera::setWhiteBalanceBlue(uint32_t u_b_value) {
00657   dc1394error_t err;
00658   err = dc1394_feature_whitebalance_set_value(camera, u_b_value, getWhiteBalanceRed());
00659   CAMERA_EXCEPTION(err, "Setting camera whitebalance feature failed.");
00660 }
00661 
00662 void Camera::setWhiteBalanceRed(uint32_t v_r_value) {
00663   dc1394error_t err;
00664   err = dc1394_feature_whitebalance_set_value(camera, getWhiteBalanceBlue(), v_r_value);
00665   CAMERA_EXCEPTION(err, "Setting camera whitebalance feature failed.");
00666 }
00667 
00668 }
00669 }
 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