コード例 #1
0
static double icvGetPropertyCAM_DC1394( CvCaptureCAM_DC1394* capture, int property_id ){
	int index=-1;
	switch ( property_id ) {
		case CV_CAP_PROP_CONVERT_RGB:
			return capture->convert;
		case CV_CAP_PROP_MODE:
			return capture->mode;
		case CV_CAP_PROP_FORMAT:
			return capture->format;
		case CV_CAP_PROP_FPS:
			CV_DC1394_CALL(dc1394_get_video_framerate(capture->handle, capture->camera->node,
					(unsigned int *) &capture->camera->frame_rate));
			switch(capture->camera->frame_rate) {
				case FRAMERATE_1_875:
					return 1.875;
				case FRAMERATE_3_75:
					return 3.75;
				case FRAMERATE_7_5:
					return 7.5;
				case FRAMERATE_15:
					return 15.;
				case FRAMERATE_30:
					return 30.;
				case FRAMERATE_60:
					return 60;
#if NUM_FRAMERATES > 6
				case FRAMERATE_120:
					return 120;
#endif
#if NUM_FRAMERATES > 7
				case FRAMERATE_240:
					return 240;
#endif
			}
        default:
			index = property_id;  // did they pass in a LIBDC1394 feature flag?
			break;
	}
	if(index>=FEATURE_MIN && index<=FEATURE_MAX){
		dc1394bool_t has_feature;
		CV_DC1394_CALL( dc1394_is_feature_present(capture->handle, capture->camera->node,
					                              index, &has_feature));
		if(!has_feature){
			CV_WARN("Feature is not supported by this camera");
		}
		else{
			unsigned int value;
			dc1394_get_feature_value(capture->handle, capture->camera->node, index, &value);
			return (double) value;
		}
	}

	return 0;
};
コード例 #2
0
ファイル: cvcap_dc1394.cpp プロジェクト: gotomypc/eyepatch
// function to set camera properties using dc1394 feature enum
// val == -1 indicates to set this property to 'auto'
static int
icvSetFeatureCAM_DC1394( CvCaptureCAM_DC1394* capture, int feature_id, int val){
        dc1394bool_t isOn = DC1394_FALSE;
		dc1394bool_t hasAutoCapability = DC1394_FALSE;
		dc1394bool_t isAutoOn = DC1394_FALSE;
		unsigned int nval;

		// Turn the feature on if it is OFF
		if( dc1394_is_feature_on(capture->handle, capture->camera->node, feature_id, &isOn) 
				== DC1394_FAILURE ) {
			return 0;
		}
		if( isOn == DC1394_FALSE ) {
                // try to turn it on.
                if( dc1394_feature_on_off(capture->handle, capture->camera->node, feature_id, 1) == DC1394_FAILURE ) {
                    fprintf(stderr, "error turning feature %d on!\n", feature_id);
                    return 0;
                }
		}

		// Check if the feature supports auto mode 
		dc1394_has_auto_mode(capture->handle, capture->camera->node, feature_id, &hasAutoCapability);
		if( hasAutoCapability ) {

			// now check if the auto is on.
			if( dc1394_is_feature_auto(capture->handle, capture->camera->node, feature_id, &isAutoOn ) == DC1394_FAILURE ) {
				fprintf(stderr, "error determining if feature %d has auto on!\n", index);
				return 0;
			}
		}
		// Caller requested auto mode, but cannot support it
		else if(val==-1){
            fprintf(stderr, "feature %d does not support auto mode\n", feature_id);
            return 0;
		}

		if(val==-1){
            // if the auto mode isn't enabled, enable it
            if( isAutoOn == DC1394_FALSE ) {
                if(dc1394_auto_on_off(capture->handle, capture->camera->node, feature_id, 1) == DC1394_FAILURE ) {
                    fprintf(stderr, "error turning feature %d auto ON!\n", feature_id);
                    return 0;
                }
            }
			return 1;
        }

		// ELSE turn OFF auto and adjust feature manually
		if( isAutoOn == DC1394_TRUE ) {
			if(dc1394_auto_on_off(capture->handle, capture->camera->node, feature_id, 0) == DC1394_FAILURE ) {
				fprintf(stderr, "error turning feature %d auto OFF!\n", feature_id);
				return 0;
			}
		}

		// TODO: should probably clamp val to within feature range

		if (dc1394_set_feature_value(capture->handle, capture->camera->node, feature_id, val) ==
				DC1394_FAILURE){
			fprintf(stderr, "error setting feature value\n");
			return 0;
		}
		if (dc1394_get_feature_value(capture->handle, capture->camera->node, feature_id, &nval) ==
				DC1394_FAILURE){
			fprintf(stderr, "error setting feature value\n");
			return 0;
		}
		return nval==(unsigned int)val;

}
コード例 #3
0
ファイル: cvcap_dc1394.cpp プロジェクト: HVisionSensing/lirec
static double icvGetPropertyCAM_DC1394( CvCaptureCAM_DC1394* capture, int property_id ){
  
_V_MW_  fprintf(stderr,"icvGetPropertyCAM_DC1394\n");

  unsigned int index=0;
  unsigned int mval=0;
  unsigned int minval=0;
  unsigned int maxval=0;
  
  switch ( property_id ) {

  default: return -1;
    
  case CV_CAP_PROP_FRAME_HEIGHT:
    return ((CvCaptureCAM_DC1394 *)capture)->camera->frame_height;
    
  case CV_CAP_PROP_FRAME_WIDTH:
    return ((CvCaptureCAM_DC1394 *)capture)->camera->frame_width;
    
  case CV_CAP_PROP_CONVERT_RGB:
    return capture->convert;

  case CV_CAP_PROP_MODE:
    return capture->mode;

  case CV_CAP_PROP_FORMAT:
    return capture->format;

  case CV_CAP_PROP_FPS:
    dc1394_get_video_framerate(capture->handle, capture->camera->node,
			       (unsigned int *) &capture->camera->frame_rate);
    switch(capture->camera->frame_rate) {
    default:
      return -1;
    case FRAMERATE_1_875:
      return 1.875;
    case FRAMERATE_3_75:
      return 3.75;
    case FRAMERATE_7_5:
      return 7.5;
    case FRAMERATE_15:
      return 15.;
    case FRAMERATE_30:
      return 30.;
    case FRAMERATE_60:
      return 60;
#if NUM_FRAMERATES > 6
    case FRAMERATE_120:
      return 120;
#endif
#if NUM_FRAMERATES > 7
    case FRAMERATE_240:
      return 240;
#endif
    }

  case CV_CAP_PROP_BRIGHTNESS:
    index = FEATURE_BRIGHTNESS;
    break;

  case CV_CAP_PROP_CONTRAST: 
    index = FEATURE_GAMMA;
    break;
  case CV_CAP_PROP_SATURATION: 
    index = FEATURE_SATURATION;
    break;

  case CV_CAP_PROP_HUE:       
    index = FEATURE_HUE;
    break;

  case CV_CAP_PROP_GAIN:     
    index = FEATURE_GAIN;
    break;
  }

  if(dc1394_get_min_value(
			  ((CvCaptureCAM_DC1394 *)capture)->handle,
			  ((CvCaptureCAM_DC1394 *)capture)->camera->node,
			  index,
			  &minval) == DC1394_FAILURE){
    fprintf(stderr, "error getting min %d value\n", index);
    return -1;
  }
     
  if(dc1394_get_max_value(
		       ((CvCaptureCAM_DC1394 *)capture)->handle,
		       ((CvCaptureCAM_DC1394 *)capture)->camera->node,
		       index,
		       &maxval) == DC1394_FAILURE){
    fprintf(stderr, "error getting max %d value\n", index);
    return -1;
  }

  if(dc1394_get_feature_value(
			      ((CvCaptureCAM_DC1394 *)capture)->handle,
			      ((CvCaptureCAM_DC1394 *)capture)->camera->node,
			      index,
			      &mval) == DC1394_FAILURE){
    fprintf(stderr, "error getting feature %d value\n", index);
    return -1;
  }

  if(maxval == minval) return -1;
  return ((double)mval - minval)/(maxval - minval);
  
}