From 9fd6bb38f3b14e38e4a5cc09957447bd2005f53d Mon Sep 17 00:00:00 2001 From: Nico Stuurman Date: Wed, 23 Oct 2024 19:01:27 -0700 Subject: [PATCH] DahengGalaxy: Implement StartSequenceAcquisition giving the desired number of images and stopOnOverflow parameter. --- DeviceAdapters/DahengGalaxy/ClassGalaxy.cpp | 38 ++++++++++++++++----- DeviceAdapters/DahengGalaxy/ClassGalaxy.h | 4 +++ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/DeviceAdapters/DahengGalaxy/ClassGalaxy.cpp b/DeviceAdapters/DahengGalaxy/ClassGalaxy.cpp index d450fc9fa..5649ba40f 100644 --- a/DeviceAdapters/DahengGalaxy/ClassGalaxy.cpp +++ b/DeviceAdapters/DahengGalaxy/ClassGalaxy.cpp @@ -752,11 +752,11 @@ void ClassGalaxy::CopyToImageBuffer(CImageDataPointer& objImageDataPointer) } } -int ClassGalaxy::StartSequenceAcquisition(long /* numImages */, double /* interval_ms */, bool /* stopOnOverflow */) { +int ClassGalaxy::StartSequenceAcquisition(long numImages, double interval_ms, bool stopOnOverflow) { try { AddToLog("ReadyMultySequenceAcquisition"); - ImageHandler_ = new CircularBufferInserter(this); + ImageHandler_ = new CircularBufferInserter(this, numImages, stopOnOverflow); //camera_->RegisterImageEventHandler(ImageHandler_, RegistrationMode_Append, Cleanup_Delete); m_objStreamPtr->RegisterCaptureCallback(ImageHandler_, this); @@ -1860,8 +1860,19 @@ GX_VALID_BIT_LIST ClassGalaxy::GetBestValudBit(GX_PIXEL_FORMAT_ENTRY emPixelForm } CircularBufferInserter::CircularBufferInserter(ClassGalaxy* dev) : - dev_(dev) + dev_(dev), + numImages_(-1), + imgCounter_(0), + stopOnOverflow_(false) +{} + +CircularBufferInserter::CircularBufferInserter(ClassGalaxy* dev, long numImages, bool stopOnOverflow) : + dev_(dev), + numImages_(numImages), + imgCounter_(0), + stopOnOverflow_(stopOnOverflow) {} + //--------------------------------------------------------------------------------- /** \brief 采集回调函数 @@ -1897,7 +1908,15 @@ void CircularBufferInserter::DoOnImageCaptured(CImageDataPointer& objImageDataPo (unsigned)dev_->GetImageBytesPerPixel(), 1, md.Serialize().c_str(), FALSE); if (ret == DEVICE_BUFFER_OVERFLOW) { //if circular buffer overflows, just clear it and keep putting stuff in so live mode can continue - dev_->GetCoreCallback()->ClearImageBuffer(dev_); + if (stopOnOverflow_) + { + dev_->StopSequenceAcquisition(); + dev_->LogMessage("Error inserting image into sequence buffer", false); + } + else + { + dev_->GetCoreCallback()->ClearImageBuffer(dev_); + } } } else if (dev_->colorCamera_) @@ -1919,22 +1938,25 @@ void CircularBufferInserter::DoOnImageCaptured(CImageDataPointer& objImageDataPo dev_->GetCoreCallback()->ClearImageBuffer(dev_); } } + imgCounter_++; + if (imgCounter_ == numImages_) + { + dev_->StopSequenceAcquisition(); + } } else { dev_->AddToLog("残帧"); } +} - - - -} int64_t ClassGalaxy::__GetStride(int64_t nWidth, bool bIsColor) { return bIsColor ? nWidth * 3 : nWidth; } + bool ClassGalaxy::__IsCompatible(BITMAPINFO* pBmpInfo, uint64_t nWidth, uint64_t nHeight) { if (pBmpInfo == NULL diff --git a/DeviceAdapters/DahengGalaxy/ClassGalaxy.h b/DeviceAdapters/DahengGalaxy/ClassGalaxy.h index fb5c0a3fe..c19fda432 100644 --- a/DeviceAdapters/DahengGalaxy/ClassGalaxy.h +++ b/DeviceAdapters/DahengGalaxy/ClassGalaxy.h @@ -225,9 +225,13 @@ class MODULE_API ClassGalaxy : public CCameraBase class CircularBufferInserter : public ICaptureEventHandler { private: ClassGalaxy* dev_; + long numImages_; + long imgCounter_; + bool stopOnOverflow_; public: CircularBufferInserter(ClassGalaxy* dev); + CircularBufferInserter(ClassGalaxy* dev, long numImages, bool stoponOverflow); virtual void DoOnImageCaptured(CImageDataPointer& objImageDataPointer, void* pUserParam); }; \ No newline at end of file