PylonRecorder/writer.cpp

44 lines
1.6 KiB
C++

#include "writer.h"
void Writer::setVideoSpecs(VideoSpecs specs) {
videoSpecs = specs;
valid = true;
}
void Writer::run() {
int64_t count = 0;
if (valid) {
stop_request = false;
Pylon::CVideoWriter videoWriter;
videoWriter.SetParameter(videoSpecs.width, videoSpecs.height, videoSpecs.pixelType,
videoSpecs.fps, videoSpecs.quality);
videoWriter.Open(videoSpecs.filename.c_str());
MyImage img;
while (!stop_request || buffer->bufferLoad() > 0) {
if (buffer->bufferLoad() > 0 ) {
bool valid = buffer->pop(img);
if (valid) {
count ++;
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 << "An exception occurred." << std::endl << e.GetDescription() << std::endl;
}
}
} else {
while (buffer->bufferLoad() < 5 && !stop_request) {
msleep(10);
std::cerr << "waiting.." << buffer->bufferLoad() << std::endl;
}
}
}
videoWriter.Close();
std::cerr << "writer terminated: " << count << std::endl;
} else {
std::cerr << "Got no video specifications, not writing!" << std::endl;
}
emit writingDone();
}