void CameraEngine::applyCameraSetting(int mode, int value) {

	switch (value) {
		case SETTING_DEFAULT: break;
		case SETTING_AUTO: setCameraSettingAuto(mode,true); break;
		case SETTING_MIN: setCameraSetting(mode,getMinCameraSetting(mode)); break;
		case SETTING_MAX: setCameraSetting(mode,getMaxCameraSetting(mode)); break;
		default: {
			int max = getMaxCameraSetting(mode);
			int min = getMinCameraSetting(mode);
			if (value<min) value = min;
			else if (value>max) value = max;
			setCameraSetting(mode,value);
		}
	}
}
Example #2
0
void CameraEngine::control(int key) {
    if(!settingsDialog) return;
    int value,min,max,step = 0;
    switch(key) {
    case SDLK_LEFT:
        value = getCameraSetting(currentCameraSetting);
        min = getMinCameraSetting(currentCameraSetting);
        max = getMaxCameraSetting(currentCameraSetting);
        step = getCameraSettingStep(currentCameraSetting);
        if (step==1) step = (int)((float)max/256.0f);
        if (step<1) step=1;
        value -= step;
        if (value<min) value=min;
        setCameraSetting(currentCameraSetting,value);
        break;
    case SDLK_RIGHT:
        value = getCameraSetting(currentCameraSetting);
        min = getMinCameraSetting(currentCameraSetting);
        max = getMaxCameraSetting(currentCameraSetting);
        step = getCameraSettingStep(currentCameraSetting);
        if (step==1) step = (int)((float)max/256.0f);
        if (step<1) step=1;
        value += step;
        if (value>max) value=max;
        setCameraSetting(currentCameraSetting,value);
        break;
    case SDLK_UP:
        currentCameraSetting--;
        if(currentCameraSetting<0) currentCameraSetting=GAMMA;
        break;
    case SDLK_DOWN:
        currentCameraSetting++;
        if(currentCameraSetting>GAMMA) currentCameraSetting=0;
        break;
    }

}
bool V4Linux2Camera::setCameraSettingAuto(int mode, bool flag) {

    if (!hasCameraSetting(mode)) return false;

    switch (mode) {
        case GAIN:
           return(setCameraSetting(AUTO_GAIN,flag));
        case EXPOSURE:
            v4l2_auto_ctrl[0].id = V4L2_CID_EXPOSURE_AUTO;
            v4l2_auto_ctrl[1].id = V4L2_CID_EXPOSURE_AUTO_PRIORITY;
            if (flag==true) {
                v4l2_auto_ctrl[0].value = V4L2_EXPOSURE_AUTO;
                v4l2_auto_ctrl[1].value = V4L2_EXPOSURE_AUTO;
            } else {
                v4l2_auto_ctrl[0].value = V4L2_EXPOSURE_MANUAL;
                v4l2_auto_ctrl[1].value = V4L2_EXPOSURE_APERTURE_PRIORITY;
           }
            break;
        case WHITE:
            return(setCameraSetting(AUTO_WHITE,flag));
        case COLOR_HUE:
            return(setCameraSetting(AUTO_HUE,flag));
        default: return false;
    }
    if ((xioctl(dev_handle, VIDIOC_S_EXT_CTRLS, &v4l2_auto_ctrl)) < 0) {
        printf("Unable to set AUTO mode: %s\n",strerror(errno));
        return false;
    }

    if (mode==EXPOSURE) {
        //printf("set auto mode: %d %d\n",v4l2_auto_ctrl[0].value,v4l2_auto_ctrl[1].value);
        return true;
    }

    return false;
}
 void FirstPersonNavigation::loadDefaultCamerasetting(){
     setCameraSetting(1, 40, 0.0005f, 0.15f, 0.005f, 0.4f);
     curAccuteness_ = minAccuteness_;
 }
bool V4Linux2Camera::setDefaultCameraSetting(int mode) {
    return setCameraSetting(mode,getDefaultCameraSetting(mode));
}