#ifndef GTL_HW_PLAYER_FILE_H #define GTL_HW_PLAYER_FILE_H #include #include #include #include #include #include #include #include #include #include "hw_global.h" namespace gtl { namespace hw { class HW_EXPORT player_file : public QObject { Q_OBJECT public: player_file(QObject *parent, QString path); ~player_file(); bool is_ok() const { return _is_ok; } int channels() const { return _channels; } qreal rate() const { return _rate; } qreal dt() const { return _rate == 0 ? 0 : 1.0/_rate; } qreal time() const { return _time; } QString info() const { return _info; } int samples() const { return qRound(_time*_rate); } QString channel(int idx) const; QString unit(int idx) const; int color(int idx) const; QJsonObject channel_info(int idx) const; qreal reference(int idx) const; qreal sensitivity(int idx) const; qreal gain(int idx) const; qreal offset(int idx) const; QString device() const; virtual QString comment() const; const QJsonObject& data() const; virtual bool get_data(qreal *data, int &samples, bool is_cyclic, bool &is_continued) = 0; virtual bool get_data(qreal *data, int& idx, int &samples, bool is_cyclic = false) = 0; void seek_to_start(); QString path() const { return _path; } void get_ranges_indices(std::back_insert_iterator>> ranges) const; void set_ranges(std::vector>::iterator begin, std::vector>::iterator end); void get_ranges(std::back_insert_iterator>> out) const; protected: QString _path; QFile* _file; QDataStream* _stream; bool _is_ok; qreal _rate; qreal _time; int _channels; QString _info; quint64 _pos_data; QMutex _mutex; QJsonObject _data; private: QJsonObject get_root(int idx) const; private: }; } } #endif // GTL_HW_PLAYER_FILE_H