X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Foldfilm%2Ffilter_vignette.c;h=e9e3f5d0f814a44086b990deeeac8b4a98869b34;hb=2878b432665c890b3cb3e59ed7603a00130f0eab;hp=6ac7d0de741025184d3001ba1a9e280c11b9bdfd;hpb=2ca2b986eb622439271104a29a4b3ce8a38a0fd5;p=melted diff --git a/src/modules/oldfilm/filter_vignette.c b/src/modules/oldfilm/filter_vignette.c index 6ac7d0d..e9e3f5d 100644 --- a/src/modules/oldfilm/filter_vignette.c +++ b/src/modules/oldfilm/filter_vignette.c @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -35,33 +36,25 @@ static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format * mlt_filter filter = mlt_frame_pop_service( this ); int error = mlt_frame_get_image( this, image, format, width, height, 1 ); - + if ( error == 0 && *image && *format == mlt_image_yuv422 ) { - float smooth_s=80,radius_s=50,x_s=50,y_s=50,opac_s=0; - float smooth_e=80,radius_e=50,x_e=50,y_e=50,opac_e=0; - - sscanf(mlt_properties_get(MLT_FILTER_PROPERTIES( filter ), "start" ), "%f:%f,%fx%f,%f",&smooth_s,&radius_s,&x_s,&y_s,&opac_s); - if (mlt_properties_get(MLT_FILTER_PROPERTIES( filter ), "end" ) ){ - sscanf(mlt_properties_get(MLT_FILTER_PROPERTIES( filter ), "end" ), "%f:%f,%fx%f,%f",&smooth_e,&radius_e,&x_e,&y_e,&opac_e); - }else{ - smooth_e=smooth_s; - radius_e=radius_s; - x_e=x_s; - y_e=y_s; - opac_e=opac_s; - } mlt_position in = mlt_filter_get_in( filter ); - mlt_position out = mlt_filter_get_out( filter ); + //mlt_position out = mlt_filter_get_out( filter ); mlt_position time = mlt_frame_get_position( this ); - float position = ( double )( time -in ) / ( double )( out - in + 1 ) /100.0; - - float smooth = 2.0*POSITION_VALUE (position, smooth_s, smooth_e) ; - float radius = POSITION_VALUE (position, radius_s, radius_e)/100.0* *width; - double cx = POSITION_VALUE (position, x_s, x_e ) * *width/100; - double cy = POSITION_VALUE (position, y_s, y_e ) * *height/100; - double opac= POSITION_VALUE(position, opac_s, opac_e) ; + mlt_geometry geom=mlt_geometry_init(); + struct mlt_geometry_item_s item; + float smooth, radius, cx, cy, opac; + char *val=mlt_properties_get(MLT_FILTER_PROPERTIES( filter ), "geometry" ); + mlt_geometry_parse(geom,val,-1,-1,-1); + mlt_geometry_fetch(geom,&item,time-in); + smooth=item.x; + radius=item.y; + cx=item.w; + cy=item.h; + opac=item.mix; + mlt_geometry_close(geom); int video_width = *width; int video_height = *height; @@ -124,7 +117,7 @@ mlt_filter filter_vignette_init( mlt_profile profile, mlt_service_type type, con */ this->process = filter_process; - mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "start", "80:50:50x50:0" ); + mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "geometry", "80:50%:50%:50%:0" ); //mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "end", "" ); }