10 #ifndef hifi_Recording_Frame_h
11 #define hifi_Recording_Frame_h
23 #include <QtCore/QObject>
28 using Time = uint32_t;
32 static const Time INVALID_TIME = UINT32_MAX;
34 static const Time INVALID_TIME = std::numeric_limits<uint32_t>::max();
37 static const FrameType TYPE_INVALID = 0xFFFF;
38 static const FrameType TYPE_HEADER = 0x0;
40 static Time secondsToFrameTime(
float seconds);
41 static float frameTimeToSeconds(Time frameTime);
43 static uint32_t frameTimeToMilliseconds(Time frameTime);
45 static Time frameTimeFromEpoch(quint64 epoch);
46 static quint64 epochForFrameTime(Time frameTime);
48 FrameType type { TYPE_INVALID };
49 Time timeOffset { 0 };
52 FrameHeader(FrameType type, Time timeOffset)
53 : type(type), timeOffset(timeOffset) { }
56 struct Frame :
public FrameHeader {
58 using Pointer = std::shared_ptr<Frame>;
59 using ConstPointer = std::shared_ptr<const Frame>;
60 using Handler = std::function<void(Frame::ConstPointer frame)>;
65 Frame(FrameType type,
float timeOffset,
const QByteArray& data)
66 : FrameHeader(type, timeOffset), data(data) { }
68 static FrameType registerFrameType(
const QString& frameTypeName);
69 static Handler registerFrameHandler(FrameType type, Handler handler);
70 static Handler registerFrameHandler(
const QString& frameTypeName, Handler handler);
71 static void clearFrameHandler(FrameType type);
72 static void clearFrameHandler(
const QString& frameTypeName);
73 static QMap<QString, FrameType> getFrameTypes();
74 static QMap<FrameType, QString> getFrameTypeNames();
75 static void handleFrame(
const ConstPointer& frame);