filter_oldfilm.o \
filter_dust.o \
filter_lines.o \
- filter_grain.o
+ filter_grain.o \
+ filter_tcolor.o \
+ filter_vignette.o
CFLAGS += -I../..
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
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
#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
{
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 );
+
}
+
+
+
* 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;
}
}
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;
--- /dev/null
+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
+
#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 )
{
{
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;
{
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;
}
-
--- /dev/null
+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
#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 )
{
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;
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;
}
--- /dev/null
+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
+
+
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;
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;
}
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;
}
--- /dev/null
+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: %
--- /dev/null
+/*
+ * 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;
+}
+
+
--- /dev/null
+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
--- /dev/null
+/*
+ * 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;
+}
+
+
--- /dev/null
+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