/** 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, ¤t_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); }