From patchwork Fri Jun 3 22:07:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Rauch X-Patchwork-Id: 16143 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id AA342C326B for ; Fri, 3 Jun 2022 22:07:21 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 89C4765638; Sat, 4 Jun 2022 00:07:19 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1654294039; bh=i5YbH2fpAbEvT30PjxeDlgk5SUPAfgOejLuBK9CAmfc=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=gRXNCBknTQZ/G6cVdgrAQVroqgSTMBHzdVlc280Q9cCk9INixvsixTvVBEY+Eprc7 Dc2r3A7pFaL+4/3HajxFI5CzGulq69E8oFp05wH6KCYu4agvRi6KuxotsftfswXCRs XaKSANZfZM+gLS/waxfBQZ3K1xr0zx0ZhJ2biaTmVWnBZf3QVWgd8xYLbNrDFhIP2C trGZCd7KRrcL59HEQvjHKtETp3tuWvwW63Sd95uTERS25QaTP148dGYZe2/mnxalMJ EE+HVh4yHOPWoS8wZ+F7Se0SP0FpA0O8XfQCupYg11iDlUdrC610xzLUtOBG4/XWBJ le87/3TCxElFw== Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 49B5D633A4 for ; Sat, 4 Jun 2022 00:07:16 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=gmx.net header.i=@gmx.net header.b="F+RBslza"; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1654294036; bh=i5YbH2fpAbEvT30PjxeDlgk5SUPAfgOejLuBK9CAmfc=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=F+RBslza6N/vHfnTkdIRSGq5MGnog96VY9dTuaxFY+CUPqyMb+cLPwHdWclc1KCoe ipKPTaoxgIL2w6fDJiToEEc9cbwMjBJ0xmvu7LGLPjum69RautlcmndredQunX0DOE S9pt+flS/tqao4tcIW5aGmAUeJynoNY3T/JjA8BQ= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([92.18.80.244]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MEm6L-1nzESW3M43-00GLFX; Sat, 04 Jun 2022 00:07:15 +0200 To: libcamera-devel@lists.libcamera.org Date: Fri, 3 Jun 2022 23:07:08 +0100 Message-Id: <20220603220712.73673-2-Rauch.Christian@gmx.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220603220712.73673-1-Rauch.Christian@gmx.de> References: <20220603220712.73673-1-Rauch.Christian@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:4Wku12GC9+AMxLF+f5FJG+YH+beersrCBNw59KD+9RkGftuOFkz iLBYjH4M3Pz3w1Yb9tEPeIpsdxEcsq/z45qFEsSBk9662U8vtICiQXfHW5YY+OxvYIWMaXx XOjQ/CV2DtiJKXxufYPGGSizdfw1ZqUTlL8Kh9BLZeoUynv8NYCmJMrtqWyrT86H5dfu+0C FQZD5GWb/HAPQDWWhL5iA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:4pf/dJkHfOs=:bN4fWdSFf2PKDkQZGp0btM D6XAcVsuBVuHO9UeKfDj7FMGTDgMhYVfoC2UCbSUTu+7Kl1631LEtXoBTbaKKQhxKMZBfMXNa tHDXZsr8Mj0aJ2kLojeDu4/4oxCrSUSb5wOD8jnOg4N92OB6bBA+p1yUHshoFtDncdwPaPoZn sZWD2ZbbxDP5Z3tnt1Y+MWkB+Q332qzbzKNmCwX9WNbHu5V6F0dMJW4/7AHnQ3IAR4WeOjOqY s2AqQQ/Vr1M2pmpvQ/RG6ZNeA7WdJ0DRb6uI2b3PoKXTOMbRphOU/dmEQuqNRVYl0p/t1Hn+a mZKdo1cLgFThJ7WraQ3aaz96LxZMR1B6osK/tL276rbqYfjYksMK5yyDMt3Ko/YKzKPFwjHLY 81g6a0ZDjG7EVQeilOtCaZk962ggdHmIeeF+7P80LWh52oJbtELTVaj6rt/gnXpwtG5GU9wiH XREZlTuwv3/LRScZyBxLQBiuVUn1aWmzLLCkvWBekxVihBwZs2SGAwbnjgUGCTuOIJTyqvhrE A9dy+1ZDK0D2vTQI8oBhgKKuMwvCCc8C064BdXlQQ66bMzOiG2Lq9kb7NIT4puFvTsOYmRIwR kjP9tIaajKUPHOykGGgUiyjD2p+4TSWu2vxXCrEyEjIHKGOIMt6DKHGMYmYRUNM3f1MOp42Ub JLn4ghdGXuEyYeOYiFcI7uf+lLsy16B9YyjTWOPSKRAjKPAMxvrJ227vWvZ/T9Or5/MrwsltH mlIbWvsFpXHALEO7VH4xxXdqGOWeg1cv7rMpD9EPvHTCfbUwyPpX6XAPZ3DB+PP8kf0Gr8yPl aBsw5oVFPoIC4JCxidvtY5X3moXZ7Fn9I9xAN264vVfG8cMzISr56XNkosB3LzM18tnE4T6gH t9f1QOsAixVeeSj0C8gI4DAgTg3N2M+Vz48RQZf22oCJNs8UQySheHPUsW1b/58Tjt4k4EWWb cxH78vjq0p3A4S2WINKg+YNP46wr7FEkadx8Dys6xkEypimKZTaHfL1EVyIugZi5RxWX3PQHF moPz3ci08DBXpm+ZIT0Ch74ti+y3ZN/bIhzvz2PKg0MSVGr8MDfgKG+X7BsK2ZY8Z6JPe5MAH WJNRl+dCTK5j0PLZrJUrFmT6M3NZU1edW5VepC7Z1UyyHtUvo3ZlKa+7Q== Subject: [libcamera-devel] [PATCH v6 1/5] libcamera: controls: Use std::optional to handle invalid control values X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christian Rauch via libcamera-devel From: Christian Rauch Reply-To: Christian Rauch Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Previously, ControlList::get() would use default constructed objects to indicate that a ControlList does not have the requested Control. This has several disadvantages: 1) It requires types to be default constructible, 2) it does not differentiate between a default constructed object and an object that happens to have the same state as a default constructed object. std::optional additionally stores the information if the object is valid or not, and therefore is more expressive than a default constructed object. Signed-off-by: Christian Rauch Reviewed-by: Jacopo Mondi --- include/libcamera/controls.h | 5 +++-- src/android/camera_capabilities.cpp | 8 +++---- src/android/camera_device.cpp | 21 +++++++++---------- src/android/camera_hal_manager.cpp | 2 +- src/cam/main.cpp | 4 ++-- src/ipa/raspberrypi/raspberrypi.cpp | 2 +- src/libcamera/pipeline/ipu3/ipu3.cpp | 9 ++++---- .../pipeline/raspberrypi/raspberrypi.cpp | 9 ++++---- src/qcam/dng_writer.cpp | 15 +++++++------ 9 files changed, 39 insertions(+), 36 deletions(-) -- 2.34.1 diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h index 665bcac1..192be784 100644 --- a/include/libcamera/controls.h +++ b/include/libcamera/controls.h @@ -8,6 +8,7 @@ #pragma once #include +#include #include #include #include @@ -373,11 +374,11 @@ public: bool contains(unsigned int id) const; template - T get(const Control &ctrl) const + std::optional get(const Control &ctrl) const { const ControlValue *val = find(ctrl.id()); if (!val) - return T{}; + return std::nullopt; return val->get(); } diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp index 6f197eb8..892bbc2b 100644 --- a/src/android/camera_capabilities.cpp +++ b/src/android/camera_capabilities.cpp @@ -1042,7 +1042,7 @@ int CameraCapabilities::initializeStaticMetadata() /* Sensor static metadata. */ std::array pixelArraySize; { - const Size &size = properties.get(properties::PixelArraySize); + const Size &size = properties.get(properties::PixelArraySize).value_or(Size{}); pixelArraySize[0] = size.width; pixelArraySize[1] = size.height; staticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE, @@ -1050,7 +1050,7 @@ int CameraCapabilities::initializeStaticMetadata() } if (properties.contains(properties::UnitCellSize)) { - const Size &cellSize = properties.get(properties::UnitCellSize); + const Size &cellSize = *properties.get(properties::UnitCellSize); std::array physicalSize{ cellSize.width * pixelArraySize[0] / 1e6f, cellSize.height * pixelArraySize[1] / 1e6f @@ -1061,7 +1061,7 @@ int CameraCapabilities::initializeStaticMetadata() { const Span &rects = - properties.get(properties::PixelArrayActiveAreas); + properties.get(properties::PixelArrayActiveAreas).value_or(Span{}); std::vector data{ static_cast(rects[0].x), static_cast(rects[0].y), @@ -1080,7 +1080,7 @@ int CameraCapabilities::initializeStaticMetadata() /* Report the color filter arrangement if the camera reports it. */ if (properties.contains(properties::draft::ColorFilterArrangement)) { - uint8_t filterArr = properties.get(properties::draft::ColorFilterArrangement); + uint8_t filterArr = *properties.get(properties::draft::ColorFilterArrangement); staticMetadata_->addEntry(ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT, filterArr); } diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 8e804d4d..ec117101 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -305,7 +305,7 @@ int CameraDevice::initialize(const CameraConfigData *cameraConfigData) const ControlList &properties = camera_->properties(); if (properties.contains(properties::Location)) { - int32_t location = properties.get(properties::Location); + int32_t location = *properties.get(properties::Location); switch (location) { case properties::CameraLocationFront: facing_ = CAMERA_FACING_FRONT; @@ -355,7 +355,7 @@ int CameraDevice::initialize(const CameraConfigData *cameraConfigData) * metadata. */ if (properties.contains(properties::Rotation)) { - int rotation = properties.get(properties::Rotation); + int rotation = *properties.get(properties::Rotation); orientation_ = (360 - rotation) % 360; if (cameraConfigData && cameraConfigData->rotation != -1 && orientation_ != cameraConfigData->rotation) { @@ -1094,7 +1094,8 @@ void CameraDevice::requestComplete(Request *request) * as soon as possible, earlier than request completion time. */ uint64_t sensorTimestamp = static_cast(request->metadata() - .get(controls::SensorTimestamp)); + .get(controls::SensorTimestamp) + .value_or(0)); notifyShutter(descriptor->frameNumber_, sensorTimestamp); LOG(HAL, Debug) << "Request " << request->cookie() << " completed with " @@ -1473,29 +1474,28 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor) cons rolling_shutter_skew); /* Add metadata tags reported by libcamera. */ - const int64_t timestamp = metadata.get(controls::SensorTimestamp); + const int64_t timestamp = metadata.get(controls::SensorTimestamp).value_or(0); resultMetadata->addEntry(ANDROID_SENSOR_TIMESTAMP, timestamp); if (metadata.contains(controls::draft::PipelineDepth)) { - uint8_t pipeline_depth = - metadata.get(controls::draft::PipelineDepth); + uint8_t pipeline_depth = *metadata.get(controls::draft::PipelineDepth); resultMetadata->addEntry(ANDROID_REQUEST_PIPELINE_DEPTH, pipeline_depth); } if (metadata.contains(controls::ExposureTime)) { - int64_t exposure = metadata.get(controls::ExposureTime) * 1000ULL; + int64_t exposure = *metadata.get(controls::ExposureTime) * 1000ULL; resultMetadata->addEntry(ANDROID_SENSOR_EXPOSURE_TIME, exposure); } if (metadata.contains(controls::FrameDuration)) { - int64_t duration = metadata.get(controls::FrameDuration) * 1000; + int64_t duration = *metadata.get(controls::FrameDuration) * 1000; resultMetadata->addEntry(ANDROID_SENSOR_FRAME_DURATION, duration); } if (metadata.contains(controls::ScalerCrop)) { - Rectangle crop = metadata.get(controls::ScalerCrop); + Rectangle crop = *metadata.get(controls::ScalerCrop); int32_t cropRect[] = { crop.x, crop.y, static_cast(crop.width), static_cast(crop.height), @@ -1504,8 +1504,7 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor) cons } if (metadata.contains(controls::draft::TestPatternMode)) { - const int32_t testPatternMode = - metadata.get(controls::draft::TestPatternMode); + const int32_t testPatternMode = *metadata.get(controls::draft::TestPatternMode); resultMetadata->addEntry(ANDROID_SENSOR_TEST_PATTERN_MODE, testPatternMode); } diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp index 5f7bfe26..0b23397a 100644 --- a/src/android/camera_hal_manager.cpp +++ b/src/android/camera_hal_manager.cpp @@ -232,7 +232,7 @@ int32_t CameraHalManager::cameraLocation(const Camera *cam) if (!properties.contains(properties::Location)) return -1; - return properties.get(properties::Location); + return properties.get(properties::Location).value_or(0); } CameraDevice *CameraHalManager::cameraDeviceFromHalId(unsigned int id) diff --git a/src/cam/main.cpp b/src/cam/main.cpp index 79875ed7..d8115cd8 100644 --- a/src/cam/main.cpp +++ b/src/cam/main.cpp @@ -301,7 +301,7 @@ std::string CamApp::cameraName(const Camera *camera) * is only used if the location isn't present or is set to External. */ if (props.contains(properties::Location)) { - switch (props.get(properties::Location)) { + switch (*props.get(properties::Location)) { case properties::CameraLocationFront: addModel = false; name = "Internal front camera "; @@ -321,7 +321,7 @@ std::string CamApp::cameraName(const Camera *camera) * If the camera location is not availble use the camera model * to build the camera name. */ - name = "'" + props.get(properties::Model) + "' "; + name = "'" + *props.get(properties::Model) + "' "; } name += "(" + camera->id() + ")"; diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp index 3b126bb5..f65a0680 100644 --- a/src/ipa/raspberrypi/raspberrypi.cpp +++ b/src/ipa/raspberrypi/raspberrypi.cpp @@ -939,7 +939,7 @@ void IPARPi::returnEmbeddedBuffer(unsigned int bufferId) void IPARPi::prepareISP(const ISPConfig &data) { - int64_t frameTimestamp = data.controls.get(controls::SensorTimestamp); + int64_t frameTimestamp = data.controls.get(controls::SensorTimestamp).value_or(0); RPiController::Metadata lastMetadata; Span embeddedBuffer; diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index fd989e61..53332826 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -1145,7 +1145,7 @@ int PipelineHandlerIPU3::registerCameras() /* Convert the sensor rotation to a transformation */ int32_t rotation = 0; if (data->properties_.contains(properties::Rotation)) - rotation = data->properties_.get(properties::Rotation); + rotation = *(data->properties_.get(properties::Rotation)); else LOG(IPU3, Warning) << "Rotation control not exposed by " << cio2->sensor()->id() @@ -1331,7 +1331,7 @@ void IPU3CameraData::imguOutputBufferReady(FrameBuffer *buffer) request->metadata().set(controls::draft::PipelineDepth, 3); /* \todo Actually apply the scaler crop region to the ImgU. */ if (request->controls().contains(controls::ScalerCrop)) - cropRegion_ = request->controls().get(controls::ScalerCrop); + cropRegion_ = *(request->controls().get(controls::ScalerCrop)); request->metadata().set(controls::ScalerCrop, cropRegion_); if (frameInfos_.tryComplete(info)) @@ -1424,7 +1424,7 @@ void IPU3CameraData::statBufferReady(FrameBuffer *buffer) return; } - ipa_->processStatsBuffer(info->id, request->metadata().get(controls::SensorTimestamp), + ipa_->processStatsBuffer(info->id, request->metadata().get(controls::SensorTimestamp).value_or(0), info->statBuffer->cookie(), info->effectiveSensorControls); } @@ -1458,8 +1458,7 @@ void IPU3CameraData::frameStart(uint32_t sequence) if (!request->controls().contains(controls::draft::TestPatternMode)) return; - const int32_t testPatternMode = request->controls().get( - controls::draft::TestPatternMode); + const int32_t testPatternMode = request->controls().get(controls::draft::TestPatternMode).value_or(0); int ret = cio2_.sensor()->setTestPatternMode( static_cast(testPatternMode)); diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp index adc397e8..a62afdd4 100644 --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp @@ -365,7 +365,7 @@ CameraConfiguration::Status RPiCameraConfiguration::validate() * error means the platform can never run. Let's just print a warning * and continue regardless; the rotation is effectively set to zero. */ - int32_t rotation = data_->sensor_->properties().get(properties::Rotation); + int32_t rotation = data_->sensor_->properties().get(properties::Rotation).value_or(0); bool success; Transform rotationTransform = transformFromRotation(rotation, &success); if (!success) @@ -1706,7 +1706,8 @@ void RPiCameraData::statsMetadataComplete(uint32_t bufferId, const ControlList & * V4L2_CID_NOTIFY_GAINS control (which means notifyGainsUnity_ is set). */ if (notifyGainsUnity_ && controls.contains(libcamera::controls::ColourGains)) { - libcamera::Span colourGains = controls.get(libcamera::controls::ColourGains); + libcamera::Span colourGains = + *controls.get(libcamera::controls::ColourGains); /* The control wants linear gains in the order B, Gb, Gr, R. */ ControlList ctrls(sensor_->controls()); std::array gains{ @@ -2041,7 +2042,7 @@ Rectangle RPiCameraData::scaleIspCrop(const Rectangle &ispCrop) const void RPiCameraData::applyScalerCrop(const ControlList &controls) { if (controls.contains(controls::ScalerCrop)) { - Rectangle nativeCrop = controls.get(controls::ScalerCrop); + Rectangle nativeCrop = *controls.get(controls::ScalerCrop); if (!nativeCrop.width || !nativeCrop.height) nativeCrop = { 0, 0, 1, 1 }; @@ -2079,7 +2080,7 @@ void RPiCameraData::fillRequestMetadata(const ControlList &bufferControls, Request *request) { request->metadata().set(controls::SensorTimestamp, - bufferControls.get(controls::SensorTimestamp)); + bufferControls.get(controls::SensorTimestamp).value_or(0)); request->metadata().set(controls::ScalerCrop, scalerCrop_); } diff --git a/src/qcam/dng_writer.cpp b/src/qcam/dng_writer.cpp index 34c8df5a..780f58f7 100644 --- a/src/qcam/dng_writer.cpp +++ b/src/qcam/dng_writer.cpp @@ -392,7 +392,7 @@ int DNGWriter::write(const char *filename, const Camera *camera, TIFFSetField(tif, TIFFTAG_MAKE, "libcamera"); if (cameraProperties.contains(properties::Model)) { - std::string model = cameraProperties.get(properties::Model); + std::string model = *cameraProperties.get(properties::Model); TIFFSetField(tif, TIFFTAG_MODEL, model.c_str()); /* \todo set TIFFTAG_UNIQUECAMERAMODEL. */ } @@ -438,7 +438,8 @@ int DNGWriter::write(const char *filename, const Camera *camera, const double eps = 1e-2; if (metadata.contains(controls::ColourGains)) { - Span const &colourGains = metadata.get(controls::ColourGains); + Span const &colourGains = + *metadata.get(controls::ColourGains); if (colourGains[0] > eps && colourGains[1] > eps) { wbGain = Matrix3d::diag(colourGains[0], 1, colourGains[1]); neutral[0] = 1.0 / colourGains[0]; /* red */ @@ -446,7 +447,8 @@ int DNGWriter::write(const char *filename, const Camera *camera, } } if (metadata.contains(controls::ColourCorrectionMatrix)) { - Span const &coeffs = metadata.get(controls::ColourCorrectionMatrix); + Span const &coeffs = + *metadata.get(controls::ColourCorrectionMatrix); Matrix3d ccmSupplied(coeffs); if (ccmSupplied.determinant() > eps) ccm = ccmSupplied; @@ -515,7 +517,8 @@ int DNGWriter::write(const char *filename, const Camera *camera, uint32_t whiteLevel = (1 << info->bitsPerSample) - 1; if (metadata.contains(controls::SensorBlackLevels)) { - Span levels = metadata.get(controls::SensorBlackLevels); + Span levels = + *metadata.get(controls::SensorBlackLevels); /* * The black levels control is specified in R, Gr, Gb, B order. @@ -593,13 +596,13 @@ int DNGWriter::write(const char *filename, const Camera *camera, TIFFSetField(tif, EXIFTAG_DATETIMEDIGITIZED, strTime); if (metadata.contains(controls::AnalogueGain)) { - float gain = metadata.get(controls::AnalogueGain); + float gain = *metadata.get(controls::AnalogueGain); uint16_t iso = std::min(std::max(gain * 100, 0.0f), 65535.0f); TIFFSetField(tif, EXIFTAG_ISOSPEEDRATINGS, 1, &iso); } if (metadata.contains(controls::ExposureTime)) { - float exposureTime = metadata.get(controls::ExposureTime) / 1e6; + float exposureTime = *metadata.get(controls::ExposureTime) / 1e6; TIFFSetField(tif, EXIFTAG_EXPOSURETIME, exposureTime); } From patchwork Fri Jun 3 22:07:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Rauch X-Patchwork-Id: 16144 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 0446BC3273 for ; Fri, 3 Jun 2022 22:07:22 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 241B265639; Sat, 4 Jun 2022 00:07:20 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1654294040; bh=wLV1uaSYwxzkNSTUxkUT4oytvELendLwKyh07dBHnzA=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=SXtDrdhX1fQJCUTTdcO3f2byK6mmMpgQL+20XcBvF/bwbM5Gof+rRXhOpP13jgO74 8jIdM18/AsKdYHRm7OCwxHI9uS6fGRdxXG+YrpaLl3AxYrADWMXGQukPSVmpreKgVh FTuEynEqowUPkWiSDKobT9hME45EEqdQk8j1ndmD+E+m6t4G/co9bLJ47iatN0rrpq Y8J3NEksBsXBDOjTefFW2xz/9S4ZzkDwaOlTIUsYWBJX9GPf9MDwbq2j5YtxwyR/Mz Yj9pzjpXT5OLxupDNF7p9ZdBzy2nbHTkDz9ngokVQ4IMS3IGIzpa/DIL1Eqe39I03y 7WbYlbMYCKwMw== Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 91D9A633A5 for ; Sat, 4 Jun 2022 00:07:16 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=gmx.net header.i=@gmx.net header.b="B37V1cKt"; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1654294036; bh=wLV1uaSYwxzkNSTUxkUT4oytvELendLwKyh07dBHnzA=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=B37V1cKtOv0tdf68au2IFlN+xas6fFbdgswXeSrljIKTvEfzfFZUSLb/ko6f+ZFAx OKK60if2uj3ikcEqS50RT8m0MFwO0vuOetuWtyDxDGS+phJxaGni5eeiD7a/GoRyHG mGd1sO2jhqhOd8F7JL+D0m1QMb8NUgkwjXPO1oH4= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([92.18.80.244]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Mr9Bk-1nSuNW0Hd0-00oI1a; Sat, 04 Jun 2022 00:07:16 +0200 To: libcamera-devel@lists.libcamera.org Date: Fri, 3 Jun 2022 23:07:09 +0100 Message-Id: <20220603220712.73673-3-Rauch.Christian@gmx.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220603220712.73673-1-Rauch.Christian@gmx.de> References: <20220603220712.73673-1-Rauch.Christian@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:bJW+FVVNv/FxR0+po2tGQDXYWHbMXMpmp0KQURnwZZvNQ+cy0B0 TszDQ5JsjxciFdHH0FY4kkS6qSXAxD+Y9ns0O+TEWHaMyCNacFHJuwAK7ijhcCE3mBV/ZHV Q7nziSRwOnaKMrqo6BhtM4DbFhNlxsf0N4a6sCpAueo2xatsV4iEgn7Jd5b4L32PDUhZz7i YUAuIrnz1jGVAnLOGIoBg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:seKuMnEfUb4=:dcUiMfpZuiopQpjkd6UaSu Z9IwUMbwjSXYtlG3lPO8BJUL+Ts1YIgYaxnKi2t6bLbPB2cYgeOIEcJJiL1nqjquIi7KXrKQn dih2sZ9DDAUGnpcWdflCs4mi18yVUN1+hb3XO50TiXaMTN6tP6QIJs+0etU3rOzcqz93EGflv 9lBLdx7mjCCsbm6FtQiuIFbfu9djyC5xsWP3wkYCQ5pEgpk/5Wh7au2PvUx1xapyMu9ZO5yzJ VIjUwcDVSPcTvay6myknjClxvPhS+VMp2uJzK2RSZNnk40jBgO7wX6hRTfXCuXlFBl5EpMMJl r72Fqc/toi/lTWmrDnjlGBV1ct9v+Pw7TSk9x5am01seHZu14Cydt7Bt28T2p+oAgjjZaO0qe LLqZlY9G4BbDra5rGCuzVvDxIq7sQX03NyQRJs2O++q9kYJkE0A8L8UR9izNmqrHKpQwOlLfH gz+QoTefSZBTWzktv+E8WdvF+XsjMXBT+JR5ugfqd0sLIoOl37KZujNKKKGcrcZuitB1ItzU0 RdXJjQErxlAM1TSPgM7SNGEMbrXvjE/qVWfCVcQHIGCI6ZB7YPeFySCv2AxQ3NnzolYCq8fWi HxNg8h2GZMSvUoXhLFIstt4Ul+wdbbOM9/cQ+HkbDQcpaIfzl/CPOkDnsJLVPFok3Qy7/srqB C5cWs3BTlci1gebyQgZGbdh9YWEhnndR6KSKp5KlJ0tVdH2RiSf8kVkrsxTOFSnklEotn9mHW CmUw/qet8k3VThbSOaWdugXyO2xrAly5wccyWdtDKki5jzHJhHzn48kgzwQB5CSDuYmg7izhx 8sTMnxizPLfGhiE7T0XgrdNO7sz1PyNBi2PX6GnNuaXG3fO17/ylZS5UpD+h7u2UhTwZTaxx7 /UhxmwvS08PZVUdlSA457Yn7kTqQYiG9ytaP7za1MGEFIURRWYQFiqTG5ie43AwklgX89+B+m kTexsz934UHl2NzwRHrVQJwl5n96bcSaMlbyUXCIKaWK57t/EqWXw5wIcs8duple8hDP2EFpN KxqSMfZsDN69Kmi8I7rcQFxoP9yv4HYzAb5hb7g3Xd/fwOGTs07U6ypBzyzNYwQGoRdUtWIhH cQEX9xO+wp6gUpzRSv2B8OxyxwXWjhDUzobnuyDPwr3xo/sWFM38t6iew== Subject: [libcamera-devel] [PATCH v6 2/5] fix whitespace for indentation (replace spaces with tab) X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christian Rauch via libcamera-devel From: Christian Rauch Reply-To: Christian Rauch Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Signed-off-by: Christian Rauch Reviewed-by: Jacopo Mondi --- src/libcamera/pipeline/ipu3/ipu3.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.34.1 diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index 53332826..f1de87dc 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -1449,7 +1449,7 @@ void IPU3CameraData::frameStart(uint32_t sequence) /* * Handle controls to be set immediately on the next frame. * This currently only handle the TestPatternMode control. - * + * * \todo Synchronize with the sequence number */ Request *request = processingRequests_.front(); From patchwork Fri Jun 3 22:07:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Rauch X-Patchwork-Id: 16145 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id D71D5C3274 for ; Fri, 3 Jun 2022 22:07:23 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id B03B46563D; Sat, 4 Jun 2022 00:07:20 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1654294040; bh=zcOLN4jTQsCp6vUKu3Yx2tGvQEPJLyoWBisxOznYHvg=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=EeWQgfLhGpAGDp0o023SKLoWfKiJi+owpOr8I72O4O+sFrk+cjVHj1rd/CZw3nACY xgRZK6uPM91LHR9j97iCktyFjsL4Er3tggyEl2smtgRBdIinRWeehmOuBmusWwu/Pj zrTw36AISu69srREWfuqxUCu/QHYSum8vrvHOH2sc9l5zK9tYr5QtTOnUDJRGB6bFf SPNVu7U6u0ZziPKG/Ce5n/OgNB7OyL1Q+EiYFaEXrZwEllou/4PommJwEEte4olChp s8bRJBubtzCk44J3gYDH2eNhCzlRyrbcgrR6fLURP9BEpshPMiRyG/7Z3rvYLE6d+e iPQPU5cTxAS2Q== Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id CFB836040E for ; Sat, 4 Jun 2022 00:07:16 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=gmx.net header.i=@gmx.net header.b="Qf+jAdp/"; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1654294036; bh=zcOLN4jTQsCp6vUKu3Yx2tGvQEPJLyoWBisxOznYHvg=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=Qf+jAdp/+SO5ygnFC0bq5Pq+gkxsPezXyKi0/vc0b4r5frQ+26fKotNqwXLE72HA4 ewX5cP6aBGw+KeHHm0JFyvDFcLzyhgv/lJoriiQWoCxT6e5reyteq4q8YFIocjW46C klJ6cYnig1ZvwQVBX5XD0Pa5iEFwvP/Fant0JeYY= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([92.18.80.244]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Mel7v-1nPHk11ui5-00anMn; Sat, 04 Jun 2022 00:07:16 +0200 To: libcamera-devel@lists.libcamera.org Date: Fri, 3 Jun 2022 23:07:10 +0100 Message-Id: <20220603220712.73673-4-Rauch.Christian@gmx.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220603220712.73673-1-Rauch.Christian@gmx.de> References: <20220603220712.73673-1-Rauch.Christian@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:cw4zqUgiJ3IRKT5gDBzksz74zzYEH3Q2ZoKQNVIYkopkvOgkY6o 1qi+qH15E33vme5Tm9bmx0LNdyRWyBXTP901mqJZe/UQn2HtskB2dHcamVoFiOnCeCE9Kp5 ueW/ESE8rm4PFrXx0JZ0fjTh+PyrO0H0NNRks90BLFQFyj//5DxfOzzxwNSa6c6RX2Txsi6 oXfCt/f23JQrMdJ0EJ4rg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:/XctwigR1yk=:fhY9qK+IjfXVLMFFIoxPKK Xg2WOdLrskF5etJ6absGTWvQtyL/n6eKQCDVjfkYosS3wLrZQkrXbX1BWlX6C8XRbVm5+zi8j AexWVaWenV01PokjQJnOA63EDITfB7bXgXyKOFVGwSNZOos4MYiWK+jcWKb8sEfizY4XlxVgm 7I7BMCJUc6OeWZ7Y9yV6xUUj42ElV8myABio6T5PGR9IhvsLPVQHq9kEtG/aoXNVEb5bw5aAg xttdCJfkgPpR/+ApnsrVItNzYvDpjfrvjf7RjBAQMJ/vv/ATvua55/bDuHUluRia9Oe2500sj GXykiNAJcBJOUg3yDZJDbydi1CaR9gJYSwfxaX6Y84E5vHRvhK3VEApGsUt0pZHPy8w0VnSNt RVF6SVD8UPw5SDVvP9vwAFKSkkeDAOd4vPlrakD17K+n/Pi4mu1GkF/8UD/MZE0oZhgQnseaw PsXcxM9JQXB6fiE7P87Ya8WObpep74pILVFBn35CUfRTRUNyJdyadnMlkcHNCcOD7MHsahjOV q694/0oWQwKn7h1DUOblit4VXj6XaqE5yDpizrOazrfuXm3O+E4pn0fs70JFLpOGjxcJoBFgE 7PPQnyRL87eqLfe7a0c228jpP4J/C0j31vimEPFKefZXZAIC1vIokUDv6CANZ2RklQfX4hSjo w96ViraqlxfaHUacexCkg/n868YtjYOWxe/5ai6LeYUPT5Rr8lnBmejeJ3MShgXNQxTlmEMLD WKZrMh96fYgOUJKSF0zWYp9ck9ntSS5elMtFnR+lw6X658PEWur87RzDKal8h6dcg14r0PT6y UoczOUj8LfXK+vz2oM8rGuqbzA2IUDKHH3TWlWcXR7PRFcVLRAeR3Wi+zaUMzQ2pNQ7iZ5vbp byxIBdAKiElhm8UQhTQLXLwf92iIzuQpI1fvrExFT9Kp50+NdkyYU1YKYNw7VpAUJ1xk23u+0 FvF3cxr1KiBZ2Q1Qx7T+/RKiLv4VdKfJnszZ4KCUiYwODrIhGtSnjTBGzPU9BXrdm7c9ENs7o /oMNXRwXaP3J1SA3dCQuic725rKTAJwpNKHVVp+WQzpifO7G0Cq6b8TE5A0HRF9/Ux/wpsDSc 1hmbso2ahduJiGxfWbDxtXLtLWX9wXWWvmkBHjc0BgM2U4nMZU6s4A0Tg== Subject: [libcamera-devel] [PATCH v6 3/5] libcamera: controls: Define size of array controls as a shape vector X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christian Rauch via libcamera-devel From: Christian Rauch Reply-To: Christian Rauch Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" This follows the convention in other Tensor APIs. Since all tensors are represented as a Span with a single dimension, values provided in 'size' are interpreted as fixed-size Spans, while an empty array ("[]") will be interpreted as variable-sized Span. Signed-off-by: Christian Rauch Reviewed-by: Jacopo Mondi --- src/libcamera/control_ids.yaml | 4 ++-- src/libcamera/property_ids.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) -- 2.34.1 diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml index cd1d4512..f707c1f5 100644 --- a/src/libcamera/control_ids.yaml +++ b/src/libcamera/control_ids.yaml @@ -291,7 +291,7 @@ controls: transformation. The 3x3 matrix is stored in conventional reading order in an array of 9 floating point values. - size: [3x3] + size: [3,3] - ScalerCrop: type: Rectangle @@ -515,7 +515,7 @@ controls: the window where the focal distance for the objects shown in that part of the image are closest to the camera. - size: [n] + size: [] - AfTrigger: type: int32_t diff --git a/src/libcamera/property_ids.yaml b/src/libcamera/property_ids.yaml index 11b7ebdc..a87485d7 100644 --- a/src/libcamera/property_ids.yaml +++ b/src/libcamera/property_ids.yaml @@ -497,7 +497,7 @@ controls: - PixelArrayOpticalBlackRectangles: type: Rectangle - size: [n] + size: [] description: | The pixel array region(s) which contain optical black pixels considered valid for calibration purposes. @@ -592,7 +592,7 @@ controls: - PixelArrayActiveAreas: type: Rectangle - size: [n] + size: [] description: | The PixelArrayActiveAreas property defines the (possibly multiple and overlapping) portions of the camera sensor readable pixel matrix From patchwork Fri Jun 3 22:07:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Rauch X-Patchwork-Id: 16147 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 798A4C3276 for ; Fri, 3 Jun 2022 22:07:24 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 55F296563E; Sat, 4 Jun 2022 00:07:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1654294042; bh=UqwmX7+yMaOqSyR96KduBQpxFaCTOfHvdMO6MxtFX8g=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=vh6JvmA7Qe0hycEePJKpJTUibd2yR2EZCKJt8r23YbnZ2LmvqwhNHXkGSrm0Y22Fv 09A0z2u2ijQoBI2Rru2Y0icOUnvbE4rY6jm4Va9GsfxW6y0GZq1SV/2zKDVAzvb0Z4 UH5sVE9Vxyr8avRI4nzSNyCjJkOyza5So2lHNjWHEx2uOw1JDRhr6TvYxq+zrl0FLM 7o343ZvfyXhzrLayHaRkngFyuMPcD9atpGGbX6OLP9mfhL7/51FKJcPCRfzD6mycis WJnDOPDtB8KzmKwwjFbMWA8DkSPdqqgBskBZ8YmcG9G9Ex9YrOeJx5BQ1G4mlPv+VY 7W15I5V8hb1WA== Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 4AA7D633A5 for ; Sat, 4 Jun 2022 00:07:19 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=gmx.net header.i=@gmx.net header.b="YMOvHPNf"; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1654294037; bh=UqwmX7+yMaOqSyR96KduBQpxFaCTOfHvdMO6MxtFX8g=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=YMOvHPNfoCu3XNvFF4WX5fJu4UEWPc+iuGD/gu0o1yCLWav7oHvIrqvA+5WxJ1pnt Qoyxb++lpI2+dscpRi9JcH1cDQOvPmJ85jOSyA/icNLbcfSNpUj6sWbPrVceWyeHDu z2AfLtOrDTJMdOiGx+MmmagLL9UuVDVvxjvaYXqg= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([92.18.80.244]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MbAcs-1nLiqC3CIK-00bdNU; Sat, 04 Jun 2022 00:07:16 +0200 To: libcamera-devel@lists.libcamera.org Date: Fri, 3 Jun 2022 23:07:11 +0100 Message-Id: <20220603220712.73673-5-Rauch.Christian@gmx.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220603220712.73673-1-Rauch.Christian@gmx.de> References: <20220603220712.73673-1-Rauch.Christian@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:f/P8ZIEhRddX2tpuEUII+BRZ5v1vELGQL1ZG2Z0wAI37jtTKeWN 4BvV0TF62QLGtbjM+0AKTv5M2vuHazN1Bpz8dFe26d6LCkGTdNnojZ5vbl5gMsmfAE8q8Cx cl+pOJUPhDIWAAQTXfwCpllwdjZ1frhjtvGJ/36ijpkHN6vLpgbQA8Vr4CXeri2nxYkdFcQ VGdKdQlKfkJ9MXUcxW5uw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:m2ITV46j7vY=:9dRd2mtX7YEPPj++zfa7uH h8TO/6vJpV/LREovq/uxxqk2PSsw6MzBqJ0i4ZGHU1POFKe2KJWyYlvYDjjHpxNg55IF3vT/R x6OmsvuFrpemr10mNtVH6swe5gahzIWvHisV8HeGRojkNPumWawIVnhx7ejmElz/cDve/unt5 MK13lIX41JkMbTM7rjB9eUI1Mkb9QBANIToAcaLwM/yfuS5tyoLzlRMPTknAZhJwh1UebU7uL cqzfSsS11046jHXws5aJZOieIkvoAFV0J1MJV6wT48GymwR0ZpIbZA3hp4pqLdph34Bv1oXAz YsAWynVoCv1wqyo5WxF4L/Ge8vnX5TeepWB4USXOKlbCtDmtk/rPdbLoxrk8N8/gjJ5bUGY6P rqmcxjLN9Xr2SgBgW2LdpLPqXLCtBpG6mXrbzuBx9BCRRk1XsLdfiBIhqcvqfBHPKyxWoQ9Nf ysakZlH6XWMBXzzd0IXtLgrCmK52eoWIoHN0l/kLz9lTdIKqVqaSZmJGwuiDP3ZBAewiG5gSt poQ9GE22zomgo135utlikaEPU6+rdinT6tG2XLnAL9OKV0pgSuNheL5EASZloY6jhhrYz7n1h y6ER5JJsJIXDiFgL8m0Eb11QJ+6ftXMXPum/kUuAqYRe1v4y1NmWXzIzfzBp36ykcWFNysB6Y eNEHnnhSAAOjfh8dEJmZdHL0mr8gWiZ3c6vOeQBVrzwk96lLvkysdUA7zjAu8ollr4fIDrG3q IwM/0aZ43X+LUzl27djIzyTmc1gR+RXKlIcQT+E33b3d9FR/XUa/MR5MXMtB0HuaCKgOjjLH6 PvLxHD5RTMVcqi2N60GSuaoZC7p0gb8aiTWbzbaRNICgvzG69Qc3kRGjc99TxLUg9bYooAvKT q0DC7YTxTWyJDZc3AKstLXX0YzkIh5g/obmp6AGj8LYmCBDMOj0Sgr/e+Qx5YH6WOpvN6afGb j80h0SzImtDbBM9RUM/KrlHeAqcfVdwhJkFtMhbBChOycB7nKzDaHOTKC7u2QLybln6BCJl38 m6fFflCKgS8QDqLmqrYP2x60CjSmBPsQO0swcXIdf0FYKKe/rmraqpYWLlxpgqg+wBhfhRzpD Iu0TiGYug3Pldngw+BKJuSHjm459Rn8zYV0QgNmo96o11nEASxY8foqtw== Subject: [libcamera-devel] [PATCH v6 4/5] libcamera: controls: Generate fixed- and variable-sized Span Controls X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christian Rauch via libcamera-devel From: Christian Rauch Reply-To: Christian Rauch Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" This defines Controls with a 'size' as either variable-sized Span or as fixed-sized Span. Signed-off-by: Christian Rauch Reviewed-by: Jacopo Mondi --- utils/gen-controls.py | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) -- 2.34.1 diff --git a/utils/gen-controls.py b/utils/gen-controls.py index 3f99b5e2..46ba4394 100755 --- a/utils/gen-controls.py +++ b/utils/gen-controls.py @@ -7,6 +7,8 @@ # gen-controls.py - Generate control definitions from YAML import argparse +from functools import reduce +import operator import string import sys import yaml @@ -22,6 +24,24 @@ def format_description(description): return '\n'.join([(line and ' * ' or ' *') + line for line in description]) +def get_ctrl_type(ctrl): + ctrl_type = ctrl['type'] + ctrl_size_arr = ctrl.get('size') + + if ctrl_type == 'string': + return 'std::string' + elif ctrl_size_arr is not None: + if len(ctrl_size_arr) > 0: + # fixed-sized Span + ctrl_span_size = reduce(operator.mul, ctrl_size_arr) + return f"Span" + else: + # variable-sized Span + return f"Span" + else: + return ctrl_type + + def generate_cpp(controls): enum_doc_start_template = string.Template('''/** * \\enum ${name}Enum @@ -50,11 +70,7 @@ ${description} name, ctrl = ctrl.popitem() id_name = snake_case(name).upper() - ctrl_type = ctrl['type'] - if ctrl_type == 'string': - ctrl_type = 'std::string' - elif ctrl.get('size'): - ctrl_type = 'Span' % ctrl_type + ctrl_type = get_ctrl_type(ctrl) info = { 'name': name, @@ -135,11 +151,7 @@ def generate_h(controls): ids.append('\t' + id_name + ' = ' + str(id_value) + ',') - ctrl_type = ctrl['type'] - if ctrl_type == 'string': - ctrl_type = 'std::string' - elif ctrl.get('size'): - ctrl_type = 'Span' % ctrl_type + ctrl_type = get_ctrl_type(ctrl) info = { 'name': name, From patchwork Fri Jun 3 22:07:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Rauch X-Patchwork-Id: 16146 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 32C42C3275 for ; Fri, 3 Jun 2022 22:07:24 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 9A06465648; Sat, 4 Jun 2022 00:07:21 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1654294041; bh=ipm41GgrpnYmbo99+S/NkvHl94ueDeSphbQgeFOEPs0=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=WHo3yQFJbfRMc9Ea27OzqfaxLKZ5kWLP87fJoEjQ96NwG81FXQgA3cOkxWsAL50Rc D7AH6v8SmWJRNDJ+IYOrhioIExO+gMZIyjqV4JMgIp53o5AOnMLlktPWKezsiEg9tR QWCnHo4wXTxaTt6m32D05ew1PxHI/SzEXolbxVvbR5oxpUc5Nl9JSi6F/zQmFpiaEh 9tDN09wo4HEGSHXTRqc1CwdQSbUOmgK6q9smhaC9dQJ+xQ5zh7BpD85oLeCHlvg611 JgbVsEKanXL6h9PsHznocWvX35FDIDGtvCa7wXZApo5aJk1j0rQfcaXfsKuBpeTLsx HAFIxg0+YOoJA== Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 9D685633A5 for ; Sat, 4 Jun 2022 00:07:17 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=gmx.net header.i=@gmx.net header.b="IhVxcyOl"; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1654294037; bh=ipm41GgrpnYmbo99+S/NkvHl94ueDeSphbQgeFOEPs0=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=IhVxcyOlpbPKko+lopIoUsCE/l7pjUqEXBKuC6K8X2LeIm7D86uvEXfJySWK6aNsD WPwAoPOIRrsmsZi5Q1YiqGosFpp70vtiqWEG42Gmzd0GsEiSMoEK0jf6Z305hfBN0p 4Y+2dCuUT3lDVeYvXyfcy9buFVFj5AkdGSYsQ+8c= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([92.18.80.244]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1N0oFz-1ncZQe0PpN-00whyL; Sat, 04 Jun 2022 00:07:17 +0200 To: libcamera-devel@lists.libcamera.org Date: Fri, 3 Jun 2022 23:07:12 +0100 Message-Id: <20220603220712.73673-6-Rauch.Christian@gmx.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220603220712.73673-1-Rauch.Christian@gmx.de> References: <20220603220712.73673-1-Rauch.Christian@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:mUuXzuAg3zEO8Rie98ECNkwkrKTewGaNCdx4SiFLE8jAcNJ2J+n OdGcLIYf5274FLpXLH4AFlLPc4wjtPPXMXYH6ZsEDIMBMEYh9KoskK56i+mmvilbZNMpbUa JoGcYVhn1ZKjJSnw1yNV+S6Sotwc8c8fCff6+7nwnBeTRDSXFXpDvbPyEHmTQdrcUdBM1wr AE17/5bLlbjIpZQszmP3A== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:0p0eNOHLgHA=:hpzCg+nEgxN9iVruVOPfwh bzVZBp6Axpnh7AzMl5Pes+LTuEOB7TX5tQ9PrEljjN4653p2SFQXvMVqJ6kvg0MMcpzmNqilj 4X/Uj/VexsQ2jSC+7rgUq6TkBLqOXpdHmkaDjsQgVlx+i32AWZdgM+TYRZF/ZEHpp1HCd05WS NnQZKCTvptvZAMhofF/XgZRCmML60beDmIssB1/WbreBNujQVgQhvd2pndkciYxP/vjapGJap 8QTAKYk4ScKAtcBkFSC8NShnhVTpb/WbWP3D6EMCWMiYIrUzJb5jbhAl+pCIficz7kdDhVBSv Bo9hbQlWz0btrbo/LxCpRypNAKIEaGTXzixr4jUG1Ppza+33E6PHvTvXy47LNbSE+j0ab+j8e yEjQmCecJgNsxkAa+TPwxcgvIsOJv66QJ9qhOP97BcHRwkCAKfpfbr2yFzfKtsBS7WIeZKQEt 1NNRyKNu7OqJhxqA6uRp8pivMNZe7UJOOPb3u9QdcFO08NJQHYuawOGx4afhqy+u3+QIJUtxs IoKoHuInLJvQ3FtPEWYIBdU5Jo1jnOaKe09HFuCy4Oprm9H1FbRnU3KoJB6LTOOrsKV4J43pp En6cqDX9Huw9vO3pvbUvJUc9Oujez3mmc34sg6KGQ+MF3npPMvac/j4f8okhQM6w6qfW7ZOyl RnTMMhU6vybL9a2HlFSQGn4yTfhxPvK1L+ejLR1LbEvk6xYgQEqmSxluHMVmG0yABtL+6yfS0 Y7HilfjHb9VRbOe5Ovjr8JpIr6zoJLWkPJXU38guFZoIIYQDmEGVIXde7TGOxL4G6zU2cYth9 TYrdPwccn4PppaYP16KcbohbLYv4XQBz4ol5+5I9i0AdEycDMTt0DT6s9CP2OD6ZVV3qKoROQ llq9WOLsn2i3TJtdVtBILFl3MaghgwDv8+nqF2sV88jmWTnW0BtPIlHIY9IQJ7PDbz2jKLHmW 2MobG/BdKwdbP9Lj8bH+4FjNipwAMx9QmkMfhe78qS5wn6VxssbD8Ry4EAYpkeCooFTXsTCV/ 4comJXX1pPWlwW1RTdjHj94K1itemp6VquK0BCYMa5AKijDnnQiBmrecV39rb/RCHxTRPXMIm f77OeX9ps+T3mKFjZxzB2HhaGUynkSfdHgtbnHVIMKwa4jKsZBHTxsb9Q== Subject: [libcamera-devel] [PATCH v6 5/5] libcamera: controls: Apply explicit fixed-sized Span type casts X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christian Rauch via libcamera-devel From: Christian Rauch Reply-To: Christian Rauch Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" The change of types of some Controls from variable- to fixed-sized requires explicit casting of FrameDurationLimits, ColourGains and SensorBlackLevels. Signed-off-by: Christian Rauch --- include/libcamera/controls.h | 2 +- src/ipa/raspberrypi/raspberrypi.cpp | 19 ++++++++++--------- .../pipeline/raspberrypi/raspberrypi.cpp | 2 +- src/qcam/dng_writer.cpp | 6 +++--- 4 files changed, 15 insertions(+), 14 deletions(-) -- 2.34.1 diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h index 192be784..a19f1845 100644 --- a/include/libcamera/controls.h +++ b/include/libcamera/controls.h @@ -168,7 +168,7 @@ public: using V = typename T::value_type; const V *value = reinterpret_cast(data().data()); - return { value, numElements_ }; + return T{ value, numElements_ }; } #ifndef __DOXYGEN__ diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp index f65a0680..203ae613 100644 --- a/src/ipa/raspberrypi/raspberrypi.cpp +++ b/src/ipa/raspberrypi/raspberrypi.cpp @@ -505,18 +505,19 @@ void IPARPi::reportMetadata() AwbStatus *awbStatus = rpiMetadata_.GetLocked("awb.status"); if (awbStatus) { - libcameraMetadata_.set(controls::ColourGains, { static_cast(awbStatus->gain_r), - static_cast(awbStatus->gain_b) }); + libcameraMetadata_.set(controls::ColourGains, + Span({ static_cast(awbStatus->gain_r), + static_cast(awbStatus->gain_b) })); libcameraMetadata_.set(controls::ColourTemperature, awbStatus->temperature_K); } BlackLevelStatus *blackLevelStatus = rpiMetadata_.GetLocked("black_level.status"); if (blackLevelStatus) libcameraMetadata_.set(controls::SensorBlackLevels, - { static_cast(blackLevelStatus->black_level_r), - static_cast(blackLevelStatus->black_level_g), - static_cast(blackLevelStatus->black_level_g), - static_cast(blackLevelStatus->black_level_b) }); + Span({ blackLevelStatus->black_level_r, + blackLevelStatus->black_level_g, + blackLevelStatus->black_level_g, + blackLevelStatus->black_level_b })); FocusStatus *focusStatus = rpiMetadata_.GetLocked("focus.status"); if (focusStatus && focusStatus->num == 12) { @@ -821,7 +822,7 @@ void IPARPi::queueRequest(const ControlList &controls) if (gains[0] != 0.0f && gains[1] != 0.0f) /* A gain of 0.0f will switch back to auto mode. */ libcameraMetadata_.set(controls::ColourGains, - { gains[0], gains[1] }); + Span({ gains[0], gains[1] })); break; } @@ -1105,8 +1106,8 @@ void IPARPi::applyFrameDurations(Duration minFrameDuration, Duration maxFrameDur /* Return the validated limits via metadata. */ libcameraMetadata_.set(controls::FrameDurationLimits, - { static_cast(minFrameDuration_.get()), - static_cast(maxFrameDuration_.get()) }); + Span({ static_cast(minFrameDuration_.get()), + static_cast(maxFrameDuration_.get()) })); /* * Calculate the maximum exposure time possible for the AGC to use. diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp index a62afdd4..6efe7c3c 100644 --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp @@ -1706,7 +1706,7 @@ void RPiCameraData::statsMetadataComplete(uint32_t bufferId, const ControlList & * V4L2_CID_NOTIFY_GAINS control (which means notifyGainsUnity_ is set). */ if (notifyGainsUnity_ && controls.contains(libcamera::controls::ColourGains)) { - libcamera::Span colourGains = + libcamera::Span colourGains = *controls.get(libcamera::controls::ColourGains); /* The control wants linear gains in the order B, Gb, Gr, R. */ ControlList ctrls(sensor_->controls()); diff --git a/src/qcam/dng_writer.cpp b/src/qcam/dng_writer.cpp index 780f58f7..e18bf36b 100644 --- a/src/qcam/dng_writer.cpp +++ b/src/qcam/dng_writer.cpp @@ -438,7 +438,7 @@ int DNGWriter::write(const char *filename, const Camera *camera, const double eps = 1e-2; if (metadata.contains(controls::ColourGains)) { - Span const &colourGains = + Span const &colourGains = *metadata.get(controls::ColourGains); if (colourGains[0] > eps && colourGains[1] > eps) { wbGain = Matrix3d::diag(colourGains[0], 1, colourGains[1]); @@ -447,7 +447,7 @@ int DNGWriter::write(const char *filename, const Camera *camera, } } if (metadata.contains(controls::ColourCorrectionMatrix)) { - Span const &coeffs = + Span const &coeffs = *metadata.get(controls::ColourCorrectionMatrix); Matrix3d ccmSupplied(coeffs); if (ccmSupplied.determinant() > eps) @@ -517,7 +517,7 @@ int DNGWriter::write(const char *filename, const Camera *camera, uint32_t whiteLevel = (1 << info->bitsPerSample) - 1; if (metadata.contains(controls::SensorBlackLevels)) { - Span levels = + Span levels = *metadata.get(controls::SensorBlackLevels); /*