Olive
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
clip.h
Go to the documentation of this file.
1 /***
2 
3  Olive - Non-Linear Video Editor
4  Copyright (C) 2019 Olive Team
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19 ***/
20 
21 #ifndef CLIP_H
22 #define CLIP_H
23 
24 #include <memory>
25 #include <QWaitCondition>
26 #include <QMutex>
27 #include <QVector>
28 #include <QOpenGLFramebufferObject>
29 #include <QOpenGLTexture>
30 
31 #include "rendering/cacher.h"
32 
33 #include "effects/effect.h"
34 #include "effects/transition.h"
35 #include "undo/comboaction.h"
36 #include "project/media.h"
37 #include "project/footage.h"
38 
39 #include "marker.h"
40 
41 extern "C" {
42 #include <libavformat/avformat.h>
43 #include <libavfilter/avfilter.h>
44 }
45 
46 struct ClipSpeed {
47  ClipSpeed();
48  double value;
50 };
51 
52 using ClipPtr = std::shared_ptr<Clip>;
53 
54 class Sequence;
55 
56 class Clip {
57 public:
58  Clip(Sequence *s);
59  ~Clip();
60  ClipPtr copy(Sequence *s);
61 
62  bool IsActiveAt(long timecode);
63  bool IsSelected(bool containing = true);
64 
65  const QColor& color();
66  void set_color(int r, int g, int b);
67  void set_color(const QColor& c);
68 
69  Media* media();
71  int media_stream_index();
72  int media_width();
73  int media_height();
74  double media_frame_rate();
75  long media_length();
76  void set_media(Media* m, int s);
77 
78  bool enabled();
79  void set_enabled(bool e);
80 
81  void move(ComboAction* ca,
82  long iin,
83  long iout,
84  long iclip_in,
85  int itrack,
86  bool verify_transitions = true,
87  bool relative = false);
88 
89  long clip_in(bool with_transition = false);
90  void set_clip_in(long c);
91 
92  long timeline_in(bool with_transition = false);
93  void set_timeline_in(long t);
94 
95  long timeline_out(bool with_transition = false);
96  void set_timeline_out(long t);
97 
98  int track();
99  void set_track(int t);
100 
101  bool reversed();
102  void set_reversed(bool r);
103 
104  bool autoscaled();
105  void set_autoscaled(bool b);
106 
107  double cached_frame_rate();
108  void set_cached_frame_rate(double d);
109 
110  const QString& name();
111  void set_name(const QString& s);
112 
113  const ClipSpeed& speed();
114  void set_speed(const ClipSpeed& s);
115 
116  AVRational time_base();
117 
118  void reset_audio();
119  void refresh();
120 
121  long length();
122 
123  void refactor_frame_rate(ComboAction* ca, double multiplier, bool change_timeline_points);
125 
126  // markers
127  QVector<Marker>& get_markers();
128 
129  // other variables (should be deep copied/duplicated in copy())
130  int IndexOfEffect(Effect* e);
131  QList<EffectPtr> effects;
132  QVector<int> linked;
135 
136  // playback functions
137  void Open();
138  void Cache(long playhead, bool scrubbing, QVector<Clip*> &nests, int playback_speed);
139  bool Retrieve();
140  void Close(bool wait);
141  bool IsOpen();
142 
143  bool UsesCacher();
144 
145  // temporary variables
146  int load_id;
148  bool replaced;
149 
150  // caching functions
152  QMutex cache_lock;
153 
154  // video playback variables
155  QOpenGLFramebufferObject** fbo;
156  QOpenGLTexture* texture;
158 
159 private:
160  // timeline variables (should be copied in copy())
161  bool enabled_;
162  long clip_in_;
165  int track_;
166  QString name_;
170  double cached_fr_;
171  bool reverse_;
173 
176 
177  QVector<Marker> markers;
178  QColor color_;
179  bool open_;
180 };
181 
182 #endif // CLIP_H
int track_
Definition: clip.h:165
int media_height()
Definition: clip.cpp:426
long timeline_out_
Definition: clip.h:164
QVector< int > linked
Definition: clip.h:132
int track()
Definition: clip.cpp:351
bool reverse_
Definition: clip.h:171
QColor color_
Definition: clip.h:178
bool undeletable
Definition: clip.h:147
void set_name(const QString &s)
Definition: clip.cpp:331
void reset_audio()
Definition: clip.cpp:197
Clip(Sequence *s)
Definition: clip.cpp:41
long clip_in(bool with_transition=false)
Definition: clip.cpp:256
ClipSpeed()
Definition: clip.cpp:637
void refresh()
Definition: clip.cpp:212
long timeline_in_
Definition: clip.h:163
AVRational time_base()
Definition: clip.cpp:346
QVector< Marker > & get_markers()
Definition: clip.cpp:231
bool IsOpen()
Definition: clip.cpp:532
void set_speed(const ClipSpeed &s)
Definition: clip.cpp:341
void set_media(Media *m, int s)
Definition: clip.cpp:148
ClipSpeed speed_
Definition: clip.h:169
TransitionPtr opening_transition
Definition: clip.h:133
double value
Definition: clip.h:48
~Clip()
Definition: clip.cpp:248
bool IsActiveAt(long timecode)
Definition: clip.cpp:88
std::shared_ptr< Clip > ClipPtr
Definition: clip.h:52
long media_length()
Definition: clip.cpp:376
bool enabled_
Definition: clip.h:161
void move(ComboAction *ca, long iin, long iout, long iclip_in, int itrack, bool verify_transitions=true, bool relative=false)
Definition: clip.cpp:164
double media_frame_rate()
Definition: clip.cpp:366
Cacher cacher
Definition: clip.h:174
QVector< Marker > markers
Definition: clip.h:177
Sequence * sequence
Definition: clip.h:124
void set_timeline_in(long t)
Definition: clip.cpp:277
int media_stream_
Definition: clip.h:168
void set_autoscaled(bool b)
Definition: clip.cpp:311
void set_color(int r, int g, int b)
Definition: clip.cpp:116
bool autoscaled()
Definition: clip.cpp:306
QString name_
Definition: clip.h:166
The Cacher class.
Definition: cacher.h:100
Definition: footage.h:49
bool autoscale_
Definition: clip.h:172
bool maintain_audio_pitch
Definition: clip.h:49
bool Retrieve()
Definition: clip.cpp:542
Definition: clip.h:56
bool UsesCacher()
Definition: clip.cpp:632
double cached_frame_rate()
Definition: clip.cpp:316
QOpenGLTexture * texture
Definition: clip.h:156
long texture_frame
Definition: clip.h:157
The ComboAction class.
Definition: comboaction.h:19
bool reversed()
Definition: clip.cpp:296
const ClipSpeed & speed()
Definition: clip.cpp:336
void set_reversed(bool r)
Definition: clip.cpp:301
Definition: media.h:45
void set_track(int t)
Definition: clip.cpp:356
double cached_fr_
Definition: clip.h:170
void set_clip_in(long c)
Definition: clip.cpp:264
void set_cached_frame_rate(double d)
Definition: clip.cpp:321
Definition: clip.h:46
int media_stream_index()
Definition: clip.cpp:143
void Open()
Definition: clip.cpp:469
const QString & name()
Definition: clip.cpp:326
std::shared_ptr< Transition > TransitionPtr
Definition: transition.h:42
FootageStream * media_stream()
Definition: clip.cpp:133
long timeline_out(bool with_transition=false)
Definition: clip.cpp:282
bool replaced
Definition: clip.h:148
QMutex cache_lock
Definition: clip.h:152
int load_id
Definition: clip.h:146
void Cache(long playhead, bool scrubbing, QVector< Clip * > &nests, int playback_speed)
Definition: clip.cpp:537
ClipPtr copy(Sequence *s)
Definition: clip.cpp:62
QOpenGLFramebufferObject ** fbo
Definition: clip.h:155
long length()
Definition: clip.cpp:362
Media * media_
Definition: clip.h:167
bool IsSelected(bool containing=true)
Definition: clip.cpp:102
TransitionPtr closing_transition
Definition: clip.h:134
int media_width()
Definition: clip.cpp:407
QMutex state_change_lock
Definition: clip.h:151
void refactor_frame_rate(ComboAction *ca, double multiplier, bool change_timeline_points)
Definition: clip.cpp:445
QList< EffectPtr > effects
Definition: clip.h:131
bool enabled()
Definition: clip.cpp:154
long timeline_in(bool with_transition=false)
Definition: clip.cpp:269
long cacher_frame
Definition: clip.h:175
Definition: sequence.h:31
const QColor & color()
Definition: clip.cpp:111
void set_timeline_out(long t)
Definition: clip.cpp:291
int IndexOfEffect(Effect *e)
Definition: clip.cpp:238
Media * media()
Definition: clip.cpp:128
bool open_
Definition: clip.h:179
Definition: effect.h:136
void Close(bool wait)
Definition: clip.cpp:490
void set_enabled(bool e)
Definition: clip.cpp:159
long clip_in_
Definition: clip.h:162