/** * Set the specified camera to all the specified settings * @param camera Pointer to camera component * @param params Pointer to parameter block containing parameters * @return 0 if successful, none-zero if unsuccessful. */ int raspicamcontrol_set_all_parameters(MMAL_COMPONENT_T *camera, const RASPICAM_CAMERA_PARAMETERS *params) { int result; result = raspicamcontrol_set_saturation(camera, params->saturation); result += raspicamcontrol_set_sharpness(camera, params->sharpness); result += raspicamcontrol_set_contrast(camera, params->contrast); result += raspicamcontrol_set_brightness(camera, params->brightness); result += raspicamcontrol_set_ISO(camera, params->ISO); result += raspicamcontrol_set_video_stabilisation(camera, params->videoStabilisation); result += raspicamcontrol_set_exposure_compensation(camera, params->exposureCompensation); result += raspicamcontrol_set_exposure_mode(camera, params->exposureMode); result += raspicamcontrol_set_metering_mode(camera, params->exposureMeterMode); result += raspicamcontrol_set_awb_mode(camera, params->awbMode); result += raspicamcontrol_set_awb_gains(camera, params->awb_gains_r, params->awb_gains_b); result += raspicamcontrol_set_imageFX(camera, params->imageEffect); result += raspicamcontrol_set_colourFX(camera, ¶ms->colourEffects); //result += raspicamcontrol_set_thumbnail_parameters(camera, ¶ms->thumbnailConfig); TODO Not working for some reason result += raspicamcontrol_set_rotation(camera, params->rotation); result += raspicamcontrol_set_flips(camera, params->hflip, params->vflip); result += raspicamcontrol_set_ROI(camera, params->roi); result += raspicamcontrol_set_shutter_speed(camera, params->shutter_speed); result += raspicamcontrol_set_DRC(camera, params->drc_level); result += raspicamcontrol_set_stats_pass(camera, params->stats_pass); result += raspicamcontrol_set_annotate(camera, params->enable_annotate, params->annotate_string, params->annotate_text_size, params->annotate_text_colour, params->annotate_bg_colour); return result; }
/** * Set the specified camera to all the specified settings * @param camera Pointer to camera component * @param params Pointer to parameter block containing parameters * @return 0 if successful, none-zero if unsuccessful. */ int raspicamcontrol_set_all_parameters(MMAL_COMPONENT_T *camera, const RASPICAM_CAMERA_PARAMETERS *params) { int result; result = raspicamcontrol_set_saturation(camera, params->saturation); result += raspicamcontrol_set_sharpness(camera, params->sharpness); result += raspicamcontrol_set_contrast(camera, params->contrast); result += raspicamcontrol_set_brightness(camera, params->brightness); //result += raspicamcontrol_set_ISO(camera, params->ISO); TODO Not working for some reason result += raspicamcontrol_set_video_stabilisation(camera, params->videoStabilisation); result += raspicamcontrol_set_exposure_compensation(camera, params->exposureCompensation); result += raspicamcontrol_set_exposure_mode(camera, params->exposureMode); result += raspicamcontrol_set_metering_mode(camera, params->exposureMeterMode); result += raspicamcontrol_set_awb_mode(camera, params->awbMode); result += raspicamcontrol_set_imageFX(camera, params->imageEffect); result += raspicamcontrol_set_colourFX(camera, ¶ms->colourEffects); //result += raspicamcontrol_set_thumbnail_parameters(camera, ¶ms->thumbnailConfig); TODO Not working for some reason result += raspicamcontrol_set_rotation(camera, params->rotation); result += raspicamcontrol_set_flips(camera, params->hflip, params->vflip); return result; }
int raspicamcontrol_cycle_test(MMAL_COMPONENT_T *camera) { static int parameter = 0; static int parameter_option = parameter_reset; // which value the parameter currently has vcos_assert(camera); // We are going to cycle through all the relevant entries in the parameter block // and send options to the camera. if (parameter == 0) { // sharpness if (update_cycle_parameter(¶meter_option, -100, 100, 10)) raspicamcontrol_set_sharpness(camera, parameter_option); else { raspicamcontrol_set_sharpness(camera, 0); parameter++; } } else if (parameter == 1) { // contrast if (update_cycle_parameter(¶meter_option, -100, 100, 10)) raspicamcontrol_set_contrast(camera, parameter_option); else { raspicamcontrol_set_contrast(camera, 0); parameter++; } } else if (parameter == 2) { // brightness if (update_cycle_parameter(¶meter_option, 0, 100, 10)) raspicamcontrol_set_brightness(camera, parameter_option); else { raspicamcontrol_set_brightness(camera, 50); parameter++; } } else if (parameter == 3) { // contrast if (update_cycle_parameter(¶meter_option, -100, 100, 10)) raspicamcontrol_set_saturation(camera, parameter_option); else { parameter++; raspicamcontrol_set_saturation(camera, 0); } } else if (parameter == 4) { // EV if (update_cycle_parameter(¶meter_option, -10, 10, 4)) raspicamcontrol_set_exposure_compensation(camera, parameter_option); else { raspicamcontrol_set_exposure_compensation(camera, 0); parameter++; } } else if (parameter == 5) { // MMAL_PARAM_EXPOSUREMODE_T if (update_cycle_parameter(¶meter_option, 0, exposure_map_size, 1)) raspicamcontrol_set_exposure_mode(camera, exposure_map[parameter_option].mmal_mode); else { raspicamcontrol_set_exposure_mode(camera, MMAL_PARAM_EXPOSUREMODE_AUTO); parameter++; } } else if (parameter == 6) { // MMAL_PARAM_AWB_T if (update_cycle_parameter(¶meter_option, 0, awb_map_size, 1)) raspicamcontrol_set_awb_mode(camera, awb_map[parameter_option].mmal_mode); else { raspicamcontrol_set_awb_mode(camera, MMAL_PARAM_AWBMODE_AUTO); parameter++; } } if (parameter == 7) { // MMAL_PARAM_IMAGEFX_T if (update_cycle_parameter(¶meter_option, 0, imagefx_map_size, 1)) raspicamcontrol_set_imageFX(camera, imagefx_map[parameter_option].mmal_mode); else { raspicamcontrol_set_imageFX(camera, MMAL_PARAM_IMAGEFX_NONE); parameter++; } } if (parameter == 8) { MMAL_PARAM_COLOURFX_T colfx = {0,0,0}; switch (parameter_option) { case parameter_reset : parameter_option = 1; colfx.u = 128; colfx.v = 128; break; case 1 : parameter_option = 2; colfx.u = 100; colfx.v = 200; break; case 2 : parameter_option = parameter_reset; colfx.enable = 0; parameter++; break; } raspicamcontrol_set_colourFX(camera, &colfx); } // Orientation if (parameter == 9) { switch (parameter_option) { case parameter_reset: raspicamcontrol_set_rotation(camera, 90); parameter_option = 1; break; case 1 : raspicamcontrol_set_rotation(camera, 180); parameter_option = 2; break; case 2 : raspicamcontrol_set_rotation(camera, 270); parameter_option = 3; break; case 3 : { raspicamcontrol_set_rotation(camera, 0); raspicamcontrol_set_flips(camera, 1,0); parameter_option = 4; break; } case 4 : { raspicamcontrol_set_flips(camera, 0,1); parameter_option = 5; break; } case 5 : { raspicamcontrol_set_flips(camera, 1, 1); parameter_option = 6; break; } case 6 : { raspicamcontrol_set_flips(camera, 0, 0); parameter_option = parameter_reset; parameter++; break; } } } if (parameter == 10) { parameter = 1; return 0; } return 1; }
bool CCamera::Init(int width, int height, int framerate, int num_levels, bool do_argb_conversion) { //init broadcom host - QUESTION: can this be called more than once?? bcm_host_init(); //store basic parameters Width = width; Height = height; FrameRate = framerate; // Set up the camera_parameters to default raspicamcontrol_set_defaults(&CameraParameters); MMAL_COMPONENT_T *camera = 0; MMAL_COMPONENT_T *splitter = 0; MMAL_CONNECTION_T* vid_to_split_connection = 0; MMAL_PORT_T *video_port = NULL; MMAL_STATUS_T status; CCameraOutput* outputs[4]; memset(outputs,0,sizeof(outputs)); //create the camera component camera = CreateCameraComponentAndSetupPorts(); if (!camera) goto error; //get the video port video_port = camera->output[MMAL_CAMERA_VIDEO_PORT]; video_port->buffer_num = 3; //create the splitter component splitter = CreateSplitterComponentAndSetupPorts(video_port); if(!splitter) goto error; //create and enable a connection between the video output and the resizer input status = mmal_connection_create(&vid_to_split_connection, video_port, splitter->input[0], MMAL_CONNECTION_FLAG_TUNNELLING | MMAL_CONNECTION_FLAG_ALLOCATION_ON_INPUT); if (status != MMAL_SUCCESS) { printf("Failed to create connection\n"); goto error; } status = mmal_connection_enable(vid_to_split_connection); if (status != MMAL_SUCCESS) { printf("Failed to enable connection\n"); goto error; } //setup all the outputs for(int i = 0; i < num_levels; i++) { outputs[i] = new CCameraOutput(); if(!outputs[i]->Init(Width >> i,Height >> i,splitter,i,do_argb_conversion)) { printf("Failed to initialize output %d\n",i); goto error; } } //begin capture if (mmal_port_parameter_set_boolean(video_port, MMAL_PARAMETER_CAPTURE, 1) != MMAL_SUCCESS) { printf("Failed to start capture\n"); goto error; } //store created info CameraComponent = camera; SplitterComponent = splitter; VidToSplitConn = vid_to_split_connection; memcpy(Outputs,outputs,sizeof(outputs)); //custom parameters raspicamcontrol_set_saturation(camera, 0); raspicamcontrol_set_contrast(camera, 100); raspicamcontrol_set_brightness(camera, 50); //raspicamcontrol_set_exposure_mode(camera, MMAL_PARAM_EXPOSUREMODE_OFF); //raspicamcontrol_set_awb_mode(camera, MMAL_PARAM_AWBMODE_OFF); raspicamcontrol_set_shutter_speed(camera, 2400); //return success printf("Camera successfully created\n"); return true; error: if(vid_to_split_connection) mmal_connection_destroy(vid_to_split_connection); if(camera) mmal_component_destroy(camera); if(splitter) mmal_component_destroy(splitter); for(int i = 0; i < 4; i++) { if(outputs[i]) { outputs[i]->Release(); delete outputs[i]; } } return false; }
void CCamera::setBrightness(int brightness) { raspicamcontrol_set_brightness(CameraComponent, brightness); }
void CCamera::setContrast(int contrast) { raspicamcontrol_set_brightness(CameraComponent, contrast); }