Olive
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 <QWaitCondition>
25 #include <QMutex>
26 #include <QVector>
27 #include <QOpenGLFramebufferObject>
28 #include <QOpenGLTexture>
29 
30 #include "playback/cacher.h"
31 
32 #include "project/effect.h"
33 #include "project/transition.h"
34 #include "project/comboaction.h"
35 #include "project/media.h"
36 #include "footage.h"
37 
38 #include "marker.h"
39 
40 extern "C" {
41 #include <libavformat/avformat.h>
42 #include <libavfilter/avfilter.h>
43 }
44 
45 using ClipPtr = std::shared_ptr<Clip>;
46 
47 class Sequence;
48 using SequencePtr = std::shared_ptr<Sequence>;
49 
50 class Clip {
51 public:
52  Clip(SequencePtr s);
53  ~Clip();
55  void reset_audio();
56  void reset();
57  void refresh();
61  long getLength();
62  double getMediaFrameRate();
63  long getMaximumLength();
64  void recalculateMaxLength();
65  int getWidth();
66  int getHeight();
67  void refactor_frame_rate(ComboAction* ca, double multiplier, bool change_timeline_points);
69 
70  // queue functions
71  void queue_clear();
72  void queue_remove_earliest();
73 
74  // timeline variables (should be copied in copy())
75  bool enabled;
76  long clip_in;
79  int track;
80  QString name;
81  quint8 color_r;
82  quint8 color_g;
83  quint8 color_b;
86  double speed;
87  double cached_fr;
88  bool reverse;
90  bool autoscale;
91 
92  // markers
93  QVector<Marker>& get_markers();
94 
95  // other variables (should be deep copied/duplicated in copy())
96  QList<EffectPtr> effects;
97  QVector<int> linked;
100 
101  // media handling
102  AVFormatContext* formatCtx;
103  AVStream* stream;
104  AVCodec* codec;
105  AVCodecContext* codecCtx;
106  AVPacket* pkt;
107  AVFrame* frame;
108  AVDictionary* opts;
110 
111  // temporary variables
112  int load_id;
116  bool open;
118  bool replaced;
120  int pix_fmt;
121 
122  // caching functions
126  QWaitCondition can_cache;
128  QVector<AVFrame*> queue;
129  QMutex queue_lock;
130  QMutex render_lock;
131  QMutex lock;
132  QMutex open_lock;
134 
135  // converters/filters
136  AVFilterGraph* filter_graph;
137  AVFilterContext* buffersink_ctx;
138  AVFilterContext* buffersrc_ctx;
139 
140  // video playback variables
141  QOpenGLFramebufferObject** fbo;
142  QOpenGLTexture* texture;
144 
145  // audio playback variables
146  int64_t reverse_target;
152 private:
153  QVector<Marker> markers;
154 };
155 
156 #endif // CLIP_H
~Clip()
Definition: clip.cpp:171
bool reverse
Definition: clip.h:88
ClipPtr copy(SequencePtr s)
Definition: clip.cpp:63
quint8 color_g
Definition: clip.h:82
void queue_clear()
Definition: clip.cpp:145
Definition: sequence.h:31
long clip_in
Definition: clip.h:76
bool reached_end
Definition: clip.h:114
AVFilterContext * buffersrc_ctx
Definition: clip.h:138
QMutex open_lock
Definition: clip.h:132
double cached_fr
Definition: clip.h:87
bool pkt_written
Definition: clip.h:115
QWaitCondition can_cache
Definition: clip.h:126
The ComboAction class.
Definition: comboaction.h:19
QString name
Definition: clip.h:80
bool autoscale
Definition: clip.h:90
long timeline_out
Definition: clip.h:78
void queue_remove_earliest()
Definition: clip.cpp:152
QOpenGLFramebufferObject ** fbo
Definition: clip.h:141
long getMaximumLength()
Definition: clip.cpp:252
Definition: cacher.h:30
bool open
Definition: clip.h:116
QVector< Marker > markers
Definition: clip.h:153
QMutex queue_lock
Definition: clip.h:129
AVFilterGraph * filter_graph
Definition: clip.h:136
int64_t last_invalid_ts
Definition: clip.h:133
void refactor_frame_rate(ComboAction *ca, double multiplier, bool change_timeline_points)
Definition: clip.cpp:294
Definition: media.h:42
int load_id
Definition: clip.h:112
std::shared_ptr< Clip > ClipPtr
Definition: cacher.h:28
bool ignore_reverse
Definition: clip.h:119
QVector< int > linked
Definition: clip.h:97
int getHeight()
Definition: clip.cpp:276
long texture_frame
Definition: clip.h:143
quint8 color_b
Definition: clip.h:83
QVector< AVFrame * > queue
Definition: clip.h:128
QMutex lock
Definition: clip.h:131
bool maintain_audio_pitch
Definition: clip.h:89
int track
Definition: clip.h:79
long getLength()
Definition: clip.cpp:206
QVector< Marker > & get_markers()
Definition: clip.cpp:164
bool enabled
Definition: clip.h:75
AVPacket * pkt
Definition: clip.h:106
int pix_fmt
Definition: clip.h:120
TransitionPtr opening_transition
Definition: clip.h:98
quint8 color_r
Definition: clip.h:81
int getWidth()
Definition: clip.cpp:256
bool undeletable
Definition: clip.h:113
QList< EffectPtr > effects
Definition: clip.h:96
void reset_audio()
Definition: clip.cpp:110
AVFrame * frame
Definition: clip.h:107
long audio_target_frame
Definition: clip.h:151
void refresh()
Definition: clip.cpp:124
long get_timeline_in_with_transition()
Definition: clip.cpp:188
TransitionPtr closing_transition
Definition: clip.h:99
Cacher * cacher
Definition: clip.h:125
bool audio_just_reset
Definition: clip.h:150
std::shared_ptr< Transition > TransitionPtr
Definition: transition.h:42
long get_timeline_out_with_transition()
Definition: clip.cpp:196
double getMediaFrameRate()
Definition: clip.cpp:210
std::shared_ptr< Sequence > SequencePtr
Definition: clip.h:48
double speed
Definition: clip.h:86
int media_stream
Definition: clip.h:85
int frame_sample_index
Definition: clip.h:147
bool use_existing_frame
Definition: clip.h:123
void recalculateMaxLength()
Definition: clip.cpp:220
bool audio_reset
Definition: clip.h:149
bool finished_opening
Definition: clip.h:117
int max_queue_size
Definition: clip.h:127
SequencePtr sequence
Definition: clip.h:68
bool replaced
Definition: clip.h:118
AVCodecContext * codecCtx
Definition: clip.h:105
Media * media
Definition: clip.h:84
Definition: clip.h:50
AVStream * stream
Definition: clip.h:103
bool multithreaded
Definition: clip.h:124
Clip(SequencePtr s)
Definition: clip.cpp:37
long timeline_in
Definition: clip.h:77
AVFormatContext * formatCtx
Definition: clip.h:102
void reset()
Definition: clip.cpp:93
qint64 audio_buffer_write
Definition: clip.h:148
int64_t reverse_target
Definition: clip.h:146
AVFilterContext * buffersink_ctx
Definition: clip.h:137
QOpenGLTexture * texture
Definition: clip.h:142
long get_clip_in_with_transition()
Definition: clip.cpp:180
AVCodec * codec
Definition: clip.h:104
QMutex render_lock
Definition: clip.h:130
AVDictionary * opts
Definition: clip.h:108
long calculated_length
Definition: clip.h:109