@@ -71,11 +71,11 @@ public:
{
Request::Private *d = request->_d();
- auto &m = d->metadata2();
+ auto &m = d->metadata();
const auto c = m.checkpoint();
std::ignore = m.set(ctrl, value);
- d->metadata().set(ctrl, value);
+ d->metadata2().set(ctrl, value);
const auto diff = c.diffSince();
if (diff)
@@ -90,8 +90,8 @@ public:
void operator()(const Control<T> &ctrl,
const internal::cxx20::type_identity_t<T> &value) const
{
- d->metadata().set(ctrl, value);
- std::ignore = d->metadata2().set(ctrl, value);
+ std::ignore = d->metadata().set(ctrl, value);
+ d->metadata2().set(ctrl, value);
}
};
@@ -102,7 +102,7 @@ public:
void metadataAvailable(Request *request, Func func)
{
Request::Private *d = request->_d();
- const auto c = d->metadata2().checkpoint();
+ const auto c = d->metadata().checkpoint();
std::invoke(func, MetadataSetter{ d });
@@ -37,9 +37,9 @@ public:
Camera *camera() const { return camera_; }
bool hasPendingBuffers() const;
- ControlList &metadata() { return metadata_; }
+ [[nodiscard]] MetadataList &metadata() { return metadata_; }
#ifndef __DOXYGEN__
- [[nodiscard]] MetadataList &metadata2() { return metadata2_; }
+ ControlList &metadata2() { return metadata2_; }
#endif
bool completeBuffer(FrameBuffer *buffer);
@@ -67,8 +67,8 @@ private:
std::unordered_set<FrameBuffer *> pending_;
std::map<FrameBuffer *, EventNotifier> notifiers_;
std::unique_ptr<Timer> timer_;
- ControlList metadata_;
- MetadataList metadata2_;
+ MetadataList metadata_;
+ ControlList metadata2_;
};
} /* namespace libcamera */
@@ -51,9 +51,9 @@ public:
void reuse(ReuseFlag flags = Default);
ControlList &controls() { return controls_; }
- const ControlList &metadata() const;
+ [[nodiscard]] const MetadataList &metadata() const;
#ifndef __DOXYGEN__
- [[nodiscard]] const MetadataList &metadata2() const;
+ const ControlList &metadata2() const;
#endif
const BufferMap &buffers() const { return bufferMap_; }
@@ -1423,7 +1423,7 @@ void CameraDevice::notifyError(uint32_t frameNumber, camera3_stream_t *stream,
std::unique_ptr<CameraMetadata>
CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor) const
{
- const ControlList &metadata = descriptor.request_->metadata();
+ const MetadataList &metadata = descriptor.request_->metadata();
const CameraMetadata &settings = descriptor.settings_;
camera_metadata_ro_entry_t entry;
bool found;
@@ -547,19 +547,18 @@ void CameraSession::processRequest(Request *request)
std::cout << info.str() << std::endl;
if (printMetadata_) {
- const ControlList &requestMetadata = request->metadata();
+ const MetadataList &requestMetadata = request->metadata();
std::cout << "Metadata (" << requestMetadata.size() << " entries):\n";
for (const auto &[key, value] : requestMetadata) {
const ControlId *id = controls::controls.at(key);
- std::cout << "\t" << id->name() << " = "
- << value.toString() << std::endl;
+ std::cout << '\t' << id->name() << " = " << value << std::endl;
}
const auto &requestMetadata2 = request->metadata2();
std::cout << "Metadata2 (" << requestMetadata2.size() << " entries):\n";
for (const auto &[key, value] : requestMetadata2) {
const ControlId *id = controls::controls.at(key);
- std::cout << '\t' << id->name() << " = " << value << std::endl;
+ std::cout << '\t' << id->name() << " = " << value.toString() << std::endl;
}
}
@@ -102,7 +102,7 @@ bool FileSink::processRequest(Request *request)
}
void FileSink::writeBuffer(const Stream *stream, FrameBuffer *buffer,
- [[maybe_unused]] const ControlList &metadata)
+ [[maybe_unused]] const MetadataList &metadata)
{
std::string filename = pattern_;
size_t pos;
@@ -11,7 +11,7 @@
#include <memory>
#include <string>
-#include <libcamera/controls.h>
+#include <libcamera/metadata_list.h>
#include <libcamera/stream.h>
#include "frame_sink.h"
@@ -44,7 +44,7 @@ private:
void writeBuffer(const libcamera::Stream *stream,
libcamera::FrameBuffer *buffer,
- const libcamera::ControlList &metadata);
+ const libcamera::MetadataList &metadata);
#ifdef HAVE_TIFF
const libcamera::Camera *camera_;
@@ -521,7 +521,7 @@ const std::map<PixelFormat, FormatInfo> formatInfo = {
int DNGWriter::write(const char *filename, const Camera *camera,
const StreamConfiguration &config,
- const ControlList &metadata,
+ const MetadataList &metadata,
[[maybe_unused]] const FrameBuffer *buffer,
const void *data)
{
@@ -10,8 +10,8 @@
#ifdef HAVE_TIFF
#include <libcamera/camera.h>
-#include <libcamera/controls.h>
#include <libcamera/framebuffer.h>
+#include <libcamera/metadata_list.h>
#include <libcamera/stream.h>
class DNGWriter
@@ -19,7 +19,7 @@ class DNGWriter
public:
static int write(const char *filename, const libcamera::Camera *camera,
const libcamera::StreamConfiguration &config,
- const libcamera::ControlList &metadata,
+ const libcamera::MetadataList &metadata,
const libcamera::FrameBuffer *buffer, const void *data);
};
@@ -646,7 +646,7 @@ void MainWindow::captureRaw()
}
void MainWindow::processRaw(FrameBuffer *buffer,
- [[maybe_unused]] const ControlList &metadata)
+ [[maybe_unused]] const MetadataList &metadata)
{
#ifdef HAVE_TIFF
QString defaultPath = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation);
@@ -15,6 +15,7 @@
#include <libcamera/controls.h>
#include <libcamera/framebuffer.h>
#include <libcamera/framebuffer_allocator.h>
+#include <libcamera/metadata_list.h>
#include <libcamera/request.h>
#include <libcamera/stream.h>
@@ -66,7 +67,7 @@ private Q_SLOTS:
void saveImageAs();
void captureRaw();
void processRaw(libcamera::FrameBuffer *buffer,
- const libcamera::ControlList &metadata);
+ const libcamera::MetadataList &metadata);
void renderComplete(libcamera::FrameBuffer *buffer);
@@ -282,6 +282,6 @@ void GstCameraControls::applyControls(std::unique_ptr<libcamera::Request> &reque
void GstCameraControls::readMetadata(libcamera::Request *request)
{
- controls_acc_.merge(request->metadata(),
- ControlList::MergePolicy::OverwriteExisting);
+ for (const auto &[k, v] : request->metadata())
+ controls_acc_.set(k, ControlValue(v));
}
@@ -572,9 +572,9 @@ void PipelineHandler::metadataAvailable(Request *request, const ControlList &met
{
Request::Private *d = request->_d();
- d->metadata().merge(metadata);
+ d->metadata2().merge(metadata);
- const auto diff = d->metadata2().merge(metadata);
+ const auto diff = d->metadata().merge(metadata);
if (!diff)
LOG(Pipeline, Fatal) << "Tried to add incompatible metadata items";
@@ -57,8 +57,8 @@ LOG_DEFINE_CATEGORY(Request)
* \todo Add a validator for metadata controls.
*/
Request::Private::Private(Camera *camera)
- : camera_(camera), cancelled_(false), metadata_(controls::controls),
- metadata2_(camera->metadata())
+ : camera_(camera), cancelled_(false), metadata_(camera->metadata()),
+ metadata2_(controls::controls)
{
}
@@ -429,13 +429,13 @@ void Request::reuse(ReuseFlag flags)
* \brief Retrieve the request's metadata
* \return The a const reference to the metadata associated with the request
*/
-const ControlList &Request::metadata() const
+const MetadataList &Request::metadata() const
{
return _d()->metadata_;
}
#ifndef __DOXYGEN__
-const MetadataList &Request::metadata2() const
+const ControlList &Request::metadata2() const
{
return _d()->metadata2_;
}
@@ -16,7 +16,7 @@ namespace py = pybind11;
using namespace libcamera;
template<typename T>
-static py::object valueOrTuple(const ControlValue &cv)
+static py::object valueOrTuple(const ControlValueView &cv)
{
if (cv.isArray()) {
const T *v = reinterpret_cast<const T *>(cv.data().data());
@@ -31,7 +31,7 @@ static py::object valueOrTuple(const ControlValue &cv)
return py::cast(cv.get<T>());
}
-py::object controlValueToPy(const ControlValue &cv)
+py::object controlValueToPy(const ControlValueView &cv)
{
switch (cv.type()) {
case ControlTypeNone:
@@ -9,5 +9,5 @@
#include <pybind11/pybind11.h>
-pybind11::object controlValueToPy(const libcamera::ControlValue &cv);
+pybind11::object controlValueToPy(const libcamera::ControlValueView &cv);
libcamera::ControlValue pyToControlValue(const pybind11::object &ob, libcamera::ControlType type);
@@ -466,7 +466,7 @@ PYBIND11_MODULE(_libcamera, m)
self.controls().set(id.id(), pyToControlValue(value, id.type()));
})
.def_property_readonly("metadata", [](Request &self) {
- /* Convert ControlList to std container */
+ /* Convert MetadataList to std container */
std::unordered_map<const ControlId *, py::object> ret;