OpenShot Library | libopenshot 0.3.2
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_effects(std::shared_ptr<openshot::Frame> frame);
132
134 void apply_keyframes(std::shared_ptr<Frame> frame, std::shared_ptr<Frame> background_frame);
135
137 void apply_waveform(std::shared_ptr<Frame> frame, std::shared_ptr<Frame> background_frame);
138
140 int64_t adjust_timeline_framenumber(int64_t clip_frame_number);
141
143 QTransform get_transform(std::shared_ptr<Frame> frame, int width, int height);
144
146 std::string get_file_extension(std::string path);
147
149 std::shared_ptr<openshot::Frame> GetOrCreateFrame(int64_t number, bool enable_time=true);
150
152 void apply_timemapping(std::shared_ptr<openshot::Frame> frame);
153
155 bool isEqual(double a, double b);
156
158 void sort_effects();
159
161 void reverse_buffer(juce::AudioBuffer<float>* buffer);
162
163
164 public:
170
171 #ifdef USE_OPENCV
172 bool COMPILED_WITH_CV = true;
173 #else
174 bool COMPILED_WITH_CV = false;
175 #endif
176
178 Clip();
179
182 Clip(std::string path);
183
186 Clip(openshot::ReaderBase* new_reader);
187
189 virtual ~Clip();
190
192 openshot::CacheMemory* GetCache() override { return &final_cache; };
193
195 bool IsOpen() override { return is_open; };
196
198 std::string GetAttachedId() const { return parentObjectId; };
200 void SetAttachedId(std::string value) { parentObjectId = value; };
201
203 void AttachToObject(std::string object_id);
204
206 void SetAttachedObject(std::shared_ptr<openshot::TrackedObjectBase> trackedObject);
208 void SetAttachedClip(Clip* clipObject);
210 std::shared_ptr<openshot::TrackedObjectBase> GetAttachedObject() const { return parentTrackedObject; };
212 Clip* GetAttachedClip() const { return parentClipObject; };
213
215 std::string Name() override { return "Clip"; };
216
219 void AddEffect(openshot::EffectBase* effect);
220
222 void Close() override;
223
225 std::list<openshot::EffectBase*> Effects() { return effects; };
226
228 openshot::EffectBase* GetEffect(const std::string& id);
229
235 std::shared_ptr<openshot::Frame> GetFrame(int64_t clip_frame_number) override;
236
247 std::shared_ptr<openshot::Frame> GetFrame(std::shared_ptr<openshot::Frame> background_frame, int64_t clip_frame_number) override;
248
261 std::shared_ptr<openshot::Frame> GetFrame(std::shared_ptr<openshot::Frame> background_frame, int64_t clip_frame_number, openshot::TimelineInfoStruct* options);
262
264 void Open() override;
265
268 void Reader(openshot::ReaderBase* new_reader);
269
272
273 // Override End() position (in seconds) of clip (trim end of video)
274 float End() const override;
275 void End(float value) override;
277 void ParentTimeline(openshot::TimelineBase* new_timeline) override;
278
279 // Get and Set JSON methods
280 std::string Json() const override;
281 void SetJson(const std::string value) override;
282 Json::Value JsonValue() const override;
283 void SetJsonValue(const Json::Value root) override;
284
287 std::string PropertiesJSON(int64_t requested_frame) const override;
288
292
293 // Waveform property
294 bool Waveform() { return waveform; }
295 void Waveform(bool value) { waveform = value; }
296
297 // Scale, Location, and Alpha curves
303
304 // Rotation and Shear curves (origin point (x,y) is adjustable for both rotation and shear)
310
311 // Time and Volume curves
314
317
318 // Perspective curves
327
328 // Audio channel filter and mappings
331
332 // Override has_video and has_audio properties of clip (and their readers)
335 };
336} // namespace
337
338#endif // OPENSHOT_CLIP_H
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:33
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:41
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:262
openshot::Keyframe scale_x
Curve representing the horizontal scaling in percent (0 to 1)
Definition: Clip.h:298
openshot::Keyframe location_y
Curve representing the relative Y position in percent based on the gravity (-1 to 1)
Definition: Clip.h:301
openshot::Keyframe shear_x
Curve representing X shear angle in degrees (-45.0=left, 45.0=right)
Definition: Clip.h:306
openshot::Keyframe perspective_c4_x
Curves representing X for coordinate 4.
Definition: Clip.h:325
openshot::AnchorType anchor
The anchor determines what parent a clip should snap to.
Definition: Clip.h:167
openshot::VolumeMixType mixing
What strategy should be followed when mixing audio with other clips.
Definition: Clip.h:169
void Open() override
Open the internal reader.
Definition: Clip.cpp:318
std::shared_ptr< openshot::TrackedObjectBase > GetAttachedObject() const
Return a pointer to the trackedObject this clip is attached to.
Definition: Clip.h:210
std::string GetAttachedId() const
Get and set the object id that this clip is attached to.
Definition: Clip.h:198
openshot::Keyframe rotation
Curve representing the rotation (0 to 360)
Definition: Clip.h:305
openshot::Keyframe channel_filter
A number representing an audio channel to filter (clears all other channels)
Definition: Clip.h:329
openshot::FrameDisplayType display
The format to display the frame number (if any)
Definition: Clip.h:168
void init_reader_rotation()
Update default rotation from reader.
Definition: Clip.cpp:115
Clip()
Default Constructor.
Definition: Clip.cpp:135
openshot::Keyframe perspective_c1_x
Curves representing X for coordinate 1.
Definition: Clip.h:319
void AttachToObject(std::string object_id)
Attach clip to Tracked Object or to another Clip.
Definition: Clip.cpp:241
std::string Json() const override
Generate JSON string of this object.
Definition: Clip.cpp:735
openshot::EffectBase * GetEffect(const std::string &id)
Look up an effect by ID.
Definition: Clip.cpp:470
void SetJsonValue(const Json::Value root) override
Load Json::Value into this object.
Definition: Clip.cpp:962
openshot::CacheMemory * GetCache() override
Get the cache object (always return NULL for this reader)
Definition: Clip.h:192
openshot::Keyframe alpha
Curve representing the alpha (1 to 0)
Definition: Clip.h:302
openshot::Keyframe has_audio
An optional override to determine if this clip has audio (-1=undefined, 0=no, 1=yes)
Definition: Clip.h:333
openshot::Keyframe perspective_c3_x
Curves representing X for coordinate 3.
Definition: Clip.h:323
void init_reader_settings()
Init reader info details.
Definition: Clip.cpp:101
openshot::Keyframe perspective_c1_y
Curves representing Y for coordinate 1.
Definition: Clip.h:320
Json::Value JsonValue() const override
Generate Json::Value for this object.
Definition: Clip.cpp:889
void SetAttachedClip(Clip *clipObject)
Set the pointer to the clip this clip is attached to.
Definition: Clip.cpp:267
openshot::TimelineBase * ParentTimeline() override
Get the associated Timeline pointer (if any)
Definition: Clip.h:276
openshot::Keyframe perspective_c4_y
Curves representing Y for coordinate 4.
Definition: Clip.h:326
openshot::Keyframe time
Curve representing the frames over time to play (used for speed and direction of video)
Definition: Clip.h:312
bool Waveform()
Get the waveform property of this clip.
Definition: Clip.h:294
openshot::GravityType gravity
The gravity of a clip determines where it snaps to its parent.
Definition: Clip.h:165
std::list< openshot::EffectBase * > Effects()
Return the list of effects on the timeline.
Definition: Clip.h:225
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:324
void AddEffect(openshot::EffectBase *effect)
Add an effect to the clip.
Definition: Clip.cpp:1150
void Close() override
Close the internal reader.
Definition: Clip.cpp:339
void Waveform(bool value)
Set the waveform property of this clip.
Definition: Clip.h:295
virtual ~Clip()
Destructor.
Definition: Clip.cpp:221
openshot::Keyframe perspective_c2_y
Curves representing Y for coordinate 2.
Definition: Clip.h:322
openshot::Keyframe volume
Curve representing the volume (0 to 1)
Definition: Clip.h:313
openshot::Keyframe shear_y
Curve representing Y shear angle in degrees (-45.0=down, 45.0=up)
Definition: Clip.h:307
Clip * GetAttachedClip() const
Return a pointer to the clip this clip is attached to.
Definition: Clip.h:212
openshot::Keyframe scale_y
Curve representing the vertical scaling in percent (0 to 1)
Definition: Clip.h:299
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:354
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:389
std::string Name() override
Return the type name of the class.
Definition: Clip.h:215
openshot::ReaderBase * Reader()
Get the current reader.
Definition: Clip.cpp:308
void RemoveEffect(openshot::EffectBase *effect)
Remove an effect from the clip.
Definition: Clip.cpp:1197
void SetAttachedId(std::string value)
Set id of the object id that this clip is attached to.
Definition: Clip.h:200
openshot::Keyframe channel_mapping
A number representing an audio channel to output (only works when filtering a channel)
Definition: Clip.h:330
openshot::Keyframe has_video
An optional override to determine if this clip has video (-1=undefined, 0=no, 1=yes)
Definition: Clip.h:334
std::string PropertiesJSON(int64_t requested_frame) const override
Definition: Clip.cpp:742
bool COMPILED_WITH_CV
Definition: Clip.h:172
openshot::Color wave_color
Curve representing the color of the audio wave form.
Definition: Clip.h:316
void init_settings()
Init default settings for a clip.
Definition: Clip.cpp:36
openshot::Keyframe perspective_c2_x
Curves representing X for coordinate 2.
Definition: Clip.h:321
openshot::ScaleType scale
The scale determines how a clip should be resized to fit its parent.
Definition: Clip.h:166
openshot::Keyframe location_x
Curve representing the relative X position in percent based on the gravity (-1 to 1)
Definition: Clip.h:300
openshot::Keyframe origin_x
Curve representing X origin point (0.0=0% (left), 1.0=100% (right))
Definition: Clip.h:308
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:945
openshot::Keyframe origin_y
Curve representing Y origin point (0.0=0% (top), 1.0=100% (bottom))
Definition: Clip.h:309
bool IsOpen() override
Determine if reader is open or closed.
Definition: Clip.h:195
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:53
int Order() const
Get the order that this effect should be executed.
Definition: EffectBase.h:112
A Keyframe is a collection of Point instances, which is used to vary a number or property over time.
Definition: KeyFrame.h:54
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)
Definition: TimelineBase.h:40
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:61
FrameDisplayType
This enumeration determines the display format of the clip's frame number (if any)....
Definition: Enums.h:52
This struct holds the associated video frame and starting sample # for an audio packet.
Definition: AudioLocation.h:25
bool operator()(openshot::EffectBase *lhs, openshot::EffectBase *rhs)
Definition: Clip.h:49
This struct contains info about the current Timeline clip instance.
Definition: TimelineBase.h:33