Overte C++ Documentation
Clip.h
1 //
2 // Created by Bradley Austin Davis 2015/11/04
3 // Copyright 2015 High Fidelity, Inc.
4 //
5 // Distributed under the Apache License, Version 2.0.
6 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
7 //
8 
9 #pragma once
10 #ifndef hifi_Recording_Clip_h
11 #define hifi_Recording_Clip_h
12 
13 #include "Forward.h"
14 
15 #include <mutex>
16 
17 #include <QtCore/QObject>
18 
19 #include "Frame.h"
20 
21 class QIODevice;
22 
23 namespace recording {
24 
25 class Clip {
26 public:
27  using Pointer = std::shared_ptr<Clip>;
28  using ConstPointer = std::shared_ptr<const Clip>;
29 
30  virtual ~Clip() {}
31 
32  virtual Pointer duplicate() const = 0;
33 
34  virtual QString getName() const = 0;
35 
36  virtual float duration() const = 0;
37  virtual size_t frameCount() const = 0;
38 
39  virtual void seek(float offset) final;
40  virtual float position() const final;
41 
42  virtual void seekFrameTime(Frame::Time offset) = 0;
43  virtual Frame::Time positionFrameTime() const = 0;
44 
45  virtual FrameConstPointer peekFrame() const = 0;
46  virtual FrameConstPointer nextFrame() = 0;
47  virtual void skipFrame() = 0;
48  virtual void addFrame(FrameConstPointer) = 0;
49 
50  bool write(QIODevice& output);
51 
52  static Pointer fromFile(const QString& filePath);
53  static void toFile(const QString& filePath, const ConstPointer& clip);
54  static QByteArray toBuffer(const ConstPointer& clip);
55  static Pointer newClip();
56 
57  static const QString FRAME_TYPE_MAP;
58  static const QString FRAME_COMREPSSION_FLAG;
59 
60 protected:
61  friend class WrapperClip;
62  using Mutex = std::recursive_mutex;
63  using Locker = std::unique_lock<Mutex>;
64 
65  virtual void reset() = 0;
66 
67  mutable Mutex _mutex;
68 };
69 
70 }
71 
72 #endif