[vlmc-devel] [PATCH] Clip: compute length relying on ISource length()
Pawel Golinski
golpaw1 at gmail.com
Mon May 2 20:20:12 CEST 2016
Length was computed using frames only (and ISource's length() was
ignored) which caused it to be zero in sound files.
---
src/Media/Clip.cpp | 16 +++++++++++-----
src/Media/Clip.h | 8 ++++++++
2 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/src/Media/Clip.cpp b/src/Media/Clip.cpp
index 4f29f8e..b634442 100644
--- a/src/Media/Clip.cpp
+++ b/src/Media/Clip.cpp
@@ -40,12 +40,15 @@ Clip::Clip( Media *media, qint64 begin /*= 0*/, qint64 end /*= -1*/, const QStri
m_end( end ),
m_parent( media->baseClip() )
{
+ int64_t nbSourceFrames = media->source()->nbFrames();
if ( end == -1 )
- m_end = media->source()->nbFrames();
+ m_end = nbSourceFrames;
if ( uuid.isEmpty() == true )
m_uuid = QUuid::createUuid();
else
m_uuid = QUuid( uuid );
+ m_beginPosition = (float)begin / (float)nbSourceFrames;
+ m_endPosition = (float)end / (float)nbSourceFrames;
m_childs = new MediaContainer( this );
m_rootClip = media->baseClip();
computeLength();
@@ -61,6 +64,7 @@ Clip::Clip( Clip *parent, qint64 begin /*= -1*/, qint64 end /*= -1*/,
m_rootClip( parent->rootClip() ),
m_parent( parent )
{
+ int64_t nbSourceFrames = parent->media()->source()->nbFrames();
if ( begin < 0 )
m_begin = parent->m_begin;
if ( end < 0 )
@@ -69,6 +73,8 @@ Clip::Clip( Clip *parent, qint64 begin /*= -1*/, qint64 end /*= -1*/,
m_uuid = QUuid::createUuid();
else
m_uuid = QUuid( uuid );
+ m_beginPosition = (float)begin / (float)nbSourceFrames;
+ m_endPosition = (float)end / (float)nbSourceFrames;
m_childs = new MediaContainer( this );
computeLength();
}
@@ -108,11 +114,9 @@ Clip::lengthSecond() const
void
Clip::computeLength()
{
- float fps = m_media->source()->fps();
- if ( fps < 0.1f )
- fps = Clip::DefaultFPS;
+ int64_t sourceLengthSeconds = m_media->source()->length() / 1000;
m_nbFrames = m_end - m_begin;
- m_lengthSeconds = qRound64( (float)m_nbFrames / fps );
+ m_lengthSeconds = qRound64( ( m_endPosition - m_beginPosition ) * sourceLengthSeconds );
}
const QStringList&
@@ -274,6 +278,8 @@ Clip::mediaMetadataUpdated()
{
m_begin = 0;
m_end = m_media->source()->nbFrames();
+ m_beginPosition = 0.0f;
+ m_endPosition = 1.0f;
computeLength();
}
}
diff --git a/src/Media/Clip.h b/src/Media/Clip.h
index 5fb5997..8b49b9a 100644
--- a/src/Media/Clip.h
+++ b/src/Media/Clip.h
@@ -149,6 +149,14 @@ class Clip : public QObject
* beginning of the parent Media.
*/
qint64 m_end;
+ /**
+ * \brief This represents the beginning of the Clip in form of [0; 1] float
+ */
+ float m_beginPosition;
+ /**
+ * \brief This represents the end of the Clip in form of [0;1] float
+ */
+ float m_endPosition;
/**
* \brief The length in frames
--
2.6.4 (Apple Git-63)
More information about the Vlmc-devel
mailing list