diff --git a/media-libs/libcamera/Manifest b/media-libs/libcamera/Manifest index 6318526..8b68b4f 100644 --- a/media-libs/libcamera/Manifest +++ b/media-libs/libcamera/Manifest @@ -1 +1 @@ -DIST v0.0.3.tar.gz 1297160 BLAKE2B 68ec2905afe4398c8477dc1ed0deaa5e4bbb49e8dc02b90eba3dff6877cc1febe17c939fb707cfb00ad435dedab9d7518140826065453e1cd042b3fbd0ae6327 SHA512 5e93dfccd451faa5a2c70880de0400687e4a997af605cce771cccf16be02fd5347d604abecab51874a9339bdbdda56220ba3d7eb351067df289656ba470b99a9 +DIST v0.0.4.tar.gz 1320809 BLAKE2B edecae934640f90d72df29ee565c412cd78c3ccdf62384d351825af58314816ce306a359b3b07aa9a28c6b27e60dcb1abf6993d3206cb64b7b1a6234588aa205 SHA512 1dbc468aedada902897ee19544db8946e4a49a27be1e779ac2738d0c9d99ee58b35fb67e45ba64a879f0d09db1da8626cf4d7e055a097c5aa26b78ad574d9927 diff --git a/media-libs/libcamera/files/libcamera-devel-v6-2-5-ipa-rkisp1-add-FrameDurationLimits-control.diff b/media-libs/libcamera/files/libcamera-devel-v6-2-5-ipa-rkisp1-add-FrameDurationLimits-control.diff deleted file mode 100644 index 4e0c282..0000000 --- a/media-libs/libcamera/files/libcamera-devel-v6-2-5-ipa-rkisp1-add-FrameDurationLimits-control.diff +++ /dev/null @@ -1,176 +0,0 @@ -diff --git a/include/libcamera/ipa/rkisp1.mojom b/include/libcamera/ipa/rkisp1.mojom -index eaf3955e..86ff6d0e 100644 ---- a/include/libcamera/ipa/rkisp1.mojom -+++ b/include/libcamera/ipa/rkisp1.mojom -@@ -10,7 +10,9 @@ import "include/libcamera/ipa/core.mojom"; - - interface IPARkISP1Interface { - init(libcamera.IPASettings settings, -- uint32 hwRevision) -+ uint32 hwRevision, -+ libcamera.IPACameraSensorInfo sensorInfo, -+ libcamera.ControlInfoMap sensorControls) - => (int32 ret, libcamera.ControlInfoMap ipaControls); - start() => (int32 ret); - stop(); -@@ -18,7 +20,7 @@ interface IPARkISP1Interface { - configure(libcamera.IPACameraSensorInfo sensorInfo, - map streamConfig, - map entityControls) -- => (int32 ret); -+ => (int32 ret, libcamera.ControlInfoMap ipaControls); - - mapBuffers(array buffers); - unmapBuffers(array ids); -diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp -index 069c901b..49239a87 100644 ---- a/src/ipa/rkisp1/rkisp1.cpp -+++ b/src/ipa/rkisp1/rkisp1.cpp -@@ -49,13 +49,16 @@ public: - IPARkISP1(); - - int init(const IPASettings &settings, unsigned int hwRevision, -+ const IPACameraSensorInfo &sensorInfo, -+ const ControlInfoMap &sensorControls, - ControlInfoMap *ipaControls) override; - int start() override; - void stop() override; - - int configure(const IPACameraSensorInfo &info, - const std::map &streamConfig, -- const std::map &entityControls) override; -+ const std::map &entityControls, -+ ControlInfoMap *ipaControls) override; - void mapBuffers(const std::vector &buffers) override; - void unmapBuffers(const std::vector &ids) override; - -@@ -68,6 +71,9 @@ protected: - std::string logPrefix() const override; - - private: -+ void updateControls(const IPACameraSensorInfo &sensorInfo, -+ const ControlInfoMap &sensorControls, -+ ControlInfoMap *ipaControls); - void setControls(unsigned int frame); - - std::map buffers_; -@@ -115,6 +121,8 @@ std::string IPARkISP1::logPrefix() const - } - - int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision, -+ const IPACameraSensorInfo &sensorInfo, -+ const ControlInfoMap &sensorControls, - ControlInfoMap *ipaControls) - { - /* \todo Add support for other revisions */ -@@ -180,9 +188,8 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision, - if (ret) - return ret; - -- /* Return the controls handled by the IPA. */ -- ControlInfoMap::Map ctrlMap = rkisp1Controls; -- *ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls); -+ /* Initialize controls. */ -+ updateControls(sensorInfo, sensorControls, ipaControls); - - return 0; - } -@@ -207,7 +214,8 @@ void IPARkISP1::stop() - */ - int IPARkISP1::configure([[maybe_unused]] const IPACameraSensorInfo &info, - [[maybe_unused]] const std::map &streamConfig, -- const std::map &entityControls) -+ const std::map &entityControls, -+ ControlInfoMap *ipaControls) - { - if (entityControls.empty()) - return -EINVAL; -@@ -249,6 +257,9 @@ int IPARkISP1::configure([[maybe_unused]] const IPACameraSensorInfo &info, - context_.configuration.sensor.size = info.outputSize; - context_.configuration.sensor.lineDuration = info.minLineLength * 1.0s / info.pixelRate; - -+ /* Update the camera controls using the new sensor settings. */ -+ updateControls(info, ctrls_, ipaControls); -+ - /* - * When the AGC computes the new exposure values for a frame, it needs - * to know the limits for shutter speed and analogue gain. -@@ -349,6 +360,42 @@ void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId - metadataReady.emit(frame, metadata); - } - -+void IPARkISP1::updateControls(const IPACameraSensorInfo &sensorInfo, -+ const ControlInfoMap &sensorControls, -+ ControlInfoMap *ipaControls) -+{ -+ ControlInfoMap::Map ctrlMap = rkisp1Controls; -+ -+ /* -+ * Compute the frame duration limits. -+ * -+ * The frame length is computed assuming a fixed line length combined -+ * with the vertical frame sizes. -+ */ -+ const ControlInfo &v4l2HBlank = sensorControls.find(V4L2_CID_HBLANK)->second; -+ uint32_t hblank = v4l2HBlank.def().get(); -+ uint32_t lineLength = sensorInfo.outputSize.width + hblank; -+ -+ const ControlInfo &v4l2VBlank = sensorControls.find(V4L2_CID_VBLANK)->second; -+ std::array frameHeights{ -+ v4l2VBlank.min().get() + sensorInfo.outputSize.height, -+ v4l2VBlank.max().get() + sensorInfo.outputSize.height, -+ v4l2VBlank.def().get() + sensorInfo.outputSize.height, -+ }; -+ -+ std::array frameDurations; -+ for (unsigned int i = 0; i < frameHeights.size(); ++i) { -+ uint64_t frameSize = lineLength * frameHeights[i]; -+ frameDurations[i] = frameSize / (sensorInfo.pixelRate / 1000000U); -+ } -+ -+ ctrlMap[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0], -+ frameDurations[1], -+ frameDurations[2]); -+ -+ *ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls); -+} -+ - void IPARkISP1::setControls(unsigned int frame) - { - /* -diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp -index 455ee2a0..dae29a2c 100644 ---- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp -+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp -@@ -340,15 +340,19 @@ int RkISP1CameraData::loadIPA(unsigned int hwRevision) - /* - * If the tuning file isn't found, fall back to the - * 'uncalibrated' configuration file. -- */ -+ */ - if (ipaTuningFile.empty()) - ipaTuningFile = ipa_->configurationFile("uncalibrated.yaml"); - } else { - ipaTuningFile = std::string(configFromEnv); - } - -- int ret = ipa_->init({ ipaTuningFile, sensor_->model() }, hwRevision, -- &controlInfo_); -+ IPACameraSensorInfo sensorInfo{}; -+ int ret = sensor_->sensorInfo(&sensorInfo); -+ if (ret) -+ return ret; -+ ret = ipa_->init({ ipaTuningFile, sensor_->model() }, hwRevision, -+ sensorInfo, sensor_->controls(), &controlInfo_); - if (ret < 0) { - LOG(RkISP1, Error) << "IPA initialization failure"; - return ret; -@@ -725,7 +729,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c) - std::map entityControls; - entityControls.emplace(0, data->sensor_->controls()); - -- ret = data->ipa_->configure(sensorInfo, streamConfig, entityControls); -+ ret = data->ipa_->configure(sensorInfo, streamConfig, entityControls, &data->controlInfo_); - if (ret) { - LOG(RkISP1, Error) << "failed configuring IPA (" << ret << ")"; - return ret; diff --git a/media-libs/libcamera/files/libcamera-devel-v6-5-5-ipa-libcamera-add-support-for-ov8858-sensor.diff b/media-libs/libcamera/files/libcamera-devel-v6-5-5-ipa-libcamera-add-support-for-ov8858-sensor.diff deleted file mode 100644 index 244ae30..0000000 --- a/media-libs/libcamera/files/libcamera-devel-v6-5-5-ipa-libcamera-add-support-for-ov8858-sensor.diff +++ /dev/null @@ -1,47 +0,0 @@ -diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp -index 35056bec..f2040cbd 100644 ---- a/src/ipa/libipa/camera_sensor_helper.cpp -+++ b/src/ipa/libipa/camera_sensor_helper.cpp -@@ -476,6 +476,17 @@ public: - }; - REGISTER_CAMERA_SENSOR_HELPER("ov5693", CameraSensorHelperOv5693) - -+class CameraSensorHelperOv8858 : public CameraSensorHelper -+{ -+public: -+ CameraSensorHelperOv8858() -+ { -+ gainType_ = AnalogueGainLinear; -+ gainConstants_.linear = { 1, 0, 0, 16 }; -+ } -+}; -+REGISTER_CAMERA_SENSOR_HELPER("m00_f_ov8858", CameraSensorHelperOv8858) -+ - class CameraSensorHelperOv8865 : public CameraSensorHelper - { - public: -diff --git a/src/libcamera/camera_sensor_properties.cpp b/src/libcamera/camera_sensor_properties.cpp -index e5f27f06..d0757c15 100644 ---- a/src/libcamera/camera_sensor_properties.cpp -+++ b/src/libcamera/camera_sensor_properties.cpp -@@ -146,6 +146,20 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen - */ - }, - } }, -+ { "m00_f_ov8858", { -+ .unitCellSize = { 1200, 1200 }, -+ .testPatternModes = { -+ { controls::draft::TestPatternModeOff, 0 }, -+ { controls::draft::TestPatternModeColorBars, 1 }, -+ /* -+ * No best corresponding test pattern for: -+ * 1: "Vertical Color Bar Type 1", -+ * 2: "Vertical Color Bar Type 2", -+ * 3: "Vertical Color Bar Type 3", -+ * 4: "Vertical Color Bar Type 4" -+ */ -+ }, -+ } }, - { "ov8865", { - .unitCellSize = { 1400, 1400 }, - .testPatternModes = { diff --git a/media-libs/libcamera/libcamera-0.0.3.ebuild b/media-libs/libcamera/libcamera-0.0.4.ebuild similarity index 79% rename from media-libs/libcamera/libcamera-0.0.3.ebuild rename to media-libs/libcamera/libcamera-0.0.4.ebuild index efe6748..aac9a80 100644 --- a/media-libs/libcamera/libcamera-0.0.3.ebuild +++ b/media-libs/libcamera/libcamera-0.0.4.ebuild @@ -12,7 +12,7 @@ SRC_URI="https://github.com/libcamera-org/libcamera/archive/refs/tags/v${PV}.tar LICENSE="LGPL-2.1+" SLOT="0" -KEYWORDS="~arm64" +KEYWORDS="~x86 ~amd64 ~arm64 ~arm" IUSE="debug doc test udev" RDEPEND=" @@ -25,13 +25,7 @@ DEPEND=" ${RDEPEND} dev-libs/openssl $(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]') -" - -PATCHES=( - #"${FILESDIR}"/libcamera-devel-v6-2-5-ipa-rkisp1-add-FrameDurationLimits-control.diff - "${FILESDIR}"/libcamera-devel-v6-5-5-ipa-libcamera-add-support-for-ov8858-sensor.diff - ) - +" src_configure() { local emesonargs=(