test_sdk/hw/gtl_hw_player_file.h

93 lines
2.4 KiB
C++

#ifndef GTL_HW_PLAYER_FILE_H
#define GTL_HW_PLAYER_FILE_H
#include <QObject>
#include <QFile>
#include <QFileInfo>
#include <QDir>
#include <QDataStream>
#include <QMutex>
#include <QStringList>
#include <QDomElement>
#include <QJsonObject>
#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<std::vector<std::pair<int, int>>> ranges) const;
void set_ranges(std::vector<std::pair<qreal, qreal>>::iterator begin, std::vector<std::pair<qreal, qreal>>::iterator end);
void get_ranges(std::back_insert_iterator<std::vector<std::pair<qreal, qreal>>> 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