OpenShot Library | libopenshot 0.6.0
Loading...
Searching...
No Matches
Clip.h
Go to the documentation of this file.
1
9// Copyright (c) 2008-2019 OpenShot Studios, LLC
10//
11// SPDX-License-Identifier: LGPL-3.0-or-later
12
13#ifndef OPENSHOT_CLIP_H
14#define OPENSHOT_CLIP_H
15
16#ifdef USE_OPENCV
17 #define int64 opencv_broken_int
18 #define uint64 opencv_broken_uint
19 #include <opencv2/opencv.hpp>
20 #include <opencv2/core.hpp>
21 #undef uint64
22 #undef int64
23
24#endif
25
26#include <memory>
27#include <string>
28
29#include "AudioLocation.h"
30#include "ClipBase.h"
31#include "ReaderBase.h"
32
33#include "Color.h"
34#include "Enums.h"
35#include "EffectBase.h"
36#include "EffectInfo.h"
37#include "KeyFrame.h"
38#include "TrackedObjectBase.h"
39
40namespace openshot {
41 class AudioResampler;
42 class EffectInfo;
43 class Frame;
44
50 if( lhs->Layer() < rhs->Layer() ) return true;
51 if( lhs->Layer() == rhs->Layer() && lhs->Position() < rhs->Position() ) return true;
52 if( lhs->Layer() == rhs->Layer() && lhs->Position() == rhs->Position() && lhs->Order() > rhs->Order() ) return true;
53 return false;
54 }};
55
90 protected:
92 std::recursive_mutex getFrameMutex;
93
96
98 void init_settings();
99
102
105
106 private:
107 bool waveform;
108 std::list<openshot::EffectBase*> effects;
109 bool is_open;
110 std::string parentObjectId;
111 std::shared_ptr<openshot::TrackedObjectBase> parentTrackedObject;
112 openshot::Clip* parentClipObject;
113
115 CacheMemory final_cache;
116
117 // Audio resampler (if time mapping)
118 openshot::AudioResampler *resampler;
119
120 // File Reader object
121 openshot::ReaderBase* reader;
122
125 openshot::ReaderBase* allocated_reader;
126
128 int64_t adjust_frame_number_minimum(int64_t frame_number);
129
131 void apply_background(std::shared_ptr<openshot::Frame> frame,
132 std::shared_ptr<openshot::Frame> background_frame,
133 bool update_frame_image = true);
134
136 void apply_effects(std::shared_ptr<openshot::Frame> frame, int64_t timeline_frame_number, TimelineInfoStruct* options, bool before_keyframes);
137
139 void apply_keyframes(std::shared_ptr<Frame> frame, QSize timeline_size);
140
142 void apply_waveform(std::shared_ptr<Frame> frame, QSize timeline_size);
143
145 int64_t adjust_timeline_framenumber(int64_t clip_frame_number);
146
148 QTransform get_transform(std::shared_ptr<Frame> frame, int width, int height);
149
151 std::string get_file_extension(std::string path);
152
154 std::shared_ptr<openshot::Frame> GetOrCreateFrame(int64_t number, bool enable_time=true);
155
157 double resolve_timeline_fps() const;
158
160 int64_t curve_extent_frames() const;
161
163 int64_t trim_extent_frames(double fps_value) const;
164
166 void apply_timemapping(std::shared_ptr<openshot::Frame> frame);
167
169 bool isNear(double a, double b);
170
172 void sort_effects();
173
175 QSize scale_size(QSize source_size, ScaleType source_scale, int target_width, int target_height);
176
177 public:
184
185 #ifdef USE_OPENCV
186 bool COMPILED_WITH_CV = true;
187 #else
188 bool COMPILED_WITH_CV = false;
189 #endif
190
192 Clip();
193
196 Clip(std::string path);
197
200 Clip(openshot::ReaderBase* new_reader);
201
203 virtual ~Clip();
204
206 openshot::CacheMemory* GetCache() override { return &final_cache; };
207
209 bool IsOpen() override { return is_open; };
210
212 std::string GetAttachedId() const { return parentObjectId; };
214 void SetAttachedId(std::string value) { parentObjectId = value; };
215
217 void AttachToObject(std::string object_id);
218
220 void SetAttachedObject(std::shared_ptr<openshot::TrackedObjectBase> trackedObject);
222 void SetAttachedClip(Clip* clipObject);
224 std::shared_ptr<openshot::TrackedObjectBase> GetAttachedObject() const { return parentTrackedObject; };
226 Clip* GetAttachedClip() const { return parentClipObject; };
227
229 std::string Name() override { return "Clip"; };
230
233 void AddEffect(openshot::EffectBase* effect);
234
236 void Close() override;
237
240
242 std::shared_ptr<openshot::TrackedObjectBase> GetParentTrackedObject();
243
245 std::list<openshot::EffectBase*> Effects() { return effects; };
246
248 openshot::EffectBase* GetEffect(const std::string& id);
249
255 std::shared_ptr<openshot::Frame> GetFrame(int64_t clip_frame_number) override;
256
267 std::shared_ptr<openshot::Frame> GetFrame(std::shared_ptr<openshot::Frame> background_frame, int64_t clip_frame_number) override;
268
281 std::shared_ptr<openshot::Frame> GetFrame(std::shared_ptr<openshot::Frame> background_frame, int64_t clip_frame_number, openshot::TimelineInfoStruct* options);
282
284 void Open() override;
285
288 void Reader(openshot::ReaderBase* new_reader);
289
292
293 // Override End() position (in seconds) of clip (trim end of video)
294 float End() const override;
295 void End(float value) override;
297 void ParentTimeline(openshot::TimelineBase* new_timeline) override;
298
299 // Get and Set JSON methods
300 std::string Json() const override;
301 void SetJson(const std::string value) override;
302 Json::Value JsonValue() const override;
303 void SetJsonValue(const Json::Value root) override;
304
307 std::string PropertiesJSON(int64_t requested_frame) const override;
308
312
313 // Waveform property
314 bool Waveform() { return waveform; }
Header file for AudioLocation class.
Header file for ClipBase class.
Header file for Color class.
Header file for EffectBase class.
Header file for the EffectInfo class.
Header file for TextReader class.
Header file for the Keyframe class.
Header file for ReaderBase class.
Header file for the TrackedObjectBase class.
This class is used to resample audio data for many sequential frames.
This class is a memory-based cache manager for Frame objects.
Definition CacheMemory.h:29
This abstract class is the base class, used by all clips in libopenshot.
Definition ClipBase.h:32
int Layer() const
Get layer of clip on timeline (lower number is covered by higher numbers)
Definition ClipBase.h:87
openshot::TimelineBase * timeline
Pointer to the parent timeline instance (if any)
Definition ClipBase.h:40
float Position() const
Get position on timeline (in seconds)
Definition ClipBase.h:86
This class represents a clip (used to arrange readers on the timeline)
Definition Clip.h:89
void SetAttachedObject(std::shared_ptr< openshot::TrackedObjectBase > trackedObject)
Set the pointer to the trackedObject this clip is attached to.
Definition Clip.cpp:328
openshot::Keyframe scale_x
Curve representing the horizontal scaling in percent (0 to 1)
Definition Clip.h:318
openshot::Keyframe location_y
Curve representing the relative Y position in percent based on the gravity (-1 to 1)
Definition Clip.h:321
openshot::Keyframe shear_x
Curve representing X shear angle in degrees (-45.0=left, 45.0=right)
Definition Clip.h:326
openshot::Keyframe perspective_c4_x
Curves representing X for coordinate 4.
Definition Clip.h:345
openshot::AnchorType anchor
The anchor determines what parent a clip should snap to.
Definition Clip.h:180
openshot::VolumeMixType mixing
What strategy should be followed when mixing audio with other clips.
Definition Clip.h:182
void Open() override
Open the internal reader.
Definition Clip.cpp:384
std::shared_ptr< openshot::TrackedObjectBase > GetAttachedObject() const
Return a pointer to the trackedObject this clip is attached to.
Definition Clip.h:224
std::string GetAttachedId() const
Get and set the object id that this clip is attached to.
Definition Clip.h:212
openshot::Keyframe rotation
Curve representing the rotation (0 to 360)
Definition Clip.h:325
openshot::Keyframe channel_filter
A number representing an audio channel to filter (clears all other channels)
Definition Clip.h:349
openshot::FrameDisplayType display
The format to display the frame number (if any)
Definition Clip.h:181
void init_reader_rotation()
Update default rotation from reader.
Definition Clip.cpp:148
Clip()
Default Constructor.
Definition Clip.cpp:199
openshot::Keyframe perspective_c1_x
Curves representing X for coordinate 1.
Definition Clip.h:339
void AttachToObject(std::string object_id)
Attach clip to Tracked Object or to another Clip.
Definition Clip.cpp:305
std::string Json() const override
Generate JSON string of this object.
Definition Clip.cpp:831
openshot::EffectBase * GetEffect(const std::string &id)
Look up an effect by ID.
Definition Clip.cpp:553
void SetJsonValue(const Json::Value root) override
Load Json::Value into this object.
Definition Clip.cpp:1034
openshot::CacheMemory * GetCache() override
Get the cache object (always return NULL for this reader)
Definition Clip.h:206
openshot::Keyframe alpha
Curve representing the alpha (1 to 0)
Definition Clip.h:322
openshot::Keyframe has_audio
An optional override to determine if this clip has audio (-1=undefined, 0=no, 1=yes)
Definition Clip.h:353
openshot::Keyframe perspective_c3_x
Curves representing X for coordinate 3.
Definition Clip.h:343
void init_reader_settings()
Init reader info details.
Definition Clip.cpp:135
openshot::Keyframe perspective_c1_y
Curves representing Y for coordinate 1.
Definition Clip.h:340
Json::Value JsonValue() const override
Generate Json::Value for this object.
Definition Clip.cpp:960
void SetAttachedClip(Clip *clipObject)
Set the pointer to the clip this clip is attached to.
Definition Clip.cpp:333
openshot::TimelineBase * ParentTimeline() override
Get the associated Timeline pointer (if any)
Definition Clip.h:296
openshot::Keyframe perspective_c4_y
Curves representing Y for coordinate 4.
Definition Clip.h:346
openshot::Keyframe time
Curve representing the frames over time to play (used for speed and direction of video)
Definition Clip.h:332
openshot::Clip * GetParentClip()
Return the associated ParentClip (if any)
Definition Clip.cpp:565
bool Waveform()
Get the waveform property of this clip.
Definition Clip.h:314
openshot::CompositeType composite
How this clip is composited onto lower layers.
Definition Clip.h:183
openshot::GravityType gravity
The gravity of a clip determines where it snaps to its parent.
Definition Clip.h:178
std::list< openshot::EffectBase * > Effects()
Return the list of effects on the timeline.
Definition Clip.h:245
AudioLocation previous_location
Previous time-mapped audio location.
Definition Clip.h:95
openshot::Keyframe perspective_c3_y
Curves representing Y for coordinate 3.
Definition Clip.h:344
std::shared_ptr< openshot::TrackedObjectBase > GetParentTrackedObject()
Return the associated Parent Tracked Object (if any)
Definition Clip.cpp:574
void AddEffect(openshot::EffectBase *effect)
Add an effect to the clip.
Definition Clip.cpp:1229
void Close() override
Close the internal reader.
Definition Clip.cpp:405
void Waveform(bool value)
Set the waveform property of this clip.
Definition Clip.h:315
virtual ~Clip()
Destructor.
Definition Clip.cpp:285
openshot::Keyframe perspective_c2_y
Curves representing Y for coordinate 2.
Definition Clip.h:342
openshot::Keyframe volume
Curve representing the volume (0 to 1)
Definition Clip.h:333
openshot::Keyframe shear_y
Curve representing Y shear angle in degrees (-45.0=down, 45.0=up)
Definition Clip.h:327
Clip * GetAttachedClip() const
Return a pointer to the clip this clip is attached to.
Definition Clip.h:226
openshot::Keyframe scale_y
Curve representing the vertical scaling in percent (0 to 1)
Definition Clip.h:319
float End() const override
Get end position (in seconds) of clip (trim end of video), which can be affected by the time curve.
Definition Clip.cpp:420
std::shared_ptr< openshot::Frame > GetFrame(int64_t clip_frame_number) override
Get an openshot::Frame object for a specific frame number of this clip. The image size and number of ...
Definition Clip.cpp:455
std::string Name() override
Return the type name of the class.
Definition Clip.h:229
openshot::ReaderBase * Reader()
Get the current reader.
Definition Clip.cpp:374
void RemoveEffect(openshot::EffectBase *effect)
Remove an effect from the clip.
Definition Clip.cpp:1276
void SetAttachedId(std::string value)
Set id of the object id that this clip is attached to.
Definition Clip.h:214
openshot::Keyframe channel_mapping
A number representing an audio channel to output (only works when filtering a channel)
Definition Clip.h:350
openshot::Keyframe has_video
An optional override to determine if this clip has video (-1=undefined, 0=no, 1=yes)
Definition Clip.h:354
std::string PropertiesJSON(int64_t requested_frame) const override
Definition Clip.cpp:838
bool COMPILED_WITH_CV
Definition Clip.h:186
openshot::Color wave_color
Curve representing the color of the audio wave form.
Definition Clip.h:336
void init_settings()
Init default settings for a clip.
Definition Clip.cpp:69
openshot::Keyframe perspective_c2_x
Curves representing X for coordinate 2.
Definition Clip.h:341
openshot::ScaleType scale
The scale determines how a clip should be resized to fit its parent.
Definition Clip.h:179
openshot::Keyframe location_x
Curve representing the relative X position in percent based on the gravity (-1 to 1)
Definition Clip.h:320
openshot::Keyframe origin_x
Curve representing X origin point (0.0=0% (left), 1.0=100% (right))
Definition Clip.h:328
std::recursive_mutex getFrameMutex
Mutex for multiple threads.
Definition Clip.h:92
void SetJson(const std::string value) override
Load JSON string into this object.
Definition Clip.cpp:1017
openshot::Keyframe origin_y
Curve representing Y origin point (0.0=0% (top), 1.0=100% (bottom))
Definition Clip.h:329
bool IsOpen() override
Determine if reader is open or closed.
Definition Clip.h:209
This class represents a color (used on the timeline and clips)
Definition Color.h:27
This abstract class is the base class, used by all effects in libopenshot.
Definition EffectBase.h:57
int Order() const
Get the order that this effect should be executed.
Definition EffectBase.h:182
A Keyframe is a collection of Point instances, which is used to vary a number or property over time.
Definition KeyFrame.h:53
This abstract class is the base class, used by all readers in libopenshot.
Definition ReaderBase.h:76
This class represents a timeline (used for building generic timeline implementations)
This namespace is the default namespace for all code in the openshot library.
Definition Compressor.h:29
AnchorType
This enumeration determines what parent a clip should be aligned to.
Definition Enums.h:45
GravityType
This enumeration determines how clips are aligned to their parent container.
Definition Enums.h:22
ScaleType
This enumeration determines how clips are scaled to fit their parent container.
Definition Enums.h:36
VolumeMixType
This enumeration determines the strategy when mixing audio with other clips.
Definition Enums.h:68
FrameDisplayType
This enumeration determines the display format of the clip's frame number (if any)....
Definition Enums.h:52
CompositeType
This enumeration determines how clips are composited onto lower layers.
Definition Enums.h:75
This struct holds the associated video frame and starting sample # for an audio packet.
bool operator()(openshot::EffectBase *lhs, openshot::EffectBase *rhs)
Definition Clip.h:49
This struct contains info about the current Timeline clip instance.