/** * Parse a possible command pair - command and parameter * @param arg1 Command * @param arg2 Parameter (could be NULL) * @return How many parameters were used, 0,1,2 */ int raspicamcontrol_parse_cmdline(RASPICAM_CAMERA_PARAMETERS *params, const char *arg1, const char *arg2) { int command_id, used = 0, num_parameters; if (!arg1) return 0; command_id = raspicli_get_command_id(cmdline_commands, cmdline_commands_size, arg1, &num_parameters); // If invalid command, or we are missing a parameter, drop out if (command_id==-1 || (command_id != -1 && num_parameters > 0 && arg2 == NULL)) return 0; switch (command_id) { case CommandSharpness : // sharpness - needs single number parameter sscanf(arg2, "%d", ¶ms->sharpness); used = 2; break; case CommandContrast : // contrast - needs single number parameter sscanf(arg2, "%d", ¶ms->contrast); used = 2; break; case CommandBrightness : // brightness - needs single number parameter sscanf(arg2, "%d", ¶ms->brightness); used = 2; break; case CommandSaturation : // saturation - needs single number parameter sscanf(arg2, "%d", ¶ms->saturation); used = 2; break; case CommandISO : // ISO - needs single number parameter sscanf(arg2, "%d", ¶ms->ISO); used = 2; break; case CommandVideoStab : // video stabilisation - if here, its on params->videoStabilisation = 1; used = 1; break; case CommandEVComp : // EV - needs single number parameter sscanf(arg2, "%d", ¶ms->exposureCompensation); used = 2; break; case CommandExposure : // exposure mode - needs string params->exposureMode = exposure_mode_from_string(arg2); used = 2; break; case CommandAWB : // AWB mode - needs single number parameter params->awbMode = awb_mode_from_string(arg2); used = 2; break; case CommandImageFX : // Image FX - needs string params->imageEffect = imagefx_mode_from_string(arg2); used = 2; break; case CommandColourFX : // Colour FX - needs string "u:v" sscanf(arg2, "%d:%d", ¶ms->colourEffects.u, ¶ms->colourEffects.v); params->colourEffects.enable = 1; used = 2; break; case CommandMeterMode: params->exposureMeterMode = metering_mode_from_string(arg2); used = 2; break; case CommandRotation : // Rotation - degree sscanf(arg2, "%d", ¶ms->rotation); used = 2; break; case CommandHFlip : params->hflip = 1; used = 1; break; case CommandVFlip : params->vflip = 1; used = 1; break; case CommandROI : { double x,y,w,h; int args; args = sscanf(arg2, "%lf,%lf,%lf,%lf", &x,&y,&w,&h); if (args != 4 || x > 1.0 || y > 1.0 || w > 1.0 || h > 1.0) { return 0; } // Make sure we stay within bounds if (x + w > 1.0) w = 1 - x; if (y + h > 1.0) h = 1 - y; params->roi.x = x; params->roi.y = y; params->roi.w = w; params->roi.h = h; used = 2; break; } case CommandShutterSpeed : // Shutter speed needs single number parameter { sscanf(arg2, "%d", ¶ms->shutter_speed); used = 2; break; } case CommandAwbGains : { double r,b; int args; args = sscanf(arg2, "%lf,%lf", &r,&b); if (args != 2 || r > 8.0 || b > 8.0) { return 0; } params->awb_gains_r = r; params->awb_gains_b = b; used = 2; break; } case CommandDRCLevel: { params->drc_level = drc_mode_from_string(arg2); used = 2; break; } case CommandStatsPass: { params->stats_pass = MMAL_TRUE; used = 1; break; } case CommandAnnotate: { // If parameter is a number, assume its a bitmask, otherwise a string if (isdigit(*arg2)) { sscanf(arg2, "%u", ¶ms->enable_annotate); } else { params->enable_annotate = ANNOTATE_USER_TEXT; //copy string char by char and replace "\n" with newline character unsigned char c; char const *s = arg2; char *t = ¶ms->annotate_string[0]; int n=0; while ((c = *s++) && n < MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN_V3-1) { if (c == '\\' && *s) { switch (c = *s++) { case 'n': c = '\n'; break; default: c = '\\'; s--; break; } } *(t++) = c; n++; } *t='\0'; //params->annotate_string[MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN_V3-1] = '\0'; } used=2; break; } case CommandAnnotateExtras: { // 3 parameters - text size (6-80), text colour (Hex VVUUYY) and background colour (Hex VVUUYY) sscanf(arg2, "%u,%X,%X", ¶ms->annotate_text_size, ¶ms->annotate_text_colour, ¶ms->annotate_bg_colour); used=2; break; } case CommandStereoMode: { params->stereo_mode.mode = stereo_mode_from_string(arg2); used = 2; break; } case CommandStereoDecimate: { params->stereo_mode.decimate = MMAL_TRUE; used = 1; break; } case CommandStereoSwap: { params->stereo_mode.swap_eyes = MMAL_TRUE; used = 1; break; } } return used; }
/** * Parse a possible command pair - command and parameter * @param arg1 Command * @param arg2 Parameter (could be NULL) * @return How many parameters were used, 0,1,2 */ int raspicamcontrol_parse_cmdline(RASPICAM_CAMERA_PARAMETERS *params, const char *arg1, const char *arg2) { int command_id, used = 0, num_parameters; if (!arg1) return 0; command_id = raspicli_get_command_id(cmdline_commands, cmdline_commands_size, arg1, &num_parameters); // If invalid command, or we are missing a parameter, drop out if (command_id==-1 || (command_id != -1 && num_parameters > 0 && arg2 == NULL)) return 0; switch (command_id) { case CommandSharpness : // sharpness - needs single number parameter sscanf(arg2, "%d", ¶ms->sharpness); used = 2; break; case CommandContrast : // contrast - needs single number parameter sscanf(arg2, "%d", ¶ms->contrast); used = 2; break; case CommandBrightness : // brightness - needs single number parameter sscanf(arg2, "%d", ¶ms->brightness); used = 2; break; case CommandSaturation : // saturation - needs single number parameter sscanf(arg2, "%d", ¶ms->saturation); used = 2; break; case CommandISO : // ISO - needs single number parameter sscanf(arg2, "%d", ¶ms->ISO); used = 2; break; case CommandVideoStab : // video stabilisation - if here, its on params->videoStabilisation = 1; used = 1; break; case CommandEVComp : // EV - needs single number parameter sscanf(arg2, "%d", ¶ms->exposureCompensation); used = 2; break; case CommandExposure : // exposure mode - needs string params->exposureMode = exposure_mode_from_string(arg2); used = 2; break; case CommandAWB : // AWB mode - needs single number parameter params->awbMode = awb_mode_from_string(arg2); used = 2; break; case CommandImageFX : // Image FX - needs string params->imageEffect = imagefx_mode_from_string(arg2); used = 2; break; case CommandColourFX : // Colour FX - needs string "u:v" sscanf(arg2, "%d:%d", ¶ms->colourEffects.u, ¶ms->colourEffects.u); params->colourEffects.enable = 1; used = 2; break; case CommandMeterMode: params->exposureMeterMode = metering_mode_from_string(arg2); used = 2; break; case CommandRotation : // Rotation - degree sscanf(arg2, "%d", ¶ms->rotation); used = 2; break; case CommandHFlip : params->hflip = 1; used = 1; break; case CommandVFlip : params->vflip = 1; used = 1; break; } return used; }
/** * Parse a possible command pair - command and parameter * @param arg1 Command * @param arg2 Parameter (could be NULL) * @return How many parameters were used, 0,1,2 */ int raspicamcontrol_parse_cmdline(RASPICAM_CAMERA_PARAMETERS *params, const char *arg1, const char *arg2) { int command_id, used = 0, num_parameters; if (!arg1) return 0; command_id = raspicli_get_command_id(cmdline_commands, cmdline_commands_size, arg1, &num_parameters); // If invalid command, or we are missing a parameter, drop out if (command_id==-1 || (command_id != -1 && num_parameters > 0 && arg2 == NULL)) return 0; switch (command_id) { case CommandSharpness : // sharpness - needs single number parameter sscanf(arg2, "%d", ¶ms->sharpness); used = 2; break; case CommandContrast : // contrast - needs single number parameter sscanf(arg2, "%d", ¶ms->contrast); used = 2; break; case CommandBrightness : // brightness - needs single number parameter sscanf(arg2, "%d", ¶ms->brightness); used = 2; break; case CommandSaturation : // saturation - needs single number parameter sscanf(arg2, "%d", ¶ms->saturation); used = 2; break; case CommandISO : // ISO - needs single number parameter sscanf(arg2, "%d", ¶ms->ISO); used = 2; break; case CommandVideoStab : // video stabilisation - if here, its on params->videoStabilisation = 1; used = 1; break; case CommandEVComp : // EV - needs single number parameter sscanf(arg2, "%d", ¶ms->exposureCompensation); used = 2; break; case CommandExposure : // exposure mode - needs string params->exposureMode = exposure_mode_from_string(arg2); used = 2; break; case CommandAWB : // AWB mode - needs single number parameter params->awbMode = awb_mode_from_string(arg2); used = 2; break; case CommandImageFX : // Image FX - needs string params->imageEffect = imagefx_mode_from_string(arg2); used = 2; break; case CommandColourFX : // Colour FX - needs string "u:v" sscanf(arg2, "%d:%d", ¶ms->colourEffects.u, ¶ms->colourEffects.u); params->colourEffects.enable = 1; used = 2; break; case CommandMeterMode: params->exposureMeterMode = metering_mode_from_string(arg2); used = 2; break; case CommandRotation : // Rotation - degree sscanf(arg2, "%d", ¶ms->rotation); used = 2; break; case CommandHFlip : params->hflip = 1; used = 1; break; case CommandVFlip : params->vflip = 1; used = 1; break; case CommandROI : { double x,y,w,h; int args; args = sscanf(arg2, "%lf,%lf,%lf,%lf", &x,&y,&w,&h); if (args != 4 || x > 1.0 || y > 1.0 || w > 1.0 || h > 1.0) { return 0; } // Make sure we stay within bounds if (x + w > 1.0) w = 1 - x; if (y + h > 1.0) h = 1 - y; params->roi.x = x; params->roi.y = y; params->roi.w = w; params->roi.h = h; used = 2; break; } case CommandShutterSpeed : // Shutter speed needs single parameter params->shutter_speed = shutter_speed_from_string(arg2); used = 2; break; } return used; }