From: blendamedt Date: Thu, 28 Feb 2008 09:43:55 +0000 (+0000) Subject: updated oldfilm module + 2 new filters X-Git-Url: http://research.m1stereo.tv/gitweb?a=commitdiff_plain;h=db8544a3fa169191be753f1a601ff0163c0b2c22;hp=7234b0f5d3e765ab4f6385036a218cc410284d68;p=melted updated oldfilm module + 2 new filters git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@1086 d19143bc-622f-0410-bfdd-b5b2a6649095 --- diff --git a/src/modules/oldfilm/Makefile b/src/modules/oldfilm/Makefile index 353ba6f..d9fe7cb 100644 --- a/src/modules/oldfilm/Makefile +++ b/src/modules/oldfilm/Makefile @@ -6,7 +6,9 @@ OBJS = factory.o \ filter_oldfilm.o \ filter_dust.o \ filter_lines.o \ - filter_grain.o + filter_grain.o \ + filter_tcolor.o \ + filter_vignette.o CFLAGS += -I../.. @@ -32,6 +34,10 @@ clean: install: all install -m 755 $(TARGET) "$(DESTDIR)$(libdir)/mlt" + install -d $(DESTDIR)$(prefix)/share/mlt/oldfilm + install -m 644 *.svg "$(DESTDIR)$(prefix)/share/mlt/oldfilm" + install -m 644 *.yml "$(DESTDIR)$(prefix)/share/mlt/oldfilm" + ifneq ($(wildcard .depend),) include .depend diff --git a/src/modules/oldfilm/dust1.svg b/src/modules/oldfilm/dust1.svg new file mode 100644 index 0000000..db59d4d --- /dev/null +++ b/src/modules/oldfilm/dust1.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/src/modules/oldfilm/dust2.svg b/src/modules/oldfilm/dust2.svg new file mode 100644 index 0000000..055a1d3 --- /dev/null +++ b/src/modules/oldfilm/dust2.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/modules/oldfilm/dust3.svg b/src/modules/oldfilm/dust3.svg new file mode 100644 index 0000000..d9c4089 --- /dev/null +++ b/src/modules/oldfilm/dust3.svg @@ -0,0 +1,59 @@ + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/src/modules/oldfilm/dust4.svg b/src/modules/oldfilm/dust4.svg new file mode 100644 index 0000000..19b5a19 --- /dev/null +++ b/src/modules/oldfilm/dust4.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/src/modules/oldfilm/dust5.svg b/src/modules/oldfilm/dust5.svg new file mode 100644 index 0000000..ca9b24b --- /dev/null +++ b/src/modules/oldfilm/dust5.svg @@ -0,0 +1,59 @@ + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/src/modules/oldfilm/factory.c b/src/modules/oldfilm/factory.c index 2ec90a1..bb7c074 100644 --- a/src/modules/oldfilm/factory.c +++ b/src/modules/oldfilm/factory.c @@ -19,11 +19,21 @@ #include #include +#include extern mlt_filter filter_dust_init( mlt_profile profile, mlt_service_type type, const char *id, char *arg ); extern mlt_filter filter_grain_init( mlt_profile profile, mlt_service_type type, const char *id, char *arg ); extern mlt_filter filter_lines_init( mlt_profile profile, mlt_service_type type, const char *id, char *arg ); extern mlt_filter filter_oldfilm_init( mlt_profile profile, mlt_service_type type, const char *id, char *arg ); +extern mlt_filter filter_tcolor_init( mlt_profile profile, mlt_service_type type, const char *id, char *arg ); +extern mlt_filter filter_vignette_init( mlt_profile profile, mlt_service_type type, const char *id, char *arg ); + +static mlt_properties oldfilm_metadata( mlt_service_type type, const char *id, void *data ) +{ + char file[ PATH_MAX ]; + snprintf( file, PATH_MAX, "%s/oldfilm/filter_%s.yml", mlt_environment( "MLT_DATA" ), id ); + return mlt_properties_parse_yaml( file ); +} MLT_REPOSITORY { @@ -31,4 +41,17 @@ MLT_REPOSITORY MLT_REGISTER( filter_type, "dust", filter_dust_init ); MLT_REGISTER( filter_type, "lines", filter_lines_init ); MLT_REGISTER( filter_type, "grain", filter_grain_init ); + MLT_REGISTER( filter_type, "tcolor", filter_tcolor_init ); + MLT_REGISTER( filter_type, "vignette", filter_vignette_init ); + + MLT_REGISTER_METADATA( filter_type, "vignette", oldfilm_metadata, NULL ); + MLT_REGISTER_METADATA( filter_type, "tcolor", oldfilm_metadata, NULL ); + MLT_REGISTER_METADATA( filter_type, "grain", oldfilm_metadata, NULL ); + MLT_REGISTER_METADATA( filter_type, "lines", oldfilm_metadata, NULL ); + MLT_REGISTER_METADATA( filter_type, "dust", oldfilm_metadata, NULL ); + MLT_REGISTER_METADATA( filter_type, "oldfilm", oldfilm_metadata, NULL ); + } + + + diff --git a/src/modules/oldfilm/filter_dust.c b/src/modules/oldfilm/filter_dust.c index c133813..fc62024 100644 --- a/src/modules/oldfilm/filter_dust.c +++ b/src/modules/oldfilm/filter_dust.c @@ -17,59 +17,179 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include -#include +//#include +//#include +#include #include #include #include +#include +#include +static void overlay_image(uint8_t *src, int src_width, int src_height , uint8_t * overlay, int overlay_width, int overlay_height, uint8_t * alpha , int xpos, int ypos, int upsidedown , int mirror ){ + int x,y; + + for (y=ypos;y=0 && (y-ypos)0 ){ + int overlay_x = mirror ? overlay_width - ( x - xpos ) -1 : ( x - xpos ); + double alp=(double)*(alpha+ overlay_width * overlay_y + overlay_x )/255.0; + uint8_t* image_pixel = scanline_image + x * 2; + uint8_t* overlay_pixel = scanline_overlay + overlay_x * 2; + + *image_pixel=(double)(*overlay_pixel)*alp+ (double)*image_pixel*(1.0-alp) ; + if (xpos%2==0) + image_pixel++; + else + image_pixel+=3; + + mirror? overlay_pixel-- : overlay_pixel++; + + *image_pixel=(double)(*(overlay_pixel))*alp + (double)(*image_pixel )*(1.0-alp) ; + } + + } + } + } +} static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format *format, int *width, int *height, int writable ) { - mlt_filter filter = mlt_frame_pop_service( this ); - int error = mlt_frame_get_image( this, image, format, width, height, 1 ); + + int maxdia = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "maxdiameter" ); + int maxcount = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "maxcount" ); + mlt_position in = mlt_filter_get_in( filter ); + mlt_position out = mlt_filter_get_out( filter ); + mlt_position time = mlt_frame_get_position( this ); + double position = ( double )( time - in ) / ( double )( out - in + 1 ); + + int error = mlt_frame_get_image( this, image, format, width, height, 1 ); + // load svg + mlt_properties properties = MLT_FILTER_PROPERTIES( filter ); + char *factory = mlt_properties_get( properties, "factory" ); + char temp[1204]=""; + sprintf( temp, "%s/oldfilm/", mlt_environment( "MLT_DATA" ) ); + + mlt_properties direntries=mlt_properties_new(); + mlt_properties_dir_list(direntries,temp,"dust*.svg",1); + + if (!maxcount) + return 0; + srand(position*10000); + + int im=rand()%maxcount; + int piccount=mlt_properties_count(direntries); + while (im-- && piccount){ + + int picnum=rand()%piccount; + + int y1=rand()%*height; + int x1=rand()%*width; + char resource[1024]=""; + char savename[1024]="",savename1[1024]="", cachedy[100]; + int dx=(*width*maxdia/100); + int luma_width,luma_height; + uint8_t *luma_image = NULL; + uint8_t *alpha =NULL; + int updown= rand()%2; + int mirror=rand()%2; + + sprintf(resource,"%s",mlt_properties_get_value(direntries,picnum)); + sprintf(savename,"cache-%d-%d",picnum,dx); + sprintf(savename1,"cache-alpha-%d-%d",picnum,dx); + sprintf(cachedy,"cache-dy-%d-%d",picnum,dx); + + luma_image= mlt_properties_get_data( properties , savename , NULL ); + alpha= mlt_properties_get_data( properties , savename1 , NULL ); + + if (luma_image == NULL || alpha == NULL ){ + mlt_profile profile = mlt_service_profile( MLT_FILTER_SERVICE( filter ) ); + mlt_producer producer = mlt_factory_producer( profile, factory, resource ); + + if ( producer != NULL ) + { + mlt_properties producer_properties = MLT_PRODUCER_PROPERTIES( producer ); + + mlt_properties_set( producer_properties, "eof", "loop" ); + mlt_frame luma_frame = NULL; + + if ( mlt_service_get_frame( MLT_PRODUCER_SERVICE( producer ), &luma_frame, 0 ) == 0 ){ + + mlt_properties_set_double ( MLT_FRAME_PROPERTIES ( luma_frame ) , "consumer_aspect_ratio" , 1.0 ); + mlt_image_format luma_format = mlt_image_yuv422; + luma_width = dx; + luma_height = luma_width * mlt_properties_get_int( MLT_FRAME_PROPERTIES ( luma_frame ) , "height" ) / mlt_properties_get_int( MLT_FRAME_PROPERTIES ( luma_frame ) , "width" ); + + mlt_properties_set( MLT_FRAME_PROPERTIES( luma_frame ), "rescale.interp", "best" );// none/nearest/tiles/hyper + + mlt_frame_get_image( luma_frame, &luma_image, &luma_format, &luma_width, &luma_height, 0 ); + alpha =mlt_frame_get_alpha_mask(luma_frame); + + uint8_t* savealpha=mlt_pool_alloc ( luma_width * luma_height ); + uint8_t* savepic=mlt_pool_alloc ( luma_width * luma_height * 2); + + if (savealpha && savepic ){ + memcpy (savealpha, alpha , luma_width * luma_height ); + memcpy (savepic, luma_image , luma_width * luma_height * 2); + + mlt_properties_set_data ( properties , savename , savepic , sizeof(uint8_t*) , mlt_pool_release, NULL ); + mlt_properties_set_data ( properties , savename1 , savealpha , sizeof(uint8_t*) , mlt_pool_release, NULL ); + mlt_properties_set_int ( properties , cachedy , luma_height ); + + overlay_image(*image,*width,*height,luma_image,luma_width,luma_height, alpha, x1, y1 , updown , mirror ); + } + mlt_frame_close( luma_frame ); + } + mlt_producer_close( producer ); + } + }else { + overlay_image ( *image , *width, *height , luma_image , dx , mlt_properties_get_int ( properties , cachedy ) , alpha , x1 , y1 , updown , mirror ); + } + } + if (piccount>0 ) + return 0; if ( error == 0 && *image && *format == mlt_image_yuv422 ) { int h = *height; int w = *width; + if (maxcount==0) + return 0; - int maxdia = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "maxdiameter" ); - int maxcount = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "maxcount" ); int im=rand()%maxcount; - while (im--){ + while (im-- ){ int type=im%2; int y1=rand()%h; int x1=rand()%w; int dx=rand()%maxdia; int dy=rand()%maxdia; int x=0,y=0;//,v=0; - for (x=-dx;x0 && y1+y0 && x!=0 && y!=0){ - //uint8_t *pix=*image+(y+y1)*w*2+(x+x1)*2; - //v=255*(abs(x)+abs(y))/dx; + double v=0.0; + for ( x = -dx ; x < dx ; x++ ) + for ( y = -dy ; y < dy ; y++ ) { + if ( x1+x < w && x1+x > 0 && y1+y < h && y1+y > 0 ){ + uint8_t *pix=*image+(y+y1)*w*2+(x+x1)*2; + //v=(1.0-fabs(x)/dx)*(1.0-fabs(y)/dy); + v=pow((double)x/(double)dx*5.0,2.0)+pow((double)y/(double)dy*5.0,2.0); + if (v>10) + v=10; + v=1.0-(v/10.0); + switch(type){ case 0: - //v=((51*sqrt(y*y+x*x))/255); - *(*image+(y+y1)*w*2+(x+x1)*2)=*(*image+(y+y1)*w*2+(x+x1)*2)/((51*sqrt(y*y+x*x))/255); - /*if (v!=0) - *pix/=v; - else - *pix=0;*/ + *pix-=(*pix)*v; break; case 1: - //v=((51*sqrt(y*y+x*x))/255); - //v=255*(x+y)/dx; - *(*image+(y+y1)*w*2+(x+x1)*2)=*(*image+(y+y1)*w*2+(x+x1)*2)*((51*sqrt(y*y+x*x))/255); - /*if ((*pix*v)<255) - *pix*=v; - else - *pix=255;*/ + *pix+=(255-*pix)*v; break; } } @@ -95,7 +215,7 @@ mlt_filter filter_dust_init( mlt_profile profile, mlt_service_type type, const c if ( this != NULL ) { this->process = filter_process; - mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "maxdiameter", "10" ); + mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "maxdiameter", "2" ); mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "maxcount", "10" ); } return this; diff --git a/src/modules/oldfilm/filter_dust.yml b/src/modules/oldfilm/filter_dust.yml new file mode 100644 index 0000000..5426420 --- /dev/null +++ b/src/modules/oldfilm/filter_dust.yml @@ -0,0 +1,131 @@ +schema_version: 0.1 +type: filter # consumer, filter, producer, or transition +identifier: dust +title: Dust +version: 0.2.5 +copyright: Copyright (C) 2008 Marco Gittler +license: GPL +language: en +url: none +creator: Marco Gittler +contributor: + - Marco Gittler +tags: + - Video # this may produce video +description: Oversaturate the Color in Video, like in old Technicolor movies +icon: + filename: oldfilm/dust.svg # relative to $MLT_DATA/modules/ + content-type: image/svg + content-encoding: base64 + content: | + PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjwh + LS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8 + c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1s + bnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8v + d3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6 + Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9z + dmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RU + RC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUu + b3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMTkuNDQzOTUiCiAgIGhlaWdodD0i + MTAzLjUzMTIzIgogICBpZD0ic3ZnMiIKICAgc29kaXBvZGk6dmVyc2lvbj0iMC4zMiIKICAgaW5r + c2NhcGU6dmVyc2lvbj0iMC40NS4xIgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY2Jh + c2U9Ii9ob21lL21hcmNvL21sdC1zdm4vbWx0L3NyYy9tb2R1bGVzL29sZGZpbG0iCiAgIHNvZGlw + b2RpOmRvY25hbWU9ImR1cy5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5p + bmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCIgLz4K + ICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZm + ZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIK + ICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9 + IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMC4zNSIKICAgICBpbmtzY2FwZTpjeD0iMzUwIgogICAg + IGlua3NjYXBlOmN5PSI1MjAiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAg + IGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lk + dGg9IjE2NzIiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iOTY5IgogICAgIGlua3NjYXBl + OndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIiAvPgogIDxtZXRhZGF0YQog + ICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAg + IHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1h + dD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwu + b3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRm + OlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkViZW5lIDEiCiAg + ICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5z + Zm9ybT0idHJhbnNsYXRlKC02My43NjE3MzYsLTg5LjAyMzA4OCkiPgogICAgPHBhdGgKICAgICAg + IHNvZGlwb2RpOnR5cGU9InN0YXIiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjY4MDg1MTA2O2Zp + bGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtz + dHJva2Utd2lkdGg6Mi41OTk5OTk5O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2lu + Om1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjIuNDAwMDAwMTtzdHJva2UtZGFzaGFycmF5Om5vbmU7 + c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJwYXRoMjE2MCIKICAgICAgIHNvZGlwb2RpOnNp + ZGVzPSI0IgogICAgICAgc29kaXBvZGk6Y3g9Ijg4LjU3MTQyNiIKICAgICAgIHNvZGlwb2RpOmN5 + PSIxMjAuOTMzNjEiCiAgICAgICBzb2RpcG9kaTpyMT0iMjguNTcxNDI4IgogICAgICAgc29kaXBv + ZGk6cjI9IjExLjcxNDI4NSIKICAgICAgIHNvZGlwb2RpOmFyZzE9IjAuNjQzNTAxMTEiCiAgICAg + ICBzb2RpcG9kaTphcmcyPSIxLjQyODg5OTMiCiAgICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9ImZh + bHNlIgogICAgICAgaW5rc2NhcGU6cm91bmRlZD0iMC42IgogICAgICAgaW5rc2NhcGU6cmFuZG9t + aXplZD0iLTAuMDQ2IgogICAgICAgZD0iTSAxMTIuNDAwNzEsMTM4LjQ4NjE1IEMgMTA0LjYzNTIz + LDE0OS4yMjMyIDEwMy4zOTI1MiwxMzEuODQwMjQgOTAuMzAxNDI3LDEzMy41NjE2MyBDIDc3LjIx + MDMzNSwxMzUuMjgzMDEgODEuODcxOTQ3LDE1Mi4wMTQxOSA3MS4zMzY3NzQsMTQzLjY4OTA3IEMg + NjAuODAxNjAxLDEzNS4zNjM5NSA3OC40OTQyMTksMTM0LjkzMzg3IDc2LjE3NDE4MywxMjIuMDcw + MzUgQyA3My44NTQxNDgsMTA5LjIwNjgzIDU3LjgxODE2OCwxMTQuMjI3MTYgNjYuMTMzOTgsMTAz + LjkxMzU3IEMgNzQuNDQ5NzkzLDkzLjU5OTk4IDcyLjQzMDYwNiwxMTAuNjMxOTIgODUuNjA0Njg5 + LDEwOC44MzgwOSBDIDk4Ljc3ODc3MiwxMDcuMDQ0MjcgOTQuMDUzMDQxLDkwLjk0NjQzNSAxMDQu + NTY5MzQsOTguNzEwNjQ5IEMgMTE1LjA4NTY0LDEwNi40NzQ4NiA5Ny4xNTg5MDYsMTA2LjQxNTg3 + IDk5LjU5MDIyOCwxMTkuMTE2MTIgQyAxMDIuMDIxNTUsMTMxLjgxNjM3IDEyMC4xNjYxOSwxMjcu + NzQ5MDkgMTEyLjQwMDcxLDEzOC40ODYxNSB6ICIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9k + aTp0eXBlPSJzdGFyIgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC42ODA4NTEwNjtmaWxsOiMwMDAw + MDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdp + ZHRoOjIuNTk5OTk5OTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtz + dHJva2UtbWl0ZXJsaW1pdDoyLjQwMDAwMDE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1v + cGFjaXR5OjEiCiAgICAgICBpZD0icGF0aDIxNjIiCiAgICAgICBzb2RpcG9kaTpzaWRlcz0iNCIK + ICAgICAgIHNvZGlwb2RpOmN4PSIxMTEuNDI4NTciCiAgICAgICBzb2RpcG9kaTpjeT0iMTc4LjA3 + NjQ4IgogICAgICAgc29kaXBvZGk6cjE9IjEyLjc3NzUzMSIKICAgICAgIHNvZGlwb2RpOnIyPSI1 + LjIzODc4NzIiCiAgICAgICBzb2RpcG9kaTphcmcxPSItMC40NjM2NDc2MSIKICAgICAgIHNvZGlw + b2RpOmFyZzI9IjAuMzIxNzUwNTUiCiAgICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9InRydWUiCiAg + ICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwLjYiCiAgICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIt + MC4wNDYiCiAgICAgICBkPSJNIDEyMi40NDI3NywxNzIuNjk3NTQgQyAxMjcuODQ3NjksMTgyLjI1 + Njk5IDEyNi40MTU0NCwxODQuNDM4NTggMTE2Ljg4MzY1LDE4OS42NDM0MyBDIDEwNy4zNTE4Niwx + OTQuODQ4MjggMTA0LjY2NDcsMTkzLjI1NTIyIDk5LjYzNjIzNSwxODMuMzkwMDggQyA5NC42MDc3 + NjYsMTczLjUyNDk1IDk1LjU1MzU3OCwxNzEuMzM5NDcgMTA1LjE5NjU1LDE2Ni40MTU1OSBDIDEx + NC44Mzk1MSwxNjEuNDkxNyAxMTcuMDM3ODUsMTYzLjEzODEgMTIyLjQ0Mjc3LDE3Mi42OTc1NCB6 + ICIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJzdGFyIgogICAgICAgc3R5bGU9 + Im9wYWNpdHk6MC42ODA4NTEwNjtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxl + OmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuNTk5OTk5OTtzdHJva2UtbGluZWNh + cDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoyLjQwMDAwMDE7 + c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icGF0aDIx + NjQiCiAgICAgICBzb2RpcG9kaTpzaWRlcz0iNCIKICAgICAgIHNvZGlwb2RpOmN4PSIxNjguNTcx + NDMiCiAgICAgICBzb2RpcG9kaTpjeT0iMTAzLjc5MDc1IgogICAgICAgc29kaXBvZGk6cjE9IjEy + Ljc3NzUzMSIKICAgICAgIHNvZGlwb2RpOnIyPSI5LjAzNTA3OSIKICAgICAgIHNvZGlwb2RpOmFy + ZzE9IjAuNDYzNjQ3NjEiCiAgICAgICBzb2RpcG9kaTphcmcyPSIxLjI0OTA0NTgiCiAgICAgICBp + bmtzY2FwZTpmbGF0c2lkZWQ9InRydWUiCiAgICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwLjYiCiAg + ICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSItMC4wNDYiCiAgICAgICBkPSJNIDE4MC40MDMwNSwx + MDguOTIwODUgQyAxNzUuNDEwNDMsMTE4LjQ4Mjk5IDE3Mi45ODcyOCwxMjAuMDAxMzkgMTYzLjE2 + MTMyLDExNS42NTczOCBDIDE1My4zMzUzNywxMTEuMzEzMzggMTUyLjgzNzQsMTA3LjkyODg0IDE1 + Ny4zNjU2OSw5Ny45MDE4MzcgQyAxNjEuODkzOTgsODcuODc0ODMxIDE2NS4zNDM2Nyw4Ni44NzA2 + NDIgMTc0LjYwNjIxLDkyLjIzOTI4NiBDIDE4My44Njg3NSw5Ny42MDc5MyAxODUuMzk1NjcsOTku + MzU4NzExIDE4MC40MDMwNSwxMDguOTIwODUgeiAiIC8+CiAgPC9nPgo8L3N2Zz4K + +notes: Implementation or additional usage notes go here. +bugs: # this can be just for documentation, or the tool may disclose it to help user avoid pitfalls + - need to do some speed improvement. + +parameters: + - identifier: maxdiameter + title: Maximal Diameter + type: integer + description: Maximal diameter of a dust piece + readonly: no + required: yes + minimum: 0 + maximum: 100 + default: 2 + mutable: no + widget: spinner + unit: % + + - identifier: maxcount + title: Maximal number of dust + type: integer + description: How many dust pieces are on the image + readonly: no + required: yes + minimum: 0 + maximum: 400 + default: 10 + mutable: no + widget: spinner + diff --git a/src/modules/oldfilm/filter_grain.c b/src/modules/oldfilm/filter_grain.c index 7557dd4..296da5a 100644 --- a/src/modules/oldfilm/filter_grain.c +++ b/src/modules/oldfilm/filter_grain.c @@ -23,7 +23,8 @@ #include #include #include - +#define MIN(a,b) (ab?a:b) static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format *format, int *width, int *height, int writable ) { @@ -35,19 +36,30 @@ static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format * { int h = *height; int w = *width; - + + mlt_position in = mlt_filter_get_in( filter ); + mlt_position out = mlt_filter_get_out( filter ); + mlt_position time = mlt_frame_get_position( this ); + double position = ( double )( time - in ) / ( double )( out - in + 1 ); + srand(position*10000); + int noise = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "noise" ); + double contrast = mlt_properties_get_double( MLT_FILTER_PROPERTIES( filter ), "contrast" )/100.0; + double brightness = 127.0 * (mlt_properties_get_double( MLT_FILTER_PROPERTIES( filter ), "brightness" )-100.0)/100.0; + int x=0,y=0,pix=0; for (x=0;x20){ - pix=(*pixel)-(rand()%noise-noise); - if (pix>0 && pix<255) - *pixel=pix; + pix= MIN ( MAX ( ( (double)*pixel -127.0 ) * contrast + 127.0 + brightness , 0 ) , 255 ) ; + if (noise>0) + pix-=(rand()%noise-noise); + + *pixel= MIN ( MAX ( pix , 0 ) , 255 ); } + //*(pixel+1)= MIN ( MAX ( ( (double)*(pixel+1) -127.0 ) * .5 + 127.0 , 0 ) , 255 ) ; } - } return error; @@ -67,8 +79,9 @@ mlt_filter filter_grain_init( mlt_profile profile, mlt_service_type type, const { this->process = filter_process; mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "noise", "40" ); + mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "contrast", "160" ); + mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "brightness", "70" ); } return this; } - diff --git a/src/modules/oldfilm/filter_grain.yml b/src/modules/oldfilm/filter_grain.yml new file mode 100644 index 0000000..c8a3733 --- /dev/null +++ b/src/modules/oldfilm/filter_grain.yml @@ -0,0 +1,132 @@ +schema_version: 0.1 +type: filter # consumer, filter, producer, or transition +identifier: grain +title: Grain +version: 0.2.5 +copyright: Copyright (C) 2008 Marco Gittler +license: GPL +language: en +url: none +creator: Marco Gittler +contributor: + - Marco Gittler +tags: + - Video # this may produce video +description: Grain over the Image +icon: + filename: oldfilm/grain.svg # relative to $MLT_DATA/modules/ + content-type: image/svg + content-encoding: base64 + content: | + PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjwh + LS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8 + c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1s + bnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8v + d3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6 + Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9z + dmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RU + RC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUu + b3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSI2OC41ODY1NDgiCiAgIGhlaWdodD0i + NTcuMTQyODY4IgogICBpZD0ic3ZnMjI2NyIKICAgc29kaXBvZGk6dmVyc2lvbj0iMC4zMiIKICAg + aW5rc2NhcGU6dmVyc2lvbj0iMC40NS4xIgogICBzb2RpcG9kaTpkb2NiYXNlPSIvaG9tZS9tYXJj + by9tbHQtc3ZuL21sdC9zcmMvbW9kdWxlcy9vbGRmaWxtIgogICBzb2RpcG9kaTpkb2NuYW1lPSJn + cmFpLnN2ZyIKICAgdmVyc2lvbj0iMS4wIgogICBpbmtzY2FwZTpvdXRwdXRfZXh0ZW5zaW9uPSJv + cmcuaW5rc2NhcGUub3V0cHV0LnN2Zy5pbmtzY2FwZSI+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwog + ICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0i + IzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNp + dHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209 + IjAuODI2ODc1MDEiCiAgICAgaW5rc2NhcGU6Y3g9IjU0Ny4zNDkyMiIKICAgICBpbmtzY2FwZTpj + eT0iLTUxLjE0OTk3NiIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5r + c2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0i + MTE5NSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI3NDIiCiAgICAgaW5rc2NhcGU6d2lu + ZG93LXg9IjMxNSIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMTQ0IiAvPgogIDxkZWZzCiAgICAg + aWQ9ImRlZnMyMjY5IiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTIyNzIiPgogICAg + PHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8 + ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAg + ICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1h + Z2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxn + CiAgICAgaW5rc2NhcGU6bGFiZWw9IkViZW5lIDEiCiAgICAgaWQ9ImxheWVyMSIKICAgICBpbmtz + Y2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00OS4zNzI2 + MzUsLTE0NC4yMTQwMikiPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNjgwODUx + MDY7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpu + b25lO3N0cm9rZS13aWR0aDoyLjU5OTk5OTk7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGlu + ZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6Mi40MDAwMDAxO3N0cm9rZS1kYXNoYXJyYXk6 + bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgaWQ9InJlY3QzMzA4IgogICAgICAgd2lkdGg9 + IjIyLjg1NzE0MyIKICAgICAgIGhlaWdodD0iMjguNTcxNDI4IgogICAgICAgeD0iNDkuMzcyNjM1 + IgogICAgICAgeT0iMTQ0LjIxNDAyIiAvPgogICAgPHJlY3QKICAgICAgIHk9IjE0NC4yMTQwNCIK + ICAgICAgIHg9IjcyLjE5OTU0NyIKICAgICAgIGhlaWdodD0iMjguNTcxNDI4IgogICAgICAgd2lk + dGg9IjIyLjg1NzE0MyIKICAgICAgIGlkPSJyZWN0MzMxMCIKICAgICAgIHN0eWxlPSJvcGFjaXR5 + OjAuNjgwODUxMDY7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjYzMzgwMjgzO2ZpbGwtcnVs + ZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyLjU5OTk5OTk7c3Ryb2tlLWxpbmVj + YXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6Mi40MDAwMDAx + O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPgogICAgPHJlY3QKICAg + ICAgIHN0eWxlPSJvcGFjaXR5OjAuNjgwODUxMDY7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTow + LjEwNTYzMzc4O2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyLjU5 + OTk5OTk7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1p + dGVybGltaXQ6Mi40MDAwMDAxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eTox + IgogICAgICAgaWQ9InJlY3QzMzEyIgogICAgICAgd2lkdGg9IjIyLjg1NzE0MyIKICAgICAgIGhl + aWdodD0iMjguNTcxNDI4IgogICAgICAgeD0iOTUuMDI2NDUxIgogICAgICAgeT0iMTQ0LjIxNDA0 + IiAvPgogICAgPHJlY3QKICAgICAgIHk9IjE3Mi43ODU0NiIKICAgICAgIHg9Ijk1LjEwMjA0MyIK + ICAgICAgIGhlaWdodD0iMjguNTcxNDI4IgogICAgICAgd2lkdGg9IjIyLjg1NzE0MyIKICAgICAg + IGlkPSJyZWN0MzMxNCIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTQ2ODA4NTI7ZmlsbDojMDAw + MDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13 + aWR0aDoyLjU5OTk5OTk7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7 + c3Ryb2tlLW1pdGVybGltaXQ6Mi40MDAwMDAxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Ut + b3BhY2l0eToxIiAvPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNjgwODUxMDY7 + ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25l + O3N0cm9rZS13aWR0aDoyLjU5OTk5OTk7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpv + aW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6Mi40MDAwMDAxO3N0cm9rZS1kYXNoYXJyYXk6bm9u + ZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgaWQ9InJlY3QzMzE2IgogICAgICAgd2lkdGg9IjIy + Ljg1NzE0MyIKICAgICAgIGhlaWdodD0iMjguNTcxNDI4IgogICAgICAgeD0iNzIuMjc1MTM5Igog + ICAgICAgeT0iMTcyLjc4NTQ2IiAvPgogICAgPHJlY3QKICAgICAgIHk9IjE3Mi43ODU0NiIKICAg + ICAgIHg9IjQ5LjQ0ODIzMSIKICAgICAgIGhlaWdodD0iMjguNTcxNDI4IgogICAgICAgd2lkdGg9 + IjIyLjg1NzE0MyIKICAgICAgIGlkPSJyZWN0MzMxOCIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAu + NDE0ODkzNjY7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0 + cm9rZTpub25lO3N0cm9rZS13aWR0aDoyLjU5OTk5OTk7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJv + a2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6Mi40MDAwMDAxO3N0cm9rZS1kYXNo + YXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPgogIDwvZz4KICA8ZwogICAgIGlkPSJnMjI5 + MyIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlua3NjYXBlOmxhYmVsPSJm + aWxsIHRleHQiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQ5LjM3MjYzNSwtMTQ0LjIxNDAy + KSIgLz4KPC9zdmc+Cg== + +notes: Implementation or additional usage notes go here. +bugs: # this can be just for documentation, or the tool may disclose it to help user avoid pitfalls + - need to do some speed improvement. + +parameters: + - identifier: noise + title: Noise + type: integer + description: Maximal value of noise + readonly: no + required: yes + minimum: 0 + maximum: 200 + default: 40 + mutable: no + widget: spinner + unit: % + + - identifier: contrast + title: Contrast + type: integer + description: Adjust contrast for the image + readonly: no + required: yes + minimum: 0 + maximum: 400 + default: 160 + mutable: no + widget: spinner + + - identifier: brightness + title: Brightness + type: integer + description: Adjust brightness for the image + readonly: no + required: yes + minimum: 0 + maximum: 400 + default: 70 + mutable: no + widget: spinner diff --git a/src/modules/oldfilm/filter_lines.c b/src/modules/oldfilm/filter_lines.c index 5094916..7d3e415 100644 --- a/src/modules/oldfilm/filter_lines.c +++ b/src/modules/oldfilm/filter_lines.c @@ -24,7 +24,6 @@ #include #include - static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format *format, int *width, int *height, int writable ) { @@ -36,42 +35,75 @@ static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format * int h = *height; int w = *width; - int width = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "width" ); + int width_line = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "width" ); int num = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "num" ); + double maxdarker= (double)mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "darker" ) ; + double maxlighter=(double)mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "lighter" ) ; //int frame = mlt_properties_get_int( this, "_position" ); - char buf[1024]; + char buf[256]; + char typebuf[256]; + + mlt_position in = mlt_filter_get_in( filter ); + mlt_position out = mlt_filter_get_out( filter ); + mlt_position time = mlt_frame_get_position( this ); + double position = ( double )( time - in ) / ( double )( out - in + 1 ); + srand(position*10000); + if (!width_line) + return 0; while (num--){ + int type=(rand()%3)+1; + int x1=(double)w*rand()/RAND_MAX; + int dx=rand()%width_line; + int x=0,y=0; + int ystart=rand()%h; + int yend=rand()%h; + sprintf(buf,"line%d",num); + sprintf(typebuf,"typeline%d",num); + maxlighter+=rand()%30-15; + maxdarker+=rand()%30-15; - int type=rand()%2; - int x1=rand()%w;; - int dx=rand()%width; - /*int xx=mlt_properties_get_int(MLT_PRODUCER_PROPERTIES(mlt_frame_get_original_producer( this ),buf); - if (xx==0){ - mlt_properties_set_int(this,buf,x1); - //x1=100; + if (mlt_properties_get_int(MLT_FILTER_PROPERTIES( filter ),buf)==0){ + mlt_properties_set_int(MLT_FILTER_PROPERTIES( filter ),buf,x1); } - x1=mlt_properties_get_int(this,buf)+5; - */ - int x=0,y=0,pix=0; - for (x=-dx;x0){ uint8_t* pixel=(*image+(y)*w*2+(x+x1)*2); + double diff=1.0-fabs(x)/dx; switch(type){ - case 0: - pix=(*pixel)*abs(x)/dx; - *pixel=pix; + case 1: //blackline + *pixel-=((double)*pixel*diff*maxdarker/100.0); break; - case 1: - pix=(*pixel)+((255-*pixel)*abs(x)/dx); - *pixel=pix; + case 2: //whiteline + *pixel+=((255.0-(double)*pixel)*diff*maxlighter/100.0); break; + case 3: //greenline + *(pixel+1)-=((*(pixel+1))*diff*maxlighter/100.0); + break; } } + mlt_properties_set_int(MLT_FILTER_PROPERTIES( filter ),buf,x1); } + mlt_properties_set_double(MLT_FILTER_PROPERTIES( filter ),"last_oldfilm_line_pos",position); } return error; @@ -93,6 +125,8 @@ mlt_filter filter_lines_init( mlt_profile profile, mlt_service_type type, const this->process = filter_process; mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "width", "2" ); mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "num", "5" ); + mlt_properties_set_int( MLT_FILTER_PROPERTIES( this ), "darker" , 40 ) ; + mlt_properties_set_int( MLT_FILTER_PROPERTIES( this ), "lighter" , 40 ) ; } return this; } diff --git a/src/modules/oldfilm/filter_lines.yml b/src/modules/oldfilm/filter_lines.yml new file mode 100644 index 0000000..1df4044 --- /dev/null +++ b/src/modules/oldfilm/filter_lines.yml @@ -0,0 +1,118 @@ +schema_version: 0.1 +type: filter # consumer, filter, producer, or transition +identifier: lines +title: Scratchlines +version: 0.2.5 +copyright: Copyright (C) 2008 Marco Gittler +license: GPL +language: en +url: none +creator: Marco Gittler +contributor: + - Marco Gittler +tags: + - Video # this may produce video +description: Scratchlines over the Picture +icon: + filename: oldfilm/lines.svg # relative to $MLT_DATA/modules/ + content-type: image/svg + content-encoding: base64 + content: | + PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjwh + LS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8 + c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1s + bnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8v + d3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6 + Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9z + dmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RU + RC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUu + b3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMzguMTQyODUiCiAgIGhlaWdodD0i + Mjc1LjI4NTcxIgogICBpZD0ic3ZnMjI1MSIKICAgc29kaXBvZGk6dmVyc2lvbj0iMC4zMiIKICAg + aW5rc2NhcGU6dmVyc2lvbj0iMC40NS4xIgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRv + Y2Jhc2U9Ii9ob21lL21hcmNvL21sdC1zdm4vbWx0L3NyYy9tb2R1bGVzL29sZGZpbG0iCiAgIHNv + ZGlwb2RpOmRvY25hbWU9Imxpbi5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9y + Zy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzMjI1 + MyIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9y + PSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9 + IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2Vz + aGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMC4zNSIKICAgICBpbmtzY2FwZTpjeD0iMzUw + IgogICAgIGlua3NjYXBlOmN5PSI2Mi44NTcxNDMiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5p + dHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBpbmtzY2Fw + ZTp3aW5kb3ctd2lkdGg9Ijc5NyIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI1ODYiCiAg + ICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjAiIC8+CiAg + PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMjI1NiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNj + OldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3Zn + K3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNl + PSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpX + b3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJl + bD0iRWJlbmUgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXll + cjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEyOC4wNzE0MywtMjE3LjU3NjQ3KSI+CiAg + ICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6 + IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVq + b2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDE4MCwyMjMuNzkwNzUgTCAx + ODAsNDkyLjM2MjE4IgogICAgICAgaWQ9InBhdGgyMjYxIiAvPgogICAgPHBhdGgKICAgICAgIHN0 + eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdp + ZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Ut + b3BhY2l0eToxIgogICAgICAgZD0iTSAyNjUuNzE0MjksMjE4LjA3NjQ3IEwgMjY1LjcxNDI5LDM4 + OS41MDUwNCIKICAgICAgIGlkPSJwYXRoMjI2MyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0i + ZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDox + cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNp + dHk6MSIKICAgICAgIGQ9Ik0gMTI4LjU3MTQzLDMwOS41MDUwNCBMIDEyOC41NzE0Myw0NDAuOTMz + NjEiCiAgICAgICBpZD0icGF0aDIyNjUiIC8+CiAgPC9nPgo8L3N2Zz4K + +notes: Implementation or additional usage notes go here. +bugs: # this can be just for documentation, or the tool may disclose it to help user avoid pitfalls + - need to do some speed improvement. + +parameters: + - identifier: width + title: Width of line + type: integer + description: Linewidth in picture + readonly: no + required: yes + minimum: 0 + maximum: 100 + default: 2 + mutable: no + widget: spinner + unit: pixel + + - identifier: num + title: Max number of lines + type: integer + description: Maximal number of lines in picture + readonly: no + required: yes + minimum: 0 + maximum: 100 + default: 5 + mutable: no + widget: spinner + unit: lines + + - identifier: darker + title: Max darker + type: integer + description: Make image up to n values darker behind line + readonly: no + required: yes + minimum: 0 + maximum: 100 + default: 40 + mutable: no + widget: spinner + + - identifier: lighter + title: Max lighter + type: integer + description: Make image up to n values lighter behind line + readonly: no + required: yes + minimum: 0 + maximum: 100 + default: 40 + mutable: no + widget: spinner + + diff --git a/src/modules/oldfilm/filter_oldfilm.c b/src/modules/oldfilm/filter_oldfilm.c index 18fcd12..11a6c3e 100644 --- a/src/modules/oldfilm/filter_oldfilm.c +++ b/src/modules/oldfilm/filter_oldfilm.c @@ -38,12 +38,31 @@ static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format * int x=0; int y=0; - // Get u and v values + + mlt_position in = mlt_filter_get_in( filter ); + mlt_position out = mlt_filter_get_out( filter ); + mlt_position time = mlt_frame_get_position( this ); + double position = ( double )( time - in ) / ( double )( out - in + 1 ); + srand(position*10000); + int delta = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "delta" ); int every = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "every" ); - int diffpic=rand()%delta*2-delta; + + int bdu = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "brightnessdelta_up" ); + int bdd = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "brightnessdelta_down" ); + int bevery = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "brightnessdelta_every" ); + + int diffpic=0; + if (delta) + diffpic=rand()%delta*2-delta; + + int brightdelta=0; + if ((bdu+bdd)!=0) + brightdelta=rand()%(bdu+bdd)-bdd; if (rand()%100>every) diffpic=0; + if (rand()%100>bevery) + brightdelta=0; int yend,ydiff; if (diffpic<=0){ y=h; @@ -54,16 +73,40 @@ static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format * yend=h; ydiff=1; } + while(y!=yend){ + //int newy=y+diffpic; for (x=0;x0 && y+diffpic0 && newyw)?w-x:-1; + int randy=((newy)<=frameborder)?(newy):((newy)+frameborder>h)?h-(y+diffpic):-1; + if (randx>=0 ){ + oldval=oldval*pow(((double)randx/(double)frameborder),1.5); + } + if (randy>=0 ){ + oldval=oldval*pow(((double)randy/(double)frameborder),1.5); + } + if (randx>=0 && randy>=0){ + //oldval=oldval*(randx*randy)/500.0; + } + */ + if ( ((int) oldval + brightdelta ) >255) + *pic=255; + else if ( ( (int) oldval+brightdelta ) <0){ + *pic=0; + }else + *pic=oldval+brightdelta; *(pic+1)=*(pic+diffpic*w*2+1); + }else{ *pic=0; - *(pic+1)=127; + //*(pic-1)=127; } + } y+=ydiff; } @@ -86,8 +129,11 @@ mlt_filter filter_oldfilm_init( mlt_profile profile, mlt_service_type type, cons if ( this != NULL ) { this->process = filter_process; - mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "delta", "20" ); - mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "every", "80" ); + mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "delta", "14" ); + mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "every", "20" ); + mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "brightnessdelta_up" , "20" ); + mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "brightnessdelta_down" , "30" ); + mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "brightnessdelta_every" , "70" ); } return this; } diff --git a/src/modules/oldfilm/filter_oldfilm.yml b/src/modules/oldfilm/filter_oldfilm.yml new file mode 100644 index 0000000..1f22e71 --- /dev/null +++ b/src/modules/oldfilm/filter_oldfilm.yml @@ -0,0 +1,129 @@ +schema_version: 0.1 +type: filter # consumer, filter, producer, or transition +identifier: oldfilm +title: Oldfilm +version: 0.2.5 +copyright: Copyright (C) 2008 Marco Gittler +license: GPL +language: en +url: none +creator: Marco Gittler +contributor: + - Marco Gittler +tags: + - Video # this may produce video +description: Moves the Picture up and down and random brightness change +icon: + filename: oldfilm/oldfilm.svg # relative to $MLT_DATA/modules/ + content-type: image/svg + content-encoding: base64 + content: | + PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjwh + LS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8 + c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1s + bnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8v + d3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6 + Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9z + dmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RU + RC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUu + b3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIzMjAiCiAgIGhlaWdodD0iMjAwIgog + ICBpZD0ic3ZnMiIKICAgc29kaXBvZGk6dmVyc2lvbj0iMC4zMiIKICAgaW5rc2NhcGU6dmVyc2lv + bj0iMC40NS4xIgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY2Jhc2U9Ii9ob21lL21h + cmNvL21sdC1zdm4vbWx0L3NyYy9tb2R1bGVzL29sZGZpbG0iCiAgIHNvZGlwb2RpOmRvY25hbWU9 + Im9sZC5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRw + dXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCIgLz4KICA8c29kaXBvZGk6 + bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJv + cmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2Fw + ZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5r + c2NhcGU6em9vbT0iMC4zNSIKICAgICBpbmtzY2FwZTpjeD0iMzUwIgogICAgIGlua3NjYXBlOmN5 + PSI1MjAiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1 + cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjExODEiCiAg + ICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODIyIgogICAgIGlua3NjYXBlOndpbmRvdy14PSI0 + MDIiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjEyNCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0i + bWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJv + dXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAg + ICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9k + Y21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAg + PC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJFYmVuZSAxIgogICAgIGlua3Nj + YXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRy + YW5zbGF0ZSgtNDUuNzE0Mjg3LC0xMjAuOTMzNjEpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0i + b3BhY2l0eTowLjQxNDg5MzY2O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6 + bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41OTk5OTk5O3N0cm9rZS1saW5lY2Fw + OmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjIuNDAwMDAwMTtz + dHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0MjE2 + MCIKICAgICAgIHdpZHRoPSIzMjAiCiAgICAgICBoZWlnaHQ9IjIwMCIKICAgICAgIHg9IjQ1Ljcx + NDI4NyIKICAgICAgIHk9IjEyMC45MzM2MSIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0ib3Bh + Y2l0eTowLjQxNDg5MzY2O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9u + emVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41OTk5OTk5O3N0cm9rZS1saW5lY2FwOmJ1 + dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjIuNDAwMDAwMTtzdHJv + a2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0MjE2MiIK + ICAgICAgIHdpZHRoPSIyNjguNTcxNDQiCiAgICAgICBoZWlnaHQ9IjE3MS40Mjg1NyIKICAgICAg + IHg9Ijc0LjI4NTcxMyIKICAgICAgIHk9IjE0OS41MDUwNCIgLz4KICA8L2c+Cjwvc3ZnPgo= + +notes: Implementation or additional usage notes go here. +bugs: # this can be just for documentation, or the tool may disclose it to help user avoid pitfalls + - need to do some speed improvement. + +parameters: + - identifier: delta + title: Y-Delta + type: integer + description: Maximum delta value of Up/Down move + readonly: no + required: yes + minimum: 0 + maximum: 400 + default: 14 + mutable: no + widget: spinner + unit: pixel + + - identifier: every + title: % of picture have a delta + type: integer + description: n'th % have a Y-Delta in picture + readonly: no + required: yes + minimum: 0 + maximum: 100 + default: 20 + mutable: no + widget: spinner + unit: % + + - identifier: brightnessdelta_up + title: Brightness up + type: integer + description: Makes image n values lighter + readonly: no + required: yes + minimum: 0 + maximum: 100 + default: 20 + mutable: no + widget: spinner + + - identifier: brightnessdelta_down + title: Brightness down + type: integer + description: Makes image n values darker + readonly: no + required: yes + minimum: 0 + maximum: 100 + default: 20 + mutable: no + widget: spinner + + - identifier: brightnessdelta_every + title: Brightness every + type: integer + description: Change value only for n/100 + readonly: no + required: yes + minimum: 0 + maximum: 100 + default: 70 + mutable: no + widget: spinner + unit: % diff --git a/src/modules/oldfilm/filter_tcolor.c b/src/modules/oldfilm/filter_tcolor.c new file mode 100644 index 0000000..824f107 --- /dev/null +++ b/src/modules/oldfilm/filter_tcolor.c @@ -0,0 +1,85 @@ +/* + * filter_tcolor.c -- tcolor filter + * Copyright (c) 2007 Marco Gittler + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include + +#include +#include +#include + +#define MIN(a,b) (aprocess = filter_process; + mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "oversaturate_cr", "190" ); + mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "oversaturate_cb", "190" ); + } + return this; +} + + diff --git a/src/modules/oldfilm/filter_tcolor.yml b/src/modules/oldfilm/filter_tcolor.yml new file mode 100644 index 0000000..27f4f61 --- /dev/null +++ b/src/modules/oldfilm/filter_tcolor.yml @@ -0,0 +1,102 @@ +schema_version: 0.1 +type: filter # consumer, filter, producer, or transition +identifier: tcolor +title: Technicolor +version: 0.2.5 +copyright: Copyright (C) 2008 Marco Gittler +license: GPL +language: en +url: none +creator: Marco Gittler +contributor: + - Marco Gittler +tags: + - Video # this may produce video +description: Oversaturate the Color in Video, like in old Technicolor movies +icon: +filename: oldfilm/tcolor.svg # relative to $MLT_DATA/modules/ + content-type: image/svg + content-encoding: base64 + content: | + PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjwh + LS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8 + c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1s + bnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8v + d3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6 + Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9z + dmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RU + RC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUu + b3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIyMTBtbSIKICAgaGVpZ2h0PSIyOTdt + bSIKICAgaWQ9InN2ZzIiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZl + cnNpb249IjAuNDUuMSIKICAgc29kaXBvZGk6ZG9jYmFzZT0iL2hvbWUvbWFyY28vbWx0LXN2bi9t + bHQvc3JjL21vZHVsZXMvb2xkZmlsbSIKICAgc29kaXBvZGk6ZG9jbmFtZT0idGNvbC5zdmciCiAg + IGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3Nj + YXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2Fw + ZTpzdG9ja2lkPSJBcnJvdzFMZW5kIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0i + MC4wIgogICAgICAgcmVmWD0iMC4wIgogICAgICAgaWQ9IkFycm93MUxlbmQiCiAgICAgICBzdHls + ZT0ib3ZlcmZsb3c6dmlzaWJsZTsiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDQxMTEi + CiAgICAgICAgIGQ9Ik0gMC4wLDAuMCBMIDUuMCwtNS4wIEwgLTEyLjUsMC4wIEwgNS4wLDUuMCBM + IDAuMCwwLjAgeiAiCiAgICAgICAgIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAw + MDAwMDtzdHJva2Utd2lkdGg6MS4wcHQ7bWFya2VyLXN0YXJ0Om5vbmU7IgogICAgICAgICB0cmFu + c2Zvcm09InNjYWxlKDAuOCkgcm90YXRlKDE4MCkgdHJhbnNsYXRlKDEyLjUsMCkiIC8+CiAgICA8 + L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgog + ICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBi + b3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBp + bmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjMuNTg0Mzk0NiIKICAg + ICBpbmtzY2FwZTpjeD0iODguNTcxNDMiCiAgICAgaW5rc2NhcGU6Y3k9IjgyNS43MTQyOCIKICAg + ICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXll + cj0ibGF5ZXIxIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTEyMSIKICAgICBpbmtzY2Fw + ZTp3aW5kb3ctaGVpZ2h0PSI1ODYiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjU1MSIKICAgICBp + bmtzY2FwZTp3aW5kb3cteT0iMjM5IiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTci + PgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAg + ICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlw + ZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0 + aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRh + PgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkViZW5lIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBt + b2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0ib3Bh + Y2l0eToxO2ZpbGw6IzkxMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJv + a2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41OTk5OTk5O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tl + LWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDIxNjAiCiAg + ICAgICB3aWR0aD0iNTIuMzcwMzczIgogICAgICAgaGVpZ2h0PSIxMDIuODU3MTQiCiAgICAgICB4 + PSI0Mi44NTcxNDMiCiAgICAgICB5PSIxNzUuMjE5MzMiIC8+CiAgICA8cmVjdAogICAgICAgeT0i + MTc1LjIxOTMzIgogICAgICAgeD0iOTQuNDY5NzU3IgogICAgICAgaGVpZ2h0PSIxMDIuODU3MTQi + CiAgICAgICB3aWR0aD0iNjEuMDE4OTc0IgogICAgICAgaWQ9InJlY3QyMTYyIgogICAgICAgc3R5 + bGU9Im9wYWNpdHk6MTtmaWxsOiNmZjAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5v + ZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuNTk5OTk5OTtzdHJva2UtbWl0ZXJsaW1pdDo0 + O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPgogICAgPHBhdGgKICAg + ICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7 + c3Ryb2tlLXdpZHRoOjIuNTk5OTk5OTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9p + bjptaXRlcjtzdHJva2Utb3BhY2l0eToxO21hcmtlci1zdGFydDpub25lO21hcmtlci1lbmQ6dXJs + KCNBcnJvdzFMZW5kKTtzdHJva2UtbWl0ZXJsaW1pdDoyLjQ7c3Ryb2tlLWRhc2hhcnJheTpub25l + O2ZpbGwtb3BhY2l0eToxO29wYWNpdHk6MC42ODA4NTEwNiIKICAgICAgIGQ9Ik0gNjYuMzk4OTQs + MjI0LjYwNzMzIEMgMTIzLjg3MDI5LDIyNC42MDczMyAxMjMuODcwMjksMjI0LjYwNzMzIDEyMy44 + NzAyOSwyMjQuNjA3MzMiCiAgICAgICBpZD0icGF0aDMxMzQiIC8+CiAgPC9nPgo8L3N2Zz4K + +notes: Implementation or additional usage notes go here. +bugs: # this can be just for documentation, or the tool may disclose it to help user avoid pitfalls + - need to do some speed improvement. + +parameters: + - identifier: oversaturate_cr # 'argument' is a reserved name for a value supplied to the factory + title: Blue/Yellow- axis + type: integer + description: Adjust factor for Blue/Yellow axis + readonly: no + required: yes + minimum: -400 + maximum: 400 + default: 190 + mutable: no + widget: spinner + + - identifier: oversaturate_cb + title: Red/Green-axis + type: integer + description: Adjust factor for Red/Green axis + readonly: no + required: yes + minimum: -400 + maximum: 400 + default: 190 + mutable: no + widget: spinner diff --git a/src/modules/oldfilm/filter_vignette.c b/src/modules/oldfilm/filter_vignette.c new file mode 100644 index 0000000..0574b20 --- /dev/null +++ b/src/modules/oldfilm/filter_vignette.c @@ -0,0 +1,140 @@ +/* + * filter_vignette.c -- vignette filter + * Copyright (c) 2007 Marco Gittler + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include + +#include +#include +#include +#define MIN(a,b) (a0.0) + max_opac=100.0/opac; + + for (y=0;y0.001 && sigx>-10.0 && sigx<10.0){ + delta=pow2[((int)((sigx+10)*SIGMOD_STEPS/20))]; + }else if (smooth>0.001 && sigx>10.0){ + continue; + }else{ + delta=255.0; + } + if ( max_opacprocess = filter_process; + mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "start", "80:50:50x50:0" ); + //mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "end", "" ); + + } + return this; +} + + diff --git a/src/modules/oldfilm/filter_vignette.yml b/src/modules/oldfilm/filter_vignette.yml new file mode 100644 index 0000000..04b2bc3 --- /dev/null +++ b/src/modules/oldfilm/filter_vignette.yml @@ -0,0 +1,102 @@ +schema_version: 0.1 +type: filter # consumer, filter, producer, or transition +identifier: vignette +title: Vignette Effect +version: 0.2.5 +copyright: Copyright (C) 2008 Marco Gittler +license: GPL +language: en +url: none +creator: Marco Gittler +contributor: + - Marco Gittler +tags: + - Video # this may produce video +description: | + Vigentte around a point with adjustable smooth, radius, position + and transparency +icon: +filename: oldfilm/vignette.svg # relative to $MLT_DATA/modules/ + content-type: image/svg + content-encoding: base64 # could also be hex or none if inline SVG + content: | + PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjwh + LS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8 + c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1s + bnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8v + d3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6 + Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9z + dmciCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxu + czpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGkt + MC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3Bh + Y2VzL2lua3NjYXBlIgogICB3aWR0aD0iMjUxLjQyODU3IgogICBoZWlnaHQ9IjE4OC41NzE0MyIK + ICAgaWQ9InN2ZzIxODIiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZl + cnNpb249IjAuNDUuMSIKICAgdmVyc2lvbj0iMS4wIgogICBzb2RpcG9kaTpkb2NiYXNlPSIvaG9t + ZS9tYXJjby9tbHQtc3ZuL21sdC9zcmMvbW9kdWxlcy9vbGRmaWxtIgogICBzb2RpcG9kaTpkb2Nu + YW1lPSJ2aWcuc3ZnIgogICBpbmtzY2FwZTpvdXRwdXRfZXh0ZW5zaW9uPSJvcmcuaW5rc2NhcGUu + b3V0cHV0LnN2Zy5pbmtzY2FwZSI+CiAgPGRlZnMKICAgICBpZD0iZGVmczIxODQiPgogICAgPGxp + bmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMTY1Ij4KICAgICAgPHN0b3AK + ICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAg + ICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzMTY3IiAvPgogICAgICA8c3RvcAogICAg + ICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjk4NjY2NjY4OyIK + ICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDMxNjkiIC8+CiAgICA8L2xpbmVh + ckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJh + bHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMTY1IgogICAgICAgaWQ9 + InJhZGlhbEdyYWRpZW50MzE3MSIKICAgICAgIGN4PSIyMjguNTcxNDMiCiAgICAgICBjeT0iMzAw + LjkzMzYyIgogICAgICAgZng9IjIyOC41NzE0MyIKICAgICAgIGZ5PSIzMDAuOTMzNjIiCiAgICAg + ICByPSI3Ny4xNDI4NiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMC45 + MjU5MjU5LDAsMjIuMjkxMzgzKSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNl + IiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAg + cGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRl + cm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3Nj + YXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMC4zNSIKICAgICBpbmtzY2Fw + ZTpjeD0iMzUwIgogICAgIGlua3NjYXBlOmN5PSItMTc2LjA0ODg4IgogICAgIGlua3NjYXBlOmRv + Y3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAg + ICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI3OTciCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdo + dD0iNTg2IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15 + PSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTIxODciPgogICAgPHJkZjpSREY+ + CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0 + PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJk + ZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAg + ICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5r + c2NhcGU6bGFiZWw9IkViZW5lIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAg + ICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMDUuNzE0MjksLTE5NS4y + MTkzMykiPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTUwMzU0NjY7ZmlsbDoj + MDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9r + ZS13aWR0aDoyLjU5OTk5OTk7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0 + ZXI7c3Ryb2tlLW1pdGVybGltaXQ6Mi40MDAwMDAxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJv + a2Utb3BhY2l0eToxIgogICAgICAgaWQ9InJlY3QyMTkwIgogICAgICAgd2lkdGg9IjI1MS40Mjg1 + NyIKICAgICAgIGhlaWdodD0iMTg4LjU3MTQzIgogICAgICAgeD0iMTA1LjcxNDI5IgogICAgICAg + eT0iMTk1LjIxOTMzIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAg + ICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MzE3MSk7ZmlsbC1v + cGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuNTk5 + OTk5OTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0 + ZXJsaW1pdDoyLjQwMDAwMDE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEi + CiAgICAgICBpZD0icGF0aDIxOTIiCiAgICAgICBzb2RpcG9kaTpjeD0iMjI4LjU3MTQzIgogICAg + ICAgc29kaXBvZGk6Y3k9IjMwMC45MzM2MiIKICAgICAgIHNvZGlwb2RpOnJ4PSI3Ny4xNDI4NiIK + ICAgICAgIHNvZGlwb2RpOnJ5PSI3MS40Mjg1NzQiCiAgICAgICBkPSJNIDMwNS43MTQyOSAzMDAu + OTMzNjIgQSA3Ny4xNDI4NiA3MS40Mjg1NzQgMCAxIDEgIDE1MS40Mjg1NywzMDAuOTMzNjIgQSA3 + Ny4xNDI4NiA3MS40Mjg1NzQgMCAxIDEgIDMwNS43MTQyOSAzMDAuOTMzNjIgeiIKICAgICAgIHRy + YW5zZm9ybT0idHJhbnNsYXRlKDAsLTExLjQyODU3MSkiIC8+CiAgPC9nPgo8L3N2Zz4K + +notes: Implementation or additional usage notes go here. +bugs: # this can be just for documentation, or the tool may disclose it to help user avoid pitfalls + - need to do some speed improvement. + +parameters: + - identifier: start # 'argument' is a reserved name for a value supplied to the factory + title: Start value # the title can be used as a label for the widget + type: string + description: Start position, "smooth":"radius","X"x"Y","maxopac" + readonly: no + required: yes + mutable: no + format: %d:%d,%dx%d,%d + + - identifier: end + title: End values + type: string + description: End values for keyframe sequences + readonly: no + mutable: no + format: %d:%d,%dx%d,%d