]> git.sesse.net Git - mlt/commitdiff
Add mlt_filter_get_progress().
authorDan Dennedy <dan@dennedy.org>
Tue, 8 Mar 2011 05:50:37 +0000 (21:50 -0800)
committerDan Dennedy <dan@dennedy.org>
Fri, 11 Mar 2011 07:15:45 +0000 (23:15 -0800)
src/framework/mlt_filter.c
src/framework/mlt_filter.h
src/mlt++/MltFilter.cpp
src/mlt++/MltFilter.h

index f9a256a92c4c77280c81d9cb5708686ba4c8a9c0..3df813fd9951545ab5a1d8f26c387e45b0d54a02 100644 (file)
@@ -202,6 +202,28 @@ mlt_position mlt_filter_get_length( mlt_filter self )
        return ( out > 0 ) ? ( out - in + 1 ) : 0;
 }
 
+/** Get the relative position of a frame.
+ *
+ * \public \memberof mlt_filter_s
+ * \param self a filter
+ * \param frame a frame
+ * \return the progress in the range 0.0 to 1.0
+ */
+
+double mlt_filter_get_progress( mlt_filter self, mlt_frame frame )
+{
+       double progress = 0;
+       mlt_position out = mlt_filter_get_out( self );
+
+       if ( out != 0 )
+       {
+               mlt_position in = mlt_filter_get_in( self );
+               mlt_position position = mlt_frame_get_position( frame );
+               progress = ( double ) ( position - in ) / ( double ) ( out - in + 1 );
+       }
+       return progress;
+}
+
 /** Process the frame.
  *
  * \public \memberof mlt_filter_s
index fee1cc91ea041edd5353e98f5248d0f321252789..d81ae10528847480b359a3c820138c725c2f542a 100644 (file)
@@ -65,6 +65,7 @@ extern int mlt_filter_get_track( mlt_filter self );
 extern mlt_position mlt_filter_get_in( mlt_filter self );
 extern mlt_position mlt_filter_get_out( mlt_filter self );
 extern mlt_position mlt_filter_get_length( mlt_filter self );
+extern double mlt_filter_get_progress( mlt_filter self, mlt_frame frame );
 extern void mlt_filter_close( mlt_filter );
 
 #endif
index ce1b1773877816621b7009a254dce6f12bd7225d..3f2f0ee8ee13bc59f7d96af88ada9a94dbfa95c5 100644 (file)
@@ -116,3 +116,7 @@ int Filter::get_track( )
        return mlt_filter_get_track( get_filter( ) );
 }
 
+double Filter::get_progress( Frame &frame )
+{
+       return mlt_filter_get_progress( get_filter( ), frame.get_frame( ) );
+}
index a572b934f7cc3b464db6c2e565a01a6a823b1eb0..254015afc0e0d7dff3e0c01ca9e920c07d250ea2 100644 (file)
@@ -31,6 +31,7 @@ namespace Mlt
 {
        class Service;
        class Profile;
+       class Frame;
 
        class MLTPP_DECLSPEC Filter : public Service
        {
@@ -50,6 +51,7 @@ namespace Mlt
                        int get_out( );
                        int get_length( );
                        int get_track( );
+                       double get_progress( Frame &frame );
        };
 }