From e20996831570ec951cf8c38cf927e83b377853f5 Mon Sep 17 00:00:00 2001 From: am0ebe <am0ebe@gmx.de> Date: Thu, 15 Feb 2024 16:13:59 +0100 Subject: [PATCH] v0.0.8 - get frame in Processor! fix errors. project: clean: rm jpgs. --- obj/recorder-cmd.pro | 2 +- src/cmd/console.cpp | 39 +++- src/cmd/console.h | 19 +- src/cmd/core.cpp | 231 ++++++++++++----------- src/cmd/core.h | 25 ++- src/cmd/frameobserver.cpp | 55 ++++-- src/cmd/frameobserver.h | 14 +- src/cmd/frameprocessor.cpp | 57 +++--- src/cmd/frameprocessor.h | 4 +- src/cmd/main.cpp | 18 +- src/utils.cpp | 5 +- src/utils.h | 3 +- vimbax/api/include/VmbC/VmbCommonTypes.h | 148 +++++++-------- 13 files changed, 343 insertions(+), 277 deletions(-) diff --git a/obj/recorder-cmd.pro b/obj/recorder-cmd.pro index ac54cd1..a7c42f7 100644 --- a/obj/recorder-cmd.pro +++ b/obj/recorder-cmd.pro @@ -40,5 +40,5 @@ QMAKE_CXXFLAGS += -Wno-deprecated-enum-enum-conversion # ignore opencv warnings. TARGET = cmd DESTDIR = ../bin -QMAKE_CLEAN += .cache/clangd/index/* .qmake.stash +QMAKE_CLEAN += .cache/clangd/index/* .qmake.stash $${DESTDIR}/*jpg #cant rm dir here, so added in project file diff --git a/src/cmd/console.cpp b/src/cmd/console.cpp index 19b662c..b497cc6 100644 --- a/src/cmd/console.cpp +++ b/src/cmd/console.cpp @@ -45,7 +45,7 @@ void Console::print(const QString& str ) qDebug().noquote() << str; } -void Console::printList(const QStringList& list ) +void Console::print(const QStringList& list ) { for ( auto str : list ) @@ -55,6 +55,32 @@ void Console::printList(const QStringList& list ) } } +void Console::printVersion() +{ + auto version = getVersions(); + print(version); +} + +void Console::printHelp() +{ + //sa Controller::keyPress + QStringList str; + str << "HELP!" + << "-------------------------------" + << "h: print this help" + << "1-9: select camera" + << "o: open selected camera" + // XXX add new func + << "r: start recording" + << "t: stop recording" + << "l: list available cameras" + << "v: print versions" + << "q: quit" + << "-------------------------------"; + + print(str); +} + // ############################### // Controller Controller::Controller() : console(new Console()) @@ -88,7 +114,7 @@ void Controller::keyPress(const QChar& key) { // XXX add new func case 'h': - emit printHelp(); + console->printHelp(); break; case 'o': @@ -96,16 +122,19 @@ void Controller::keyPress(const QChar& key) break; case 'l': - emit listCams(); break; case 'r': - emit record(); + emit startRecording(); + break; + + case 't': + emit stopRecording(); break; case 'v': - emit printVersion(); + console->printVersion(); break; case 'q': diff --git a/src/cmd/console.h b/src/cmd/console.h index 31736fd..1f06a56 100644 --- a/src/cmd/console.h +++ b/src/cmd/console.h @@ -15,7 +15,10 @@ class Console : public QObject void error(const QString&,const int&); void error(const int&); void print(const QString&); - void printList(const QStringList&); + void print(const QStringList&); + + void printVersion(); + void printHelp(); // ... signals: @@ -39,25 +42,17 @@ class Controller : public QObject signals: // to UI void operate(); - void error(const QString&,const int& errCode=0); - void error(const int& errCode=0); - void print(const QString&); - void printList(const QStringList&); // to core - void printHelp(); - void printVersion(); - void listCams(); void openCam(); void selectCam(int); - void record(); + void startRecording(); + void stopRecording(); - // XXX add new func // void calibrateCam(); - // void stopRecording(); // void loadSettings(); // void storeSettings(); - // ... more signals here + // ... more signals here, new func XXX }; diff --git a/src/cmd/core.cpp b/src/cmd/core.cpp index c751373..f30bede 100644 --- a/src/cmd/core.cpp +++ b/src/cmd/core.cpp @@ -1,17 +1,19 @@ #include "core.h" -#include "VmbC/VmbCommonTypes.h" -#include "VmbCPP/SharedPointerDefines.h" #include "frameobserver.h" - #include "../utils.h" + #include <iostream> #include <vector> +#include "VmbC/VmbCommonTypes.h" +#include "VmbCPP/SharedPointerDefines.h" #include <VmbCPP/VmbCPP.h> #include <VmbCPP/Camera.h> #include <QDebug> #include <QThread> +#include <QTimer> + using namespace VmbCPP; @@ -20,7 +22,11 @@ Core::Core() : sys( VmbSystem::GetInstance() ), // Create and get Vimba singleton cameras( CameraPtrVector() ), // Holds camera handles camIdx(-1), - curCam(nullptr) + curCam(nullptr), + payloadSize(0), + frames(FramePtrVector(3)), + // frames(FramePtrVector(QThread::idealThreadCount())), + pixelFormat("") { if ( f(sys.Startup()) ) { @@ -38,7 +44,7 @@ void Core::initCams() { if ( f(sys.GetCameras( cameras ))) { - qDebug() << "Couldn't get cameras"; + qDebug() << "No cameras"; } else { @@ -53,12 +59,12 @@ void Core::initCams() Core::~Core() { - // close each camera in cameras - for ( auto iter = cameras.begin (); cameras.end () != iter; ++ iter ) - (*iter)->Close(); - qDebug() << __FUNCTION__ << "():" << __LINE__; - sys.Shutdown(); //unload TL's + + for ( auto cam : cameras ) + cam->Close(); + + sys.Shutdown(); } CameraPtr Core::cam() @@ -66,9 +72,13 @@ CameraPtr Core::cam() return cameras.at(camIdx); } +//2d +// need to update open / closed states. +//initially cams are closed, right? XXX how to find out? +//XXX track states +//VmbSystem::RegisterCameraListObserver void Core::listCams() { - if( !apiStarted ) return; @@ -87,6 +97,7 @@ void Core::listCams() else curCamInfo += "[ ]" + DELIM; + if( f((camera->GetID( str )))) continue; curCamInfo += QString::fromStdString(str) + DELIM; @@ -102,64 +113,66 @@ void Core::listCams() if( f((camera->GetInterfaceID( str )))) continue; curCamInfo += QString::fromStdString(str) + DELIM; - curCamInfo += "closed"; - // need to update open / closed states. - //initially cams are closed, right? XXX how to find out? - //XXX track states - //VmbSystem::RegisterCameraListObserver + // curCamInfo += "closed";//xxx allCamInfo << curCamInfo; idx++; } - emit print(QString("found " + QString::number(cameras.size()) + " cameras")); - emit printList(allCamInfo); -} -void Core::printVersion() -{ - auto version = getVersions(); - emit printList(version); -} - -void Core::printHelp() -{ - //sa Controller::keyPress - QStringList str; - str << "HELP!" - << "-------------------------------" - << "h: print this help" - << "1-9: select camera" - << "o: open selected camera" - // XXX add new func - << "r: start recording" - << "l: list available cameras" - << "v: print versions" - << "q: quit" - << "-------------------------------"; - - emit printList(str); + if( !cameras.size()) + emit error(errNoCams); + else + { + emitPrint("found Cameras",cameras.size()); + emit print(allCamInfo); + } } bool Core::f(const VmbErrorType& ret, const QString& msg) { - //vimba function wrapper to test return type and potentially emit error message or successmsg + // vimba function wrapper to test return type and potentially emit error message or successmsg // returns true on error - if( VmbErrorSuccess == ret ) + // qDebug() << __LINE__ << "-" << __PRETTY_FUNCTION__ << " ret:" << ret << " msg:" << msg; + + if ( VmbErrorSuccess == ret ) { if (! msg.isEmpty()) - emit print(msg); + emitPrint(msg); return false; } else { if (! msg.isEmpty()) - emit print("Fail! " + msg); + emitPrint("Fail! " + msg); emit error(ret); return true; } } +void Core::g(const VmbErrorType& ret, const QString& msg) +{ + //vimba function wrapper - throws exception on error - to declutter error handling code + if( f(ret,msg) ) + throw std::runtime_error("Error: " + msg.toStdString()); +} + +void Core::emitPrint(const QString& name, const VmbInt64_t& val=0) +{ + if( val != 0 ) + emit print(QString("%1: %2").arg(name).arg(val)); + else + emit print(name); +} + +void Core::emitPrint(const QString& name, const std::string& val) +{ + if( val.empty() ) + emit print(name); + else + emit print(name + ": " + QString::fromStdString(val)); +} + bool Core::openCam() { if(!curCam) @@ -183,81 +196,83 @@ void Core::selectCam(const int& camIdx) return; } - emit print("camSelected("+QString::number(camIdx)+")"); + emitPrint("camSelected",camIdx); } -void Core::record() +/* Does: + get Payloadsize + get Pixelformat - eg RGB8 + Allocate memory for frame buffer + Register frame observer / callback for each frame + Announce frame to the API + Start the capture engine (API) + Put frame into the frame queue + Start the acquisition engine ( curCam) + + TODO use exceptions to not clutter error handling code here and catch em in main + TODO if( !curCam->isOpen() ) return; >> listener + 2d get frameID +*/ +void Core::startRecording() { - //TODO use exceptions to not clutter error handling code here and catch em in main - // TODO - // if( !curCam->isOpen() ) - // return; >> listener - VmbInt64_t nPLS; // Payload size value - FeaturePtr pFeature ; // Generic feature pointer - auto nFrames = 5; - FramePtrVector frames(nFrames); // Frame array + FeaturePtr pFeature; + try + { + g( curCam->GetFeatureByName ("PayloadSize", pFeature ),"get PayloadSize"); + g( pFeature->GetValue (payloadSize)); + emitPrint("PayloadSize",payloadSize); + g( curCam->GetFeatureByName("PixelFormat", pFeature)); + g( pFeature->GetValue(pixelFormat)); + emitPrint("PixelFormat",pixelFormat); - // Get the image size for the required buffer - if ( f(curCam->GetFeatureByName ("PayloadSize", pFeature ),"get PayloadSize") ) - return; // emit error("Couldn't get payload size 1"); + for( auto& frame : frames ) + { + frame.reset(new Frame(payloadSize)); + g( frame->RegisterObserver( IFrameObserverPtr( new FrameObserver(curCam) )),"register frame observer"); + g( curCam->AnnounceFrame(frame), "announce frame"); + } - // if( pFeature == nullptr ) - // return; // emit error("Couldn't get payload size 2"); + g( curCam->StartCapture(), "start capture"); - if( f(pFeature->GetValue (nPLS))) - return; - qDebug() << "nPLS: " << nPLS; + for( auto frame : frames ) + g( curCam->QueueFrame(frame),"QueueFrame"); - // Allocate memory for frame buffer - // Register frame observer / callback for each frame - // Announce frame to the API - for( auto& frame : frames ) + g( curCam->GetFeatureByName ("AcquisitionStart", pFeature ),"get AcquisitionStart"); + g( pFeature->RunCommand(),"run AcquisitionStart"); + } + catch (const std::runtime_error& xx) { - frame.reset(new Frame(nPLS)); - f(frame->RegisterObserver( IFrameObserverPtr( new FrameObserver(curCam) )),"register frame observer"); - f(curCam->AnnounceFrame(frame), "announce frame"); + // ... handle exception + qDebug() << "Exception caught: " << xx.what(); } - // Start the capture engine (API) - f(curCam->StartCapture(), "start capture"); - - for( auto frame : frames ) - f(curCam->QueueFrame(frame),"QueueFrame"); // Put frame into the frame queue - // if( !frame ) error("frame is null"); - - // Start the acquisition engine ( curCam) - f(curCam->GetFeatureByName ("AcquisitionStart", pFeature ),"get AcquisitionStart"); - - // curCam->StartContinuousImageAcquisition(int bufferCount, const IFrameObserverPtr &pObserver) - - f(pFeature->RunCommand(),"run AcquisitionStart"); - - // pFeature ->IsCommandDone(bool &isDone) - // pFeature -> - - // Program runtime - QThread::sleep(2); - - - // Stop the acquisition engine ( curCam) - f(curCam->GetFeatureByName ("AcquisitionStop", pFeature ),"get AcquisitionStop"); - f(pFeature->RunCommand(),"run AcquisitionStop"); - - - // Stop the capture engine (API) - // Flush the frame queue - // Revoke all frames from the API - f(curCam->EndCapture(),"end capture"); - f(curCam->FlushQueue(),"flush queue"); - f(curCam->RevokeAllFrames(),"revoke all frames"); + // QTimer::singleShot(6000, this, SLOT(stopRecording())); +} - for( FramePtr frame : frames ) +/* Does: + Stop the capture engine (API) + discard all pending callbacks + Flush the frame queue + Revoke all frames from the API + Unregister the frame observer / callback +*/ +void Core::stopRecording() +{ + FeaturePtr pFeature; + try + { + g(curCam->GetFeatureByName ("AcquisitionStop", pFeature ),"get AcquisitionStop"); + g(pFeature->RunCommand(),"run AcquisitionStop"); + g(curCam->EndCapture(),"end capture"); + g(curCam->FlushQueue(),"flush queue"); + g(curCam->RevokeAllFrames(),"revoke all frames"); + for( FramePtr frame : frames ) + g(frame->UnregisterObserver(),"unregister observer"); + } + catch (const std::runtime_error& xx) { - qDebug() << __LINE__ << "-" << __PRETTY_FUNCTION__ << " frame:" << frame; - // Unregister the frame observer / callback - f(frame->UnregisterObserver(),"unregister observer"); + // ... handle exception + qDebug() << "Exception caught: " << xx.what(); } - qDebug() << __LINE__ << "-" << __PRETTY_FUNCTION__ << ""; } diff --git a/src/cmd/core.h b/src/cmd/core.h index 634117c..d3da7b6 100644 --- a/src/cmd/core.h +++ b/src/cmd/core.h @@ -1,14 +1,18 @@ #pragma once -#include "qglobal.h" +// #include "qglobal.h" #include <QObject> + #include <VmbCPP/SharedPointerDefines.h> #include <VmbCPP/Interface.h> +#include <VmbCPP/Camera.h> namespace VmbCPP { class VmbSystem; } using VmbCPP::CameraPtr; +using VmbCPP::FeaturePtr; +using VmbCPP::FramePtrVector; class Core : public QObject { @@ -19,24 +23,27 @@ class Core : public QObject ~Core(); public slots: - void printVersion(); - void printHelp(); - void listCams(); bool openCam(); void selectCam(const int &); - CameraPtr cam(); // make getter seetter -> rm curCam and camIdx //or make Camera class wrapper + CameraPtr cam(); // make getter setter -> rm curCam and camIdx //or make Camera class wrapper - void record(); + void startRecording(); + void stopRecording(); signals: void print(const QString &); - void printList(QStringList); + void print(const QStringList&); void error(const int&); void error(const QString&,const int& errCode=0); private: bool f(const VmbErrorType&, const QString& = ""); + void g(const VmbErrorType&, const QString& = ""); + + void emitPrint(const QString&, const VmbInt64_t& v); + void emitPrint(const QString&, const std::string& v=""); + void initCams(); void getCamInfo( const CameraPtr & ); @@ -45,4 +52,8 @@ class Core : public QObject VmbCPP::CameraPtrVector cameras; ulong camIdx; CameraPtr curCam; + + VmbInt64_t payloadSize; + FramePtrVector frames; + std::string pixelFormat; }; diff --git a/src/cmd/frameobserver.cpp b/src/cmd/frameobserver.cpp index 28feedb..3d38938 100644 --- a/src/cmd/frameobserver.cpp +++ b/src/cmd/frameobserver.cpp @@ -1,6 +1,7 @@ #include "frameobserver.h" #include "frameprocessor.h" #include "qnamespace.h" +#include "qthread.h" #include <VmbCPP/SharedPointerDefines.h> #include <VmbCPP/Camera.h> @@ -12,42 +13,60 @@ using namespace VmbCPP; - FrameObserver::FrameObserver( CameraPtr pCamera ) : IFrameObserver( pCamera ) { - // static int count=0; - // qDebug() << __LINE__ << "-" << __PRETTY_FUNCTION__ << " #:" << count++ + } -// Frame callback notifies about incoming frames -// process data afap -// some functions are prohibited within this callback! -// Do not apply image processing within this callback ( performance ) -// -> create frame processor to handle frame processing asynchronously -// When the frame has been processed , requeue it +/* Frame callback notifies about incoming frames + process data afap + some functions are prohibited within this callback! + Do not apply image processing within this callback ( performance ) + -> create frame processor to handle frame processing asynchronously + - when the frame has been processed , requeue it +*/ void FrameObserver::FrameReceived ( const FramePtr pframe ) { - qDebug() << __LINE__ << "-" << __PRETTY_FUNCTION__ << ""; - - FrameProcessor *processor = new FrameProcessor(pframe, this); + // qDebug() << __LINE__ << "-" << __PRETTY_FUNCTION__ << ""; + VmbFrameStatusType status; + pframe->GetReceiveStatus(status); + switch( status ) + { + case VmbFrameStatusIncomplete: + qDebug() << "Frame incomplete"; + queueFrame(pframe); + return; + case VmbFrameStatusTooSmall: + qDebug() << "Frame too small"; + queueFrame(pframe); + return; + case VmbFrameStatusInvalid: + qDebug() << "Frame invalid. Could not be filled to the end"; + queueFrame(pframe); + return; + default: + qDebug() << "Frame status unknown"; + return; + case VmbFrameStatusComplete: + // qDebug() << "Frame completed :) !!"; + break; + } + FrameProcessor* processor = new FrameProcessor(pframe); QThread *thread = new QThread; processor->moveToThread(thread); connect(thread, &QThread::started, processor, &FrameProcessor::processFrame); + connect(processor, &FrameProcessor::frameProcessed, this, &FrameObserver::queueFrame); //call **before** thread is deleted! connect(processor, &FrameProcessor::frameProcessed, processor, &FrameProcessor::deleteLater); connect(processor, &FrameProcessor::frameProcessed, thread, &QThread::quit); - connect(processor, &FrameProcessor::frameProcessed, this, &FrameObserver::queueFrame); // Connect to a slot in FrameObserver connect(thread, &QThread::finished, thread, &QThread::deleteLater); thread->start(); - - m_pCamera->QueueFrame( pframe ); } - -void FrameObserver::queueFrame(FramePtr pFrame) +void FrameObserver::queueFrame(FramePtr pframe) { - m_pCamera->QueueFrame(pFrame); // Queue the frame back to the camera + m_pCamera->QueueFrame(pframe); // Queue the frame back to the camera } diff --git a/src/cmd/frameobserver.h b/src/cmd/frameobserver.h index 23f39ce..6ab97f0 100644 --- a/src/cmd/frameobserver.h +++ b/src/cmd/frameobserver.h @@ -3,21 +3,21 @@ #include <QObject> #include <VmbCPP/IFrameObserver.h> -// using VmbCPP::CameraPtr; -// using VmbCPP::FramePtr; -// using VmbCPP::IFrameObserver; -using namespace VmbCPP; +using VmbCPP::CameraPtr; +using VmbCPP::FramePtr; +using VmbCPP::IFrameObserver; class FrameObserver : public QObject, public IFrameObserver { Q_OBJECT public: - void FrameReceived( const FramePtr pFrame ); + void FrameReceived( const FramePtr ); FrameObserver( CameraPtr pCamera ); - private slots: - void queueFrame(FramePtr pFrame); + + public slots: + void queueFrame(FramePtr pframe); }; diff --git a/src/cmd/frameprocessor.cpp b/src/cmd/frameprocessor.cpp index cd6cbca..b127422 100644 --- a/src/cmd/frameprocessor.cpp +++ b/src/cmd/frameprocessor.cpp @@ -1,6 +1,8 @@ #include "frameprocessor.h" -#include "opencv2/imgcodecs.hpp" +#include "frameobserver.h" +#include "qobject.h" +#include <opencv2/imgcodecs.hpp> #include <opencv2/opencv.hpp> #include <VmbC/VmbCommonTypes.h> @@ -11,56 +13,49 @@ #include <QObject> #include <QImage> -FrameProcessor::FrameProcessor(FramePtr pframe, QObject *parent) : QObject(parent), m_pframe(pframe) -{} +FrameProcessor::FrameProcessor(const FramePtr pframe) : m_pframe(pframe) {} + +FrameProcessor::~FrameProcessor() +{ + // qDebug() << __PRETTY_FUNCTION__; +} + //2d check image format! //2d add camera name to filename -/// Process the received frame asynchronously +// Process the received frame asynchronously +// pre: Frame needs to be valid! +// post: frame needs to be requeued void FrameProcessor::processFrame() { - // process frames receiveStatus - VmbFrameStatusType status; - m_pframe->GetReceiveStatus(status); - if (status != VmbFrameStatusComplete) - { - qDebug() << "Frame not complete, skip processing."; - return; - } - VmbUint32_t width = 0; VmbUint32_t height = 0; - unsigned char* pdata; + unsigned char* pdata = nullptr; + VmbUint64_t timestamp = 0; VmbPixelFormatType pixelFormat; - VmbUint64_t timestamp; m_pframe->GetWidth(width); m_pframe->GetHeight(height); m_pframe->GetBuffer(pdata); - m_pframe->GetPixelFormat(pixelFormat); m_pframe->GetTimestamp(timestamp); + m_pframe->GetPixelFormat(pixelFormat); - cv::Mat frameMat(height, width, CV_8UC3, pdata); - - if (pixelFormat == VmbPixelFormatRgb8) + if (pixelFormat != VmbPixelFormatRgb8) { - // If the frame pixel format is RGB8, directly copy the data - // memcpy(frameMat.data, pData, width * height * 3); - qDebug() << "Pixel format is RGB8"; - } - else - { - // If the pixel format is not already in BGR format, you may need to convert it - // cv::Mat tempMat(height, width, CV_8UC1, pdata); //UC1?? - // cv::cvtColor(tempMat, frameMat, cv::COLOR_BayerGB2BGR); // Adjust the conversion based on the actual Bayer pattern - qDebug() << "Pixel format is not RGB8, converting to BGR"; + qWarning() << "Pixel format is not RGB8, 2D: implement convert func ... "; + return; } - std::vector<int> params = {cv::IMWRITE_JPEG_QUALITY, 99, cv::IMWRITE_JPEG_OPTIMIZE, 1, cv::IMWRITE_JPEG_RST_INTERVAL,4}; + qDebug() << "Frame received: " << width << "x" << height << "px, format: " << pixelFormat << ", timestamp: " << timestamp; + + cv::Mat frameMat(height, width, CV_8UC3, pdata); - QString filename = QString::number(timestamp) + "frame.jpg"; + std::vector<int> params = {cv::IMWRITE_JPEG_QUALITY, 99, cv::IMWRITE_JPEG_OPTIMIZE, 1, cv::IMWRITE_JPEG_RST_INTERVAL,4}; + QString filename = QString::number(timestamp) + "_frame.jpg"; cv::imwrite(filename.toStdString(), frameMat, params); qDebug() << "Frame saved as JPEG: " << filename; + QThread::msleep(500); //simulate processing time + emit frameProcessed(m_pframe); } diff --git a/src/cmd/frameprocessor.h b/src/cmd/frameprocessor.h index 9a80335..55f8440 100644 --- a/src/cmd/frameprocessor.h +++ b/src/cmd/frameprocessor.h @@ -8,7 +8,9 @@ class FrameProcessor : public QObject Q_OBJECT public: - explicit FrameProcessor(FramePtr, QObject *parent = nullptr); + explicit FrameProcessor(const FramePtr); + ~FrameProcessor(); + public slots: void processFrame(); diff --git a/src/cmd/main.cpp b/src/cmd/main.cpp index 00d57da..ad8e584 100644 --- a/src/cmd/main.cpp +++ b/src/cmd/main.cpp @@ -18,26 +18,24 @@ int main(int argc, char *argv[]) Core core; //ui (controller) -> vmb (core) - QObject::connect(&controller, &Controller::printHelp, &core, &Core::printHelp); - QObject::connect(&controller, &Controller::printVersion, &core, &Core::printVersion); - QObject::connect(&controller, &Controller::listCams, &core, &Core::listCams); QObject::connect(&controller, &Controller::openCam, &core, &Core::openCam); QObject::connect(&controller, &Controller::selectCam, &core, &Core::selectCam); - QObject::connect(&controller, &Controller::record, &core, &Core::record); + QObject::connect(&controller, &Controller::startRecording, &core, &Core::startRecording); + QObject::connect(&controller, &Controller::stopRecording, &core, &Core::stopRecording); // XXX add new func //vmb (core) -> ui (controller.console) - QObject::connect(&core, SIGNAL(error(const QString&, const int&)), controller.console, SLOT(error(const QString&, const int&)),Qt::DirectConnection); - QObject::connect(&core, SIGNAL(error(const int&)), controller.console, SLOT(error(const int&)),Qt::DirectConnection); - QObject::connect(&core, SIGNAL(print(const QString&)), controller.console, SLOT(print(const QString&)),Qt::DirectConnection); - QObject::connect(&core, SIGNAL(printList(const QStringList&)), controller.console, SLOT(printList(const QStringList&)),Qt::DirectConnection); + QObject::connect(&core, SIGNAL(error(const QString&, const int&)), controller.console, SLOT(error(const QString&, const int&)), Qt::DirectConnection); + QObject::connect(&core, SIGNAL(error(const int&)), controller.console, SLOT(error(const int&)), Qt::DirectConnection); + QObject::connect(&core, SIGNAL(print(const QString&)), controller.console, SLOT(print(const QString&)), Qt::DirectConnection); + QObject::connect(&core, SIGNAL(print(const QStringList&)), controller.console, SLOT(print(const QStringList&)), Qt::DirectConnection); // sa Controller() for delegating to Console QTimer::singleShot(0, &controller, SIGNAL(operate())); - QTimer::singleShot(10, &core, SLOT(printVersion())); // for testing + // QTimer::singleShot(10, controller.console, SLOT(printVersion()), Qt::DirectConnection); // for testing QTimer::singleShot(30, &core, SLOT(listCams())); // for testing - QTimer::singleShot(100, &core, SLOT(openCam())); // for testing + QTimer::singleShot(200, &core, SLOT(openCam())); // for testing return a.exec(); } diff --git a/src/utils.cpp b/src/utils.cpp index 30c2998..db9f009 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -3,7 +3,6 @@ #include <random> -// #include "mainwindow.h" #include "VmbCPP/VmbCPP.h" #include <QString> #include <QDebug> @@ -13,7 +12,7 @@ const int APP_VERSION_MAJOR = 0; const int APP_VERSION_MINOR = 0; -const int APP_VERSION_PATCH = 6; +const int APP_VERSION_PATCH = 8; using namespace VmbCPP; @@ -64,6 +63,8 @@ const QString errorCodeToMessage( VmbError_t err ) case VmbErrorNotSupported: msg += "Not supported."; break; // ------------------------------- own errCodes ------------------------------- case errCamIdx: msg += "Camera index out of range."; break; + case errNoCams: msg += "no cameras found."; break; + // xx = 12, //!< Unexpected fault in VmbC or driver } return msg; } diff --git a/src/utils.h b/src/utils.h index 0ffad51..cd65a80 100644 --- a/src/utils.h +++ b/src/utils.h @@ -17,7 +17,8 @@ const QChar DELIM='|'; typedef enum camtronErr { errCamIdx = 10, //!< camera index out of range - xx = 11, //!< Unexpected fault in VmbC or driver + errNoCams = 11, //!< no cameras found + // errUn = 12, //!< Unexpected fault in VmbC or driver } camtronErr; #endif diff --git a/vimbax/api/include/VmbC/VmbCommonTypes.h b/vimbax/api/include/VmbC/VmbCommonTypes.h index 360b8fa..32eb896 100644 --- a/vimbax/api/include/VmbC/VmbCommonTypes.h +++ b/vimbax/api/include/VmbC/VmbCommonTypes.h @@ -342,89 +342,89 @@ extern "C" { typedef enum VmbPixelFormatType { // mono formats - VmbPixelFormatMono8 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy8Bit) | 0x0001, //!< Monochrome, 8 bits (PFNC: Mono8) - VmbPixelFormatMono10 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0003, //!< Monochrome, 10 bits in 16 bits (PFNC: Mono10) - VmbPixelFormatMono10p = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy10Bit) | 0x0046, //!< Monochrome, 10 bits in 16 bits (PFNC: Mono10p) - VmbPixelFormatMono12 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0005, //!< Monochrome, 12 bits in 16 bits (PFNC: Mono12) - VmbPixelFormatMono12Packed = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x0006, //!< Monochrome, 2x12 bits in 24 bits (GEV:Mono12Packed) - VmbPixelFormatMono12p = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x0047, //!< Monochrome, 2x12 bits in 24 bits (PFNC: MonoPacked) - VmbPixelFormatMono14 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0025, //!< Monochrome, 14 bits in 16 bits (PFNC: Mono14) - VmbPixelFormatMono16 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0007, //!< Monochrome, 16 bits (PFNC: Mono16) + VmbPixelFormatMono8 = VmbPixelMono | VmbPixelOccupy8Bit | 0x0001, //!< Monochrome, 8 bits (PFNC: Mono8) + VmbPixelFormatMono10 = VmbPixelMono | VmbPixelOccupy16Bit | 0x0003, //!< Monochrome, 10 bits in 16 bits (PFNC: Mono10) + VmbPixelFormatMono10p = VmbPixelMono | VmbPixelOccupy10Bit | 0x0046, //!< Monochrome, 10 bits in 16 bits (PFNC: Mono10p) + VmbPixelFormatMono12 = VmbPixelMono | VmbPixelOccupy16Bit | 0x0005, //!< Monochrome, 12 bits in 16 bits (PFNC: Mono12) + VmbPixelFormatMono12Packed = VmbPixelMono | VmbPixelOccupy12Bit | 0x0006, //!< Monochrome, 2x12 bits in 24 bits (GEV:Mono12Packed) + VmbPixelFormatMono12p = VmbPixelMono | VmbPixelOccupy12Bit | 0x0047, //!< Monochrome, 2x12 bits in 24 bits (PFNC: MonoPacked) + VmbPixelFormatMono14 = VmbPixelMono | VmbPixelOccupy16Bit | 0x0025, //!< Monochrome, 14 bits in 16 bits (PFNC: Mono14) + VmbPixelFormatMono16 = VmbPixelMono | VmbPixelOccupy16Bit | 0x0007, //!< Monochrome, 16 bits (PFNC: Mono16) // bayer formats - VmbPixelFormatBayerGR8 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy8Bit) | 0x0008, //!< Bayer-color, 8 bits, starting with GR line (PFNC: BayerGR8) - VmbPixelFormatBayerRG8 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy8Bit) | 0x0009, //!< Bayer-color, 8 bits, starting with RG line (PFNC: BayerRG8) - VmbPixelFormatBayerGB8 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy8Bit) | 0x000A, //!< Bayer-color, 8 bits, starting with GB line (PFNC: BayerGB8) - VmbPixelFormatBayerBG8 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy8Bit) | 0x000B, //!< Bayer-color, 8 bits, starting with BG line (PFNC: BayerBG8) - VmbPixelFormatBayerGR10 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x000C, //!< Bayer-color, 10 bits in 16 bits, starting with GR line (PFNC: BayerGR10) - VmbPixelFormatBayerRG10 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x000D, //!< Bayer-color, 10 bits in 16 bits, starting with RG line (PFNC: BayerRG10) - VmbPixelFormatBayerGB10 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x000E, //!< Bayer-color, 10 bits in 16 bits, starting with GB line (PFNC: BayerGB10) - VmbPixelFormatBayerBG10 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x000F, //!< Bayer-color, 10 bits in 16 bits, starting with BG line (PFNC: BayerBG10) - VmbPixelFormatBayerGR12 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0010, //!< Bayer-color, 12 bits in 16 bits, starting with GR line (PFNC: BayerGR12) - VmbPixelFormatBayerRG12 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0011, //!< Bayer-color, 12 bits in 16 bits, starting with RG line (PFNC: BayerRG12) - VmbPixelFormatBayerGB12 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0012, //!< Bayer-color, 12 bits in 16 bits, starting with GB line (PFNC: BayerGB12) - VmbPixelFormatBayerBG12 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0013, //!< Bayer-color, 12 bits in 16 bits, starting with BG line (PFNC: BayerBG12) - VmbPixelFormatBayerGR12Packed = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x002A, //!< Bayer-color, 2x12 bits in 24 bits, starting with GR line (GEV:BayerGR12Packed) - VmbPixelFormatBayerRG12Packed = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x002B, //!< Bayer-color, 2x12 bits in 24 bits, starting with RG line (GEV:BayerRG12Packed) - VmbPixelFormatBayerGB12Packed = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x002C, //!< Bayer-color, 2x12 bits in 24 bits, starting with GB line (GEV:BayerGB12Packed) - VmbPixelFormatBayerBG12Packed = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x002D, //!< Bayer-color, 2x12 bits in 24 bits, starting with BG line (GEV:BayerBG12Packed) - VmbPixelFormatBayerGR10p = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy10Bit) | 0x0056, //!< Bayer-color, 10 bits continuous packed, starting with GR line (PFNC: BayerGR10p) - VmbPixelFormatBayerRG10p = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy10Bit) | 0x0058, //!< Bayer-color, 10 bits continuous packed, starting with RG line (PFNC: BayerRG10p) - VmbPixelFormatBayerGB10p = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy10Bit) | 0x0054, //!< Bayer-color, 10 bits continuous packed, starting with GB line (PFNC: BayerGB10p) - VmbPixelFormatBayerBG10p = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy10Bit) | 0x0052, //!< Bayer-color, 10 bits continuous packed, starting with BG line (PFNC: BayerBG10p) - VmbPixelFormatBayerGR12p = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x0057, //!< Bayer-color, 12 bits continuous packed, starting with GR line (PFNC: BayerGR12p) - VmbPixelFormatBayerRG12p = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x0059, //!< Bayer-color, 12 bits continuous packed, starting with RG line (PFNC: BayerRG12p) - VmbPixelFormatBayerGB12p = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x0055, //!< Bayer-color, 12 bits continuous packed, starting with GB line (PFNC: BayerGB12p) - VmbPixelFormatBayerBG12p = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x0053, //!< Bayer-color, 12 bits continuous packed, starting with BG line (PFNC: BayerBG12p) - VmbPixelFormatBayerGR16 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x002E, //!< Bayer-color, 16 bits, starting with GR line (PFNC: BayerGR16) - VmbPixelFormatBayerRG16 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x002F, //!< Bayer-color, 16 bits, starting with RG line (PFNC: BayerRG16) - VmbPixelFormatBayerGB16 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0030, //!< Bayer-color, 16 bits, starting with GB line (PFNC: BayerGB16) - VmbPixelFormatBayerBG16 = static_cast<VmbUint8_t>(VmbPixelMono) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0031, //!< Bayer-color, 16 bits, starting with BG line (PFNC: BayerBG16) + VmbPixelFormatBayerGR8 = VmbPixelMono | VmbPixelOccupy8Bit | 0x0008, //!< Bayer-color, 8 bits, starting with GR line (PFNC: BayerGR8) + VmbPixelFormatBayerRG8 = VmbPixelMono | VmbPixelOccupy8Bit | 0x0009, //!< Bayer-color, 8 bits, starting with RG line (PFNC: BayerRG8) + VmbPixelFormatBayerGB8 = VmbPixelMono | VmbPixelOccupy8Bit | 0x000A, //!< Bayer-color, 8 bits, starting with GB line (PFNC: BayerGB8) + VmbPixelFormatBayerBG8 = VmbPixelMono | VmbPixelOccupy8Bit | 0x000B, //!< Bayer-color, 8 bits, starting with BG line (PFNC: BayerBG8) + VmbPixelFormatBayerGR10 = VmbPixelMono | VmbPixelOccupy16Bit | 0x000C, //!< Bayer-color, 10 bits in 16 bits, starting with GR line (PFNC: BayerGR10) + VmbPixelFormatBayerRG10 = VmbPixelMono | VmbPixelOccupy16Bit | 0x000D, //!< Bayer-color, 10 bits in 16 bits, starting with RG line (PFNC: BayerRG10) + VmbPixelFormatBayerGB10 = VmbPixelMono | VmbPixelOccupy16Bit | 0x000E, //!< Bayer-color, 10 bits in 16 bits, starting with GB line (PFNC: BayerGB10) + VmbPixelFormatBayerBG10 = VmbPixelMono | VmbPixelOccupy16Bit | 0x000F, //!< Bayer-color, 10 bits in 16 bits, starting with BG line (PFNC: BayerBG10) + VmbPixelFormatBayerGR12 = VmbPixelMono | VmbPixelOccupy16Bit | 0x0010, //!< Bayer-color, 12 bits in 16 bits, starting with GR line (PFNC: BayerGR12) + VmbPixelFormatBayerRG12 = VmbPixelMono | VmbPixelOccupy16Bit | 0x0011, //!< Bayer-color, 12 bits in 16 bits, starting with RG line (PFNC: BayerRG12) + VmbPixelFormatBayerGB12 = VmbPixelMono | VmbPixelOccupy16Bit | 0x0012, //!< Bayer-color, 12 bits in 16 bits, starting with GB line (PFNC: BayerGB12) + VmbPixelFormatBayerBG12 = VmbPixelMono | VmbPixelOccupy16Bit | 0x0013, //!< Bayer-color, 12 bits in 16 bits, starting with BG line (PFNC: BayerBG12) + VmbPixelFormatBayerGR12Packed = VmbPixelMono | VmbPixelOccupy12Bit | 0x002A, //!< Bayer-color, 2x12 bits in 24 bits, starting with GR line (GEV:BayerGR12Packed) + VmbPixelFormatBayerRG12Packed = VmbPixelMono | VmbPixelOccupy12Bit | 0x002B, //!< Bayer-color, 2x12 bits in 24 bits, starting with RG line (GEV:BayerRG12Packed) + VmbPixelFormatBayerGB12Packed = VmbPixelMono | VmbPixelOccupy12Bit | 0x002C, //!< Bayer-color, 2x12 bits in 24 bits, starting with GB line (GEV:BayerGB12Packed) + VmbPixelFormatBayerBG12Packed = VmbPixelMono | VmbPixelOccupy12Bit | 0x002D, //!< Bayer-color, 2x12 bits in 24 bits, starting with BG line (GEV:BayerBG12Packed) + VmbPixelFormatBayerGR10p = VmbPixelMono | VmbPixelOccupy10Bit | 0x0056, //!< Bayer-color, 10 bits continuous packed, starting with GR line (PFNC: BayerGR10p) + VmbPixelFormatBayerRG10p = VmbPixelMono | VmbPixelOccupy10Bit | 0x0058, //!< Bayer-color, 10 bits continuous packed, starting with RG line (PFNC: BayerRG10p) + VmbPixelFormatBayerGB10p = VmbPixelMono | VmbPixelOccupy10Bit | 0x0054, //!< Bayer-color, 10 bits continuous packed, starting with GB line (PFNC: BayerGB10p) + VmbPixelFormatBayerBG10p = VmbPixelMono | VmbPixelOccupy10Bit | 0x0052, //!< Bayer-color, 10 bits continuous packed, starting with BG line (PFNC: BayerBG10p) + VmbPixelFormatBayerGR12p = VmbPixelMono | VmbPixelOccupy12Bit | 0x0057, //!< Bayer-color, 12 bits continuous packed, starting with GR line (PFNC: BayerGR12p) + VmbPixelFormatBayerRG12p = VmbPixelMono | VmbPixelOccupy12Bit | 0x0059, //!< Bayer-color, 12 bits continuous packed, starting with RG line (PFNC: BayerRG12p) + VmbPixelFormatBayerGB12p = VmbPixelMono | VmbPixelOccupy12Bit | 0x0055, //!< Bayer-color, 12 bits continuous packed, starting with GB line (PFNC: BayerGB12p) + VmbPixelFormatBayerBG12p = VmbPixelMono | VmbPixelOccupy12Bit | 0x0053, //!< Bayer-color, 12 bits continuous packed, starting with BG line (PFNC: BayerBG12p) + VmbPixelFormatBayerGR16 = VmbPixelMono | VmbPixelOccupy16Bit | 0x002E, //!< Bayer-color, 16 bits, starting with GR line (PFNC: BayerGR16) + VmbPixelFormatBayerRG16 = VmbPixelMono | VmbPixelOccupy16Bit | 0x002F, //!< Bayer-color, 16 bits, starting with RG line (PFNC: BayerRG16) + VmbPixelFormatBayerGB16 = VmbPixelMono | VmbPixelOccupy16Bit | 0x0030, //!< Bayer-color, 16 bits, starting with GB line (PFNC: BayerGB16) + VmbPixelFormatBayerBG16 = VmbPixelMono | VmbPixelOccupy16Bit | 0x0031, //!< Bayer-color, 16 bits, starting with BG line (PFNC: BayerBG16) // rgb formats - VmbPixelFormatRgb8 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy24Bit) | 0x0014, //!< RGB, 8 bits x 3 (PFNC: RGB8) - VmbPixelFormatBgr8 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy24Bit) | 0x0015, //!< BGR, 8 bits x 3 (PFNC: BGR8) - VmbPixelFormatRgb10 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy48Bit) | 0x0018, //!< RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) - VmbPixelFormatBgr10 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy48Bit) | 0x0019, //!< RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) - VmbPixelFormatRgb12 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy48Bit) | 0x001A, //!< RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) - VmbPixelFormatBgr12 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy48Bit) | 0x001B, //!< RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) - VmbPixelFormatRgb14 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy48Bit) | 0x005E, //!< RGB, 14 bits in 16 bits x 3 (PFNC: RGB12) - VmbPixelFormatBgr14 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy48Bit) | 0x004A, //!< RGB, 14 bits in 16 bits x 3 (PFNC: RGB12) - VmbPixelFormatRgb16 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy48Bit) | 0x0033, //!< RGB, 16 bits x 3 (PFNC: RGB16) - VmbPixelFormatBgr16 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy48Bit) | 0x004B, //!< RGB, 16 bits x 3 (PFNC: RGB16) + VmbPixelFormatRgb8 = VmbPixelColor | VmbPixelOccupy24Bit | 0x0014, //!< RGB, 8 bits x 3 (PFNC: RGB8) + VmbPixelFormatBgr8 = VmbPixelColor | VmbPixelOccupy24Bit | 0x0015, //!< BGR, 8 bits x 3 (PFNC: BGR8) + VmbPixelFormatRgb10 = VmbPixelColor | VmbPixelOccupy48Bit | 0x0018, //!< RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) + VmbPixelFormatBgr10 = VmbPixelColor | VmbPixelOccupy48Bit | 0x0019, //!< RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) + VmbPixelFormatRgb12 = VmbPixelColor | VmbPixelOccupy48Bit | 0x001A, //!< RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) + VmbPixelFormatBgr12 = VmbPixelColor | VmbPixelOccupy48Bit | 0x001B, //!< RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) + VmbPixelFormatRgb14 = VmbPixelColor | VmbPixelOccupy48Bit | 0x005E, //!< RGB, 14 bits in 16 bits x 3 (PFNC: RGB12) + VmbPixelFormatBgr14 = VmbPixelColor | VmbPixelOccupy48Bit | 0x004A, //!< RGB, 14 bits in 16 bits x 3 (PFNC: RGB12) + VmbPixelFormatRgb16 = VmbPixelColor | VmbPixelOccupy48Bit | 0x0033, //!< RGB, 16 bits x 3 (PFNC: RGB16) + VmbPixelFormatBgr16 = VmbPixelColor | VmbPixelOccupy48Bit | 0x004B, //!< RGB, 16 bits x 3 (PFNC: RGB16) // rgba formats - VmbPixelFormatArgb8 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy32Bit) | 0x0016, //!< ARGB, 8 bits x 4 (PFNC: RGBa8) + VmbPixelFormatArgb8 = VmbPixelColor | VmbPixelOccupy32Bit | 0x0016, //!< ARGB, 8 bits x 4 (PFNC: RGBa8) VmbPixelFormatRgba8 = VmbPixelFormatArgb8, //!< RGBA, 8 bits x 4, legacy name - VmbPixelFormatBgra8 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy32Bit) | 0x0017, //!< BGRA, 8 bits x 4 (PFNC: BGRa8) - VmbPixelFormatRgba10 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy64Bit) | 0x005F, //!< RGBA, 8 bits x 4, legacy name - VmbPixelFormatBgra10 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy64Bit) | 0x004C, //!< RGBA, 8 bits x 4, legacy name - VmbPixelFormatRgba12 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy64Bit) | 0x0061, //!< RGBA, 8 bits x 4, legacy name - VmbPixelFormatBgra12 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy64Bit) | 0x004E, //!< RGBA, 8 bits x 4, legacy name - VmbPixelFormatRgba14 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy64Bit) | 0x0063, //!< RGBA, 8 bits x 4, legacy name - VmbPixelFormatBgra14 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy64Bit) | 0x0050, //!< RGBA, 8 bits x 4, legacy name - VmbPixelFormatRgba16 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy64Bit) | 0x0064, //!< RGBA, 8 bits x 4, legacy name - VmbPixelFormatBgra16 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy64Bit) | 0x0051, //!< RGBA, 8 bits x 4, legacy name + VmbPixelFormatBgra8 = VmbPixelColor | VmbPixelOccupy32Bit | 0x0017, //!< BGRA, 8 bits x 4 (PFNC: BGRa8) + VmbPixelFormatRgba10 = VmbPixelColor | VmbPixelOccupy64Bit | 0x005F, //!< RGBA, 8 bits x 4, legacy name + VmbPixelFormatBgra10 = VmbPixelColor | VmbPixelOccupy64Bit | 0x004C, //!< RGBA, 8 bits x 4, legacy name + VmbPixelFormatRgba12 = VmbPixelColor | VmbPixelOccupy64Bit | 0x0061, //!< RGBA, 8 bits x 4, legacy name + VmbPixelFormatBgra12 = VmbPixelColor | VmbPixelOccupy64Bit | 0x004E, //!< RGBA, 8 bits x 4, legacy name + VmbPixelFormatRgba14 = VmbPixelColor | VmbPixelOccupy64Bit | 0x0063, //!< RGBA, 8 bits x 4, legacy name + VmbPixelFormatBgra14 = VmbPixelColor | VmbPixelOccupy64Bit | 0x0050, //!< RGBA, 8 bits x 4, legacy name + VmbPixelFormatRgba16 = VmbPixelColor | VmbPixelOccupy64Bit | 0x0064, //!< RGBA, 8 bits x 4, legacy name + VmbPixelFormatBgra16 = VmbPixelColor | VmbPixelOccupy64Bit | 0x0051, //!< RGBA, 8 bits x 4, legacy name // yuv/ycbcr formats - VmbPixelFormatYuv411 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x001E, //!< YUV 4:1:1 with 8 bits (PFNC: YUV411_8_UYYVYY, GEV:YUV411Packed) - VmbPixelFormatYuv422 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x001F, //!< YUV 4:2:2 with 8 bits (PFNC: YUV422_8_UYVY, GEV:YUV422Packed) - VmbPixelFormatYuv444 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy24Bit) | 0x0020, //!< YUV 4:4:4 with 8 bits (PFNC: YUV8_UYV, GEV:YUV444Packed) - VmbPixelFormatYuv422_8 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0032, //!< YUV 4:2:2 with 8 bits Channel order YUYV (PFNC: YUV422_8) - VmbPixelFormatYCbCr8_CbYCr = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy24Bit) | 0x003A, //!< YCbCr 4:4:4 with 8 bits (PFNC: YCbCr8_CbYCr) - identical to VmbPixelFormatYuv444 - VmbPixelFormatYCbCr422_8 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x003B, //!< YCbCr 4:2:2 8-bit YCbYCr (PFNC: YCbCr422_8) - VmbPixelFormatYCbCr411_8_CbYYCrYY = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x003C, //!< YCbCr 4:1:1 with 8 bits (PFNC: YCbCr411_8_CbYYCrYY) - identical to VmbPixelFormatYuv411 - VmbPixelFormatYCbCr601_8_CbYCr = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy24Bit) | 0x003D, //!< YCbCr601 4:4:4 8-bit CbYCrt (PFNC: YCbCr601_8_CbYCr) - VmbPixelFormatYCbCr601_422_8 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x003E, //!< YCbCr601 4:2:2 8-bit YCbYCr (PFNC: YCbCr601_422_8) - VmbPixelFormatYCbCr601_411_8_CbYYCrYY = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x003F, //!< YCbCr601 4:1:1 8-bit CbYYCrYY (PFNC: YCbCr601_411_8_CbYYCrYY) - VmbPixelFormatYCbCr709_8_CbYCr = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy24Bit) | 0x0040, //!< YCbCr709 4:4:4 8-bit CbYCr (PFNC: YCbCr709_8_CbYCr) - VmbPixelFormatYCbCr709_422_8 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0041, //!< YCbCr709 4:2:2 8-bit YCbYCr (PFNC: YCbCr709_422_8) - VmbPixelFormatYCbCr709_411_8_CbYYCrYY = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x0042, //!< YCbCr709 4:1:1 8-bit CbYYCrYY (PFNC: YCbCr709_411_8_CbYYCrYY) - VmbPixelFormatYCbCr422_8_CbYCrY = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0043, //!< YCbCr 4:2:2 with 8 bits (PFNC: YCbCr422_8_CbYCrY) - identical to VmbPixelFormatYuv422 - VmbPixelFormatYCbCr601_422_8_CbYCrY = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0044, //!< YCbCr601 4:2:2 8-bit CbYCrY (PFNC: YCbCr601_422_8_CbYCrY) - VmbPixelFormatYCbCr709_422_8_CbYCrY = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy16Bit) | 0x0045, //!< YCbCr709 4:2:2 8-bit CbYCrY (PFNC: YCbCr709_422_8_CbYCrY) - VmbPixelFormatYCbCr411_8 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy12Bit) | 0x005A, //!< YCbCr 4:1:1 8-bit YYCbYYCr (PFNC: YCbCr411_8) - VmbPixelFormatYCbCr8 = static_cast<VmbUint8_t>(VmbPixelColor) | static_cast<VmbUint8_t>(VmbPixelOccupy24Bit) | 0x005B, //!< YCbCr 4:4:4 8-bit YCbCr (PFNC: YCbCr8) + VmbPixelFormatYuv411 = VmbPixelColor | VmbPixelOccupy12Bit | 0x001E, //!< YUV 4:1:1 with 8 bits (PFNC: YUV411_8_UYYVYY, GEV:YUV411Packed) + VmbPixelFormatYuv422 = VmbPixelColor | VmbPixelOccupy16Bit | 0x001F, //!< YUV 4:2:2 with 8 bits (PFNC: YUV422_8_UYVY, GEV:YUV422Packed) + VmbPixelFormatYuv444 = VmbPixelColor | VmbPixelOccupy24Bit | 0x0020, //!< YUV 4:4:4 with 8 bits (PFNC: YUV8_UYV, GEV:YUV444Packed) + VmbPixelFormatYuv422_8 = VmbPixelColor | VmbPixelOccupy16Bit | 0x0032, //!< YUV 4:2:2 with 8 bits Channel order YUYV (PFNC: YUV422_8) + VmbPixelFormatYCbCr8_CbYCr = VmbPixelColor | VmbPixelOccupy24Bit | 0x003A, //!< YCbCr 4:4:4 with 8 bits (PFNC: YCbCr8_CbYCr) - identical to VmbPixelFormatYuv444 + VmbPixelFormatYCbCr422_8 = VmbPixelColor | VmbPixelOccupy16Bit | 0x003B, //!< YCbCr 4:2:2 8-bit YCbYCr (PFNC: YCbCr422_8) + VmbPixelFormatYCbCr411_8_CbYYCrYY = VmbPixelColor | VmbPixelOccupy12Bit | 0x003C, //!< YCbCr 4:1:1 with 8 bits (PFNC: YCbCr411_8_CbYYCrYY) - identical to VmbPixelFormatYuv411 + VmbPixelFormatYCbCr601_8_CbYCr = VmbPixelColor | VmbPixelOccupy24Bit | 0x003D, //!< YCbCr601 4:4:4 8-bit CbYCrt (PFNC: YCbCr601_8_CbYCr) + VmbPixelFormatYCbCr601_422_8 = VmbPixelColor | VmbPixelOccupy16Bit | 0x003E, //!< YCbCr601 4:2:2 8-bit YCbYCr (PFNC: YCbCr601_422_8) + VmbPixelFormatYCbCr601_411_8_CbYYCrYY = VmbPixelColor | VmbPixelOccupy12Bit | 0x003F, //!< YCbCr601 4:1:1 8-bit CbYYCrYY (PFNC: YCbCr601_411_8_CbYYCrYY) + VmbPixelFormatYCbCr709_8_CbYCr = VmbPixelColor | VmbPixelOccupy24Bit | 0x0040, //!< YCbCr709 4:4:4 8-bit CbYCr (PFNC: YCbCr709_8_CbYCr) + VmbPixelFormatYCbCr709_422_8 = VmbPixelColor | VmbPixelOccupy16Bit | 0x0041, //!< YCbCr709 4:2:2 8-bit YCbYCr (PFNC: YCbCr709_422_8) + VmbPixelFormatYCbCr709_411_8_CbYYCrYY = VmbPixelColor | VmbPixelOccupy12Bit | 0x0042, //!< YCbCr709 4:1:1 8-bit CbYYCrYY (PFNC: YCbCr709_411_8_CbYYCrYY) + VmbPixelFormatYCbCr422_8_CbYCrY = VmbPixelColor | VmbPixelOccupy16Bit | 0x0043, //!< YCbCr 4:2:2 with 8 bits (PFNC: YCbCr422_8_CbYCrY) - identical to VmbPixelFormatYuv422 + VmbPixelFormatYCbCr601_422_8_CbYCrY = VmbPixelColor | VmbPixelOccupy16Bit | 0x0044, //!< YCbCr601 4:2:2 8-bit CbYCrY (PFNC: YCbCr601_422_8_CbYCrY) + VmbPixelFormatYCbCr709_422_8_CbYCrY = VmbPixelColor | VmbPixelOccupy16Bit | 0x0045, //!< YCbCr709 4:2:2 8-bit CbYCrY (PFNC: YCbCr709_422_8_CbYCrY) + VmbPixelFormatYCbCr411_8 = VmbPixelColor | VmbPixelOccupy12Bit | 0x005A, //!< YCbCr 4:1:1 8-bit YYCbYYCr (PFNC: YCbCr411_8) + VmbPixelFormatYCbCr8 = VmbPixelColor | VmbPixelOccupy24Bit | 0x005B, //!< YCbCr 4:4:4 8-bit YCbCr (PFNC: YCbCr8) VmbPixelFormatLast, } VmbPixelFormatType; -- GitLab