📄 dc1394_control.c
字号:
intdc1394_query_feature_characteristics(raw1394handle_t handle, nodeid_t node, unsigned int feature, quadlet_t *value){ octlet_t offset; int retval; FEATURE_TO_INQUIRY_OFFSET(feature, offset); retval= GetCameraControlRegister(handle, node, offset, value); return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_get_video_framerate(raw1394handle_t handle, nodeid_t node, unsigned int *framerate){ quadlet_t value; int retval= GetCameraControlRegister(handle, node, REG_CAMERA_FRAME_RATE, &value); if (!retval) { *framerate= (unsigned int)((value >> 29) & 0x7UL) + FRAMERATE_MIN; } return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_set_video_framerate(raw1394handle_t handle, nodeid_t node, unsigned int framerate){ int retval; if ( (framerate < FRAMERATE_MIN) || (framerate > FRAMERATE_MAX) ) { return DC1394_FAILURE; } retval= SetCameraControlRegister(handle, node, REG_CAMERA_FRAME_RATE, (quadlet_t)(((framerate - FRAMERATE_MIN) & 0x7UL) << 29)); return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_get_video_mode(raw1394handle_t handle, nodeid_t node, unsigned int *mode){ quadlet_t value; int retval; unsigned int format; if (dc1394_get_video_format(handle, node, &format) != DC1394_SUCCESS) { return DC1394_FAILURE; } retval= GetCameraControlRegister(handle, node, REG_CAMERA_VIDEO_MODE, &value); if (!retval) { switch(format) { case FORMAT_VGA_NONCOMPRESSED: *mode= (unsigned int)((value >> 29) & 0x7UL) + MODE_FORMAT0_MIN; break; case FORMAT_SVGA_NONCOMPRESSED_1: *mode= (unsigned int)((value >> 29) & 0x7UL) + MODE_FORMAT1_MIN; break; case FORMAT_SVGA_NONCOMPRESSED_2: *mode= (unsigned int)((value >> 29) & 0x7UL) + MODE_FORMAT2_MIN; break; case FORMAT_STILL_IMAGE: *mode= (unsigned int)((value >> 29) & 0x7UL) + MODE_FORMAT6_MIN; break; case FORMAT_SCALABLE_IMAGE_SIZE: *mode= (unsigned int)((value >> 29) & 0x7UL) + MODE_FORMAT7_MIN; break; default: return DC1394_FAILURE; break; } } return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_set_video_mode(raw1394handle_t handle, nodeid_t node, unsigned int mode){ int retval; unsigned int format, min, max; if (dc1394_get_video_format(handle, node, &format) != DC1394_SUCCESS) { return DC1394_FAILURE; } switch(format) { case FORMAT_VGA_NONCOMPRESSED: min= MODE_FORMAT0_MIN; max= MODE_FORMAT0_MAX; break; case FORMAT_SVGA_NONCOMPRESSED_1: min= MODE_FORMAT1_MIN; max= MODE_FORMAT1_MAX; break; case FORMAT_SVGA_NONCOMPRESSED_2: min= MODE_FORMAT2_MIN; max= MODE_FORMAT2_MAX; break; case FORMAT_STILL_IMAGE: min= MODE_FORMAT6_MIN; max= MODE_FORMAT6_MAX; break; case FORMAT_SCALABLE_IMAGE_SIZE: min= MODE_FORMAT7_MIN; max= MODE_FORMAT7_MAX; break; default: return DC1394_FAILURE; break; } if ( (mode < min) || (mode > max) ) { return DC1394_FAILURE; } retval= SetCameraControlRegister(handle, node, REG_CAMERA_VIDEO_MODE, (quadlet_t)(((mode - min) & 0x7UL) << 29)); return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_get_video_format(raw1394handle_t handle, nodeid_t node, unsigned int *format){ quadlet_t value; int retval= GetCameraControlRegister(handle, node, REG_CAMERA_VIDEO_FORMAT, &value); if (!retval) { *format= (unsigned int)((value >> 29) & 0x7UL) + FORMAT_MIN; } return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_set_video_format(raw1394handle_t handle, nodeid_t node, unsigned int format){ int retval; if ( (format < FORMAT_MIN) || (format > FORMAT_MAX) ) { return DC1394_FAILURE; } retval= SetCameraControlRegister(handle, node, REG_CAMERA_VIDEO_FORMAT, (quadlet_t)(((format - FORMAT_MIN) & 0x7UL) << 29)); return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_get_operation_mode(raw1394handle_t handle, nodeid_t node, unsigned int *mode){ quadlet_t value_inq, value; int retval; retval= dc1394_query_basic_functionality(handle, node, &value_inq); retval= GetCameraControlRegister(handle, node, REG_CAMERA_ISO_DATA, &value); if (value_inq & 0x00800000) { *mode=((value & 0x00008000) >0); } else { *mode=OPERATION_MODE_LEGACY; } return retval;}intdc1394_set_operation_mode(raw1394handle_t handle, nodeid_t node, unsigned int mode){ quadlet_t value_inq, value; int retval; retval= dc1394_query_basic_functionality(handle, node, &value_inq); retval= GetCameraControlRegister(handle, node, REG_CAMERA_ISO_DATA, &value); if (mode==OPERATION_MODE_LEGACY) { retval= SetCameraControlRegister(handle, node, REG_CAMERA_ISO_DATA, (quadlet_t) (value & 0xFFFF7FFF)); } else { // 1394b if (value_inq & 0x00800000) { // if 1394b available retval= SetCameraControlRegister(handle, node, REG_CAMERA_ISO_DATA, (quadlet_t) (value | 0x00008000)); } else { // 1394b asked, but it is not available return DC1394_FAILURE; } } return (retval ? DC1394_FAILURE : DC1394_SUCCESS); }intdc1394_get_iso_channel_and_speed(raw1394handle_t handle, nodeid_t node, unsigned int *channel, unsigned int *speed){ quadlet_t value_inq, value; int retval; retval= dc1394_query_basic_functionality(handle, node, &value_inq); retval= GetCameraControlRegister(handle, node, REG_CAMERA_ISO_DATA, &value); if (value_inq & 0x00800000) { // check if 1394b is available if (value & 0x00008000) { //check if we are now using 1394b *channel= (unsigned int)((value >> 8) & 0x3FUL); *speed= (unsigned int)(value& 0x7UL); } else { // fallback to legacy *channel= (unsigned int)((value >> 28) & 0xFUL); *speed= (unsigned int)((value >> 24) & 0x3UL); } } else { // legacy *channel= (unsigned int)((value >> 28) & 0xFUL); *speed= (unsigned int)((value >> 24) & 0x3UL); } return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_set_iso_channel_and_speed(raw1394handle_t handle, nodeid_t node, unsigned int channel, unsigned int speed){ quadlet_t value_inq, value; int retval; retval= dc1394_query_basic_functionality(handle, node, &value_inq); retval= GetCameraControlRegister(handle, node, REG_CAMERA_ISO_DATA, &value); if ((value_inq & 0x00800000)&&(value & 0x00008000)) { // check if 1394b is available and if we are now using 1394b retval= SetCameraControlRegister(handle, node, REG_CAMERA_ISO_DATA, (quadlet_t) ( ((channel & 0x3FUL) << 8) | (speed & 0x7UL) | (0x1 << 15) )); } else { // fallback to legacy if (speed>SPEED_400) { fprintf(stderr,"(%s) line %d: an ISO speed >400Mbps was requested while the camera is in LEGACY mode\n",__FILE__,__LINE__); fprintf(stderr," Please set the operation mode to OPERATION_MODE_1394B before asking for\n"); fprintf(stderr," 1394b ISO speeds\n"); return DC1394_FAILURE; } retval= SetCameraControlRegister(handle, node, REG_CAMERA_ISO_DATA, (quadlet_t) (((channel & 0xFUL) << 28) | ((speed & 0x3UL) << 24) )); } return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_camera_on(raw1394handle_t handle, nodeid_t node){ int retval= SetCameraControlRegister(handle, node, REG_CAMERA_POWER, ON_VALUE); return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_camera_off(raw1394handle_t handle, nodeid_t node){ int retval= SetCameraControlRegister(handle, node, REG_CAMERA_POWER, OFF_VALUE); return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_start_iso_transmission(raw1394handle_t handle, nodeid_t node){ int retval= SetCameraControlRegister(handle, node, REG_CAMERA_ISO_EN, ON_VALUE); return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_stop_iso_transmission(raw1394handle_t handle, nodeid_t node){ int retval= SetCameraControlRegister(handle, node, REG_CAMERA_ISO_EN, OFF_VALUE); return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_get_iso_status(raw1394handle_t handle, nodeid_t node, dc1394bool_t *is_on){ int retval; quadlet_t value; retval= GetCameraControlRegister(handle, node, REG_CAMERA_ISO_EN,&value); *is_on= (value & ON_VALUE)>>31; return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_set_one_shot(raw1394handle_t handle, nodeid_t node){ int retval= SetCameraControlRegister(handle, node, REG_CAMERA_ONE_SHOT, ON_VALUE); return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_unset_one_shot(raw1394handle_t handle, nodeid_t node){ int retval= SetCameraControlRegister(handle, node, REG_CAMERA_ONE_SHOT, OFF_VALUE); return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_get_one_shot(raw1394handle_t handle, nodeid_t node, dc1394bool_t *is_on){ quadlet_t value; int retval = GetCameraControlRegister(handle, node, REG_CAMERA_ONE_SHOT, &value); *is_on = value & ON_VALUE; return (retval ? DC1394_FAILURE : DC1394_SUCCESS); }intdc1394_get_multi_shot(raw1394handle_t handle, nodeid_t node, dc1394bool_t *is_on, unsigned int *numFrames){ quadlet_t value; int retval = GetCameraControlRegister(handle, node, REG_CAMERA_ONE_SHOT, &value); *is_on = (value & (ON_VALUE>>1)) >> 30; *numFrames= value & 0xFFFFUL; return (retval ? DC1394_FAILURE : DC1394_SUCCESS); }intdc1394_set_multi_shot(raw1394handle_t handle, nodeid_t node, unsigned int numFrames){ int retval= SetCameraControlRegister(handle, node, REG_CAMERA_ONE_SHOT, (0x40000000UL | (numFrames & 0xFFFFUL))); return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_unset_multi_shot(raw1394handle_t handle, nodeid_t node){ return dc1394_unset_one_shot(handle, node);}intdc1394_get_brightness(raw1394handle_t handle, nodeid_t node, unsigned int *brightness){ return GetFeatureValue(handle, node, FEATURE_BRIGHTNESS, brightness);}intdc1394_set_brightness(raw1394handle_t handle, nodeid_t node, unsigned int brightness){ return SetFeatureValue(handle, node, FEATURE_BRIGHTNESS, brightness);}intdc1394_get_exposure(raw1394handle_t handle, nodeid_t node, unsigned int *exposure){ return GetFeatureValue(handle, node, FEATURE_EXPOSURE, exposure);}intdc1394_set_exposure(raw1394handle_t handle, nodeid_t node, unsigned int exposure){ return SetFeatureValue(handle, node, FEATURE_EXPOSURE, exposure);}intdc1394_get_sharpness(raw1394handle_t handle, nodeid_t node, unsigned int *sharpness){ return GetFeatureValue(handle, node, FEATURE_SHARPNESS, sharpness);}intdc1394_set_sharpness(raw1394handle_t handle, nodeid_t node, unsigned int sharpness){ return SetFeatureValue(handle, node, FEATURE_SHARPNESS, sharpness);}intdc1394_get_white_balance(raw1394handle_t handle, nodeid_t node, unsigned int *u_b_value, unsigned int *v_r_value){ quadlet_t value; int retval= GetCameraControlRegister(handle, node, REG_CAMERA_WHITE_BALANCE, &value); *u_b_value= (unsigned int)((value & 0xFFF000UL) >> 12); *v_r_value= (unsigned int)(value & 0xFFFUL); return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_set_white_balance(raw1394handle_t handle, nodeid_t node, unsigned int u_b_value, unsigned int v_r_value){ int retval; quadlet_t curval; if (GetCameraControlRegister(handle, node, REG_CAMERA_WHITE_BALANCE, &curval) < 0) { return DC1394_FAILURE; } curval= (curval & 0xFF000000UL) | ( ((u_b_value & 0xFFFUL) << 12) | (v_r_value & 0xFFFUL) ); retval= SetCameraControlRegister(handle, node, REG_CAMERA_WHITE_BALANCE, curval); return (retval ? DC1394_FAILURE : DC1394_SUCCESS);}intdc1394_get_hue(raw1394handle_t handle, nodeid_t node, unsigned int *hue){ return G
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -