<div dir="ltr"><div dir="ltr">Hi Niklas,<div><br></div><div>Thank you for your patch.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 15 Dec 2020 at 00:48, Niklas Söderlund <<a href="mailto:niklas.soderlund@ragnatech.se">niklas.soderlund@ragnatech.se</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">There are no users left, remove it.<br>
<br>
Signed-off-by: Niklas Söderlund <<a href="mailto:niklas.soderlund@ragnatech.se" target="_blank">niklas.soderlund@ragnatech.se</a>><br>
Reviewed-by: Laurent Pinchart <<a href="mailto:laurent.pinchart@ideasonboard.com" target="_blank">laurent.pinchart@ideasonboard.com</a>><br></blockquote><div><br></div><div>Reviewed-by: Naushir Patuck <<a href="mailto:naush@raspberrypi.com">naush@raspberrypi.com</a>></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
---<br>
.../pipeline/raspberrypi/meson.build | 1 -<br>
.../pipeline/raspberrypi/staggered_ctrl.cpp | 174 ------------------<br>
.../pipeline/raspberrypi/staggered_ctrl.h | 96 ----------<br>
3 files changed, 271 deletions(-)<br>
delete mode 100644 src/libcamera/pipeline/raspberrypi/staggered_ctrl.cpp<br>
delete mode 100644 src/libcamera/pipeline/raspberrypi/staggered_ctrl.h<br>
<br>
diff --git a/src/libcamera/pipeline/raspberrypi/meson.build b/src/libcamera/pipeline/raspberrypi/meson.build<br>
index 7c5b6ff73741c968..f1a2f5ee72c2a0dd 100644<br>
--- a/src/libcamera/pipeline/raspberrypi/meson.build<br>
+++ b/src/libcamera/pipeline/raspberrypi/meson.build<br>
@@ -4,5 +4,4 @@ libcamera_sources += files([<br>
'dma_heaps.cpp',<br>
'raspberrypi.cpp',<br>
'rpi_stream.cpp',<br>
- 'staggered_ctrl.cpp',<br>
])<br>
diff --git a/src/libcamera/pipeline/raspberrypi/staggered_ctrl.cpp b/src/libcamera/pipeline/raspberrypi/staggered_ctrl.cpp<br>
deleted file mode 100644<br>
index 62605c0fceee7d11..0000000000000000<br>
--- a/src/libcamera/pipeline/raspberrypi/staggered_ctrl.cpp<br>
+++ /dev/null<br>
@@ -1,174 +0,0 @@<br>
-/* SPDX-License-Identifier: LGPL-2.1-or-later */<br>
-/*<br>
- * Copyright (C) 2020, Raspberry Pi (Trading) Ltd.<br>
- *<br>
- * staggered_ctrl.cpp - Helper for writing staggered ctrls to a V4L2 device.<br>
- */<br>
-<br>
-#include "staggered_ctrl.h"<br>
-<br>
-#include <algorithm><br>
-<br>
-#include <libcamera/controls.h><br>
-<br>
-#include "libcamera/internal/log.h"<br>
-#include "libcamera/internal/utils.h"<br>
-#include "libcamera/internal/v4l2_videodevice.h"<br>
-<br>
-namespace libcamera {<br>
-<br>
-LOG_DEFINE_CATEGORY(RPI_S_W)<br>
-<br>
-namespace RPi {<br>
-<br>
-void StaggeredCtrl::init(V4L2VideoDevice *dev,<br>
- std::initializer_list<std::pair<const uint32_t, uint8_t>> delayList)<br>
-{<br>
- std::lock_guard<std::mutex> lock(lock_);<br>
-<br>
- dev_ = dev;<br>
- delay_ = delayList;<br>
- ctrl_.clear();<br>
-<br>
- /* Find the largest delay across all controls. */<br>
- maxDelay_ = 0;<br>
- for (auto const &p : delay_) {<br>
- LOG(RPI_S_W, Info) << "Init ctrl "<br>
- << utils::hex(p.first) << " with delay "<br>
- << static_cast<int>(p.second);<br>
- maxDelay_ = std::max(maxDelay_, p.second);<br>
- }<br>
-<br>
- init_ = true;<br>
-}<br>
-<br>
-void StaggeredCtrl::reset()<br>
-{<br>
- std::lock_guard<std::mutex> lock(lock_);<br>
-<br>
- int lastSetCount = setCount_;<br>
- std::unordered_map<uint32_t, int32_t> lastVal;<br>
-<br>
- /* Reset the counters. */<br>
- setCount_ = getCount_ = 0;<br>
-<br>
- /* Look for the last set values. */<br>
- for (auto const &c : ctrl_)<br>
- lastVal[c.first] = c.second[lastSetCount].value;<br>
-<br>
- /* Apply the last set values as the next to be applied. */<br>
- ctrl_.clear();<br>
- for (auto &c : lastVal)<br>
- ctrl_[c.first][setCount_] = CtrlInfo(c.second);<br>
-}<br>
-<br>
-bool StaggeredCtrl::set(uint32_t ctrl, int32_t value)<br>
-{<br>
- std::lock_guard<std::mutex> lock(lock_);<br>
-<br>
- /* Can we find this ctrl as one that is registered? */<br>
- if (delay_.find(ctrl) == delay_.end())<br>
- return false;<br>
-<br>
- ctrl_[ctrl][setCount_].value = value;<br>
- ctrl_[ctrl][setCount_].updated = true;<br>
-<br>
- return true;<br>
-}<br>
-<br>
-bool StaggeredCtrl::set(std::initializer_list<std::pair<const uint32_t, int32_t>> ctrlList)<br>
-{<br>
- std::lock_guard<std::mutex> lock(lock_);<br>
-<br>
- for (auto const &p : ctrlList) {<br>
- /* Can we find this ctrl? */<br>
- if (delay_.find(p.first) == delay_.end())<br>
- return false;<br>
-<br>
- ctrl_[p.first][setCount_] = CtrlInfo(p.second);<br>
- }<br>
-<br>
- return true;<br>
-}<br>
-<br>
-bool StaggeredCtrl::set(const ControlList &controls)<br>
-{<br>
- std::lock_guard<std::mutex> lock(lock_);<br>
-<br>
- for (auto const &p : controls) {<br>
- /* Can we find this ctrl? */<br>
- if (delay_.find(p.first) == delay_.end())<br>
- return false;<br>
-<br>
- ctrl_[p.first][setCount_] = CtrlInfo(p.second.get<int32_t>());<br>
- LOG(RPI_S_W, Debug) << "Setting ctrl "<br>
- << utils::hex(p.first) << " to "<br>
- << ctrl_[p.first][setCount_].value<br>
- << " at index "<br>
- << setCount_;<br>
- }<br>
-<br>
- return true;<br>
-}<br>
-<br>
-int StaggeredCtrl::write()<br>
-{<br>
- std::lock_guard<std::mutex> lock(lock_);<br>
- ControlList controls(dev_->controls());<br>
-<br>
- for (auto &p : ctrl_) {<br>
- int delayDiff = maxDelay_ - delay_[p.first];<br>
- int index = std::max<int>(0, setCount_ - delayDiff);<br>
-<br>
- if (p.second[index].updated) {<br>
- /* We need to write this value out. */<br>
- controls.set(p.first, p.second[index].value);<br>
- p.second[index].updated = false;<br>
- LOG(RPI_S_W, Debug) << "Writing ctrl "<br>
- << utils::hex(p.first) << " to "<br>
- << p.second[index].value<br>
- << " at index "<br>
- << index;<br>
- }<br>
- }<br>
-<br>
- nextFrame();<br>
- return dev_->setControls(&controls);<br>
-}<br>
-<br>
-void StaggeredCtrl::get(std::unordered_map<uint32_t, int32_t> &ctrl, uint8_t offset)<br>
-{<br>
- std::lock_guard<std::mutex> lock(lock_);<br>
-<br>
- /* Account for the offset to reset the getCounter. */<br>
- getCount_ += offset + 1;<br>
-<br>
- ctrl.clear();<br>
- for (auto &p : ctrl_) {<br>
- int index = std::max<int>(0, getCount_ - maxDelay_);<br>
- ctrl[p.first] = p.second[index].value;<br>
- LOG(RPI_S_W, Debug) << "Getting ctrl "<br>
- << utils::hex(p.first) << " to "<br>
- << p.second[index].value<br>
- << " at index "<br>
- << index;<br>
- }<br>
-}<br>
-<br>
-void StaggeredCtrl::nextFrame()<br>
-{<br>
- /* Advance the control history to the next frame */<br>
- int prevCount = setCount_;<br>
- setCount_++;<br>
-<br>
- LOG(RPI_S_W, Debug) << "Next frame, set index is " << setCount_;<br>
-<br>
- for (auto &p : ctrl_) {<br>
- p.second[setCount_].value = p.second[prevCount].value;<br>
- p.second[setCount_].updated = false;<br>
- }<br>
-}<br>
-<br>
-} /* namespace RPi */<br>
-<br>
-} /* namespace libcamera */<br>
diff --git a/src/libcamera/pipeline/raspberrypi/staggered_ctrl.h b/src/libcamera/pipeline/raspberrypi/staggered_ctrl.h<br>
deleted file mode 100644<br>
index 382fa31a685357f2..0000000000000000<br>
--- a/src/libcamera/pipeline/raspberrypi/staggered_ctrl.h<br>
+++ /dev/null<br>
@@ -1,96 +0,0 @@<br>
-/* SPDX-License-Identifier: LGPL-2.1-or-later */<br>
-/*<br>
- * Copyright (C) 2020, Raspberry Pi (Trading) Ltd.<br>
- *<br>
- * staggered_ctrl.h - Helper for writing staggered ctrls to a V4L2 device.<br>
- */<br>
-#ifndef __LIBCAMERA_PIPELINE_RASPBERRYPI_STAGGERED_CTRL_H__<br>
-#define __LIBCAMERA_PIPELINE_RASPBERRYPI_STAGGERED_CTRL_H__<br>
-<br>
-#include <array><br>
-#include <initializer_list><br>
-#include <mutex><br>
-#include <unordered_map><br>
-#include <utility><br>
-<br>
-namespace libcamera {<br>
-<br>
-class ControlList;<br>
-class V4L2VideoDevice;<br>
-<br>
-namespace RPi {<br>
-<br>
-class StaggeredCtrl<br>
-{<br>
-public:<br>
- StaggeredCtrl()<br>
- : init_(false), setCount_(0), getCount_(0), maxDelay_(0)<br>
- {<br>
- }<br>
-<br>
- operator bool() const<br>
- {<br>
- return init_;<br>
- }<br>
-<br>
- void init(V4L2VideoDevice *dev,<br>
- std::initializer_list<std::pair<const uint32_t, uint8_t>> delayList);<br>
- void reset();<br>
-<br>
- void get(std::unordered_map<uint32_t, int32_t> &ctrl, uint8_t offset = 0);<br>
-<br>
- bool set(uint32_t ctrl, int32_t value);<br>
- bool set(std::initializer_list<std::pair<const uint32_t, int32_t>> ctrlList);<br>
- bool set(const ControlList &controls);<br>
-<br>
- int write();<br>
-<br>
-private:<br>
- void nextFrame();<br>
-<br>
- /* listSize must be a power of 2. */<br>
- static constexpr int listSize = (1 << 4);<br>
- struct CtrlInfo {<br>
- CtrlInfo()<br>
- : value(0), updated(false)<br>
- {<br>
- }<br>
-<br>
- CtrlInfo(int32_t value_)<br>
- : value(value_), updated(true)<br>
- {<br>
- }<br>
-<br>
- int32_t value;<br>
- bool updated;<br>
- };<br>
-<br>
- class CircularArray : public std::array<CtrlInfo, listSize><br>
- {<br>
- public:<br>
- CtrlInfo &operator[](int index)<br>
- {<br>
- return std::array<CtrlInfo, listSize>::operator[](index & (listSize - 1));<br>
- }<br>
-<br>
- const CtrlInfo &operator[](int index) const<br>
- {<br>
- return std::array<CtrlInfo, listSize>::operator[](index & (listSize - 1));<br>
- }<br>
- };<br>
-<br>
- bool init_;<br>
- uint32_t setCount_;<br>
- uint32_t getCount_;<br>
- uint8_t maxDelay_;<br>
- V4L2VideoDevice *dev_;<br>
- std::unordered_map<uint32_t, uint8_t> delay_;<br>
- std::unordered_map<uint32_t, CircularArray> ctrl_;<br>
- std::mutex lock_;<br>
-};<br>
-<br>
-} /* namespace RPi */<br>
-<br>
-} /* namespace libcamera */<br>
-<br>
-#endif /* __LIBCAMERA_PIPELINE_RASPBERRYPI_STAGGERED_CTRL_H__ */<br>
-- <br>
2.29.2<br>
<br>
</blockquote></div></div>