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"
10#define DVSENSE_API __declspec(dllexport)
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;
35 std::unique_lock<std::mutex> lock(fusion_queue_mutex_);
36 while (!aps_frame_queue_.empty())
38 aps_frame_queue_.pop();
40 while (!dvs_events_frame_queue_.empty())
42 dvs_events_frame_queue_.pop();
44 dvs_events_buffer_->clear();
55 fusion_data_callback_ = cb;
63 fusion_data_callback_ =
nullptr;
70 void addDvsData(
const Event2D *begin,
const Event2D *end)
72 dvs_events_buffer_->insert(dvs_events_buffer_->end(), begin, end);
82 std::unique_lock<std::mutex> fusion_lock(fusion_queue_mutex_);
83 aps_frame_queue_.push(frame.clone());
93 if (trigger_in.polarity == 1)
95 std::unique_lock<std::mutex> fusion_lock(fusion_queue_mutex_);
96 dvs_events_frame_queue_.push(dvs_events_buffer_);
97 dvs_events_buffer_ = dvs_events_frame_pool_->acquire();
98 dvs_events_buffer_->clear();
109 while (!aps_frame_queue_.empty() && !dvs_events_frame_queue_.empty())
111 ApsFrame frame = aps_frame_queue_.front();
112 aps_frame_queue_.pop();
113 DsObjectPool<Event2DVector>::ptr_type dvs_events = dvs_events_frame_queue_.front();
114 dvs_events_frame_queue_.pop();
115 if (fusion_data_callback_)
117 fusion_data_callback_(frame, dvs_events->data(), dvs_events->data() + dvs_events->size());
123 std::unique_ptr<DsObjectPool<Event2DVector>> dvs_events_frame_pool_;
124 std::queue<DsObjectPool<Event2DVector>::ptr_type> dvs_events_frame_queue_;
125 DsObjectPool<Event2DVector>::ptr_type dvs_events_buffer_;
127 std::queue<ApsFrame> aps_frame_queue_;
128 DsFusionDataCallback fusion_data_callback_;
129 std::mutex fusion_queue_mutex_;
定义 DvsApsFusionProccessor.hpp:17
void addFusionDataCallback(DsFusionDataCallback cb)
添加融合数据回调函数
定义 DvsApsFusionProccessor.hpp:53
void addSyncSignal(const EventTriggerIn &trigger_in)
添加同步信号用于融合
定义 DvsApsFusionProccessor.hpp:91
void addApsData(const ApsFrame &frame)
添加aps数据用于融合
定义 DvsApsFusionProccessor.hpp:79
void fusionData()
对dvs与aps数据进行融合,并调用回调函数
定义 DvsApsFusionProccessor.hpp:107
void addDvsData(const Event2D *begin, const Event2D *end)
添加dvs数据用于融合
定义 DvsApsFusionProccessor.hpp:70
void removeFusionDataCallback()
清除融合数据回调函数
定义 DvsApsFusionProccessor.hpp:61
void clear()
定义 DvsApsFusionProccessor.hpp:33
DvsApsFusionProccessor()
构造函数
定义 DvsApsFusionProccessor.hpp:25