updated oldfilm module + 2 new filters
authorblendamedt <blendamedt@d19143bc-622f-0410-bfdd-b5b2a6649095>
Thu, 28 Feb 2008 09:43:55 +0000 (09:43 +0000)
committerblendamedt <blendamedt@d19143bc-622f-0410-bfdd-b5b2a6649095>
Thu, 28 Feb 2008 09:43:55 +0000 (09:43 +0000)
git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@1086 d19143bc-622f-0410-bfdd-b5b2a6649095

19 files changed:
src/modules/oldfilm/Makefile
src/modules/oldfilm/dust1.svg [new file with mode: 0644]
src/modules/oldfilm/dust2.svg [new file with mode: 0644]
src/modules/oldfilm/dust3.svg [new file with mode: 0644]
src/modules/oldfilm/dust4.svg [new file with mode: 0644]
src/modules/oldfilm/dust5.svg [new file with mode: 0644]
src/modules/oldfilm/factory.c
src/modules/oldfilm/filter_dust.c
src/modules/oldfilm/filter_dust.yml [new file with mode: 0644]
src/modules/oldfilm/filter_grain.c
src/modules/oldfilm/filter_grain.yml [new file with mode: 0644]
src/modules/oldfilm/filter_lines.c
src/modules/oldfilm/filter_lines.yml [new file with mode: 0644]
src/modules/oldfilm/filter_oldfilm.c
src/modules/oldfilm/filter_oldfilm.yml [new file with mode: 0644]
src/modules/oldfilm/filter_tcolor.c [new file with mode: 0644]
src/modules/oldfilm/filter_tcolor.yml [new file with mode: 0644]
src/modules/oldfilm/filter_vignette.c [new file with mode: 0644]
src/modules/oldfilm/filter_vignette.yml [new file with mode: 0644]

index 353ba6f..d9fe7cb 100644 (file)
@@ -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 (file)
index 0000000..db59d4d
--- /dev/null
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="240"
+   height="217.14285"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   sodipodi:docbase="/home/marco/mlt-svn/mlt/src/modules/oldfilm"
+   sodipodi:docname="dust1.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="350"
+     inkscape:cy="291.42857"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:window-width="797"
+     inkscape:window-height="586"
+     inkscape:window-x="436"
+     inkscape:window-y="136" />
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3134">
+      <stop
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;"
+         id="stop3136" />
+      <stop
+         offset="1"
+         style="stop-color:#001b00;stop-opacity:0;"
+         id="stop3138" />
+    </linearGradient>
+    <radialGradient
+       r="120"
+       id="radialGradient3140"
+       fx="314.28571"
+       fy="352.36218"
+       gradientUnits="userSpaceOnUse"
+       inkscape:collect="always"
+       cy="352.36218"
+       cx="314.28571"
+       xlink:href="#linearGradient3134"
+       gradientTransform="matrix(1,0,0,3.824003,0,-899.71827)" />
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-194.28571,-243.79076)"
+     inkscape:label="Ebene 1"
+     id="layer1"
+     inkscape:groupmode="layer">
+    <path
+       id="path2171"
+       d="M 434.28571,447.71572 L 430.39845,446.98174 L 426.51105,447.70281 L 422.63086,444.95151 L 418.7369,447.33 L 415.17888,439.03832 L 412.09038,427.88049 L 408.04927,427.373 L 404.01654,426.16139 L 399.94798,424.73438 L 396.42874,433.48045 L 392.63006,438.51018 L 388.67834,436.48311 L 385.04569,429.98727 L 381.14982,427.38011 L 377.22038,430.04453 L 373.32102,426.68233 L 369.57046,421.84943 L 366.19199,413.43864 L 362.28568,414.01743 L 358.41557,411.70186 L 354.37205,414.23864 L 350.36416,417.63832 L 346.46571,411.53673 L 343.35113,399.8993 L 339.53706,393.48698 L 335.97202,384.88788 L 331.83892,385.51799 L 327.91078,390.9871 L 323.71372,391.53811 L 319.89063,384.19765 L 316.99236,371.9895 L 314.28571,359.01937 L 310.03453,356.25903 L 306.24091,347.69311 L 302.06907,343.31261 L 297.78709,344.91141 L 293.67116,336.67107 L 291.59835,319.53116 L 287.10897,318.6664 L 283.4444,307.67153 L 280.04266,294.45327 L 276.07896,284.41415 L 271.53901,279.72473 L 266.90066,282.14486 L 262.2405,285.1173 L 257.57444,282.31501 L 253.08029,290.12947 L 250.29693,306.96613 L 245.94295,304.25049 L 241.56118,305.99325 L 236.95654,305.68247 L 233.22692,317.10051 L 228.78363,307.65672 L 224.00778,313.52323 L 220.67578,327.30269 L 216.67116,337.38838 L 216.28682,356.83475 L 214.77646,375.27519 L 210.68738,385.66713 L 208.55789,403.71361 L 204.2669,410.01158 L 200.22848,418.80047 L 195.90418,428.29105 L 194.28571,447.71572 L 198.62042,451.1118 L 202.83258,456.61128 L 207.52564,457.54492 L 211.21379,445.24351 L 215.01113,434.95466 L 219.46816,432.02441 L 222.58281,418.55997 L 224.71894,402.03506 L 228.28989,393.27594 L 232.3716,390.64936 L 235.43763,377.86937 L 239.72488,376.16203 L 243.34806,366.44008 L 247.61567,368.35802 L 251.57005,364.6111 L 255.55167,361.42094 L 259.82848,362.36269 L 263.77023,355.28606 L 267.94113,354.12226 L 272.11574,355.01674 L 274.69118,340.04655 L 278.35161,329.88559 L 282.69754,328.43278 L 286.73607,321.49359 L 290.72647,316.70065 L 294.42096,308.72595 L 298.44502,301.8398 L 300.7415,286.26813 L 303.33482,272.24893 L 307.18187,265.01712 L 311.16529,259.69604 L 314.28571,247.95603 L 317.70857,259.01241 L 321.90346,263.15776 L 324.16016,278.97807 L 328.02132,287.63463 L 330.16565,304.13419 L 334.23472,311.78945 L 337.48222,325.11445 L 342.00603,325.72722 L 343.08521,344.83013 L 346.64696,357.4439 L 351.04337,360.80678 L 354.97171,369.80216 L 358.55898,378.84144 L 362.09284,388.24908 L 364.20762,404.75745 L 368.33325,411.71191 L 372.37551,402.09016 L 376.70855,395.08488 L 381.38937,392.28894 L 385.94136,397.67996 L 390.80528,391.4668 L 395.50331,399.6484 L 399.72846,389.6019 L 402.99765,374.47207 L 407.33054,381.30715 L 410.66368,394.85799 L 415.33507,395.57009 L 419.35168,405.67599 L 421.4868,423.88654 L 425.40104,435.69199 L 430.12905,437.93294 L 434.28571,447.71572"
+       style="opacity:1;fill:url(#radialGradient3140);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:9.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  </g>
+</svg>
diff --git a/src/modules/oldfilm/dust2.svg b/src/modules/oldfilm/dust2.svg
new file mode 100644 (file)
index 0000000..055a1d3
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="194.28572"
+   height="257.14285"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   sodipodi:docbase="/home/marco/mlt-svn/mlt/src/modules/oldfilm"
+   sodipodi:docname="dust2.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ff4f64"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.43137255"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.248863"
+     inkscape:cx="100.71553"
+     inkscape:cy="161.55164"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:window-width="1043"
+     inkscape:window-height="804"
+     inkscape:window-x="387"
+     inkscape:window-y="16" />
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3147">
+      <stop
+         offset="0"
+         style="stop-color:#fffdff;stop-opacity:1;"
+         id="stop3149" />
+      <stop
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0.30222222;"
+         id="stop3151" />
+    </linearGradient>
+    <radialGradient
+       r="97.14286"
+       id="radialGradient3155"
+       fx="274.28571"
+       fy="335.21933"
+       gradientUnits="userSpaceOnUse"
+       inkscape:collect="always"
+       cy="335.21933"
+       cx="274.28571"
+       xlink:href="#linearGradient3147"
+       gradientTransform="matrix(1,0,0,1.3235293,0,-108.45329)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3147"
+       id="radialGradient4250"
+       cx="277.85837"
+       cy="302.23911"
+       fx="277.85837"
+       fy="302.23911"
+       r="91.162598"
+       gradientTransform="matrix(1,0,0,0.4733379,0,159.17788)"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="reflect" />
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-177.14285,-206.6479)"
+     inkscape:label="Ebene 1"
+     id="layer1"
+     inkscape:groupmode="layer">
+    <path
+       style="opacity:1;stroke-opacity:1;fill-rule:nonzero;fill-opacity:1;stroke:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:9.80000019;fill:url(#radialGradient3155)"
+       id="path2261"
+       d="M-463.907729645 59.4947232865L-465.88997919 53.0618899264L-467.549378959 46.5383133996L-469.743557035 39.9685086158L-468.666248439 33.1262751708L-466.83275019 26.2872473927L-464.142489942 19.7377041588L-464.524207184 12.4160838201L-468.615066603 6.33194857812L-468.910847311 -0.683251608856L-470.528779939 -7.51573387404L-475.092658479 -12.8099924273L-479.739067212 -18.0319697201L-485.73817452 -21.945195162L-491.476673252 -26.2314819186L-495.419964008 -32.6422392782L-494.847794523 -40.1469027611L-492.480636045 -47.3546670613L-491.9760398 -54.9243888592L-487.59770564 -61.5755338577L-480.048594523 -64.1090020642L-480.681659877 -71.3075932316L-483.088938826 -78.121218889L-482.704413791 -85.3251250446L-480.732250787 -92.2644835516L-480.193664405 -99.1533349308L-480.563047873 -106.053328008L-481.025575984 -113.263921496L-485.519721132 -118.921593287L-487.829778625 -125.3369764L-488.982048988 -132.057525418L-490.622429463 -138.759025882L-494.477291489 -144.481000656L-490.017834216 -150.068529921L-486.181732441 -156.10107214L-488.547366928 -163.013327043L-487.825680898 -170.283448339L-483.680993685 -176.261759704L-477.054071133 -179.262182402L-473.931082668 -185.714303117L-473.702723282 -192.878852696L-475.469781914 -199.784629318L-477.829700823 -206.510923223L-477.23499722 -214.07026968L-471.904284019 -219.46293952L-465.900025338 -223.606434671L-462.736688564 -230.180092316L-460.270934889 -237.140901407L-462.186942229 -244.272641747L-466.091911117 -251.164436042L-473.420709869 -254.170150512L-476.639538032 -261.370949763L-474.91411937 -269.067396674L-476.902252287 -276.267891846L-473.768056392 -283.048497964L-471.927801573 -289.824732823L-469.462772581 -296.399497362L-473.63808065 -302.194623254L-473.385435919 -309.332749914L-470.992019665 -316.077927348L-473.315226176 -322.847607657L-469.159901772 -328.49003245L-468.226046876 -335.434929388L-466.477069188 -342.175668962L-467.83251643 -349.006427025L-468.619692204 -342.861624953L-469.232433338 -336.696984939L-469.270127678 -330.399469569L-471.539300702 -324.52486537L-469.175868919 -318.623388776L-469.451228748 -312.272214651L-469.494680958 -305.649307059L-465.230740834 -300.581407327L-466.848690529 -294.42110035L-465.396556407 -288.219612646L-464.671633164 -282.020530147L-462.277656517 -276.256589365L-457.32019267 -272.060157806L-455.620890942 -265.791277581L-452.61976616 -260.162976606L-452.506823585 -253.785534658L-448.590863545 -248.313985908L-442.40244285 -245.67276686L-436.775329639 -241.776492435L-434.694933516 -235.255962589L-430.649188281 -230.08736824L-426.360593181 -225.118427295L-426.522251677 -218.24464111L-422.736390033 -212.505100921L-421.184044907 -205.52226576L-416.037969794 -200.553596602L-414.115707783 -193.510946069L-417.221248935 -186.904159263L-417.863146941 -180.340520036L-419.806708769 -174.038460026L-423.287581644 -168.296267035L-424.069044195 -161.627041247L-428.887255151 -156.278326662L-434.045287782 -151.256513851L-433.326629484 -143.830959692L-436.493579921 -137.076276188L-437.682349818 -130.098447357L-437.141816316 -123.040749956L-435.698813185 -116.074162685L-432.15564799 -109.90475618L-436.107369158 -104.582431036L-441.225344756 -100.369407072L-445.873539454 -95.7110641291L-450.663205747 -91.1983077948L-456.689257495 -87.7139504068L-460.611723363 -81.9634454213L-460.944089225 -74.9120245456L-464.955139375 -69.103024621L-465.072247513 -62.0229138732L-462.619857147 -55.3800632798L-466.83973372 -49.3915250869L-466.686726973 -42.06714546L-471.932610662 -36.8701051203L-472.475682082 -29.5057587537L-475.351295643 -22.6593122799L-472.818255363 -15.6788617489L-468.420393858 -10.3894993088L-466.007500221 -3.94772275733L-462.565501903 2.02266925624L-457.257152241 6.41747950113L-455.108038321 13.1308446653L-449.705425696 17.6585084437L-446.615339789 23.6840617883L-443.691410505 29.7919715425L-443.834112479 27.6258854399L-444.622542121 25.6033445736L-445.953081595 23.7975458469L-446.0491224 21.5565593461L-446.983100742 19.5267545249L-446.689395405 17.3117691233L-446.889202368 15.1341090161L-447.892328034 13.190950437L-447.54431353 10.9365319366L-447.355692539 8.66322179673L-448.319103587 6.42725471482L-447.57495036 4.10907749707L-445.818960067 2.31007059794L-445.593591355 -0.193753811675L-443.169512041 -0.794859146968L-441.594740826 -2.7333079502L-441.751576788 -5.1941918928L-440.347046752 -7.22097325163L-440.726728996 -9.55444992462L-441.874587681 -11.6212572274L-441.279520581 -13.9047599671L-439.438387611 -15.380808409L-437.432020582 -16.5135110874L-436.161599633 -18.4356335139L-435.92862693 -20.6173392212L-435.42668271 -22.753262458L-435.289712269 -25.0248976546L-433.983265008 -26.8883039232L-433.401121503 -29.2199353346L-434.254295445 -31.466597375L-435.111107727 -33.726545982L-437.151631256 -35.0218292415L-436.066282761 -36.9725956002L-434.851799059 -38.8456946579L-434.261655739 -41.0107210837L-433.223767866 -43.0002932298L-431.126756235 -44.2246334879L-429.933945352 -46.3397384612L-427.520250123 -46.0469733464L-425.297751369 -47.0329425968L-424.522781181 -49.3719034696L-422.41135462 -50.6420194625L-420.152486655 -51.1432050003L-417.853768022 -51.4069550266L-416.343748636 -52.9997806889L-414.732249004 -54.4898548719L-413.142907066 -56.1717566343L-412.890969446 -58.4720454787L-411.787687693 -60.5370227362L-412.242940004 -62.8335651446L-410.712191286 -64.4296673016L-409.449633098 -66.2453436368L-408.595453403 -68.2653602801L-408.543146068 -70.4579282112L-407.465522226 -72.3239843987L-406.320615683 -74.1495330409L-407.826904864 -76.02385871L-407.945837444 -78.425495413L-408.36933663 -80.7099492081L-407.976077791 -82.9998025194L-407.655011284 -85.3917960569L-405.808786488 -86.9461997334L-404.873082686 -88.9962164888L-403.756626889 -90.9536731947L-397.015159322 -91.0875840666L-390.409053459 -92.4383921199L-383.620259345 -93.8219196157L-376.994491283 -91.7968093889L-370.108965629 -91.7478139483L-363.235893609 -92.1646413613L-356.987905447 -89.2793105236L-350.793396387 -86.2808863355L-343.842106007 -85.5492613123L-337.846546474 -81.9563545468L-332.833046291 -77.1444674512L-326.396322465 -74.5256837838L-320.822682615 -69.3981094471L-313.365931136 -68.0735955266L-311.047140319 -61.1767629572L-308.174302228 -54.4917130963L-306.055039952 -48.0460317659L-305.089013164 -41.3300156367L-299.578942435 -37.2714270775L-295.592428915 -31.7089878212L-289.895297312 -27.9775705903L-285.639189489 -22.6609617795L-281.415140784 -16.9781719087L-281.393337828 -9.89747894781L-279.283967767 -3.30117966192L-275.372610809 2.41387878645L-271.347798333 8.20347366812L-265.11734486 11.5049845176L-259.515641334 15.5179817881L-253.976959999 19.6175230504L-247.375812407 21.7977822101L-240.433782143 22.167775948L-239.544101582 29.4445099406L-242.97202649 35.924611786L-242.064651312 42.8609559472L-240.932582714 49.7641885758L-235.875328983 55.3471574642L-235.685237064 62.8777100318L-232.12551614 69.3802882778L-225.456960119 72.6184200711L-219.734331322 76.9985748797L-212.546927371 77.5234186006L-206.655383583 81.7414625545L-204.281614953 88.5874398762L-202.30547674 95.1905802403L-198.477159637 100.922122185L-193.660055705 105.827832694L-187.733919809 109.313718409L-182.636160048 115.376982806L-182.453614469 123.29638978L-180.99130228 130.963204121L-184.00757162 138.161851102L-187.837601453 144.43631717L-193.19247332 149.472526087L-194.774067819 157.084692164L-200.952125162 161.804662608L-194.878176039 165.975823665L-190.712234237 172.053353709L-183.838431296 175.255536902L-179.976744528 181.781678135L-179.70717508 189.033679487L-179.707524286 196.290689282L-175.832563251 203.061642595L-177.631031812 210.652864013L-180.358123591 208.53676233L-183.803320815 208.750144593L-186.87372201 209.809469837L-189.649358458 211.496294007L-192.583175366 210.729191221L-195.593005129 210.359524987L-198.618901455 210.227625364L-201.64437624 210.368864214L-204.734675973 210.300945345L-207.825490993 210.263157502L-210.749350006 209.229731918L-213.801342219 208.679946962L-216.729400603 210.041902322L-219.92615288 209.584493111L-222.350567264 211.767511497L-225.599554575 212.063207005L-228.739810938 212.892946167L-231.950331853 213.385117439L-235.155858612 213.991415061L-238.157642158 215.269027736L-241.503032849 215.34158236L-244.554121011 213.96762309L-247.864645937 212.856056485L-251.076496236 214.226885889L-253.645603234 212.177454149L-256.796092225 211.242093076L-258.410648036 208.246765103L-261.505692815 206.832736128L-264.712676556 205.973103819L-267.110552773 203.676606036L-270.223625316 202.321910284L-271.875847769 199.356007014L-274.938364664 198.530965573L-278.029093095 197.818855413L-281.213587679 197.411447687L-284.368701276 198.004950004L-287.543728528 199.639966139L-291.00723176 198.76920717L-293.203261068 196.025206168L-296.595064481 195.104469596L-299.708539427 196.698131903L-302.684890145 198.535200815L-306.239611818 198.985809476L-309.642139815 197.862467333L-313.050764021 197.342308962L-315.829040105 195.300137149L-318.383425209 193.087822822L-321.436829683 191.640086984L-322.993255201 194.838351242L-326.301468505 196.144903726L-329.129589518 197.919157743L-331.460373071 200.309491152L-334.552324992 201.935547844L-337.013053599 204.415273993L-337.070893795 208.087065083L-339.466049913 210.870699841L-343.190919309 211.240383306L-346.325092863 213.28691061L-349.411626896 215.352829212L-351.416666196 218.479253594L-355.059179679 219.163910493L-358.486906456 217.754176941L-361.971268653 217.024557135L-365.344666436 215.887318206L-367.497455987 215.118464771L-369.140452102 213.52906167L-370.956846922 212.219664462L-372.586680972 210.684264789L-373.582755094 208.537109875L-374.756630394 206.481762054L-376.667672899 204.952112289L-379.087039004 204.579849594L-380.412740154 202.586469081L-381.848765139 200.671036583L-382.44933235 198.225768735L-384.379529127 196.608871638L-386.85074277 197.161228453L-389.373247355 196.939946876L-392.023342351 196.513171599L-393.691505691 194.41022802L-395.536117279 192.697574772L-396.472760733 190.361237447L-398.214891073 188.592344191L-400.393978306 187.402562571L-402.555552842 186.204999056L-404.999459756 185.839100375L-406.987317202 184.395269713L-409.301670059 183.57065158L-409.658809292 181.097743833L-408.945213044 178.703249825L-408.438424655 176.151456706L-409.713383331 173.883646537L-411.613665903 172.100126219L-411.782373285 169.499442387L-412.68444869 167.244265553L-413.866678827 165.122498721L-412.558795255 162.88642467L-412.062380327 160.343953664L-411.959640475 157.724783003L-413.016169027 155.32595874L-413.672415771 152.80133923L-414.541212917 150.34175492L-416.771654718 148.987123198L-418.851714884 147.411290898L-418.330558988 145.106933813L-417.657132366 142.84238935L-416.234235109 140.95782181L-414.855702462 139.040563572L-414.478702599 136.694236778L-414.767053241 134.335374292L-413.836449574 132.1714512L-413.110224194 129.93065156L-413.149501247 127.467441358L-414.523918352 125.422954917L-415.746304722 123.390388409L-416.582215979 121.170747128L-416.894014401 118.684463613L-415.645874389 116.511684176L-414.388953725 114.482804246L-413.533864173 112.254570599L-413.478493878 109.789706516L-414.221650015 107.438889685L-416.437888322 106.253459483L-417.794681612 104.137787257L-418.015690606 101.805456524L-418.492221524 99.5116540235L-417.070120913 97.4638685624L-417.317748055 94.9830468759L-417.767223284 95.8396999193L-417.922143721 96.7946250872L-417.658938212 97.787485909L-418.147471428 98.6910261949L-417.301037261 99.2909032575L-416.814989134 100.207451406L-416.882609931 101.219396491L-416.751915844 102.225142226L-415.921762019 102.759076832L-414.960332592 102.982448702L-414.262196509 103.724666009L-413.265607358 103.937011446L-412.735704401 104.761955569L-412.292972883 105.636780553L-411.777471754 106.51271637L-411.788356472 107.529026605L-411.311241608 108.278620776L-410.924989835 109.078832987L-411.057030184 109.981927129L-410.761080066 110.845308394L-410.507457033 111.701840902L-410.675743374 112.579139191L-410.788036755 113.456303577L-410.562441643 114.311367323L-410.6028685 115.207449498L-410.36848858 116.073280688L-410.650092067 116.913685341L-410.949756917 117.747820511L-410.480326073 118.540437468L-410.299521252 119.443718473L-410.516663021 120.325616809L-410.759483342 121.200793086L-410.231165342 122.003722639L-409.472202857 122.593461328L-408.464177327 122.706677108L-407.785610554 123.460653512L-407.23275184 124.271892541L-406.882346412 125.188940825L-405.97604137 125.564903249L-405.175863361 126.132751581L-404.29777269 126.686382126L-403.815317332 127.605504987L-403.158914412 128.363608374L-402.539129541 129.151930805L-403.043065313 130.098344903L-403.34817618 131.126235104L-402.817832682 132.076293196L-402.694794327 133.157374214L-401.748601706 133.177068849L-400.893856682 133.583368366L-399.97744352 133.71210377L-399.06507283 133.86691208L-398.033020291 133.775508341L-397.116144292 134.258028278L-396.723815166 135.199554114L-395.958683661 135.8740664L-395.052053046 135.478083389L-394.075965566 135.63943656L-393.291650272 136.192559725L-392.377602856 136.485156783L-391.461505526 136.325103352L-390.53170496 136.343056797L-389.551444331 136.319763258L-388.769911502 136.911928713" />
+    <path
+       id="path3275"
+       d="M 193.52657,268.85494 L 196.21468,268.3195 L 198.85198,267.71783 L 201.69355,267.96748 L 204.57393,267.98941 L 207.40716,267.76168 L 210.17135,268.16093 L 213.07609,268.11678 L 215.62066,268.85718 L 217.60818,269.97429 L 220.26216,270.59636 L 223.17753,270.55063 L 225.8528,271.16357 L 228.65319,270.66657 L 231.57332,270.90391 L 234.25862,271.44468 L 236.83056,272.12166 L 239.29588,271.28646 L 241.82144,270.50296 L 243.90868,269.31191 L 244.30342,267.70325 L 247.09102,267.17023 L 248.7518,265.87439 L 251.43723,265.13153 L 252.43375,263.62071 L 255.22434,263.12308 L 257.77501,262.34573 L 260.70964,262.36233 L 263.62717,262.53003 L 266.0192,261.69988 L 268.25858,260.75864 L 271.10496,260.41658 L 273.46908,259.51306 L 276.04712,259.20928 L 278.67872,259.0884 L 281.15376,259.61513 L 283.81642,259.71086 L 286.3649,260.14722 L 288.98848,259.86028 L 291.57093,259.47108 L 294.168,259.83222 L 296.48345,260.61287 L 298.20355,261.74339 L 300.9083,261.90419 L 303.51903,262.31034 L 306.13221,262.4557 L 308.6521,262.84865 L 311.11867,263.46936 L 313.82479,263.26833 L 314.59115,264.80821 L 316.49863,266.04191 L 319.07256,266.86811 L 322.05839,267.08082 L 323.95246,268.18416 L 326.42091,268.90524 L 329.27457,269.02076 L 331.72002,269.80523 L 334.45898,269.16804 L 337.30899,269.65104 L 339.90969,269.10352 L 342.42858,268.45827 L 345.48472,268.41841 L 347.81558,269.46197 L 350.48053,268.81708 L 353.4116,268.85494 L 355.28034,269.82676 L 356.03733,271.15224 L 355.81457,272.53663 L 356.94306,273.79198 L 359.16015,274.45565 L 360.96755,275.404 L 361.74233,276.75822 L 363.96322,277.55081 L 363.12037,278.88976 L 363.66231,280.27134 L 365.86107,281.13189 L 366.55513,282.52905 L 367.78192,283.75554 L 367.19975,285.10788 L 367.41773,286.46173 L 369.02098,287.52509 L 366.49292,288.31114 L 364.91092,289.61502 L 364.15483,291.08773 L 364.32723,292.61079 L 361.61539,292.99142 L 359.73825,294.09185 L 357.81457,295.08739 L 355.67752,295.95338 L 355.93972,297.50097 L 354.48713,298.85259 L 352.63219,300.04231 L 352.2208,301.56742 L 352.41957,303.13644 L 354.49724,304.26399 L 355.1223,305.74634 L 356.96311,306.91381 L 355.32924,307.91299 L 354.17254,309.08302 L 354.72621,310.42905 L 353.68427,311.69196 L 351.76986,312.49474 L 350.36118,313.54935 L 348.30903,314.38214 L 347.82055,315.72349 L 347.64283,317.03404 L 348.37142,318.29044 L 349.41034,319.52701 L 348.93789,320.85644 L 349.09324,322.24229 L 347.42678,323.3167 L 346.185,324.44236 L 345.48444,325.69123 L 345.64185,327.02915 L 346.87301,328.20178 L 347.3392,329.48617 L 347.86922,330.76366 L 345.62155,331.63092 L 344.73022,333.02273 L 344.17793,334.4614 L 345.283,335.80854 L 346.76921,336.9064 L 347.46325,338.20485 L 349.18693,339.19105 L 351.35007,339.89618 L 351.83986,341.17231 L 352.62311,342.40704 L 353.576,343.64207 L 353.4116,344.97267 L 350.54841,345.19741 L 347.67676,345.38983 L 345.28496,344.43492 L 342.30604,344.24988 L 339.35177,343.8842 L 336.40961,344.27613 L 334.63769,342.92192 L 331.65947,342.43295 L 329.92211,341.10893 L 326.93443,340.77916 L 325.4112,339.51604 L 323.69005,338.32575 L 322.52656,336.94173 L 320.49844,335.87052 L 318.86475,334.54313 L 316.0004,334.07271 L 313.28916,333.96062 L 310.5994,334.17243 L 308.31306,335.09828 L 305.43534,335.01307 L 302.70104,335.2819 L 300.35267,336.06817 L 297.61014,336.4021 L 294.89152,336.01756 L 291.93647,335.6717 L 289.76752,334.55784 L 286.8656,334.36764 L 284.07988,333.89847 L 281.0364,333.90561 L 278.03684,334.17754 L 275.16577,334.87599 L 273.46908,336.28342 L 270.97426,336.85112 L 268.36226,337.24573 L 266.66031,338.37655 L 264.44253,339.2227 L 261.73548,339.2416 L 259.25886,339.81847 L 256.45382,339.70266 L 254.13443,340.54295 L 251.34418,340.77439 L 248.76305,341.37952 L 246.63158,340.29445 L 243.68547,340.13281 L 241.07739,339.88262 L 238.44785,340.05959 L 235.83806,339.92643 L 233.21635,339.90729 L 230.257,339.67357 L 227.26481,339.65804 L 224.99804,338.63323 L 222.76561,337.58766 L 219.94304,337.85152 L 217.39346,338.54277 L 215.01369,339.49662 L 212.02504,339.5037 L 209.41943,339.87094 L 206.98346,340.4816 L 205.30771,341.64393 L 202.7935,342.25485 L 200.38026,342.84533 L 197.9433,343.40808 L 195.53661,344.03456 L 193.52657,344.97267 L 191.81721,343.98059 L 191.24652,342.67414 L 190.65904,341.37939 L 189.05398,340.35205 L 188.1617,339.06122 L 188.78644,337.72736 L 188.02932,336.47196 L 186.95015,335.28392 L 187.80815,333.83816 L 186.69578,332.44149 L 187.83049,331.07889 L 190.21868,330.28668 L 190.51922,328.89958 L 189.19138,327.69192 L 188.9004,326.37296 L 188.91654,325.04513 L 191.67272,324.8437 L 194.39736,324.54592 L 195.74182,323.19526 L 198.23407,322.42156 L 198.2201,320.92384 L 198.21507,319.4261 L 200.64772,318.57431 L 202.08178,317.23258 L 202.4686,315.90217 L 203.45589,314.66107 L 204.81833,313.52188 L 205.58694,312.23738 L 204.473,310.97693 L 204.12808,309.59816 L 204.19798,308.19855 L 205.25284,306.91381 L 206.63363,305.65025 L 207.27664,304.23174 L 205.66553,303.00202 L 205.44391,301.51172 L 204.24735,300.15147 L 204.73194,298.67384 L 202.20698,297.99463 L 200.81764,296.69135 L 198.27875,296.25753 L 195.77947,295.76381 L 194.03485,294.68043 L 192.92783,293.38437 L 191.86587,292.12578 L 189.79667,291.28538 L 188.75047,290.06783 L 187.50549,288.90349 L 187.41767,287.57527 L 188.15487,286.30443 L 189.00265,285.03766 L 190.79573,284.08376 L 192.3734,283.01488 L 193.16448,281.72606 L 193.84812,280.3582 L 192.75538,279.06639 L 193.30719,277.76615 L 193.68267,276.44853 L 192.87475,275.18688 L 192.00468,273.93678 L 191.06278,272.6497 L 191.56876,271.2961 L 191.70866,269.88824 L 193.52657,268.85494"
+       style="fill:url(#radialGradient4250);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1.71851885;stroke-miterlimit:4;stroke-opacity:1" />
+  </g>
+</svg>
diff --git a/src/modules/oldfilm/dust3.svg b/src/modules/oldfilm/dust3.svg
new file mode 100644 (file)
index 0000000..d9c4089
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="387.78088"
+   height="236.67728"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   sodipodi:docbase="/home/marco/mlt-svn/mlt/src/modules/oldfilm"
+   sodipodi:docname="dust3.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="350"
+     inkscape:cy="520"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:window-width="797"
+     inkscape:window-height="586"
+     inkscape:window-x="359"
+     inkscape:window-y="103" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-112.24286,-169.15633)">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:9.80000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 117.14286,383.79075 C 132.89134,377.9933 141.35833,331.00385 162.85714,309.50504 C 179.04427,293.31791 204.56791,260.36922 214.28571,240.93361 C 221.87943,225.74618 269.62455,193.26419 288.57143,183.79075 C 322.78762,166.68266 384.04214,174.38325 414.28571,189.50504 C 443.33513,204.02975 470.5072,233.37658 482.85714,258.07647 C 494.64175,281.64568 500.51676,319.90009 488.57143,343.79075 C 472.23394,376.46573 461.06991,400.93361 420,400.93361 C 386.98682,400.93361 357.67527,390.56986 345.71429,366.6479 C 331.7481,338.71553 313.48288,313.61367 300,286.6479 C 271.13254,228.91297 304.25918,299.42543 294.28571,269.50504"
+       id="path2160" />
+  </g>
+</svg>
diff --git a/src/modules/oldfilm/dust4.svg b/src/modules/oldfilm/dust4.svg
new file mode 100644 (file)
index 0000000..19b5a19
--- /dev/null
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="99.410004"
+   height="233.62619"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   sodipodi:docbase="/home/marco/mlt-svn/mlt/src/modules/oldfilm"
+   sodipodi:docname="dust4.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="DiamondS"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondS"
+       style="overflow:visible">
+      <path
+         id="path3217"
+         d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="scale(0.2,0.2)" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DistanceIn"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DistanceIn">
+      <g
+         id="g2300">
+        <path
+           style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
+           d="M 0,0 L 2,0"
+           id="path2306" />
+        <path
+           style="fill:#000000;fill-rule:evenodd;stroke:none"
+           d="M 0,0 L 13,4 L 9,0 L 13,-4 L 0,0 z "
+           id="path2302" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
+           d="M 0,-4 L 0,40"
+           id="path2304" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Send"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Send"
+       style="overflow:visible">
+      <path
+         id="path3164"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="matrix(-0.3,0,0,-0.3,0.69,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4074468"
+     inkscape:cx="71.428571"
+     inkscape:cy="105.71429"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:window-width="797"
+     inkscape:window-height="586"
+     inkscape:window-x="875"
+     inkscape:window-y="0"
+     width="99.41px"
+     height="233.62619px"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-243.11429,-209.90743)">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5999999;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow2Send);marker-mid:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 291.42857,218.07647 C 272.34606,222.088 251.42857,231.57861 251.42857,269.50504 C 251.42857,297.73622 256.73845,331.55337 268.57143,355.21933 C 278.43679,374.95004 253.6971,424.96798 245.71429,440.93361"
+       id="path2160" />
+  </g>
+</svg>
diff --git a/src/modules/oldfilm/dust5.svg b/src/modules/oldfilm/dust5.svg
new file mode 100644 (file)
index 0000000..ca9b24b
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="172.63466"
+   height="265.65714"
+   id="svg2186"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   sodipodi:docbase="/home/marco/mlt-svn/mlt/src/modules/oldfilm"
+   sodipodi:docname="dust5.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0">
+  <defs
+     id="defs2188" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="350"
+     inkscape:cy="520"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:window-width="797"
+     inkscape:window-height="586"
+     inkscape:window-x="0"
+     inkscape:window-y="0" />
+  <metadata
+     id="metadata2191">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-167.17143,-216.67647)">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 185.71429,480.93361 C 188.96777,468.49843 168.57143,429.55044 168.57143,400.93361 C 168.57143,374.88777 199.28869,339.49909 208.57143,320.93361 C 222.78379,292.50889 246.00003,285.60027 277.14286,275.21933 C 307.18704,265.2046 334.28571,323.13529 334.28571,343.79075 C 334.28571,376.81996 350.98623,401.15478 317.14286,418.07647 C 290.79544,431.25018 254.79122,418.32922 231.42857,406.6479 C 210.48639,396.17681 220,341.45229 220,320.93361 C 220,279.3284 208.87913,269.19734 242.85714,235.21933 C 249.33287,228.7436 269.08286,222.10647 277.14286,218.07647"
+       id="path2194" />
+  </g>
+</svg>
index 2ec90a1..bb7c074 100644 (file)
 
 #include <string.h>
 #include <framework/mlt.h>
+#include <limits.h>
 
 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 );
+       
 }
+
+
+
index c133813..fc62024 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-#include <framework/mlt_filter.h>
-#include <framework/mlt_frame.h>
+//#include <framework/mlt_filter.h>
+//#include <framework/mlt_frame.h>
+#include <framework/mlt.h>
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
+#include <string.h>
+#include <time.h>
 
+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<src_height ; y++){
+               if ( y>=0 && (y-ypos)<overlay_height ){
+                       uint8_t *scanline_image=src+src_width*y*2;
+                       int overlay_y = upsidedown ?  ( overlay_height - ( y - ypos ) - 1 ) : ( y - ypos  );
+                       uint8_t *scanline_overlay=overlay + overlay_width * 2 * overlay_y;
+                       
+                       for ( x = xpos  ;  x < src_width  && x-xpos < overlay_width ;x++){
+                               if ( x>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;x<dx;x++)
-                               for (y=-dy;y<dy;y++){
-                                       if (x1+x<w && x1+x>0 && y1+y<h && y1+y>0 && 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 (file)
index 0000000..5426420
--- /dev/null
@@ -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
+
index 7557dd4..296da5a 100644 (file)
@@ -23,7 +23,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
-
+#define MIN(a,b) (a<b?a:b)
+#define MAX(a,b) (a>b?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;x<w;x++)
                        for(y=0;y<h;y++){
                                uint8_t* pixel=(*image+(y)*w*2+(x)*2);
                                if (*pixel>20){
-                                       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 (file)
index 0000000..c8a3733
--- /dev/null
@@ -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
index 5094916..7d3e415 100644 (file)
@@ -24,7 +24,6 @@
 #include <stdlib.h>
 #include <math.h>
 
-
 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;x<dx;x++)
-                               for(y=0;y<h;y++)
+                       
+                       if (mlt_properties_get_int(MLT_FILTER_PROPERTIES( filter ),typebuf)==0 ){
+                               mlt_properties_set_int(MLT_FILTER_PROPERTIES( filter ),typebuf,type);
+                       }
+
+                       
+                       x1=mlt_properties_get_int(MLT_FILTER_PROPERTIES( filter ),buf);
+                       type=mlt_properties_get_int(MLT_FILTER_PROPERTIES( filter ),typebuf);
+                       if (position!=mlt_properties_get_double(MLT_FILTER_PROPERTIES( filter ),"last_oldfilm_line_pos")){
+                               x1+=(rand()%11-5);
+                       }
+               
+                       if (yend<ystart){
+                               yend=h;
+                       }
+                       
+                       for (x = -dx ; x < dx && dx != 0 ; x++ )
+                               for(y=ystart;y<yend;y++)
                                        if (x+x1<w && x+x1>0){
                                                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 (file)
index 0000000..1df4044
--- /dev/null
@@ -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
+
+
index 18fcd12..11a6c3e 100644 (file)
@@ -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;x<w;x++){
                                        uint8_t* pic=(*image+y*w*2+x*2);
-                                       if (y+diffpic>0 && y+diffpic<h){
-                                               *pic=*(pic+diffpic*w*2);
+                                       int newy=y+diffpic;
+                                       if (newy>0 && newy<h ){
+                                               uint8_t oldval=*(pic+diffpic*w*2);
+                                               /* frame around
+                                               int randx=(x<=frameborder)?x:(x+frameborder>w)?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 (file)
index 0000000..1f22e71
--- /dev/null
@@ -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 (file)
index 0000000..824f107
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * filter_tcolor.c -- tcolor filter
+ * Copyright (c) 2007 Marco Gittler <g.marco@freenet.de>
+ *
+ * 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 <framework/mlt_filter.h>
+#include <framework/mlt_frame.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#define MIN(a,b) (a<b?a:b)
+#define MAX(a,b) (a<b?b:a)
+
+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 );
+
+       if ( error == 0 && *image && *format == mlt_image_yuv422 )
+       {
+
+               double over_cr = mlt_properties_get_double( MLT_FILTER_PROPERTIES( filter ), "oversaturate_cr" )/100.0;
+               double over_cb = mlt_properties_get_double( MLT_FILTER_PROPERTIES( filter ), "oversaturate_cb" )/100.0;
+                       
+               int video_width = *width;
+               int video_height = *height;
+
+               int x,y;
+               
+               for (y=0;y<video_height;y++){
+                       for (x=0;x<video_width;x+=2){
+                               uint8_t *pix=(*image+y*video_width*2+x*2+1);
+                               uint8_t *pix1=(*image+y*video_width*2+x*2+3);
+                               *pix=MIN(MAX( ((double)*pix-127.0)*over_cb+127.0,0),255);
+                               *pix1=MIN(MAX( ((double)*pix1-127.0)*over_cr+127.0,0),255);
+                       }
+               }
+               // short a, short b, short c, short d
+               // a= gray val pix 1
+               // b: +=blue, -=yellow
+               // c: =gray pix 2
+               // d: +=red,-=green
+       }
+
+       return error;
+}
+
+static mlt_frame filter_process( mlt_filter this, mlt_frame frame )
+{
+       mlt_frame_push_service( frame, this );
+       mlt_frame_push_get_image( frame, filter_get_image );
+       return frame;
+}
+
+
+mlt_filter filter_tcolor_init( mlt_profile profile, mlt_service_type type, const char *id, char *arg )
+{
+       mlt_filter this = mlt_filter_new( );
+       if ( this != NULL )
+       {
+               this->process = 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 (file)
index 0000000..27f4f61
--- /dev/null
@@ -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 (file)
index 0000000..0574b20
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * filter_vignette.c -- vignette filter
+ * Copyright (c) 2007 Marco Gittler <g.marco@freenet.de>
+ *
+ * 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 <framework/mlt_filter.h>
+#include <framework/mlt_frame.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#define MIN(a,b) (a<b?a:b)
+#define MAX(a,b) (a<b?b:a)
+
+#define SIGMOD_STEPS 1000
+#define POSITION_VALUE(p,s,e) (s+((double)(e-s)*p ))
+static double pow2[SIGMOD_STEPS];
+
+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 );
+       
+       if ( error == 0 && *image && *format == mlt_image_yuv422 )
+       {
+               int smooth_s=80,radius_s=50,x_s=50,y_s=50,opac_s=0;
+               int smooth_e=80,radius_e=50,x_e=50,y_e=50,opac_e=0;
+               
+               sscanf(mlt_properties_get(MLT_FILTER_PROPERTIES( filter ), "start"  ), "%d:%d,%dx%d,%d",&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"  ), "%d:%d,%dx%d,%d",&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 time = mlt_frame_get_position( this );
+               double position = ( double )( time -in ) / ( double )( out - in + 1 ) /100.0;
+               
+               double smooth = POSITION_VALUE (position, smooth_s, smooth_e) ;
+               double 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) ;
+               
+               int video_width = *width;
+               int video_height = *height;
+               
+               int x,y;
+               int w2=cx,h2=cy;
+               double delta=0.0;
+               double max_opac=255.0;
+               
+               if (opac>0.0)
+                       max_opac=100.0/opac;
+               
+               for (y=0;y<video_height;y++){
+                       int h2_pow2=pow(y-h2,2.0);
+                       for (x=0;x<video_width;x++){
+                               uint8_t *pix=(*image+y*video_width*2+x*2);
+                               int dx=sqrt(h2_pow2+pow(x-w2,2.0));
+                               double sigx=(double)(-dx+radius-smooth)/smooth;
+                               
+                               if (smooth>0.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_opac<delta){
+                                               delta=max_opac;
+                               }
+                               if (delta!=0.0){
+                                       *pix=(double)(*pix)/delta;
+                                       *(pix+1)=((double)(*(pix+1)-127.0)/delta)+127.0;
+                               }else{
+                                       *pix=*(pix+1)=0;
+                               }
+                               
+                       }
+               }
+               
+               // short a, short b, short c, short d
+               // a= gray val pix 1
+               // b: +=blue, -=yellow
+               // c: =gray pix 2
+               // d: +=red,-=green
+       }
+       
+       return error;
+}
+
+static mlt_frame filter_process( mlt_filter this, mlt_frame frame )
+{
+       
+       mlt_frame_push_service( frame, this );
+       mlt_frame_push_get_image( frame, filter_get_image );
+       return frame;
+}
+
+
+mlt_filter filter_vignette_init( mlt_profile profile, mlt_service_type type, const char *id, char *arg )
+{
+       mlt_filter this = mlt_filter_new( );
+       int i=0;
+       if ( this != NULL )
+       {
+               for (i=-SIGMOD_STEPS/2;i<SIGMOD_STEPS/2;i++){
+                       pow2[i+SIGMOD_STEPS/2]=1.0+pow(2.0,-((double)i)/((double)SIGMOD_STEPS/20.0));
+               }
+               this->process = 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 (file)
index 0000000..04b2bc3
--- /dev/null
@@ -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