+ 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;