@@ -123,6 +123,8 @@ public:
*/
MediaPipeline pipe_;
+ bool usesDewarper_;
+
private:
void paramsComputed(unsigned int frame, unsigned int bytesused);
void setSensorControls(unsigned int frame,
@@ -234,7 +236,6 @@ private:
std::unique_ptr<V4L2M2MConverter> dewarper_;
Rectangle scalerMaxCrop_;
- bool useDewarper_;
std::optional<Rectangle> activeCrop_;
@@ -285,7 +286,7 @@ RkISP1FrameInfo *RkISP1Frames::create(const RkISP1CameraData *data, Request *req
statBuffer = pipe_->availableStatBuffers_.front();
pipe_->availableStatBuffers_.pop();
- if (pipe_->useDewarper_) {
+ if (data->usesDewarper_) {
mainPathBuffer = pipe_->availableMainPathBuffers_.front();
pipe_->availableMainPathBuffers_.pop();
}
@@ -715,8 +716,7 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()
*/
PipelineHandlerRkISP1::PipelineHandlerRkISP1(CameraManager *manager)
- : PipelineHandler(manager, kRkISP1MaxQueuedRequests),
- hasSelfPath_(true), useDewarper_(false)
+ : PipelineHandler(manager, kRkISP1MaxQueuedRequests), hasSelfPath_(true)
{
}
@@ -879,7 +879,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
const PixelFormat &streamFormat = config->at(0).pixelFormat;
const PixelFormatInfo &info = PixelFormatInfo::info(streamFormat);
isRaw_ = info.colourEncoding == PixelFormatInfo::ColourEncodingRAW;
- useDewarper_ = dewarper_ && !isRaw_;
+ data->usesDewarper_ = dewarper_ && !isRaw_;
/* YUYV8_2X8 is required on the ISP source path pad for YUV output. */
if (!isRaw_)
@@ -893,7 +893,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
/* imx8mp has only a single path. */
const auto &cfg = config->at(0);
Size ispCrop = format.size.boundedToAspectRatio(cfg.size);
- if (useDewarper_)
+ if (data->usesDewarper_)
ispCrop = dewarper_->adjustInputSize(cfg.pixelFormat,
ispCrop);
else
@@ -934,7 +934,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
streamConfig[0] = IPAStream(cfg.pixelFormat,
cfg.size);
/* Configure dewarp */
- if (dewarper_ && !isRaw_) {
+ if (data->usesDewarper_) {
outputCfgs.push_back(const_cast<StreamConfiguration &>(cfg));
ret = dewarper_->configure(cfg, outputCfgs);
if (ret)
@@ -999,7 +999,7 @@ int PipelineHandlerRkISP1::exportFrameBuffers([[maybe_unused]] Camera *camera, S
* It has mainpath and no self path. Hence, export buffers from
* dewarper just for the main path stream, for now.
*/
- if (useDewarper_)
+ if (data->usesDewarper_)
return dewarper_->exportBuffers(&data->mainPathStream_, count, buffers);
else
return mainPath_.exportBuffers(count, buffers);
@@ -1033,7 +1033,7 @@ int PipelineHandlerRkISP1::allocateBuffers(Camera *camera)
}
/* If the dewarper is being used, allocate internal buffers for ISP. */
- if (useDewarper_) {
+ if (data->usesDewarper_) {
ret = mainPath_.exportBuffers(kRkISP1MinBufferCount, &mainPathBuffers_);
if (ret < 0)
return ret;
@@ -1158,7 +1158,7 @@ int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] const ControlL
}
actions += [&]() { stat_->streamOff(); };
- if (useDewarper_) {
+ if (data->usesDewarper_) {
ret = dewarper_->start();
if (ret) {
LOG(RkISP1, Error) << "Failed to start dewarper";
@@ -1215,7 +1215,7 @@ void PipelineHandlerRkISP1::stopDevice(Camera *camera)
LOG(RkISP1, Warning)
<< "Failed to stop parameters for " << camera->id();
- if (useDewarper_)
+ if (data->usesDewarper_)
dewarper_->stop();
}
@@ -1311,7 +1311,7 @@ int PipelineHandlerRkISP1::updateControls(RkISP1CameraData *data)
{
ControlInfoMap::Map controls;
- if (dewarper_) {
+ if (data->usesDewarper_) {
std::pair<Rectangle, Rectangle> cropLimits;
if (dewarper_->isConfigured(&data->mainPathStream_))
cropLimits = dewarper_->inputCropBounds(&data->mainPathStream_);
@@ -1479,7 +1479,7 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
this, &PipelineHandlerRkISP1::dewarpBufferReady);
LOG(RkISP1, Info)
- << "Using DW100 dewarper " << dewarper_->deviceNode();
+ << "Found DW100 dewarper " << dewarper_->deviceNode();
} else {
LOG(RkISP1, Warning)
<< "Found DW100 dewarper " << dewarper_->deviceNode()
@@ -1584,7 +1584,7 @@ void PipelineHandlerRkISP1::imageBufferReady(FrameBuffer *buffer)
info->metadataProcessed = true;
}
- if (!useDewarper_) {
+ if (!data->usesDewarper_) {
completeBuffer(request, buffer);
tryCompleteRequest(info);
The decision if the dewarper shall be used is not per pipeline but per camera and per configuration (raw streams can't use it). Move the corresponding flag into the camera data class. Rename the flag to "usesDewarper" which is easier understand when we later add the ability to enable/disable the dewarper on a per camera basis which will be expressed using a "canUseDewarper" flag. Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> --- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 28 ++++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-)