[vlmc-devel] Link clips by Commands::Clip::Link

yikei lu luyikei.qmltu at gmail.com
Fri Jul 29 15:39:11 CEST 2016


Sorry for my copy-and-paste thing :) The Q_OBJECT actually exists in
all other Commands::Generic, so I'll remove them :)

2016-07-29 22:27 GMT+09:00 Hugo Beauzée-Luyssen <hugo at beauzee.fr>:
> On 07/23/2016 12:06 PM, Yikai Lu wrote:
>>
>> vlmc | branch: master | Yikai Lu <luyikei.qmltu at gmail.com> | Sat Jul 23
>> 18:42:08 2016 +0900| [f861c6d56e22dcf2b0607dd96954f12c916ffc28] | committer:
>> Yikai Lu
>>
>> Link clips by Commands::Clip::Link
>>
>>>
>>> https://code.videolan.org/videolan/vlmc/commit/f861c6d56e22dcf2b0607dd96954f12c916ffc28
>>
>> ---
>>
>>  src/Commands/Commands.cpp     | 36 ++++++++++++++++++++++++++++++++++++
>>  src/Commands/Commands.h       | 15 +++++++++++++++
>>  src/Gui/timeline/Track.qml    |  1 +
>>  src/Media/Clip.cpp            | 34 +++++++++++++++++++++++++++++++++-
>>  src/Media/Clip.h              |  9 +++++++++
>>  src/Workflow/MainWorkflow.cpp | 15 +++++++++++++++
>>  src/Workflow/MainWorkflow.h   |  4 ++++
>>  7 files changed, 113 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/Commands/Commands.cpp b/src/Commands/Commands.cpp
>> index 5ca1302..1e78c5c 100644
>> --- a/src/Commands/Commands.cpp
>> +++ b/src/Commands/Commands.cpp
>> @@ -271,6 +271,42 @@ Commands::Clip::Split::internalUndo()
>>      m_toSplit->setEnd( m_oldEnd );
>>  }
>>
>> +Commands::Clip::Link::Link( std::shared_ptr<::Clip> const& clipA,
>> std::shared_ptr<::Clip> const& clipB )
>> +    : m_clipA( clipA )
>> +    , m_clipB( clipB )
>> +{
>> +    connect( m_clipA.get(), &::Clip::destroyed, this, &Link::invalidate
>> );
>> +    connect( m_clipB.get(), &::Clip::destroyed, this, &Link::invalidate
>> );
>> +    retranslate();
>> +}
>> +
>> +Commands::Clip::Link::~Link()
>> +{
>> +
>> +}
>
>
> Empty destructors instead of ommited/defaulted constructors makes me a sad
> panda :(
>
>
>> +
>> +void
>> +Commands::Clip::Link::retranslate()
>> +{
>> +    setText( tr( "Linking clip" ) );
>> +}
>> +
>> +void
>> +Commands::Clip::Link::internalRedo()
>> +{
>> +    m_clipA->setLinkedClipUuid( m_clipB->uuid() );
>> +    m_clipB->setLinkedClipUuid( m_clipA->uuid() );
>> +    m_clipA->setLinked( true );
>> +    m_clipB->setLinked( true );
>> +}
>> +
>> +void
>> +Commands::Clip::Link::internalUndo()
>> +{
>> +    m_clipA->setLinked( false );
>> +    m_clipB->setLinked( false );
>> +}
>> +
>>  Commands::Effect::Add::Add( std::shared_ptr<EffectHelper> const& helper,
>> Backend::IInput* target )
>>      : m_helper( helper )
>>      , m_target( target )
>> diff --git a/src/Commands/Commands.h b/src/Commands/Commands.h
>> index 2387945..97bf65e 100644
>> --- a/src/Commands/Commands.h
>> +++ b/src/Commands/Commands.h
>> @@ -177,6 +177,21 @@ namespace Commands
>>                  qint64                      m_newClipBegin;
>>                  qint64                      m_oldEnd;
>>          };
>> +
>> +        class   Link : public Generic
>> +        {
>> +            Q_OBJECT
>
>
> No need for Q_OBJECT here unless I'm missing something
>
>
>> +
>> +            public:
>> +                Link( std::shared_ptr<::Clip> const& clipA,
>> std::shared_ptr<::Clip> const& clipB );
>> +                ~Link();
>> +                virtual void    internalRedo();
>> +                virtual void    internalUndo();
>> +                virtual void    retranslate();
>> +            private:
>> +                std::shared_ptr<::Clip>     m_clipA;
>> +                std::shared_ptr<::Clip>     m_clipB;
>> +        };
>>      }
>>      namespace   Effect
>>      {
>> diff --git a/src/Gui/timeline/Track.qml b/src/Gui/timeline/Track.qml
>> index 2ef9010..7489b27 100644
>> --- a/src/Gui/timeline/Track.qml
>> +++ b/src/Gui/timeline/Track.qml
>> @@ -184,6 +184,7 @@ Item {
>>                          if ( audioClipUuid && videoClipUuid ) {
>>                              findClipItem( audioClipUuid ).linkedClip =
>> videoClipUuid;
>>                              findClipItem( videoClipUuid ).linkedClip =
>> audioClipUuid;
>> +                            workflow.linkClips( audioClipUuid,
>> videoClipUuid );
>>                          }
>>                          currentUuid = "";
>>                          aClipInfo = null;
>> diff --git a/src/Media/Clip.cpp b/src/Media/Clip.cpp
>> index 2c3f70e..91b27bc 100644
>> --- a/src/Media/Clip.cpp
>> +++ b/src/Media/Clip.cpp
>> @@ -38,7 +38,8 @@ Clip::Clip( Media *media, qint64 begin /*= 0*/, qint64
>> end /*= Backend::IInput::
>>          Workflow::Helper( uuid ),
>>          m_media( media ),
>>          m_input( std::move( m_media->input()->cut( begin, end ) ) ),
>> -        m_parent( media->baseClip() )
>> +        m_parent( media->baseClip() ),
>> +        m_isLinked( false )
>>  {
>>      m_childs = new MediaContainer( this );
>>      m_rootClip = media->baseClip();
>> @@ -186,6 +187,30 @@ Clip::setBoundaries( qint64 begin, qint64 end )
>>      m_input->setBoundaries( begin, end );
>>  }
>>
>> +void
>> +Clip::setLinkedClipUuid( const QUuid& uuid )
>> +{
>> +    m_linkedClipUuid = uuid;
>> +}
>> +
>> +const QUuid&
>> +Clip::linkedClipUuid() const
>> +{
>> +    return m_linkedClipUuid;
>> +}
>> +
>> +void
>> +Clip::setLinked( bool isLinked )
>> +{
>> +    m_isLinked = isLinked;
>> +}
>> +
>> +bool
>> +Clip::isLinked() const
>> +{
>> +    return m_isLinked;
>> +}
>> +
>>  Clip*
>>  Clip::rootClip()
>>  {
>> @@ -267,6 +292,13 @@ Clip::toVariant() const
>>          h.insert( "begin", begin() );
>>          h.insert( "end", end() );
>>      }
>> +    if ( isLinked() == true )
>> +    {
>> +        h.insert( "linkedClip", m_linkedClipUuid );
>> +        h.insert( "linked", true );
>> +    }
>> +    else
>> +        h.insert( "linked", false );
>>      h.insert( "filters", EffectHelper::toVariant( m_input.get() ) );
>>      return QVariant( h );
>>
>> diff --git a/src/Media/Clip.h b/src/Media/Clip.h
>> index 1bb4664..dab3506 100644
>> --- a/src/Media/Clip.h
>> +++ b/src/Media/Clip.h
>> @@ -108,6 +108,12 @@ class   Clip : public Workflow::Helper
>>          virtual qint64      length() const override;
>>          virtual void        setBoundaries( qint64 begin, qint64 end )
>> override;
>>
>> +        void                setLinkedClipUuid( const QUuid& uuid );
>> +        const QUuid&        linkedClipUuid() const;
>> +
>> +        void                setLinked( bool isLinked );
>> +        bool                isLinked() const;
>> +
>>          const QStringList   &metaTags() const;
>>          void                setMetaTags( const QStringList &tags );
>>          bool                matchMetaTag( const QString &tag ) const;
>> @@ -156,6 +162,9 @@ class   Clip : public Workflow::Helper
>>
>>          Clip*               m_parent;
>>
>> +        QUuid               m_linkedClipUuid;
>> +        bool                m_isLinked;
>> +
>>          Formats             m_formats;
>>
>>      private slots:
>> diff --git a/src/Workflow/MainWorkflow.cpp b/src/Workflow/MainWorkflow.cpp
>> index 2b716a9..3b6b0a1 100644
>> --- a/src/Workflow/MainWorkflow.cpp
>> +++ b/src/Workflow/MainWorkflow.cpp
>> @@ -288,6 +288,21 @@ MainWorkflow::removeClip( const QString& uuid )
>>      }
>>  }
>>
>> +void
>> +MainWorkflow::linkClips( const QString& uuidA, const QString& uuidB )
>> +{
>> +
>> +    for ( auto clipA : m_clips )
>> +        if ( clipA->uuid().toString() == uuidA )
>> +            for ( auto clipB : m_clips )
>> +                if ( clipB->uuid().toString() == uuidB )
>> +                {
>> +                    Commands::trigger( new Commands::Clip::Link( clipA,
>> clipB ) );
>> +                    emit clipLinked( uuidA, uuidB );
>> +                    return;
>> +                }
>> +}
>> +
>>  bool
>>  MainWorkflow::startRenderToFile( const QString &outputFileName, quint32
>> width, quint32 height,
>>                                   double fps, const QString &ar, quint32
>> vbitrate, quint32 abitrate,
>> diff --git a/src/Workflow/MainWorkflow.h b/src/Workflow/MainWorkflow.h
>> index c328c2f..c21580c 100644
>> --- a/src/Workflow/MainWorkflow.h
>> +++ b/src/Workflow/MainWorkflow.h
>> @@ -157,6 +157,9 @@ class   MainWorkflow : public QObject
>>          Q_INVOKABLE
>>          void                    removeClip( const QString& uuid );
>>
>> +        Q_INVOKABLE
>> +        void                    linkClips( const QString& uuidA, const
>> QString& uuidB );
>> +
>>          bool                    startRenderToFile( const QString&
>> outputFileName, quint32 width, quint32 height,
>>                                                     double fps, const
>> QString& ar, quint32 vbitrate, quint32 abitrate,
>>                                                     quint32 nbChannels,
>> quint32 sampleRate );
>> @@ -239,6 +242,7 @@ class   MainWorkflow : public QObject
>>          void                    clipResized( const QString& uuid );
>>          void                    clipRemoved( const QString& uuid );
>>          void                    clipMoved( const QString& uuid );
>> +        void                    clipLinked( const QString& uuidA, const
>> QString& uuidB );
>>  };
>>
>>  #endif // MAINWORKFLOW_H
>>
>> _______________________________________________
>> Vlmc-devel mailing list
>> Vlmc-devel at videolan.org
>> https://mailman.videolan.org/listinfo/vlmc-devel
>>
>
> _______________________________________________
> Vlmc-devel mailing list
> Vlmc-devel at videolan.org
> https://mailman.videolan.org/listinfo/vlmc-devel


More information about the Vlmc-devel mailing list