From b56a6a39d63ef825e71ffc7c0960b55e9fad8dc8 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Mon, 26 Apr 2021 18:17:12 +0200 Subject: [PATCH] [metadata] store metadata fix nix output bug --- pylonrecorder.cpp | 4 ++++ writer.cpp | 30 ++++++++++++++++++++++++++---- writer.h | 8 +++++++- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/pylonrecorder.cpp b/pylonrecorder.cpp index dc8d15d..eff2690 100644 --- a/pylonrecorder.cpp +++ b/pylonrecorder.cpp @@ -599,6 +599,10 @@ void PylonRecorder::startRecording() { if (gainSpinner->value() != int(grabber->currentGain())) grabber->setGain(static_cast(gainSpinner->value())); writer->setVideoSpecs(specs); + QSettings s; + this->mdata.read(s); + writer->setProjectMetadata(mdata); + buffer->clear(); grabber->start(); if (!dryRunCheckBox->isChecked()) { diff --git a/writer.cpp b/writer.cpp index 8637e4b..5f1a1de 100644 --- a/writer.cpp +++ b/writer.cpp @@ -1,18 +1,32 @@ #include "writer.h" -#include #include void Writer::setVideoSpecs(VideoSpecs specs) { videoSpecs = specs; - valid = true; + specs_valid = true; +} + +void Writer::setProjectMetadata(ProjectMetadata mdata) { + metadata = mdata; + metadata_valid = true; +} + +void Writer::writeMetadata(nix::Section &s){ + s.createProperty("project", nix::Value(this->metadata.project().toStdString())); + s.createProperty("experimenter", nix::Value(this->metadata.experimenter().toStdString())); + s.createProperty("experiment", nix::Value(this->metadata.experiment().toStdString())); + s.createProperty("condition", nix::Value(this->metadata.condition().toStdString())); + s.createProperty("comment", nix::Value(this->metadata.comment().toStdString())); + s.createProperty("subject", nix::Value(this->metadata.subject().toStdString())); + s.createProperty("setup", nix::Value(this->metadata.setup().toStdString())); } void Writer::run() { size_t count = 0; size_t chunksize = 256; - if (valid) { + if (specs_valid) { stop_request = false; stopNow = false; Pylon::CVideoWriter videoWriter; @@ -36,13 +50,21 @@ void Writer::run() { hw_sec.createProperty("manufacturer", nix::Value("Basler AG")); nix::Property p = hw_sec.createProperty("framerate", nix::Value(static_cast(videoSpecs.fps))); p.unit("Hz"); + nix::Property p1 = hw_sec.createProperty("exposure time", nix::Value(static_cast(videoSpecs.exposureTime))); + p1.unit("us"); + nix::Property p2 = hw_sec.createProperty("detector gain", nix::Value(static_cast(videoSpecs.detectorGain))); + p2.unit("dB"); + + if (metadata_valid) { + writeMetadata(s); + } nix::NDSize initial_shape(1, chunksize); nix::DataArray frametimes = b.createDataArray("frametimes", "nix.imaging.frametimes", nix::DataType::String, initial_shape); frametimes.label("time"); frametimes.appendSetDimension(); nix::DataArray frameindices = b.createDataArray("frameindex", "nix.imaging.frameid", nix::DataType::Int64, initial_shape); - frametimes.appendSetDimension(); + frameindices.appendSetDimension(); std::vector stamps_buffer(chunksize); std::vector ids_buffer(chunksize); diff --git a/writer.h b/writer.h index 58dc3ec..8d1e299 100644 --- a/writer.h +++ b/writer.h @@ -4,8 +4,11 @@ #include #include #include +#include + #include "pylonwrapper.h" #include "imagebuffer.h" +#include "projectsettings.h" struct VideoSpecs { std::string filename; @@ -25,6 +28,7 @@ public: QThread(parent), buffer(buffer) {} void setVideoSpecs(VideoSpecs specs); + void setProjectMetadata(ProjectMetadata mdata); void run() override; void stop(); @@ -35,8 +39,10 @@ signals: private: ImageBuffer *buffer; VideoSpecs videoSpecs; + ProjectMetadata metadata; bool stop_request = false, stopNow = false; - bool valid = false; + bool specs_valid = false, metadata_valid = false; + void writeMetadata(nix::Section &s); public slots: void requestStop() {