/** * Set the video stabilisation flag. Only used in video mode * @param camera Pointer to camera component * @param saturation Flag 0 off 1 on * @return 0 if successful, non-zero if any parameters out of range */ int raspicamcontrol_set_video_stabilisation(MMAL_COMPONENT_T *camera, int vstabilisation) { if (!camera) return 1; return mmal_status_to_int(mmal_port_parameter_set_boolean(camera->control, MMAL_PARAMETER_VIDEO_STABILISATION, vstabilisation)); }
/* Release All our images */ void cvCloseRPiCAM() { mmal_status_to_int(status); // Disable all our ports that are not handled by connections check_disable_port(camera_still_port); if (state.camera_component) { mmal_component_disable(state.camera_component); } if (status != 0) { raspicamcontrol_check_configuration(128); } //destroy_encoder_component(&state); raspipreview_destroy(&state.preview_parameters); destroy_camera_component(&state); cvReleaseImage(&yCSI_CAM); cvReleaseImage(&uCSI_CAM); cvReleaseImage(&uCSI_CAM_BIG); cvReleaseImage(&vCSI_CAM); cvReleaseImage(&vCSI_CAM_BIG); cvReleaseImage(&CSI_CAM_DSTIMAGE); cvReleaseImage(&CSI_CAM_IMAGE); }
/** * Adjust the ISO used for images * @param camera Pointer to camera component * @param ISO Value to set TODO : * @return 0 if successful, non-zero if any parameters out of range */ int raspicamcontrol_set_ISO(MMAL_COMPONENT_T *camera, int ISO) { if (!camera) return 1; return mmal_status_to_int(mmal_port_parameter_set_uint32(camera->control, MMAL_PARAMETER_ISO, ISO)); }
/** * Adjust the exposure time used for images * @param camera Pointer to camera component * @param shutter speed in microseconds * @return 0 if successful, non-zero if any parameters out of range */ int raspicamcontrol_set_shutter_speed(MMAL_COMPONENT_T *camera, int speed) { if (!camera) return 1; return mmal_status_to_int(mmal_port_parameter_set_uint32(camera->control, MMAL_PARAMETER_SHUTTER_SPEED, speed)); }
/** * Adjust the exposure compensation for images (EV) * @param camera Pointer to camera component * @param exp_comp Value to adjust, -10 to +10 * @return 0 if successful, non-zero if any parameters out of range */ int raspicamcontrol_set_exposure_compensation(MMAL_COMPONENT_T *camera, int exp_comp) { if (!camera) return 1; return mmal_status_to_int(mmal_port_parameter_set_int32(camera->control, MMAL_PARAMETER_EXPOSURE_COMP , exp_comp)); }
bool ProtoCameraSettings::CommitImageFX() { MMAL_PARAMETER_IMAGEFX_T imgFX = { { MMAL_PARAMETER_IMAGE_EFFECT,sizeof(imgFX) }, ( MMAL_PARAM_IMAGEFX_T )m_parameters.image_effect() }; return !mmal_status_to_int(mmal_port_parameter_set(m_component->m_mmal_component.GetControlPort(), &imgFX.hdr)); }
/** * Set the image effect for the images * @param camera Pointer to camera component * @param imageFX Value from * - MMAL_PARAM_IMAGEFX_NONE, * - MMAL_PARAM_IMAGEFX_NEGATIVE, * - MMAL_PARAM_IMAGEFX_SOLARIZE, * - MMAL_PARAM_IMAGEFX_POSTERIZE, * - MMAL_PARAM_IMAGEFX_WHITEBOARD, * - MMAL_PARAM_IMAGEFX_BLACKBOARD, * - MMAL_PARAM_IMAGEFX_SKETCH, * - MMAL_PARAM_IMAGEFX_DENOISE, * - MMAL_PARAM_IMAGEFX_EMBOSS, * - MMAL_PARAM_IMAGEFX_OILPAINT, * - MMAL_PARAM_IMAGEFX_HATCH, * - MMAL_PARAM_IMAGEFX_GPEN, * - MMAL_PARAM_IMAGEFX_PASTEL, * - MMAL_PARAM_IMAGEFX_WATERCOLOUR, * - MMAL_PARAM_IMAGEFX_FILM, * - MMAL_PARAM_IMAGEFX_BLUR, * - MMAL_PARAM_IMAGEFX_SATURATION, * - MMAL_PARAM_IMAGEFX_COLOURSWAP, * - MMAL_PARAM_IMAGEFX_WASHEDOUT, * - MMAL_PARAM_IMAGEFX_POSTERISE, * - MMAL_PARAM_IMAGEFX_COLOURPOINT, * - MMAL_PARAM_IMAGEFX_COLOURBALANCE, * - MMAL_PARAM_IMAGEFX_CARTOON, * @return 0 if successful, non-zero if any parameters out of range */ void CameraSettings::set_imageFX(MMAL_PARAM_IMAGEFX_T imageFX) { MMAL_PARAMETER_IMAGEFX_T imgFX = {{MMAL_PARAMETER_IMAGE_EFFECT,sizeof(imgFX)}, imageFX}; if (!camera) return; mmal_status_to_int(mmal_port_parameter_set(camera->control, &imgFX.hdr)); }
/** * Set the aWB (auto white balance) mode for images * @param camera Pointer to camera component * @param awb_mode Value to set from * - MMAL_PARAM_AWBMODE_OFF, * - MMAL_PARAM_AWBMODE_AUTO, * - MMAL_PARAM_AWBMODE_SUNLIGHT, * - MMAL_PARAM_AWBMODE_CLOUDY, * - MMAL_PARAM_AWBMODE_SHADE, * - MMAL_PARAM_AWBMODE_TUNGSTEN, * - MMAL_PARAM_AWBMODE_FLUORESCENT, * - MMAL_PARAM_AWBMODE_INCANDESCENT, * - MMAL_PARAM_AWBMODE_FLASH, * - MMAL_PARAM_AWBMODE_HORIZON, * @return 0 if successful, non-zero if any parameters out of range */ void CameraSettings::set_awb_mode(MMAL_PARAM_AWBMODE_T awb_mode) { MMAL_PARAMETER_AWBMODE_T param = {{MMAL_PARAMETER_AWB_MODE,sizeof(param)}, awb_mode}; if (!camera) return; mmal_status_to_int(mmal_port_parameter_set(camera->control, ¶m.hdr)); }
/** * Set exposure mode for images * @param camera Pointer to camera component * @param mode Exposure mode to set from * - MMAL_PARAM_EXPOSUREMODE_OFF, * - MMAL_PARAM_EXPOSUREMODE_AUTO, * - MMAL_PARAM_EXPOSUREMODE_NIGHT, * - MMAL_PARAM_EXPOSUREMODE_NIGHTPREVIEW, * - MMAL_PARAM_EXPOSUREMODE_BACKLIGHT, * - MMAL_PARAM_EXPOSUREMODE_SPOTLIGHT, * - MMAL_PARAM_EXPOSUREMODE_SPORTS, * - MMAL_PARAM_EXPOSUREMODE_SNOW, * - MMAL_PARAM_EXPOSUREMODE_BEACH, * - MMAL_PARAM_EXPOSUREMODE_VERYLONG, * - MMAL_PARAM_EXPOSUREMODE_FIXEDFPS, * - MMAL_PARAM_EXPOSUREMODE_ANTISHAKE, * - MMAL_PARAM_EXPOSUREMODE_FIREWORKS, * * @return 0 if successful, non-zero if any parameters out of range */ void CameraSettings::set_exposure_mode(MMAL_PARAM_EXPOSUREMODE_T mode) { MMAL_PARAMETER_EXPOSUREMODE_T exp_mode = {{MMAL_PARAMETER_EXPOSURE_MODE,sizeof(exp_mode)}, mode}; if (!camera) return; mmal_status_to_int(mmal_port_parameter_set(camera->control, &exp_mode.hdr)); }
void CameraSettings::set_metering_mode(MMAL_PARAM_EXPOSUREMETERINGMODE_T m_mode ) { MMAL_PARAMETER_EXPOSUREMETERINGMODE_T meter_mode = {{MMAL_PARAMETER_EXP_METERING_MODE,sizeof(meter_mode)}, m_mode}; if (!camera) return; mmal_status_to_int(mmal_port_parameter_set(camera->control, &meter_mode.hdr)); }
bool ProtoCameraSettings::CommitExposureMode() { MMAL_PARAMETER_EXPOSUREMODE_T exp_mode = { { MMAL_PARAMETER_EXPOSURE_MODE,sizeof(exp_mode)}, ( MMAL_PARAM_EXPOSUREMODE_T ) m_parameters.exposure_mode() }; return !mmal_status_to_int(mmal_port_parameter_set(m_component->m_mmal_component.GetControlPort(), &exp_mode.hdr)); }
/** * Set the image effect for the images * @param camera Pointer to camera component * @param imageFX Value from * - MMAL_PARAM_IMAGEFX_NONE, * - MMAL_PARAM_IMAGEFX_NEGATIVE, * - MMAL_PARAM_IMAGEFX_SOLARIZE, * - MMAL_PARAM_IMAGEFX_POSTERIZE, * - MMAL_PARAM_IMAGEFX_WHITEBOARD, * - MMAL_PARAM_IMAGEFX_BLACKBOARD, * - MMAL_PARAM_IMAGEFX_SKETCH, * - MMAL_PARAM_IMAGEFX_DENOISE, * - MMAL_PARAM_IMAGEFX_EMBOSS, * - MMAL_PARAM_IMAGEFX_OILPAINT, * - MMAL_PARAM_IMAGEFX_HATCH, * - MMAL_PARAM_IMAGEFX_GPEN, * - MMAL_PARAM_IMAGEFX_PASTEL, * - MMAL_PARAM_IMAGEFX_WATERCOLOUR, * - MMAL_PARAM_IMAGEFX_FILM, * - MMAL_PARAM_IMAGEFX_BLUR, * - MMAL_PARAM_IMAGEFX_SATURATION, * - MMAL_PARAM_IMAGEFX_COLOURSWAP, * - MMAL_PARAM_IMAGEFX_WASHEDOUT, * - MMAL_PARAM_IMAGEFX_POSTERISE, * - MMAL_PARAM_IMAGEFX_COLOURPOINT, * - MMAL_PARAM_IMAGEFX_COLOURBALANCE, * - MMAL_PARAM_IMAGEFX_CARTOON, * @return 0 if successful, non-zero if any parameters out of range */ int raspicamcontrol_set_imageFX(MMAL_COMPONENT_T *camera, MMAL_PARAM_IMAGEFX_T imageFX) { MMAL_PARAMETER_IMAGEFX_T imgFX = {{MMAL_PARAMETER_IMAGE_EFFECT,sizeof(imgFX)}, imageFX}; if (!camera) return 1; return mmal_status_to_int(mmal_port_parameter_set(camera->control, &imgFX.hdr)); }
bool ProtoCameraSettings::CommitMmalRationalFromInt( int value, int parameter, int constMin, int constMax ) { bool ret = false; if( value > constMin && value < constMax ) { MMAL_RATIONAL_T val = { value, 100 }; ret = !mmal_status_to_int( mmal_port_parameter_set_rational( m_component->m_mmal_component.GetControlPort(), parameter, val ) ); } return ret; }
/** * Set the aWB (auto white balance) mode for images * @param camera Pointer to camera component * @param awb_mode Value to set from * - MMAL_PARAM_AWBMODE_OFF, * - MMAL_PARAM_AWBMODE_AUTO, * - MMAL_PARAM_AWBMODE_SUNLIGHT, * - MMAL_PARAM_AWBMODE_CLOUDY, * - MMAL_PARAM_AWBMODE_SHADE, * - MMAL_PARAM_AWBMODE_TUNGSTEN, * - MMAL_PARAM_AWBMODE_FLUORESCENT, * - MMAL_PARAM_AWBMODE_INCANDESCENT, * - MMAL_PARAM_AWBMODE_FLASH, * - MMAL_PARAM_AWBMODE_HORIZON, * @return 0 if successful, non-zero if any parameters out of range */ int raspicamcontrol_set_awb_mode(MMAL_COMPONENT_T *camera, MMAL_PARAM_AWBMODE_T awb_mode) { MMAL_PARAMETER_AWBMODE_T param = {{MMAL_PARAMETER_AWB_MODE,sizeof(param)}, awb_mode}; if (!camera) return 1; return mmal_status_to_int(mmal_port_parameter_set(camera->control, ¶m.hdr)); }
/** * Adjust the metering mode for images * @param camera Pointer to camera component * @param saturation Value from following * - MMAL_PARAM_EXPOSUREMETERINGMODE_AVERAGE, * - MMAL_PARAM_EXPOSUREMETERINGMODE_SPOT, * - MMAL_PARAM_EXPOSUREMETERINGMODE_BACKLIT, * - MMAL_PARAM_EXPOSUREMETERINGMODE_MATRIX * @return 0 if successful, non-zero if any parameters out of range */ int raspicamcontrol_set_metering_mode(MMAL_COMPONENT_T *camera, MMAL_PARAM_EXPOSUREMETERINGMODE_T m_mode ) { MMAL_PARAMETER_EXPOSUREMETERINGMODE_T meter_mode = {{MMAL_PARAMETER_EXP_METERING_MODE,sizeof(meter_mode)}, m_mode}; if (!camera) return 1; return mmal_status_to_int(mmal_port_parameter_set(camera->control, &meter_mode.hdr)); }
/** * Set exposure mode for images * @param camera Pointer to camera component * @param mode Exposure mode to set from * - MMAL_PARAM_EXPOSUREMODE_OFF, * - MMAL_PARAM_EXPOSUREMODE_AUTO, * - MMAL_PARAM_EXPOSUREMODE_NIGHT, * - MMAL_PARAM_EXPOSUREMODE_NIGHTPREVIEW, * - MMAL_PARAM_EXPOSUREMODE_BACKLIGHT, * - MMAL_PARAM_EXPOSUREMODE_SPOTLIGHT, * - MMAL_PARAM_EXPOSUREMODE_SPORTS, * - MMAL_PARAM_EXPOSUREMODE_SNOW, * - MMAL_PARAM_EXPOSUREMODE_BEACH, * - MMAL_PARAM_EXPOSUREMODE_VERYLONG, * - MMAL_PARAM_EXPOSUREMODE_FIXEDFPS, * - MMAL_PARAM_EXPOSUREMODE_ANTISHAKE, * - MMAL_PARAM_EXPOSUREMODE_FIREWORKS, * * @return 0 if successful, non-zero if any parameters out of range */ int raspicamcontrol_set_exposure_mode(MMAL_COMPONENT_T *camera, MMAL_PARAM_EXPOSUREMODE_T mode) { MMAL_PARAMETER_EXPOSUREMODE_T exp_mode = {{MMAL_PARAMETER_EXPOSURE_MODE,sizeof(exp_mode)}, mode}; if (!camera) return 1; return mmal_status_to_int(mmal_port_parameter_set(camera->control, &exp_mode.hdr)); }
/** * Adjust the Dynamic range compression level * @param camera Pointer to camera component * @param strength Strength of DRC to apply * MMAL_PARAMETER_DRC_STRENGTH_OFF * MMAL_PARAMETER_DRC_STRENGTH_LOW * MMAL_PARAMETER_DRC_STRENGTH_MEDIUM * MMAL_PARAMETER_DRC_STRENGTH_HIGH * * @return 0 if successful, non-zero if any parameters out of range */ int raspicamcontrol_set_DRC(MMAL_COMPONENT_T *camera, MMAL_PARAMETER_DRC_STRENGTH_T strength) { MMAL_PARAMETER_DRC_T drc = {{MMAL_PARAMETER_DYNAMIC_RANGE_COMPRESSION, sizeof(MMAL_PARAMETER_DRC_T)}, strength}; if (!camera) return 1; return mmal_status_to_int(mmal_port_parameter_set(camera->control, &drc.hdr)); }
bool ProtoCameraSettings::CommitColorFX() { MMAL_PARAMETER_COLOURFX_T colfx = { { MMAL_PARAMETER_COLOUR_EFFECT, sizeof(colfx) }, m_parameters.color_effects().enable(), m_parameters.color_effects().u(), m_parameters.color_effects().v() }; return !mmal_status_to_int( mmal_port_parameter_set( m_component->m_mmal_component.GetControlPort(), &colfx.hdr ) ); }
bool ProtoCameraSettings::CommitFlips() { bool ret = false; MMAL_PARAMETER_MIRROR_T mirror = { { MMAL_PARAMETER_MIRROR, sizeof(MMAL_PARAMETER_MIRROR_T) }, MMAL_PARAM_MIRROR_NONE }; if ( m_parameters.horizontal_flip() && m_parameters.vertical_flip() ) mirror.value = MMAL_PARAM_MIRROR_BOTH; else if ( m_parameters.horizontal_flip() ) mirror.value = MMAL_PARAM_MIRROR_HORIZONTAL; else if ( m_parameters.vertical_flip() ) mirror.value = MMAL_PARAM_MIRROR_VERTICAL; ret = !mmal_status_to_int( mmal_port_parameter_set( m_component->m_preview_port->MmalPort(), &mirror.hdr) ); ret = !mmal_status_to_int( mmal_port_parameter_set( m_component->m_video_port->MmalPort(), &mirror.hdr) ); ret = !mmal_status_to_int( mmal_port_parameter_set( m_component->m_still_port->MmalPort(), &mirror.hdr) ); return ret; }
/** * Set the colour effect for images (Set UV component) * @param camera Pointer to camera component * @param colourFX Contains enable state and U and V numbers to set (e.g. 128,128 = Black and white) * @return 0 if successful, non-zero if any parameters out of range */ void CameraSettings::set_colourFX(const MMAL_PARAM_COLOURFX_T *colourFX) { MMAL_PARAMETER_COLOURFX_T colfx = {{MMAL_PARAMETER_COLOUR_EFFECT,sizeof(colfx)}, 0, 0, 0}; if (!camera) return; colfx.enable = colourFX->enable; colfx.u = colourFX->u; colfx.v = colourFX->v; mmal_status_to_int(mmal_port_parameter_set(camera->control, &colfx.hdr)); }
/** * Set the colour effect for images (Set UV component) * @param camera Pointer to camera component * @param colourFX Contains enable state and U and V numbers to set (e.g. 128,128 = Black and white) * @return 0 if successful, non-zero if any parameters out of range */ int raspicamcontrol_set_colourFX(MMAL_COMPONENT_T *camera, const MMAL_PARAM_COLOURFX_T *colourFX) { MMAL_PARAMETER_COLOURFX_T colfx = {{MMAL_PARAMETER_COLOUR_EFFECT,sizeof(colfx)}, 0, 0, 0}; if (!camera) return 1; colfx.enable = colourFX->enable; colfx.u = colourFX->u; colfx.v = colourFX->v; return mmal_status_to_int(mmal_port_parameter_set(camera->control, &colfx.hdr)); }
int raspicamcontrol_set_awb_gains(MMAL_COMPONENT_T *camera, float r_gain, float b_gain) { MMAL_PARAMETER_AWB_GAINS_T param = {{MMAL_PARAMETER_CUSTOM_AWB_GAINS,sizeof(param)}, {0,0}, {0,0}}; if (!camera) return 1; if (!r_gain || !b_gain) return 0; param.r_gain.num = (unsigned int)(r_gain * 65536); param.b_gain.num = (unsigned int)(b_gain * 65536); param.r_gain.den = param.b_gain.den = 65536; return mmal_status_to_int(mmal_port_parameter_set(camera->control, ¶m.hdr)); }
int mmal_encoder_set_camera_settings(MMAL_COMPONENT_T *camera ) { MMAL_PARAMETER_CAMERA_SETTINGS_T setting; memcpy(&setting, &camera_settings, sizeof( camera_settings)); setting.hdr.id = MMAL_PARAMETER_CAMERA_SETTINGS; setting.hdr.size = sizeof(setting); if (!camera) return 1; if( camera_setting_updated == 0 ) return 1; DLOG("Resetting camera setting with previous one"); mmal_encoder_print_camera_settings(); return mmal_status_to_int(mmal_port_parameter_set(camera->control, &setting.hdr)); }
/** * Set the sharpness of the image * @param camera Pointer to camera component * @param sharpness Sharpness adjustment -100 to 100 */ void CameraSettings::set_sharpness(int sharpness) { if (!camera) return; if (sharpness >= -100 && sharpness <= 100) { MMAL_RATIONAL_T value = {sharpness, 100}; mmal_status_to_int(mmal_port_parameter_set_rational(camera->control, MMAL_PARAMETER_SHARPNESS, value)); } else { ofLog(OF_LOG_ERROR, "Invalid sharpness value"); } }
/** * Set the contrast adjustment for the image * @param camera Pointer to camera component * @param contrast Contrast adjustment -100 to 100 * @return */ void CameraSettings::set_contrast(int contrast) { if (!camera) return; if (contrast >= -100 && contrast <= 100) { MMAL_RATIONAL_T value = {contrast, 100}; mmal_status_to_int(mmal_port_parameter_set_rational(camera->control, MMAL_PARAMETER_CONTRAST, value)); } else { ofLog(OF_LOG_ERROR, "Invalid contrast value"); } }
/** * Adjust the brightness level for images * @param camera Pointer to camera component * @param brightness Value to adjust, 0 to 100 * @return 0 if successful, non-zero if any parameters out of range */ void CameraSettings::set_brightness(int brightness) { if (!camera) return; if (brightness >= 0 && brightness <= 100) { MMAL_RATIONAL_T value = {brightness, 100}; mmal_status_to_int(mmal_port_parameter_set_rational(camera->control, MMAL_PARAMETER_BRIGHTNESS, value)); } else { ofLog(OF_LOG_ERROR, "Invalid brightness value"); } }
/** * Adjust the saturation level for images * @param camera Pointer to camera component * @param saturation Value to adjust, -100 to 100 * @return 0 if successful, non-zero if any parameters out of range */ void CameraSettings::set_saturation(int saturation) { if (!camera) return; if (saturation >= -100 && saturation <= 100) { MMAL_RATIONAL_T value = {saturation, 100}; mmal_status_to_int(mmal_port_parameter_set_rational(camera->control, MMAL_PARAMETER_SATURATION, value)); } else { ofLog(OF_LOG_ERROR, "Invalid saturation value"); } }
/** * Set the contrast adjustment for the image * @param camera Pointer to camera component * @param contrast Contrast adjustment -100 to 100 * @return */ int raspicamcontrol_set_contrast(MMAL_COMPONENT_T *camera, int contrast) { int ret = 0; if (!camera) return 1; if (contrast >= -100 && contrast <= 100) { MMAL_RATIONAL_T value = {contrast, 100}; ret = mmal_status_to_int(mmal_port_parameter_set_rational(camera->control, MMAL_PARAMETER_CONTRAST, value)); } else { vcos_log_error("Invalid contrast value"); ret = 1; } return ret; }
/** * Set the sharpness of the image * @param camera Pointer to camera component * @param sharpness Sharpness adjustment -100 to 100 */ int raspicamcontrol_set_sharpness(MMAL_COMPONENT_T *camera, int sharpness) { int ret = 0; if (!camera) return 1; if (sharpness >= -100 && sharpness <= 100) { MMAL_RATIONAL_T value = {sharpness, 100}; ret = mmal_status_to_int(mmal_port_parameter_set_rational(camera->control, MMAL_PARAMETER_SHARPNESS, value)); } else { vcos_log_error("Invalid sharpness value"); ret = 1; } return ret; }
/** * Adjust the brightness level for images * @param camera Pointer to camera component * @param brightness Value to adjust, 0 to 100 * @return 0 if successful, non-zero if any parameters out of range */ int raspicamcontrol_set_brightness(MMAL_COMPONENT_T *camera, int brightness) { int ret = 0; if (!camera) return 1; if (brightness >= 0 && brightness <= 100) { MMAL_RATIONAL_T value = {brightness, 100}; ret = mmal_status_to_int(mmal_port_parameter_set_rational(camera->control, MMAL_PARAMETER_BRIGHTNESS, value)); } else { vcos_log_error("Invalid brightness value"); ret = 1; } return ret; }