![]() |
ImFusion C++ SDK 4.5.0
|
#include <ImFusion/LiveUS/LiveSweepRecordingVisualizationAlgorithm.h>
Handles live ultrasound sweep visualization using an ImageStream and a TrackingStream. More...
Handles live ultrasound sweep visualization using an ImageStream and a TrackingStream.
This algorithm provides a live ring buffer sweep that can be rendered in views, such as during recording. It is primarily used by the SweepRecorderController, but it can also be utilized whenever a live ultrasound stream needs to be displayed with correct image matrices and calibration.
Usage Example:
Public Member Functions | |
| LiveSweepRecordingVisualizationAlgorithm (std::vector< Stream * > inputStreams, std::shared_ptr< SweepCalibrator > calib=nullptr) | |
| Constructs a LiveSweepRecordingVisualizationAlgorithm and sets up signal connections to update the live container when new stream data is received. | |
| bool | survivesDataDeletion (const Data *data) const override |
| Indicates whether the algorithm can handle (partial) deletion of the specified data, by default this checks whether the data is in the input list. | |
| void | compute () override |
| Processes buffered data and updates the live container. | |
| void | createLiveContainer () override |
| Creates the UltrasoundSweepRingBuffer, deleting the previous container if the output has not been taken. | |
| UltrasoundSweepRingBuffer * | sweep () |
| Returns the live UltrasoundSweepRingBuffer container. | |
| SweepCalibrator & | sweepCalibrator () |
| Provides access to the SweepCalibrator, allowing calibration queries and modifications. | |
| void | configure (const Properties *p) override |
| Configure this object instance by de-serializing the given Properties. | |
| void | configuration (Properties *p) const override |
| Serialize the current object configuration into the given Properties object. | |
| Public Member Functions inherited from ImFusion::LiveStreamProcessingAlgorithm | |
| LiveStreamProcessingAlgorithm (std::vector< Stream * > inputStreams, bool hasBackgroundThread=false, bool createOpenGLContextInProcessingThread=false) | |
| OwningDataList | takeOutput () override |
| Transfers the live container and sets m_ownLiveContainer to false. | |
| virtual void | start () |
| Sets m_isRunning to true. | |
| virtual void | stop () |
| Sets m_isRunning to false. | |
| bool | isRunning () const |
| Returns m_isRunning. | |
| Public Member Functions inherited from ImFusion::Algorithm | |
| Algorithm () | |
| Default constructor will registers a single "compute" action that calls compute() and returns status(). | |
| virtual void | setProgress (Progress *progress) |
| Sets a Progress interface the algorithm can use to notify observers about its computing progress. | |
| Progress * | progress () const |
| Returns the progress interface if set. | |
| virtual int | status () const |
| Indicates the status of the last call to compute(). | |
| const FactoryInfo & | factoryInfo () const |
| Returns the record describing how this Algorithm was instantiated by the AlgorithmFactory. | |
| void | setFactoryInfo (const FactoryInfo &value) |
| Sets the record describing how this Algorithm was instantiated by the AlgorithmFactory. | |
| Status | runAction (const std::string &id) |
| Run the action with name id if it exists. | |
| const std::vector< Action > & | actions () |
| Get a mapping from Action id to Action as registered in this algorithm. | |
| Public Member Functions inherited from ImFusion::Configurable | |
| virtual void | configureDefaults () |
| Retrieve the properties of this object, replaces values with their defaults and sets it again. | |
| void | registerParameter (ParameterBase *param) |
| Register the given Parameter or SubProperty, so that it will be configured during configure()/configuration(). | |
| void | unregisterParameter (const ParameterBase *param) |
| Remove the given Parameter or SubProperty from the list of registered parameters. | |
| Configurable (const Configurable &rhs) | |
| Configurable (Configurable &&rhs) noexcept | |
| Configurable & | operator= (const Configurable &) |
| Configurable & | operator= (Configurable &&) noexcept |
| Public Member Functions inherited from ImFusion::SignalReceiver | |
| SignalReceiver ()=default | |
| Default constructor. | |
| SignalReceiver (const SignalReceiver &other) | |
| Copy constructor, does not copy any existing signal connections from other. | |
| SignalReceiver & | operator= (SignalReceiver rhs) |
| Assignment operator, disconnects all existing connections, does not copy any existing signal connections from rhs. | |
| virtual | ~SignalReceiver () |
| Virtual destructor disconnects from all connected signals. | |
Static Public Member Functions | |
| static bool | createCompatible (const DataList &inputData, Algorithm **a) |
| Static Public Member Functions inherited from ImFusion::Algorithm | |
| static bool | createCompatible (const DataList &data, Algorithm **a=nullptr) |
| Factory function to check algorithm compatibility with input data and optionally instantiate it. | |
Protected Member Functions | |
| void | moveBufferedDataToLiveContainer () override |
| Updates the live container using buffered data. Called from the main thread. | |
| void | updateSweepMainTrackingIndex () |
| Updates the main tracking index of the sweep based on the live stream. | |
| void | moveImages (TrackedSharedImageSet &buffer) |
| Transfers images from the buffer to the live container. | |
| void | copyTrackings (TrackedSharedImageSet &buffer) |
| Transfers tracking data from the buffer to the live container. | |
| void | copyComponents (TrackedSharedImageSet &buffer) |
| Transfers additional components from the buffer to the live container. | |
| void | updateSweepCalibration () |
| Updates the sweep calibration when recalibration is required. | |
| void | checkForLabelMap () |
| Checks if image data is a Label Map and adds a transfer LUT. | |
| void | setLabelMapLut (LabelDataComponent *ldc) |
| Sets or updates a transfer LUT for label maps. | |
| Protected Member Functions inherited from ImFusion::LiveStreamProcessingAlgorithm | |
| void | onNewStreamData (std::shared_ptr< const StreamData > streamData) |
| Temporarily buffers copies of the streamData in internal queues. | |
| virtual void | onNewImagesArrived () |
| Announces either to the main thread (no background thread) or the background processing thread that new images have arrived. | |
| void | notifyListenersOutputChanged () |
| Emits Algorithm::signalOutputChanged so listeners can schedule a main-thread update (e.g. compute()). | |
| double | extractTimestamp (const StreamData *data) const |
| Extracts timestampDevice() or timestampArrival(), depending on p_useDeviceTimestamp. | |
| void | startProcessingThread () |
| Starts the processing thread, which will call backgroundThreadProcessData() after each notification. | |
| void | stopProcessingThread () |
| Stops the processing thread. | |
| virtual bool | backgroundThreadProcessData () |
| This method is called from the processing thread after each notification. To be called again without sleeping if returned true. | |
| void | moveImages (TrackedSharedImageSet *tsisSrc, TrackedSharedImageSet *tsisDst) |
| Moves all images from the source to the destination container. | |
| void | ensureSufficientTracking (TrackedSharedImageSet *tsisSrc, TrackedSharedImageSet *tsisDst) |
| Creates tracking streams as necessary for moveTracking() to be able to copy all tracking data. | |
| void | moveTracking (TrackedSharedImageSet *tsisSrc, TrackedSharedImageSet *tsisDst) |
| Moves all tracking data from the source to the destination container. | |
| void | moveImagesAndTracking (TrackedSharedImageSet *tsisSrc, TrackedSharedImageSet *tsisDst) |
| Moves all images and tracking data from the source to the destination container. | |
| void | selectAllFocusLast () |
| Helper method to select all frames of the live container and focus on the last one. | |
| Protected Member Functions inherited from ImFusion::Algorithm | |
| void | loadDefaults () |
| void | registerAction (const std::string &id, const std::string &guiName, const std::function< Algorithm::Status(void)> &action) |
| Register an action to be run via runAction. | |
| template<typename D> | |
| void | registerAction (const std::string &id, const std::string &guiName, Algorithm::Status(D::*action)(void)) |
| Template version of runAction that can be used with a pointer to a member function. | |
| void | registerAction (const Action &action) |
| Register an action. | |
| Protected Member Functions inherited from ImFusion::SignalReceiver | |
| void | disconnectAll () |
| Disconnects all existing connections. | |
Protected Attributes | |
| std::shared_ptr< SweepCalibrator > | m_calib |
| Sweep calibrator used to calibrate live sweep. | |
| std::shared_ptr< SignalConnection > | m_labelDataComponentConnection |
| Connection for LabelDataComponent signalChanged. | |
| ImageStream * | m_inputImageStream |
| Protected Attributes inherited from ImFusion::LiveStreamProcessingAlgorithm | |
| std::vector< Stream * > | m_inputStreams |
| Input. | |
| const bool | m_hasBackgroundThread |
| Flag whether there is a background thread. | |
| TrackedSharedImageSet * | m_liveContainer = nullptr |
| Output Live container, see m_ownLiveContainer for ownership. | |
| bool | m_ownLiveContainer = false |
| If true, the live container is still owned by this algorithm; false after output() has transferred it. | |
| std::unique_ptr< TrackedSharedImageSet > | m_dataBufferPre |
| Staging buffer between onNewStreamData and further processing / live container. | |
| std::vector< GL::SyncObject > | m_dataBufferPreGlFences |
| Fences to synchronize the processing thread OpenGL context with incoming image streams' GL contexts. | |
| std::mutex | m_dataBufferPreMutex |
| Mutex protecting m_dataBufferPre and m_dataBufferPreGlFences. | |
| std::map< std::string, mat4 > | m_lastGoodPositions |
| Cache for last matrix of each instrument with good quality. | |
| std::unique_ptr< TrackedSharedImageSet > | m_dataBufferPost |
| Second staging container; filled by derived logic when using the background path. | |
| std::mutex | m_dataBufferPostMutex |
| Mutex protecting m_dataBufferPost. | |
| std::atomic< bool > | m_isRunning = {false} |
| Flag whether stream events are being processed. | |
| std::future< void > | m_processingThread |
| Background thread. | |
| std::mutex | m_processingThreadMutex |
| Used with m_processingThreadCondition and the background worker loop. | |
| bool | m_processingThreadStopExecution |
| Flag indicating the background thread to stop. | |
| std::condition_variable | m_processingThreadCondition |
| Cond.var. to wake up background thread. | |
| bool | m_createOpenGLContextInProcessingThread = false |
| If true, worker thread creates and owns one shared GL context. | |
| Protected Attributes inherited from ImFusion::Algorithm | |
| std::string | m_name |
| Algorithm name. | |
| Progress * | m_progress = nullptr |
| Non-owing pointer to a progress interface. May be a nullptr. | |
| FactoryInfo | m_factoryInfo = {} |
| Record describing how this algorithm was instantiated by the AlgorithmFactory. | |
| int | m_status = Status::Unknown |
| Algorithm status after last call to compute(). | |
| std::vector< Action > | m_actions |
| Map of key given by the id of the action, of the available actions of this algorithm. | |
| Protected Attributes inherited from ImFusion::Configurable | |
| std::vector< Param > | m_params |
| List of all registered Parameter and SubProperty instances. | |
Additional Inherited Members | |
| Public Types inherited from ImFusion::Algorithm | |
| enum | Status { Unknown = -1 , Success = 0 , Error = 1 , InvalidInput , IncompleteInput , OutOfMemoryHost , OutOfMemoryGPU , UnsupportedGPU , UnknownAction , AbortedByUser , User = 1000 } |
| Status codes. More... | |
| Public Attributes inherited from ImFusion::LiveStreamProcessingAlgorithm | |
| Parameter< bool > | p_useDeviceTimestamp |
| If true, buffered samples use device timestamps; otherwise arrival time. | |
| Parameter< std::optional< int > > | p_imageBufferSize {"imageBufferSize", std::nullopt, this} |
| Pre-buffer image cap; nullopt = unlimited. | |
| Parameter< std::optional< int > > | p_trackingBufferSize {"trackingBufferSize", std::nullopt, this} |
| Pre-buffer cap per tracking sequence; nullopt = unlimited. | |
| Parameter< double > | p_qualityThreshold {"qualityThreshold", 0.2, this} |
| Quality threshold for matrix updates. | |
| Public Attributes inherited from ImFusion::Algorithm | |
| Signal | signalOutputChanged |
| Signal should be emitted by Algorithms when their output/result has changed. | |
| Signal | signalParametersChanged |
| Signal should be emitted by Algorithms when their parameter configuration has changed. | |
| Public Attributes inherited from ImFusion::Configurable | |
| Signal | signalParametersChanged |
| Emitted whenever one of the registered Parameters' or SubPropertys' signalValueChanged signal was emitted. | |
| ImFusion::US::LiveSweepRecordingVisualizationAlgorithm::LiveSweepRecordingVisualizationAlgorithm | ( | std::vector< Stream * > | inputStreams, |
| std::shared_ptr< SweepCalibrator > | calib = nullptr ) |
Constructs a LiveSweepRecordingVisualizationAlgorithm and sets up signal connections to update the live container when new stream data is received.
| inputStreams | A list containing an ultrasound ImageStream and a TrackingStream. |
| calib | Optional external SweepCalibrator for calibrating the live sweep. If omitted, the constructor creates an internal sweep calibrator. |
| std::invalid_argument | if inputStreams does not contain exactly one ImageStream. |
|
overridevirtual |
Indicates whether the algorithm can handle (partial) deletion of the specified data, by default this checks whether the data is in the input list.
Reimplemented from ImFusion::Algorithm.
|
overridevirtual |
Processes buffered data and updates the live container.
Reimplemented from ImFusion::LiveStreamProcessingAlgorithm.
|
overridevirtual |
Creates the UltrasoundSweepRingBuffer, deleting the previous container if the output has not been taken.
Reimplemented from ImFusion::LiveStreamProcessingAlgorithm.
|
overridevirtual |
Configure this object instance by de-serializing the given Properties.
The default implementation will do so automatically for all registered Parameter and SubProperty instances.
Reimplemented from ImFusion::Configurable.
|
overridevirtual |
Serialize the current object configuration into the given Properties object.
The default implementation will do so automatically for all registered Parameter and SubProperty instances.
Reimplemented from ImFusion::Configurable.
|
overrideprotectedvirtual |
Updates the live container using buffered data. Called from the main thread.
Reimplemented from ImFusion::LiveStreamProcessingAlgorithm.