Thread: [Mlt-devel] mlt/src/modules/core producer_framebuffer.c, 1.1, 1.2 producer_framebuffer.h, 1.1, 1.2
Brought to you by:
ddennedy,
lilo_booter
From: j-b-m <j-...@us...> - 2006-11-18 14:52:50
|
Update of /cvsroot/mlt/mlt/src/modules/core In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv16916/src/modules/core Modified Files: producer_framebuffer.c producer_framebuffer.h Log Message: Fix header + add freeze feature Index: producer_framebuffer.c =================================================================== RCS file: /cvsroot/mlt/mlt/src/modules/core/producer_framebuffer.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- producer_framebuffer.c 18 Nov 2006 14:22:57 -0000 1.1 +++ producer_framebuffer.c 18 Nov 2006 14:52:44 -0000 1.2 @@ -115,27 +115,38 @@ // get properties int strobe = mlt_properties_get_int( MLT_PRODUCER_PROPERTIES (this), "strobe"); - double prod_speed = mlt_properties_get_double( properties, "_speed"); - double prod_end_speed = mlt_properties_get_double( properties, "end_speed"); - - // calculate actual speed and position - double actual_speed = prod_speed + ((double)mlt_producer_position( this ) / (double)mlt_producer_get_length(this)) * (prod_end_speed - prod_speed); - double actual_position = actual_speed * (double)mlt_producer_position( this ); - if (mlt_properties_get_int( properties, "reverse")) actual_position = mlt_producer_get_length(this) - actual_position; + double freeze = mlt_properties_get_double( MLT_PRODUCER_PROPERTIES (this), "freeze"); + int freeze_after = mlt_properties_get_int( MLT_PRODUCER_PROPERTIES (this), "freeze_after"); + int freeze_before = mlt_properties_get_int( MLT_PRODUCER_PROPERTIES (this), "freeze_before"); mlt_position need_first; + if (!freeze || freeze_after || freeze_before) { + double prod_speed = mlt_properties_get_double( properties, "_speed"); + double prod_end_speed = mlt_properties_get_double( properties, "end_speed"); - if (strobe == 1) - { - need_first = floor( actual_position ); - } - else - { - // Strobe effect wanted, calculate frame position - need_first = floor( actual_position ); - need_first -= need_first%strobe; + // calculate actual speed and position + double actual_speed = prod_speed + ((double)mlt_producer_position( this ) / (double)mlt_producer_get_length(this)) * (prod_end_speed - prod_speed); + double actual_position = actual_speed * (double)mlt_producer_position( this ); + if (mlt_properties_get_int( properties, "reverse")) actual_position = mlt_producer_get_length(this) - actual_position; + + if (strobe < 2) + { + need_first = floor( actual_position ); + } + else + { + // Strobe effect wanted, calculate frame position + need_first = floor( actual_position ); + need_first -= need_first%strobe; + } + if (freeze) + { + if (freeze_after && need_first > freeze) need_first = freeze; + else if (freeze_before && need_first < freeze) need_first = freeze; + } } + else need_first = freeze; if( need_first != first_position ) { @@ -193,6 +204,10 @@ x is the number of frames that will be ignored. * You can play the movie backwards by adding reverse=1 + + * You can freeze the clip at a determined position by adding freeze=frame_pos + add freeze_after=1 to freeze only paste position or freeze_before to freeze before it + **/ double speed; Index: producer_framebuffer.h =================================================================== RCS file: /cvsroot/mlt/mlt/src/modules/core/producer_framebuffer.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- producer_framebuffer.h 18 Nov 2006 14:22:57 -0000 1.1 +++ producer_framebuffer.h 18 Nov 2006 14:52:44 -0000 1.2 @@ -1,7 +1,6 @@ /* - * producer_colour.h -- raster image loader based upon gdk-pixbuf - * Copyright (C) 2003-2004 Ushodaya Enterprises Limited - * Author: Dan Dennedy <da...@de...> + * producer_framebuffer.h -- slowmotion and reverse playing + * Copyright (C) 2006 Jean-Baptiste Mardelle <jb...@ad...> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by |