DvsenseDriver  1.1.4
The SDK for dvsense products.
Loading...
Searching...
No Matches
DvsApsFusionProccessor.hpp
1#ifndef DVS_APS_FUSION_PROCCESSOR_HPP
2#define DVS_APS_FUSION_PROCCESSOR_HPP
3#include "DvsenseBase/EventBase/EventTypes.hpp"
4#include "DvsenseBase/ApsBase/ApsTypes.h"
5#include "DvsenseBase/Utils/ObjectPool/DsObjectPoolFactory.h"
6#include <queue>
7#include <mutex>
8
9#ifdef _WIN32
10#define DVSENSE_API __declspec(dllexport)
11#else
12#define DVSENSE_API
13#endif // _WIN32
14namespace dvsense
15{
16 class DVSENSE_API DvsApsFusionProccessor
17 {
18 public:
26 {
27 dvs_events_frame_pool_ = DsObjectPoolFactory::createUniqueDsObjectPoolWithArgs<Event2DVector>(10, 3*1024*1024);
28 dvs_events_buffer_ = dvs_events_frame_pool_->acquire();
29 dvs_events_buffer_->clear();
30 fusion_data_callback_ = nullptr;
31 }
32
33 void clear()
34 {
35 std::unique_lock<std::mutex> lock(fusion_queue_mutex_);
36 while (!aps_frame_queue_.empty())
37 {
38 aps_frame_queue_.pop();
39 }
40 while (!dvs_events_frame_queue_.empty())
41 {
42 dvs_events_frame_queue_.pop();
43 }
44 dvs_events_buffer_->clear();
45 }
46
53 void addFusionDataCallback(DsFusionDataCallback cb)
54 {
55 fusion_data_callback_ = cb;
56 }
62 {
63 fusion_data_callback_ = nullptr;
64 }
65
70 void addDvsData(const Event2D *begin, const Event2D *end)
71 {
72 dvs_events_buffer_->insert(dvs_events_buffer_->end(), begin, end);
73 }
74
79 void addApsData(const ApsFrame frame)
80 {
81 std::unique_lock<std::mutex> fusion_lock(fusion_queue_mutex_);
82 aps_frame_queue_.push(frame.clone());
83 fusionData();
84 }
85
90 void addSyncSignal(const EventTriggerIn &trigger_in)
91 {
92 if (trigger_in.polarity == 1)
93 {
94 std::unique_lock<std::mutex> fusion_lock(fusion_queue_mutex_);
95 dvs_events_frame_queue_.push(dvs_events_buffer_);
96 dvs_events_buffer_ = dvs_events_frame_pool_->acquire();
97 dvs_events_buffer_->clear();
98 fusionData();
99 }
100 }
101
107 {
108 while (!aps_frame_queue_.empty() && !dvs_events_frame_queue_.empty())
109 {
110 ApsFrame frame = aps_frame_queue_.front();
111 aps_frame_queue_.pop();
112 DsObjectPool<Event2DVector>::ptr_type dvs_events = dvs_events_frame_queue_.front();
113 dvs_events_frame_queue_.pop();
114 if (fusion_data_callback_)
115 {
116 fusion_data_callback_(frame, dvs_events->data(), dvs_events->data() + dvs_events->size());
117 }
118 }
119 }
120
121 private:
122 std::unique_ptr<DsObjectPool<Event2DVector>> dvs_events_frame_pool_;
123 std::queue<DsObjectPool<Event2DVector>::ptr_type> dvs_events_frame_queue_;
124 DsObjectPool<Event2DVector>::ptr_type dvs_events_buffer_;
125
126 std::queue<ApsFrame> aps_frame_queue_;
127 DsFusionDataCallback fusion_data_callback_;
128 std::mutex fusion_queue_mutex_;
129 };
130} // namespace dvsense
131
132#endif // DVS_APS_FUSION_PROCCESSOR_HPP
Definition DvsApsFusionProccessor.hpp:17
void addFusionDataCallback(DsFusionDataCallback cb)
Add a callback for fusion data ~english.
Definition DvsApsFusionProccessor.hpp:53
void addSyncSignal(const EventTriggerIn &trigger_in)
Add sync signal for fusion.
Definition DvsApsFusionProccessor.hpp:90
void fusionData()
Fuse the dvs and aps data and call the callback function.
Definition DvsApsFusionProccessor.hpp:106
void addDvsData(const Event2D *begin, const Event2D *end)
Add dvs data for fusion.
Definition DvsApsFusionProccessor.hpp:70
void addApsData(const ApsFrame frame)
Add aps data for fusion.
Definition DvsApsFusionProccessor.hpp:79
void removeFusionDataCallback()
Clear the callback function for the fusion data.
Definition DvsApsFusionProccessor.hpp:61
void clear()
Definition DvsApsFusionProccessor.hpp:33
DvsApsFusionProccessor()
Constructor ~english.
Definition DvsApsFusionProccessor.hpp:25
Definition TypeUtils.hpp:9