@@ -363,6 +363,7 @@ public:
std::unique_ptr<Converter> converter_;
std::unique_ptr<SoftwareIsp> swIsp_;
SimpleFrames frameInfo_;
+ std::optional<Rectangle> scalerCrop_;
private:
void tryPipeline(unsigned int code, const Size &size);
@@ -1022,10 +1023,10 @@ void SimpleCameraData::updateScalerCrop(const Size &inputSize, Transform transfo
}
}
- Rectangle crop = debayerCropToSensor(swIsp_->inputCrop(), inputSize,
- sensorInfo.analogCrop, sensorInfo.activeArea,
- transform);
- properties_.set(properties::ScalerCropMaximum, crop);
+ scalerCrop_ = debayerCropToSensor(swIsp_->inputCrop(), inputSize,
+ sensorInfo.analogCrop, sensorInfo.activeArea,
+ transform);
+ properties_.set(properties::ScalerCropMaximum, *scalerCrop_);
}
void SimpleCameraData::tryCompleteRequest(Request *request)
@@ -1042,6 +1043,9 @@ void SimpleCameraData::tryCompleteRequest(Request *request)
if (info->metadataRequired && !info->metadataProcessed)
return;
+ if (scalerCrop_)
+ request->_d()->metadata().set(controls::ScalerCrop, *scalerCrop_);
+
frameInfo_.destroy(info->frame);
pipe()->completeRequest(request);
}
@@ -1550,6 +1554,7 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
V4L2VideoDevice *video = data->video_;
int ret;
+ data->scalerCrop_.reset();
data->properties_ = data->sensor_->properties();
/*