- void mltMoveTransition(QString type, int startTrack, int trackOffset, GenTime oldIn, GenTime oldOut, GenTime newIn, GenTime newOut);
- void mltAddTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QMap <QString, QString> args);
-
-
- private: // Private attributes & methods
- /** The name of this renderer - useful to identify the renderes by what they do - e.g. background rendering, workspace monitor, etc... */
- QString m_name;
- Mlt::Consumer * m_mltConsumer;
- Mlt::Producer * m_mltProducer;
- Mlt::Producer *m_mltTextProducer;
- Mlt::Filter *m_osdInfo;
- Mlt::Profile *m_mltProfile;
- double m_framePosition;
- double m_fps;
- uint m_monitorId;
- bool m_generateScenelist;
-
- /** Holds the path to on screen display profile */
- QString m_osdProfile;
-
- QTimer *refreshTimer;
- QTimer *osdTimer;
- QTimer *m_connectTimer;
- KUrl m_exportedFile;
- int exportDuration, firstExportFrame, lastExportFrame;
-
- /** Holds the scenelist to be sent, if pending. */
- QDomDocument m_sceneList;
-
- /** A human-readable description of this renderer. */
- QString m_description;
+ bool mltMoveTransition(QString type, int startTrack, int newTrack, int newTransitionTrack, GenTime oldIn, GenTime oldOut, GenTime newIn, GenTime newOut);
+ bool mltAddTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml, bool refresh = true);
+ void mltDeleteTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml, bool refresh = true);
+ void mltUpdateTransition(QString oldTag, QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml, bool force = false);
+ void mltUpdateTransitionParams(QString type, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml);
+ void mltAddClipTransparency(ItemInfo info, int transitiontrack, int id);
+ void mltMoveTransparency(int startTime, int endTime, int startTrack, int endTrack, int id);
+ void mltDeleteTransparency(int pos, int track, int id);
+ void mltResizeTransparency(int oldStart, int newStart, int newEnd, int track, int id);
+ QList <TransitionInfo> mltInsertTrack(int ix, bool videoTrack);
+ void mltDeleteTrack(int ix);
+ bool mltUpdateClipProducer(Mlt::Tractor *tractor, int track, int pos, Mlt::Producer *prod);
+ void mltPlantTransition(Mlt::Field *field, Mlt::Transition &tr, int a_track, int b_track);
+ Mlt::Producer *invalidProducer(const QString &id);
+
+ /** @brief Changes the speed of a clip in MLT's playlist.
+ *
+ * It creates a new "framebuffer" producer, which must have its "resource"
+ * property set to "video.mpg?0.6", where "video.mpg" is the path to the
+ * clip and "0.6" is the speed in percentage. The newly created producer
+ * will have its "id" property set to "slowmotion:parentid:speed", where
+ * "parentid" is the id of the original clip in the ClipManager list and
+ * "speed" is the current speed. */
+ int mltChangeClipSpeed(ItemInfo info, ItemInfo speedIndependantInfo, double speed, double oldspeed, int strobe, Mlt::Producer *prod);
+
+ const QList <Mlt::Producer *> producersList();
+ void updatePreviewSettings();
+ void setDropFrames(bool show);
+ /** @brief Sets an MLT consumer property. */
+ void setConsumerProperty(const QString &name, const QString &value);
+ QString updateSceneListFps(double current_fps, double new_fps, const QString &scene);
+
+ void showAudio(Mlt::Frame&);
+
+ QList <int> checkTrackSequence(int);
+ void sendFrameUpdate();
+
+ /** @brief Returns a pointer to the main producer. */
+ Mlt::Producer *getProducer();
+ /** @brief Returns the number of clips to process (When requesting clip info). */
+ int processingItems();
+ /** @brief Processing of this clip is over, producer was set on clip, remove from list. */
+ void processingDone(const QString &id);
+ /** @brief Force processing of clip with selected id. */
+ void forceProcessing(const QString &id);
+ /** @brief Are we currently processing clip with selected id. */
+ bool isProcessing(const QString &id);
+
+ /** @brief Requests the file properties for the specified URL (will be put in a queue list)
+ @param xml The xml parameters for the clip
+ @param clipId The clip Id string
+ @param imageHeight The height (in pixels) of the returned thumbnail (height of a treewidgetitem in projectlist)
+ @param replaceProducer If true, the MLT producer will be recreated */
+ void getFileProperties(const QDomElement &xml, const QString &clipId, int imageHeight, bool replaceProducer = true);
+
+ /** @brief Lock the MLT service */
+ Mlt::Tractor *lockService();
+ /** @brief Unlock the MLT service */
+ void unlockService(Mlt::Tractor *tractor);
+ const QString activeClipId();
+ /** @brief Fill a combobox with the found blackmagic devices */
+ static bool getBlackMagicDeviceList(KComboBox *devicelist, bool force = false);
+ static bool getBlackMagicOutputDeviceList(KComboBox *devicelist, bool force = false);
+ /** @brief Frame rendering is handeled by Kdenlive, don't show video through SDL display */
+ void disablePreview(bool disable);
+ /** @brief Get current seek pos requested of SEEK_INACTIVE if we are not currently seeking */
+ int requestedSeekPosition;
+ /** @brief Get current seek pos requested of current producer pos if not seeking */
+ int getCurrentSeekPosition() const;
+ /** @brief Create a producer from url and load it in the monitor */
+ void loadUrl(const QString &url);
+ /** @brief Check if the installed FFmpeg / Libav supports x11grab */
+ static bool checkX11Grab();
+
+ /** @brief Ask to set this monitor as active */
+ void setActiveMonitor();
+
+ QSemaphore showFrameSemaphore;
+ bool externalConsumer;
+
+protected:
+ static void consumer_frame_show(mlt_consumer, Render * self, mlt_frame frame_ptr);
+ static void consumer_gl_frame_show(mlt_consumer, Render * self, mlt_frame frame_ptr);
+ static void consumer_thread_started(mlt_consumer, Render * self, mlt_frame frame_ptr);
+ static void consumer_thread_stopped(mlt_consumer, Render * self, mlt_frame frame_ptr);
+
+private:
+
+ /** @brief The name of this renderer.
+ *
+ * Useful to identify the renderers by what they do - e.g. background
+ * rendering, workspace monitor, etc. */
+ Kdenlive::MonitorId m_name;
+ Mlt::Consumer * m_mltConsumer;
+ Mlt::Producer * m_mltProducer;
+ Mlt::Profile *m_mltProfile;
+ Mlt::Event *m_showFrameEvent;
+ Mlt::Event *m_consumerThreadStartedEvent;
+ Mlt::Event *m_consumerThreadStoppedEvent;
+ Mlt::Event *m_pauseEvent;
+ double m_fps;
+
+ /** @brief True if we are playing a zone.
+ *
+ * It's determined by the "in" and "out" properties being temporarily
+ * changed. */
+ bool m_isZoneMode;
+ bool m_isLoopMode;
+ GenTime m_loopStart;
+
+ /** @brief True when the monitor is in split view. */
+ bool m_isSplitView;
+
+ Mlt::Producer *m_blackClip;
+ QString m_activeProfile;
+
+ QTimer *m_osdTimer;
+ QTimer m_refreshTimer;
+ QMutex m_mutex;
+ QMutex m_infoMutex;
+
+ /** @brief A human-readable description of this renderer. */