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
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
return mlt_filter_get_track( get_filter( ) );
}
+double Filter::get_progress( Frame &frame )
+{
+ return mlt_filter_get_progress( get_filter( ), frame.get_frame( ) );
+}