/** * @file * @brief Header file for ClipBase class * @author Jonathan Thomas * * @section LICENSE * * Copyright (c) 2008-2013 OpenShot Studios, LLC * (http://www.openshotstudios.com). This file is part of * OpenShot Library (http://www.openshot.org), an open-source project * dedicated to delivering high quality video editing and animation solutions * to the world. * * OpenShot Library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenShot Library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenShot Library. If not, see . */ #ifndef OPENSHOT_CLIPBASE_H #define OPENSHOT_CLIPBASE_H /// Do not include the juce unittest headers, because it collides with unittest++ #ifndef __JUCE_UNITTEST_JUCEHEADER__ #define __JUCE_UNITTEST_JUCEHEADER__ #endif #include using namespace std; namespace openshot { /** * @brief This abstract class is the base class, used by all clips in libopenshot. * * Clips are objects that attach to the timeline and can be layered and positioned * together. There are 2 primary types of clips: Effects and Video/Audio Clips. */ class ClipBase { private: float position; ///< The position on the timeline where this clip should start playing int layer; ///< The layer this clip is on. Lower clips are covered up by higher clips. float start; ///< The position in seconds to start playing (used to trim the beginning of a clip) float end; ///< The position in seconds to end playing (used to trim the ending of a clip) public: // Compare a clip using the Position() property bool operator< ( ClipBase& a) { return (Position() < a.Position()); } bool operator<= ( ClipBase& a) { return (Position() <= a.Position()); } bool operator> ( ClipBase& a) { return (Position() > a.Position()); } bool operator>= ( ClipBase& a) { return (Position() >= a.Position()); } /// Get basic properties float Position() { return position; } ///< Get position on timeline (in seconds) int Layer() { return layer; } ///< Get layer of clip on timeline (lower number is covered by higher numbers) float Start() { return start; } ///< Get start position (in seconds) of clip (trim start of video) float End() { return end; } ///< Get end position (in seconds) of clip (trim end of video) float Duration() { return End() - Start(); } ///< Get the length of this clip (in seconds) /// Set basic properties void Position(float value) { position = value; } ///< Set position on timeline (in seconds) void Layer(int value) { layer = value; } ///< Set layer of clip on timeline (lower number is covered by higher numbers) void Start(float value) { start = value; } ///< Set start position (in seconds) of clip (trim start of video) void End(float value) { end = value; } ///< Set end position (in seconds) of clip (trim end of video) }; } #endif