Beispiel #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 ar2VideoGetFeatureOn1394(AR2VideoParam1394T *vid, int paramName, int *value)
{
    dc1394feature_t feature;
    dc1394switch_t  pwr;

    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_is_present(vid->camera, feature, (dc1394bool_t*)value) != DC1394_SUCCESS)
    {
        ARLOGe("unable to check feature.\n");
        return -1;
    }

    if (*value == 0)
        return 0;

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

    if (pwr == DC1394_OFF)
        *value = 0;
    else
        *value = 1;

    return 0;
}