parent
55b8985c8d
commit
141ee331c6
|
@ -378,62 +378,6 @@ bool camera_start(camera_t *cam) {
|
|||
fill_dynamic_controls(camp->ctrls.get(), camp->params);
|
||||
|
||||
if (camp->camera->controls().count(&controls::AfMode) > 0) {
|
||||
int af_mode;
|
||||
if (strcmp(camp->params->af_mode, "manual") == 0) {
|
||||
af_mode = controls::AfModeManual;
|
||||
} else if (strcmp(camp->params->af_mode, "continuous") == 0) {
|
||||
af_mode = controls::AfModeContinuous;
|
||||
} else {
|
||||
af_mode = controls::AfModeAuto;
|
||||
}
|
||||
camp->ctrls->set(controls::AfMode, af_mode);
|
||||
|
||||
if (af_mode == controls::AfModeManual) {
|
||||
camp->ctrls->set(controls::LensPosition, camp->params->lens_position);
|
||||
}
|
||||
}
|
||||
|
||||
if (camp->camera->controls().count(&controls::AfRange) > 0) {
|
||||
int af_range;
|
||||
if (strcmp(camp->params->af_range, "macro") == 0) {
|
||||
af_range = controls::AfRangeMacro;
|
||||
} else if (strcmp(camp->params->af_range, "full") == 0) {
|
||||
af_range = controls::AfRangeFull;
|
||||
} else {
|
||||
af_range = controls::AfRangeNormal;
|
||||
}
|
||||
camp->ctrls->set(controls::AfRange, af_range);
|
||||
}
|
||||
|
||||
if (camp->camera->controls().count(&controls::AfSpeed) > 0) {
|
||||
int af_speed;
|
||||
if (strcmp(camp->params->af_range, "fast") == 0) {
|
||||
af_speed = controls::AfSpeedFast;
|
||||
} else {
|
||||
af_speed = controls::AfSpeedNormal;
|
||||
}
|
||||
camp->ctrls->set(controls::AfSpeed, af_speed);
|
||||
}
|
||||
|
||||
if (camp->params->roi != NULL) {
|
||||
std::optional<Rectangle> opt = camp->camera->properties().get(properties::ScalerCropMaximum);
|
||||
Rectangle sensor_area;
|
||||
try {
|
||||
sensor_area = opt.value();
|
||||
} catch(const std::bad_optional_access& exc) {
|
||||
set_error("get(ScalerCropMaximum) failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
Rectangle crop(
|
||||
camp->params->roi->x * sensor_area.width,
|
||||
camp->params->roi->y * sensor_area.height,
|
||||
camp->params->roi->width * sensor_area.width,
|
||||
camp->params->roi->height * sensor_area.height);
|
||||
crop.translateBy(sensor_area.topLeft());
|
||||
camp->ctrls->set(controls::ScalerCrop, crop);
|
||||
}
|
||||
|
||||
if (camp->params->af_window != NULL) {
|
||||
std::optional<Rectangle> opt = camp->camera->properties().get(properties::ScalerCropMaximum);
|
||||
Rectangle sensor_area;
|
||||
|
@ -457,6 +401,60 @@ bool camera_start(camera_t *cam) {
|
|||
camp->ctrls->set(controls::AfWindows, afwindows_rectangle);
|
||||
}
|
||||
|
||||
int af_mode;
|
||||
if (strcmp(camp->params->af_mode, "manual") == 0) {
|
||||
af_mode = controls::AfModeManual;
|
||||
} else if (strcmp(camp->params->af_mode, "continuous") == 0) {
|
||||
af_mode = controls::AfModeContinuous;
|
||||
} else {
|
||||
af_mode = controls::AfModeAuto;
|
||||
}
|
||||
camp->ctrls->set(controls::AfMode, af_mode);
|
||||
|
||||
int af_range;
|
||||
if (strcmp(camp->params->af_range, "macro") == 0) {
|
||||
af_range = controls::AfRangeMacro;
|
||||
} else if (strcmp(camp->params->af_range, "full") == 0) {
|
||||
af_range = controls::AfRangeFull;
|
||||
} else {
|
||||
af_range = controls::AfRangeNormal;
|
||||
}
|
||||
camp->ctrls->set(controls::AfRange, af_range);
|
||||
|
||||
int af_speed;
|
||||
if (strcmp(camp->params->af_range, "fast") == 0) {
|
||||
af_speed = controls::AfSpeedFast;
|
||||
} else {
|
||||
af_speed = controls::AfSpeedNormal;
|
||||
}
|
||||
camp->ctrls->set(controls::AfSpeed, af_speed);
|
||||
|
||||
if (strcmp(camp->params->af_mode, "auto") == 0) {
|
||||
camp->ctrls->set(controls::AfTrigger, controls::AfTriggerStart);
|
||||
} else if (strcmp(camp->params->af_mode, "manual") == 0) {
|
||||
camp->ctrls->set(controls::LensPosition, camp->params->lens_position);
|
||||
}
|
||||
}
|
||||
|
||||
if (camp->params->roi != NULL) {
|
||||
std::optional<Rectangle> opt = camp->camera->properties().get(properties::ScalerCropMaximum);
|
||||
Rectangle sensor_area;
|
||||
try {
|
||||
sensor_area = opt.value();
|
||||
} catch(const std::bad_optional_access& exc) {
|
||||
set_error("get(ScalerCropMaximum) failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
Rectangle crop(
|
||||
camp->params->roi->x * sensor_area.width,
|
||||
camp->params->roi->y * sensor_area.height,
|
||||
camp->params->roi->width * sensor_area.width,
|
||||
camp->params->roi->height * sensor_area.height);
|
||||
crop.translateBy(sensor_area.topLeft());
|
||||
camp->ctrls->set(controls::ScalerCrop, crop);
|
||||
}
|
||||
|
||||
int res = camp->camera->start(camp->ctrls.get());
|
||||
if (res != 0) {
|
||||
set_error("Camera.start() failed");
|
||||
|
|
Loading…
Reference in New Issue