/** 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; }