[vlmc-devel] IProducer::cut(), Media, Clip: Introduce unique_ptr to handle IProducer
Yikai Lu
git at videolan.org
Mon Jun 27 10:57:09 CEST 2016
vlmc | branch: master | Yikai Lu <luyikei.qmltu at gmail.com> | Mon Jun 27 17:09:10 2016 +0900| [b11c2aa9882a069f16571a80982495328116e5b4] | committer: Yikai Lu
IProducer::cut(), Media, Clip: Introduce unique_ptr to handle IProducer
> https://code.videolan.org/videolan/vlmc/commit/b11c2aa9882a069f16571a80982495328116e5b4
---
src/Backend/IProducer.h | 4 +++-
src/Backend/MLT/MLTProducer.cpp | 4 ++--
src/Backend/MLT/MLTProducer.h | 2 +-
src/Media/Clip.cpp | 7 +++----
src/Media/Clip.h | 4 +++-
src/Media/Media.cpp | 8 +++-----
src/Media/Media.h | 5 ++++-
7 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/src/Backend/IProducer.h b/src/Backend/IProducer.h
index 408cee2..5e6d388 100644
--- a/src/Backend/IProducer.h
+++ b/src/Backend/IProducer.h
@@ -24,6 +24,8 @@
#define IPRODUCER_H
#include <cstdint>
+#include <memory>
+
#include "Backend/IService.h"
namespace Backend
@@ -59,7 +61,7 @@ namespace Backend
virtual void setBoundaries( int64_t begin, int64_t end ) = 0;
// Absolute position in frames
- virtual IProducer* cut( int64_t begin = 0, int64_t end = EndOfMedia ) = 0;
+ virtual std::unique_ptr<IProducer> cut( int64_t begin = 0, int64_t end = EndOfMedia ) = 0;
virtual bool isCut( ) const = 0 ;
virtual bool sameClip( IProducer& that ) const = 0;
diff --git a/src/Backend/MLT/MLTProducer.cpp b/src/Backend/MLT/MLTProducer.cpp
index 5466b11..9a21013 100644
--- a/src/Backend/MLT/MLTProducer.cpp
+++ b/src/Backend/MLT/MLTProducer.cpp
@@ -161,10 +161,10 @@ MLTProducer::setBoundaries( int64_t begin, int64_t end )
m_producer->set_in_and_out( begin, end );
}
-Backend::IProducer*
+std::unique_ptr<Backend::IProducer>
MLTProducer::cut( int64_t begin, int64_t end )
{
- return new MLTProducer( m_producer->cut( begin, end ) );
+ return std::unique_ptr<IProducer>( new MLTProducer( m_producer->cut( begin, end ) ) );
}
bool
diff --git a/src/Backend/MLT/MLTProducer.h b/src/Backend/MLT/MLTProducer.h
index ff89052..87024cd 100644
--- a/src/Backend/MLT/MLTProducer.h
+++ b/src/Backend/MLT/MLTProducer.h
@@ -57,7 +57,7 @@ class MLTProducer : virtual public IProducer, public MLTService
virtual void setEnd( int64_t end ) override;
virtual void setBoundaries( int64_t begin, int64_t end ) override;
- virtual IProducer* cut( int64_t begin = 0, int64_t end = EndOfMedia ) override;
+ virtual std::unique_ptr<IProducer> cut( int64_t begin = 0, int64_t end = EndOfMedia ) override;
virtual bool isCut() const override;
virtual bool sameClip( IProducer& that ) const override;
diff --git a/src/Media/Clip.cpp b/src/Media/Clip.cpp
index 0be55c5..b2b40c1 100644
--- a/src/Media/Clip.cpp
+++ b/src/Media/Clip.cpp
@@ -37,7 +37,7 @@
Clip::Clip( Media *media, qint64 begin /*= 0*/, qint64 end /*= Backend::IProducer::EndOfMedia */, const QString& uuid /*= QString()*/ ) :
Workflow::Helper( uuid ),
m_media( media ),
- m_producer( m_media->producer()->cut( begin, end ) ),
+ m_producer( std::move( m_media->producer()->cut( begin, end ) ) ),
m_parent( media->baseClip() ),
m_clipWorkflow( nullptr )
{
@@ -69,7 +69,6 @@ Clip::~Clip()
{
emit unloaded( this );
delete m_childs;
- delete m_producer;
if ( isRootClip() == true )
delete m_media;
}
@@ -261,7 +260,7 @@ Clip::toVariant() const
h.insert( "begin", begin() );
h.insert( "end", end() );
}
- h.insert( "filters", EffectHelper::toVariant( m_producer ) );
+ h.insert( "filters", EffectHelper::toVariant( m_producer.get() ) );
return QVariant( h );
}
@@ -297,7 +296,7 @@ Clip::setFormats( Formats formats )
Backend::IProducer*
Clip::producer()
{
- return m_producer;
+ return m_producer.get();
}
void
diff --git a/src/Media/Clip.h b/src/Media/Clip.h
index d50141f..5e384a6 100644
--- a/src/Media/Clip.h
+++ b/src/Media/Clip.h
@@ -35,6 +35,8 @@
#include <QXmlStreamWriter>
#include "Backend/IProducer.h"
+#include <memory>
+
class MediaContainer;
class Media;
class ClipWorkflow;
@@ -139,7 +141,7 @@ class Clip : public Workflow::Helper
private:
Media* m_media;
- Backend::IProducer* m_producer;
+ std::unique_ptr<Backend::IProducer> m_producer;
QStringList m_metaTags;
QString m_notes;
diff --git a/src/Media/Media.cpp b/src/Media/Media.cpp
index 8d9c6d6..e3af086 100644
--- a/src/Media/Media.cpp
+++ b/src/Media/Media.cpp
@@ -71,7 +71,6 @@ Media::Media(const QString &path )
Media::~Media()
{
- delete m_producer;
delete m_fileInfo;
}
@@ -120,13 +119,13 @@ Media::toVariant() const
Backend::IProducer*
Media::producer()
{
- return m_producer;
+ return m_producer.get();
}
const Backend::IProducer*
Media::producer() const
{
- return m_producer;
+ return m_producer.get();
}
void
@@ -138,8 +137,7 @@ Media::setFilePath( const QString &filePath )
m_fileName = m_fileInfo->fileName();
m_mrl = "file:///" + QUrl::toPercentEncoding( filePath, "/" );
- delete m_producer;
- m_producer = new Backend::MLT::MLTProducer( qPrintable( filePath ) );
+ m_producer.reset( new Backend::MLT::MLTProducer( qPrintable( filePath ) ) );
}
#ifdef WITH_GUI
diff --git a/src/Media/Media.h b/src/Media/Media.h
index bc978c2..4018c2f 100644
--- a/src/Media/Media.h
+++ b/src/Media/Media.h
@@ -31,6 +31,9 @@
#define MEDIA_H__
#include "config.h"
+
+#include <memory>
+
#include <QString>
#include <QObject>
#include <QFileInfo>
@@ -110,7 +113,7 @@ public:
QPixmap& snapshot();
#endif
protected:
- Backend::IProducer* m_producer;
+ std::unique_ptr<Backend::IProducer> m_producer;
QString m_mrl;
QFileInfo* m_fileInfo;
FileType m_fileType;
More information about the Vlmc-devel
mailing list