@@ -69,11 +69,11 @@ public:
void metadataAvailable(Request *request, const Control<T> &ctrl,
const internal::cxx20::type_identity_t<T> &value)
{
- auto &m = request->metadata2();
+ auto &m = request->metadata();
const auto c = m.checkpoint();
std::ignore = m.set(ctrl, value);
- request->metadata().set(ctrl, value);
+ request->metadata2().set(ctrl, value);
const auto d = c.diffSince();
if (d)
@@ -88,8 +88,8 @@ public:
void operator()(const Control<T> &ctrl,
const internal::cxx20::type_identity_t<T> &value) const
{
- request->metadata().set(ctrl, value);
- std::ignore = request->metadata2().set(ctrl, value);
+ std::ignore = request->metadata().set(ctrl, value);
+ request->metadata2().set(ctrl, value);
}
};
@@ -99,7 +99,7 @@ public:
#endif
void metadataAvailable(Request *request, Func func)
{
- const auto c = request->metadata2().checkpoint();
+ const auto c = request->metadata().checkpoint();
std::invoke(func, MetadataSetter{ request });
@@ -51,9 +51,9 @@ public:
void reuse(ReuseFlag flags = Default);
ControlList &controls() { return *controls_; }
- ControlList &metadata() { return *metadata_; }
+ [[nodiscard]] MetadataList &metadata() { return metadata_; }
#ifndef __DOXYGEN__
- [[nodiscard]] MetadataList &metadata2() { return metadata2_; }
+ ControlList &metadata2() { return *metadata2_; }
#endif
const BufferMap &buffers() const { return bufferMap_; }
int addBuffer(const Stream *stream, FrameBuffer *buffer,
@@ -72,8 +72,8 @@ private:
LIBCAMERA_DISABLE_COPY(Request)
ControlList *controls_;
- ControlList *metadata_;
- MetadataList metadata2_;
+ MetadataList metadata_;
+ ControlList *metadata2_;
BufferMap bufferMap_;
const uint64_t cookie_;
@@ -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;
@@ -545,19 +545,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));
}
@@ -559,9 +559,9 @@ void PipelineHandler::doQueueRequests(Camera *camera)
*/
void PipelineHandler::metadataAvailable(Request *request, const ControlList &metadata)
{
- request->metadata().merge(metadata);
+ request->metadata2().merge(metadata);
- const auto d = request->metadata2().merge(metadata);
+ const auto d = request->metadata().merge(metadata);
if (!d)
LOG(Pipeline, Fatal) << "Tried to add incompatible metadata items";
@@ -357,7 +357,7 @@ void Request::Private::timeout()
*/
Request::Request(Camera *camera, uint64_t cookie)
: Extensible(std::make_unique<Private>(camera)),
- metadata2_(camera->_d()->metadataPlan_),
+ metadata_(camera->_d()->metadataPlan_),
cookie_(cookie), status_(RequestPending)
{
controls_ = new ControlList(controls::controls,
@@ -366,7 +366,7 @@ Request::Request(Camera *camera, uint64_t cookie)
/**
* \todo Add a validator for metadata controls.
*/
- metadata_ = new ControlList(controls::controls);
+ metadata2_ = new ControlList(controls::controls);
LIBCAMERA_TRACEPOINT(request_construct, this);
@@ -377,7 +377,7 @@ Request::~Request()
{
LIBCAMERA_TRACEPOINT(request_destroy, this);
- delete metadata_;
+ delete metadata2_;
delete controls_;
}
@@ -410,8 +410,8 @@ void Request::reuse(ReuseFlag flags)
status_ = RequestPending;
controls_->clear();
- metadata_->clear();
- metadata2_.clear();
+ metadata_.clear();
+ metadata2_->clear();
}
/**
@@ -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;