Exemple #1
0
/** Get current state of a feature from the camera.
 *
 *  @pre feature_set_ initialized for this camera
 *
 *  @param finfo pointer to information for this feature
 *  @return current state ID
 */
Features::state_t Features::getState(dc1394feature_info_t *finfo)
{
  dc1394feature_t feature = finfo->id;
  dc1394error_t rc;

  if (!finfo->available)
    {
      // not available: nothing more to do
      return camera1394::Camera1394_None;
    }

  if (finfo->on_off_capable)
    {
      // get On/Off state
      dc1394switch_t pwr;
      rc = dc1394_feature_get_power(camera_, feature, &pwr);
      if (rc != DC1394_SUCCESS)
        {
          ROS_WARN_STREAM("failed to get feature " << featureName(feature)
                          << " Power setting ");
        }
      else if (pwr == DC1394_OFF)
        {
          // Off overrides mode settings
          return camera1394::Camera1394_Off;
        }
    }

  // not off, so get mode
  dc1394feature_mode_t mode;
  rc = dc1394_feature_get_mode(camera_, feature, &mode);
  if (rc != DC1394_SUCCESS)
    {
      ROS_WARN_STREAM("failed to get current mode of feature "
                      << featureName(feature));
      // treat unavailable mode as Off
      return camera1394::Camera1394_Off;
    }

  switch (mode)
    {
    case DC1394_FEATURE_MODE_MANUAL:
      return camera1394::Camera1394_Manual;
    case DC1394_FEATURE_MODE_AUTO:
      return camera1394::Camera1394_Auto;
    case DC1394_FEATURE_MODE_ONE_PUSH_AUTO:
      return camera1394::Camera1394_OnePush;
    default:
      return camera1394::Camera1394_Off;
    }
}
int ar2VideoGetAutoOn1394(AR2VideoParam1394T *vid, int paramName, int *value)
{
    dc1394feature_t      feature;
    dc1394feature_mode_t mode;

    switch (paramName)
    {
    case AR_VIDEO_1394_BRIGHTNESS:
        feature = DC1394_FEATURE_BRIGHTNESS;
        break;

    case AR_VIDEO_1394_EXPOSURE:
        feature = DC1394_FEATURE_EXPOSURE;
        break;

    case AR_VIDEO_1394_WHITE_BALANCE:
        feature = DC1394_FEATURE_WHITE_BALANCE;
        break;

    case AR_VIDEO_1394_SHUTTER_SPEED:
        feature = DC1394_FEATURE_SHUTTER;
        break;

    case AR_VIDEO_1394_GAIN:
        feature = DC1394_FEATURE_GAIN;
        break;

    case AR_VIDEO_1394_FOCUS:
        feature = DC1394_FEATURE_FOCUS;
        break;

    case AR_VIDEO_1394_GAMMA:
        feature = DC1394_FEATURE_GAMMA;
        break;

    default:
        return -1;
    }

    if (dc1394_feature_get_mode(vid->camera, feature, &mode) != DC1394_SUCCESS)
    {
        ARLOGe("unable to check auto mode.\n");
        return -1;
    }

    if (mode == DC1394_FEATURE_MODE_AUTO)
        return 1;
    else
        return 0;
}
    void
    VideoIIDC1394::updateFocusStatus()
    {
#if defined(DUNE_WITH_DC1394)
      feature = DC1394_FEATURE_FOCUS;

      dc1394_feature_get_mode(camera, feature, &mode);
      dc1394_feature_get_modes(camera, feature, &fm);

      std::cout << "Camera focus mode: " << mode << std::endl;

      uint8_t i = 0;

      for (i = 0; i < fm.num; i++)
      {
        std::cout << "Camera focus available modes: " << fm.modes[i] << std::endl;
      }
#endif
    }
float Libdc1394SequenceGrabber::getFeature(dc1394feature_t feature)
{
	if (!_camera) return -1;
	
	
	uint32_t min, max, value;
	dc1394feature_mode_t current_mode;
	dc1394bool_t is_present;
	
	dc1394_feature_is_present(_camera, feature, &is_present);
	if (is_present == DC1394_FALSE) 
		return -1.0; 
	
	dc1394_feature_get_mode(_camera, feature, &current_mode);
	
	if (current_mode == DC1394_FEATURE_MODE_AUTO) 
		return -1.0;
		
	dc1394_feature_get_boundaries(_camera, feature, &min, &max);
	dc1394_feature_get_value(_camera, feature, &value);
	
	return 1000.0 * (value-min) / static_cast<float>(max-min); 
}