13#ifndef OPENSHOT_CLIP_H
14#define OPENSHOT_CLIP_H
17 #define int64 opencv_broken_int
18 #define uint64 opencv_broken_uint
19 #include <opencv2/opencv.hpp>
20 #include <opencv2/core.hpp>
108 std::list<openshot::EffectBase*> effects;
110 std::string parentObjectId;
111 std::shared_ptr<openshot::TrackedObjectBase> parentTrackedObject;
128 int64_t adjust_frame_number_minimum(int64_t frame_number);
131 void apply_background(std::shared_ptr<openshot::Frame> frame, std::shared_ptr<openshot::Frame> background_frame);
134 void apply_effects(std::shared_ptr<openshot::Frame> frame, int64_t timeline_frame_number,
TimelineInfoStruct* options,
bool before_keyframes);
137 void apply_keyframes(std::shared_ptr<Frame> frame, QSize timeline_size);
140 void apply_waveform(std::shared_ptr<Frame> frame, QSize timeline_size);
143 int64_t adjust_timeline_framenumber(int64_t clip_frame_number);
146 QTransform get_transform(std::shared_ptr<Frame> frame,
int width,
int height);
149 std::string get_file_extension(std::string
path);
152 std::shared_ptr<openshot::Frame> GetOrCreateFrame(int64_t number,
bool enable_time=
true);
155 void apply_timemapping(std::shared_ptr<openshot::Frame> frame);
158 bool isNear(
double a,
double b);
164 QSize scale_size(QSize source_size,
ScaleType source_scale,
int target_width,
int target_height);
197 bool IsOpen()
override {
return is_open; };
208 void SetAttachedObject(std::shared_ptr<openshot::TrackedObjectBase> trackedObject);
212 std::shared_ptr<openshot::TrackedObjectBase>
GetAttachedObject()
const {
return parentTrackedObject; };
217 std::string
Name()
override {
return "Clip"; };
224 void Close()
override;
233 std::list<openshot::EffectBase*>
Effects() {
return effects; };
243 std::shared_ptr<openshot::Frame>
GetFrame(int64_t clip_frame_number)
override;
255 std::shared_ptr<openshot::Frame>
GetFrame(std::shared_ptr<openshot::Frame> background_frame, int64_t clip_frame_number)
override;
272 void Open()
override;
282 float End()
const override;
283 void End(
float value)
override;
288 std::string
Json()
const override;
289 void SetJson(
const std::string value)
override;
295 std::string
PropertiesJSON(int64_t requested_frame)
const override;
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.
This abstract class is the base class, used by all clips in libopenshot.
int Layer() const
Get layer of clip on timeline (lower number is covered by higher numbers)
openshot::TimelineBase * timeline
Pointer to the parent timeline instance (if any)
float Position() const
Get position on timeline (in seconds)
This class represents a clip (used to arrange readers on the timeline)
void SetAttachedObject(std::shared_ptr< openshot::TrackedObjectBase > trackedObject)
Set the pointer to the trackedObject this clip is attached to.
openshot::Keyframe scale_x
Curve representing the horizontal scaling in percent (0 to 1)
openshot::Keyframe location_y
Curve representing the relative Y position in percent based on the gravity (-1 to 1)
openshot::Keyframe shear_x
Curve representing X shear angle in degrees (-45.0=left, 45.0=right)
openshot::Keyframe perspective_c4_x
Curves representing X for coordinate 4.
openshot::AnchorType anchor
The anchor determines what parent a clip should snap to.
openshot::VolumeMixType mixing
What strategy should be followed when mixing audio with other clips.
void Open() override
Open the internal reader.
std::shared_ptr< openshot::TrackedObjectBase > GetAttachedObject() const
Return a pointer to the trackedObject this clip is attached to.
std::string GetAttachedId() const
Get and set the object id that this clip is attached to.
openshot::Keyframe rotation
Curve representing the rotation (0 to 360)
openshot::Keyframe channel_filter
A number representing an audio channel to filter (clears all other channels)
openshot::FrameDisplayType display
The format to display the frame number (if any)
void init_reader_rotation()
Update default rotation from reader.
Clip()
Default Constructor.
openshot::Keyframe perspective_c1_x
Curves representing X for coordinate 1.
void AttachToObject(std::string object_id)
Attach clip to Tracked Object or to another Clip.
std::string Json() const override
Generate JSON string of this object.
openshot::EffectBase * GetEffect(const std::string &id)
Look up an effect by ID.
void SetJsonValue(const Json::Value root) override
Load Json::Value into this object.
openshot::CacheMemory * GetCache() override
Get the cache object (always return NULL for this reader)
openshot::Keyframe alpha
Curve representing the alpha (1 to 0)
openshot::Keyframe has_audio
An optional override to determine if this clip has audio (-1=undefined, 0=no, 1=yes)
openshot::Keyframe perspective_c3_x
Curves representing X for coordinate 3.
void init_reader_settings()
Init reader info details.
openshot::Keyframe perspective_c1_y
Curves representing Y for coordinate 1.
Json::Value JsonValue() const override
Generate Json::Value for this object.
void SetAttachedClip(Clip *clipObject)
Set the pointer to the clip this clip is attached to.
openshot::TimelineBase * ParentTimeline() override
Get the associated Timeline pointer (if any)
openshot::Keyframe perspective_c4_y
Curves representing Y for coordinate 4.
openshot::Keyframe time
Curve representing the frames over time to play (used for speed and direction of video)
openshot::Clip * GetParentClip()
Return the associated ParentClip (if any)
bool Waveform()
Get the waveform property of this clip.
openshot::GravityType gravity
The gravity of a clip determines where it snaps to its parent.
std::list< openshot::EffectBase * > Effects()
Return the list of effects on the timeline.
AudioLocation previous_location
Previous time-mapped audio location.
openshot::Keyframe perspective_c3_y
Curves representing Y for coordinate 3.
std::shared_ptr< openshot::TrackedObjectBase > GetParentTrackedObject()
Return the associated Parent Tracked Object (if any)
void AddEffect(openshot::EffectBase *effect)
Add an effect to the clip.
void Close() override
Close the internal reader.
void Waveform(bool value)
Set the waveform property of this clip.
virtual ~Clip()
Destructor.
openshot::Keyframe perspective_c2_y
Curves representing Y for coordinate 2.
openshot::Keyframe volume
Curve representing the volume (0 to 1)
openshot::Keyframe shear_y
Curve representing Y shear angle in degrees (-45.0=down, 45.0=up)
Clip * GetAttachedClip() const
Return a pointer to the clip this clip is attached to.
openshot::Keyframe scale_y
Curve representing the vertical scaling in percent (0 to 1)
float End() const override
Get end position (in seconds) of clip (trim end of video), which can be affected by the time curve.
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 ...
std::string Name() override
Return the type name of the class.
openshot::ReaderBase * Reader()
Get the current reader.
void RemoveEffect(openshot::EffectBase *effect)
Remove an effect from the clip.
void SetAttachedId(std::string value)
Set id of the object id that this clip is attached to.
openshot::Keyframe channel_mapping
A number representing an audio channel to output (only works when filtering a channel)
openshot::Keyframe has_video
An optional override to determine if this clip has video (-1=undefined, 0=no, 1=yes)
std::string PropertiesJSON(int64_t requested_frame) const override
openshot::Color wave_color
Curve representing the color of the audio wave form.
void init_settings()
Init default settings for a clip.
openshot::Keyframe perspective_c2_x
Curves representing X for coordinate 2.
openshot::ScaleType scale
The scale determines how a clip should be resized to fit its parent.
openshot::Keyframe location_x
Curve representing the relative X position in percent based on the gravity (-1 to 1)
openshot::Keyframe origin_x
Curve representing X origin point (0.0=0% (left), 1.0=100% (right))
std::recursive_mutex getFrameMutex
Mutex for multiple threads.
void SetJson(const std::string value) override
Load JSON string into this object.
openshot::Keyframe origin_y
Curve representing Y origin point (0.0=0% (top), 1.0=100% (bottom))
bool IsOpen() override
Determine if reader is open or closed.
This class represents a color (used on the timeline and clips)
This abstract class is the base class, used by all effects in libopenshot.
int Order() const
Get the order that this effect should be executed.
A Keyframe is a collection of Point instances, which is used to vary a number or property over time.
This abstract class is the base class, used by all readers in libopenshot.
This class represents a timeline (used for building generic timeline implementations)
This namespace is the default namespace for all code in the openshot library.
AnchorType
This enumeration determines what parent a clip should be aligned to.
GravityType
This enumeration determines how clips are aligned to their parent container.
ScaleType
This enumeration determines how clips are scaled to fit their parent container.
VolumeMixType
This enumeration determines the strategy when mixing audio with other clips.
FrameDisplayType
This enumeration determines the display format of the clip's frame number (if any)....
This struct holds the associated video frame and starting sample # for an audio packet.
bool operator()(openshot::EffectBase *lhs, openshot::EffectBase *rhs)
This struct contains info about the current Timeline clip instance.