You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
3.1 KiB
88 lines
3.1 KiB
// License: Apache 2.0. See LICENSE file in root directory.
|
|
// Copyright(c) 2018 Intel Corporation. All Rights Reserved.
|
|
|
|
#ifndef __RS_CONVERTER_CONVERTER_CSV_H
|
|
#define __RS_CONVERTER_CONVERTER_CSV_H
|
|
|
|
|
|
#include <fstream>
|
|
#include <map>
|
|
#include <mutex>
|
|
#include <condition_variable>
|
|
#include "../converter.hpp"
|
|
|
|
|
|
namespace rs2 {
|
|
namespace tools {
|
|
namespace converter {
|
|
|
|
struct stringify
|
|
{
|
|
std::ostringstream ss;
|
|
template<class T> stringify& operator << (const T& val) { ss << val; return *this; }
|
|
operator std::string() const { return ss.str(); }
|
|
};
|
|
|
|
template <typename T>
|
|
inline bool val_in_range(const T& val, const std::initializer_list<T>& list)
|
|
{
|
|
for (const auto& i : list) {
|
|
if (val == i) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
class converter_csv : public converter_base {
|
|
protected:
|
|
struct motion_pose_frame_record {
|
|
motion_pose_frame_record(rs2_stream stream_type, int stream_index,
|
|
unsigned long long frame_number,
|
|
long long frame_ts, long long backend_ts, long long arrival_time,
|
|
double p1 = 0., double p2 = 0., double p3 = 0.,
|
|
double p4 = 0., double p5 = 0., double p6 = 0., double p7 = 0.);
|
|
|
|
rs2_stream _stream_type;
|
|
int _stream_idx;
|
|
unsigned long long _frame_number;
|
|
long long _frame_ts; // Device-based timestamp. (msec)
|
|
long long _backend_ts; // Driver-based timestamp. (msec)
|
|
long long _arrival_time; // Host arrival timestamp (msec)
|
|
std::array<double, 7> _params; // The parameters are optional and sensor specific
|
|
|
|
std::string to_string() const;
|
|
};
|
|
std::string get_time_string() const;
|
|
|
|
rs2_stream _streamType;
|
|
std::string _filePath;
|
|
std::map<std::pair<rs2_stream, int>, std::vector<motion_pose_frame_record>> _imu_pose_collection;
|
|
bool _sub_workers_joined;
|
|
std::mutex _m;
|
|
std::condition_variable _cv;
|
|
|
|
|
|
public:
|
|
|
|
converter_csv(const std::string& filePath, rs2_stream streamType = rs2_stream::RS2_STREAM_ANY);
|
|
|
|
void convert(rs2::frame& frame) override;
|
|
|
|
std::string name() const override
|
|
{
|
|
return "CSV converter";
|
|
}
|
|
|
|
void convert_depth(rs2::depth_frame& depthframe);
|
|
void convert_motion_pose(rs2::frame& f);
|
|
void save_motion_pose_data_to_file();
|
|
};
|
|
} // namespace converter
|
|
} // namespace tools
|
|
} // namespace rs2
|
|
|
|
|
|
|
|
#endif
|