X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Frenderer.h;h=b20afea559e09d92264e583824bed2cc51ade133;hb=aa49bce660baf4d4e29b0355024ff8b0556e3f18;hp=a7e2ff4fb7afb342f0c1110f1552ef481a7dd916;hpb=519b6c56182a412eff7d9b331b26ca76eb907947;p=kdenlive diff --git a/src/renderer.h b/src/renderer.h index a7e2ff4f..b20afea5 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -31,6 +31,7 @@ #include "gentime.h" #include "definitions.h" +#include "mlt/framework/mlt_types.h" #include @@ -90,7 +91,7 @@ Q_OBJECT public: /** @brief Seeks the renderer clip to the given time. */ void seek(GenTime time); - void seekToFrame(int pos); + void seek(int time); void seekToFrameDiff(int diff); int m_isBlocked; @@ -129,7 +130,7 @@ Q_OBJECT public: void stop(const GenTime & startTime); int volume() const; - QImage extractFrame(int frame_position, int width = -1, int height = -1); + QImage extractFrame(int frame_position, QString path = QString(), int width = -1, int height = -1); /** @brief Plays the scene starting from a specific time. * @param startTime time to start playing the scene from */ @@ -177,6 +178,8 @@ Q_OBJECT public: /** @brief Returns display aspect ratio. */ double dar() const; + /** @brief Returns sample aspect ratio. */ + double sar() const; /* * Playlist manipulation. @@ -187,7 +190,10 @@ Q_OBJECT public: void mltCutClip(int track, GenTime position); void mltInsertSpace(QMap trackClipStartList, QMap trackTransitionStartList, int track, const GenTime duration, const GenTime timeOffset); int mltGetSpaceLength(const GenTime pos, int track, bool fromBlankStart); + + /** @brief Returns the duration/length of @param track as reported by the track producer. */ int mltTrackDuration(int track); + bool mltResizeClipEnd(ItemInfo info, GenTime clipDuration); bool mltResizeClipStart(ItemInfo info, GenTime diff); bool mltResizeClipCrop(ItemInfo info, GenTime diff); @@ -259,6 +265,9 @@ Q_OBJECT public: QList checkTrackSequence(int); void sendFrameUpdate(); + /** @brief Returns a pointer to the main producer. */ + Mlt::Producer *getProducer(); + private: /** @brief The name of this renderer. @@ -304,6 +313,12 @@ private: void buildConsumer(const QString profileName); void resetZoneMode(); void fillSlowMotionProducers(); + /** @brief Get the track number of the lowest audible (non muted) audio track + * @param return The track number */ + int getLowestNonMutedAudioTrack(Mlt::Tractor tractor); + + /** @brief Make sure our audio mixing transitions are applied to the lowest track */ + void fixAudioMixing(Mlt::Tractor tractor); private slots: @@ -316,7 +331,7 @@ private slots: signals: /** @brief The renderer received a reply to a getFileProperties request. */ - void replyGetFileProperties(const QString &clipId, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &, bool); + void replyGetFileProperties(const QString &clipId, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &, bool, bool); /** @brief The renderer received a reply to a getImage request. */ void replyGetImage(const QString &, const QPixmap &); @@ -330,20 +345,18 @@ signals: /** @brief The renderer started rendering. */ void rendering(const GenTime &); - /** @brief The rendering has finished. - @see consumer_frame_show - This signal seems to be useless; use renderPosition(int) instead --Granjow */ - void renderFinished(); - - /* @brief The current seek position has been changed by the renderer. - void positionChanged(const GenTime &);*/ - /** @brief An error occurred within this renderer. */ void error(const QString &, const QString &); void durationChanged(int); void rendererPosition(int); void rendererStopped(int); + /** @brief The clip is not valid, should be removed from project. */ void removeInvalidClip(const QString &, bool replaceProducer); + /** @brief The proxy is not valid, should be deleted. + * @param id The original clip's id + * @param durationError Should be set to true if the proxy failed because it has not same length as original clip + */ + void removeInvalidProxy(const QString &id, bool durationError); void refreshDocumentProducers(); /** @brief A frame's image has to be shown. @@ -353,6 +366,8 @@ signals: void showAudioSignal(const QByteArray); /** @brief The renderer refreshed the current frame, but no seeking was done. */ void frameUpdated(QImage); + /** @brief This signal contains the audio of the current frame. */ + void audioSamplesSignal(const QVector&, int freq, int num_channels, int num_samples); public slots: @@ -367,16 +382,21 @@ public slots: bool isValid(KUrl url); /** @brief Requests the file properties for the specified URL. - * + @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 + @param selectClip If true, clip item will be selected in project view * Upon return, the result will be emitted via replyGetFileProperties(). * Wraps the VEML command of the same name. */ - void getFileProperties(const QDomElement xml, const QString &clipId, int imageHeight, bool replaceProducer = true); + void getFileProperties(const QDomElement xml, const QString &clipId, int imageHeight, bool replaceProducer = true, bool selectClip = false); void exportFileToFirewire(QString srcFileName, int port, GenTime startTime, GenTime endTime); void mltSavePlaylist(); void slotSplitView(bool doit); void slotSwitchFullscreen(); void slotSetVolume(int volume); + void seekToFrame(int pos); }; #endif