From 222c3a9ce140917cde642126af8f9d32b05fa5ec Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Wed, 12 Mar 2025 09:56:32 +0100 Subject: [PATCH] [writer] remove nix outputting, remove support for raw storage --- writer.cpp | 106 +++++++++-------------------------------------------- 1 file changed, 18 insertions(+), 88 deletions(-) diff --git a/writer.cpp b/writer.cpp index d0caa2d..d2f57ca 100644 --- a/writer.cpp +++ b/writer.cpp @@ -2,6 +2,12 @@ #include #include #include +#include +using namespace std::chrono; +typedef high_resolution_clock Time; +typedef milliseconds ms; +typedef duration fsec; + void Writer::setVideoSpecs(VideoSpecs specs) { videoSpecs = specs; @@ -41,111 +47,35 @@ void Writer::run() { qDebug() << "checks done!"; Pylon::CVideoWriter videoWriter; - if (specs_valid) { + if (specs_valid && videoSpecs.format != VideoFormat::raw) { stop_request = false; stopNow = false; - if (videoSpecs.format == VideoFormat::raw) { - myFile.open(videoSpecs.filename, std::ios::out | std::ios::binary); - myFile.write((char*)&videoSpecs.width, 4); - myFile.write((char*)&videoSpecs.height, 4); - } else { - qDebug() << "setting parameters for video"; - videoWriter.SetParameter((uint32_t)videoSpecs.width, (uint32_t)videoSpecs.height, videoSpecs.pixelType, (double)videoSpecs.fps, videoSpecs.quality); - videoWriter.Open(videoSpecs.filename.c_str()); - } - - nix::File nix_file =nix::File::open(videoSpecs.filename + ".nix", nix::FileMode::Overwrite, "hdf5", nix::Compression::DeflateNormal); - nix::Block b = nix_file.createBlock("Recording", "nix.recording"); - nix::Section s = nix_file.createSection("Recording", "nix.recording"); - b.metadata(s); - nix::Value v(nix::util::timeToStr(std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()))); - s.createProperty("date", v); - - nix::Value fn(videoSpecs.filename); - s.createProperty("moviefile", fn); - nix::Section sw_sec = s.createSection("PylonRecorder", "nix.software"); - sw_sec.createProperty("version", nix::Value(1)); - - nix::Section hw_sec = s.createSection("Basler ACA2040-120um", "nix.hardware.camera"); - hw_sec.createProperty("type", nix::Value("monochrome")); - 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); - frameindices.appendSetDimension(); - - std::vector stamps_buffer(chunksize); - std::vector ids_buffer(chunksize); - - nix::NDSize offset(1, 0); - nix::NDSize current_shape(initial_shape); - nix::NDSize chunk_shape(1, chunksize); - + videoWriter.SetParameter((uint32_t)videoSpecs.width, (uint32_t)videoSpecs.height, + videoSpecs.pixelType, (double)videoSpecs.fps, videoSpecs.quality); + videoWriter.Open(videoSpecs.filename.c_str()); qDebug() << "preparations done, starting loop!"; while ((!stop_request || buffer->bufferLoad() > 0) && !stopNow) { if (buffer->bufferLoad() > 0 ) { size_t framecount = 0; MyImage *img = buffer->read(framecount); if (img != nullptr) { - if (videoSpecs.format == VideoFormat::raw) { - myFile.write((char*)img->data(), img->size()); - } else { - Pylon::CPylonImage pyImage; - try { - pyImage.AttachUserBuffer(img->data(), videoSpecs.width * videoSpecs.height, videoSpecs.pixelType, videoSpecs.width, videoSpecs.height, 0, videoSpecs.orientation); - videoWriter.Add(pyImage); - } catch (const Pylon::GenericException &e) { - std::cerr << "Writer::run: An exception occurred." << std::endl << e.GetDescription() << std::endl; - } - } - if (count < chunksize) { - try { - stamps_buffer[count] = nix::util::timeToStr(img->timestamp()); - } catch (...) { - std::cerr << "Bad time to string conversion " << img->timestamp() << std::endl; - stamps_buffer[count] = "invalid"; - } - ids_buffer[count] = img->index(); - count ++; - } else { - frametimes.setData(nix::DataType::String, stamps_buffer.data(), chunk_shape, offset); - frameindices.setData(nix::DataType::Int64, ids_buffer.data(), chunk_shape, offset); - current_shape += initial_shape; - frametimes.dataExtent(current_shape); - frameindices.dataExtent(current_shape); - offset[0] += chunksize; - count = 0; + Pylon::CPylonImage pyImage; + try { + pyImage.AttachUserBuffer(img->data(), videoSpecs.width * videoSpecs.height, videoSpecs.pixelType, videoSpecs.width, videoSpecs.height, 0, videoSpecs.orientation); + videoWriter.Add(pyImage); + } catch (const Pylon::GenericException &e) { + std::cerr << "Writer::run: An exception occurred." << std::endl << e.GetDescription() << std::endl; } } } else { while (buffer->bufferLoad() < 1 && !stop_request) { - msleep(5); + msleep(2); } } } - if (count > 0) { - chunk_shape[0] = count; - frametimes.setData(nix::DataType::String, stamps_buffer.data(), chunk_shape, offset); - frameindices.setData(nix::DataType::Int64, ids_buffer.data(), chunk_shape, offset); - } videoWriter.Close(); - myFile.close(); - nix_file.close(); } else { - std::cerr << "Got no video specifications, not writing!" << std::endl; + qDebug() << "Got no video specifications, not writing!"; } emit writingDone(); }