Guest User

srestore v2.76

a guest
Apr 1st, 2017
479
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ###### srestore v2.76 ######
  2. # ==================================================================================================================================
  3. # Change List
  4. #
  5. # 03/31/2017 AmjadSONY
  6. # - Update v2.75 -> v2.76
  7. #  update to masktools 2.2.5
  8. #
  9. # 03/09/2017 AmjadSONY
  10. # - Update v2.7i -> v2.75
  11. #  now work with all high bit depth in avs+
  12. #
  13. # 02/09/2017 AmjadSONY
  14. # - Update v2.7h -> v2.7i
  15. #  clean up and add YUY2 and other format
  16. #
  17. # 03/23/2014 AmjadSONY
  18. # - Update v2.7g -> v2.7h
  19. #  update to use new Average by tp7
  20. # 11/12/2013 martin53
  21. # - Update v2.7f -> v2.7g
  22. #  Refactored to use a single line ScriptClip() call like v2.7e - Neccessary to save AviSynth string heap space when RTE is called
  23. #
  24. # 10/28/2013 martin53
  25. # - Update v2.7e -> v2.7f
  26. # Callable more than once from the same script with help of unique global variables per instance.
  27. # Moderate reformatting to re-establish readability with the new variable names.
  28. # Needs GRunT plugin
  29. #
  30. # ==================================================================================================================================
  31.  
  32. function Srestore(clip sourceo, float "frate", "omode", float "speed", float "blocks", int "mode", float "thresh", int "cache", clip "dclip")
  33. {
  34. avs26=!(VersionNumber() < 2.6)
  35. nonyuy2=avs26 && sourceo.isyuy2()
  36. source=nonyuy2 ? sourceo.nonyuy2clipin(true) : sourceo
  37. ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
  38. sislumaonly = ssispmt ? sourceo.isy() : VersionNumber() < 2.6 ? false : sourceo.isy8()
  39. ###### parameters & other necessary vars ######
  40.     srad  = isfloat(speed) && abs(speed)>=1 ? sqrt(abs(speed))*4 : 12
  41.     cache = default(cache, -1)
  42.     irate = framerate(source)
  43.     bsize = isfloat(speed) && speed>0 ? 16 : 32
  44.  
  45.     dm      = default(mode, 2)
  46.     om      = default(omode, 6)
  47.     bom     = isstring(om)
  48.     thr     = abs(default(thresh, 16))+0.01
  49.     frfac   = bom || abs(om-3)<2.5 ? 1 : isfloat(frate) ? frate*5<irate || frate>irate ? 1 :
  50.             \ abs(frate)/irate : round(irate*10010)%30000==0 ? 1001./2400. : 480./1001.
  51.  
  52.     numr    = abs(frfac*1001-round(frfac*1001))<0.01 ? round(frfac*1001) :
  53.             \ abs(1001/frfac-round(1001/frfac))<0.01 ? 1001 : round(frfac*9000)
  54.     numr    = isfloat(frate) && abs(irate*numr/float(round(numr/frfac))-frate) >
  55.             \ abs(irate*round(frate*100)/float(round(irate*100))-frate) ? round(frate*100) : numr
  56.     denm    = round(numr/frfac)
  57.  
  58.     ###### source preparation & lut ######
  59.     out = source
  60.     mec = abs(dm)<2 || bom ? nop() : mergeluma(mergechroma(out, out.trim(1, 0), 0.5), out.trim(1, 0), 0.5)
  61.     det = default(dclip, source).killaudio()
  62.     det = dm<0 || sislumaonly || VersionNumber() < 2.6 ? det : ssispmt ? det.converttoy() : avs26 ? det.converttoy8() : det.converttoyv16()
  63.     det = det.pointresize(srad==4 ? det.width : int(det.width/2/srad+4)*4, srad==4 ? det.height : int(det.height/2/srad+4)*4).trim(2, 0)
  64.     sis420  = ssispmt ? det.is420() : det.isyv12()
  65.     det = !sislumaonly && dm<0 && sis420 ? stackvertical(stackhorizontal(ssispmt ? det.ExtractU() : avs26 ? det.utoy8() : det.utoy(), ssispmt ? det.ExtractV() : avs26 ? det.vtoy8() : det.vtoy()), ssispmt ? det.converttoy() : avs26 ? det.converttoy8() : det) : det
  66.     det = !sislumaonly && dm<0 && !sis420 ? stackvertical(stackvertical(ssispmt ? det.ExtractU() : avs26 ? det.utoy8() : det.utoy(), ssispmt ? det.ExtractV() : avs26 ? det.vtoy8() : det.vtoy()), ssispmt ? det.converttoy() : avs26 ? det.converttoy8() : det) : det
  67.     det = bom ? VersionNumber() < 2.6 ? det.mt_lut("x 0.5 * 64 +", y=3, u=1, v=1) : det.mt_lut("x 0.5 * 64 scalef +", y=3, u=1, v=1) : det
  68.  
  69.         code0   = VersionNumber() < 2.6 ? "x 128 - y 128 - * 0 > x 128 - abs y 128 - abs < x 128 - 128 x - * y 128 - 128 y - * ? x y + 256 - x y + 256 - * ? 0.25 * 128 +"
  70.               \         : "x range_half - y range_half - * 0 > x range_half - abs y range_half - abs < x range_half - range_half x - * y range_half - range_half y - * ? x y + range_size - dup * ? 0.25 * range_half +"
  71.         code1   = VersionNumber() < 2.6 ? "x y - 2 ^ 3 * x y + 256 - 2 ^ - 128 +" : "x y - dup * 3 * x y + range_size - 2 ^ - range_half +"
  72.         diff    = mt_makediff(det, det.trim(1, 0), y=3, u=1, v=1)
  73.     bclp    = bom==false ? mt_lutxy(diff, diff.trim(1, 0), expr=code0, y=3, u=1, v=1).bilinearresize(bsize, bsize) :
  74.             \ mt_lutxy(diff.trim(1, 0), mt_adddiff(diff, diff.trim(2, 0), y=3, u=1, v=1), expr=code1, y=3, u=1, v=1).bilinearresize(bsize, bsize)
  75.     dclp    = VersionNumber() < 2.6 ? diff.trim(1, 0).mt_lut("x 128 - abs 1.1 ^ 1 -", y=3, u=1, v=1).bilinearresize(bsize, bsize)
  76.           \         : diff.trim(1, 0).mt_lut("x range_half - abs 1.1 ^ 1 scalef -", y=3, u=1, v=1).bilinearresize(bsize, bsize)
  77.  
  78.     ###### POSTPROCESSING ######
  79.     unblend1    = bom ? average(out, 2.0, out.loop(2, 0, 0), -1.0) : nop()
  80.     unblend2    = bom ? average(out.trim(2, 0), -1.0, out.trim(1, 0), 2.0) : nop()
  81.  
  82.     qmask1  = bom ? mt_makediff(unblend1.removegrain(mode=19, modeU=-1, modeV=-1), unblend1, y=3, u=1, v=1) : nop()
  83.     qmask2  = bom ? mt_makediff(unblend2.removegrain(mode=19, modeU=-1, modeV=-1), unblend2, y=3, u=1, v=1) : nop()
  84.     diffm   = bom ? mt_makediff(out.loop(2, 0, 0), out, y=3, u=1, v=1).mt_lut("x y - abs", y=3, u=1, v=1).mt_expand() : nop()
  85.     # 10/28/2013 note: next UPN expression is buggy, but correct expression not known
  86.     bmask   = bom ? VersionNumber() < 2.6 ? mt_lutxy(qmask1, qmask2, expr="x y - == 128 x 128 - 2 ^ x 128 - 2 ^ y 128 - 2 ^ + / 255 *", y=3, u=1, v=1)
  87.             \             : mt_lutxy(qmask1, qmask2, expr="clamp_f_i8 x range_half - dup * dup y range_half - dup * + / range_max *", y=3, u=1, v=1) : nop()
  88.     dmask   = bom ? VersionNumber() < 2.6 ? mt_lutxy(diffm, diffm.trim(2, 0), expr="x 2 * y < x 4 < & 0 y 2 * x < y 4 < & 255 x x y + / 200 * 28 + ? ?", y=3, u=1, v=1)
  89.             \             : mt_lutxy(diffm, diffm.trim(2, 0), expr="x 2 * y < x 4 scalef < & 0 y 2 * x < y 4 scalef < & range_max x x y + / 200 scalef * 28 scalef + ? ?", y=3, u=1, v=1) : nop()
  90.     pmask   = bom ? VersionNumber() < 2.6 ? mt_lutxy(dmask, bmask, expr="y 0 > y 255 < & x 0 == x 255 == | & x y ?", y=3, u=1, v=1)
  91.             \             : mt_lutxy(dmask, bmask, expr="y 0 > y range_max < & x 0 == x range_max == | & x y ?", y=3, u=1, v=1) : nop()
  92.  
  93.     pp0 = bom ? average(out.trim(2, 0), -0.5, out.trim(1, 0), 1.0, out, 1.0, out.loop(2, 0, 0), -0.5) : nop()
  94.     pp1 = bom ? mt_merge(unblend1, unblend2, dmask.removegrain(mode=12, modeU=-1, modeV=-1).greyscale(), y=3, u=sislumaonly ? 1 : 3, v=sislumaonly ? 1 : 3) : nop()
  95.     pp2 = bom ? mt_merge(unblend1, unblend2, bmask.removegrain(mode=12, modeU=-1, modeV=-1), luma=!sislumaonly) : nop()
  96.     pp3 = bom ? mt_merge(unblend1, unblend2, pmask.removegrain(mode=12, modeU=-1, modeV=-1), luma=!sislumaonly).removegrain(mode=0, modeU=12, modeV=12) : nop()
  97.  
  98.     fin  = bom ? eval(om) : nop()
  99.  
  100.     #######################################
  101.     # Unique Identifier Definition
  102.     #######################################
  103.     Try { global Srestore_InstanceNumber = Srestore_InstanceNumber+1 } catch(err) { global Srestore_InstanceNumber = 1 }
  104.  
  105.     # Runtime Environment Preparation & Call
  106.     Eval(StrReplace(""" #"
  107.         #######################################
  108.         # 1) Unique Global Variables Initialization
  109.         #######################################
  110.         global  Srestore_lfr%%%     = -100
  111.         global  Srestore_offs%%%    = 0
  112.         global  Srestore_ldet%%%    = -100
  113.         global  Srestore_lpos%%%    = 0
  114.  
  115.         #######################################
  116.         # 2) Unique Runtime Call
  117.         #######################################
  118.         ###### evaluation call & output calculation ######
  119.         ARGS = "dm, om, bom, thr, frfac, numr, denm, mec, det, bclp, dclp, fin"
  120.         source
  121.         GScriptClip("srestore_inside_%%%(last, dm, om, bom, thr, frfac, numr, denm, mec, det, bclp, dclp, fin)", local=true, args=ARGS)
  122.  
  123.         ###### final decimation & caching ######
  124.         nonyuy2 ? nonyuy2clipout(true) : last
  125.         cache<0 ? last : last.RequestLinear(8, cache, 5, false, false)
  126.  
  127.         temp    = frameratenumerator(det)*float(numr)>2147483600. ? det.assumescaledfps(numr, denm) : nop()
  128.         isclip(temp) ? last.changefps(temp, linear=true) : last.changefps(frameratenumerator(source)*numr, frameratedenominator(source)*denm, linear=true)
  129.  
  130.         return last
  131.  
  132.         #######################################
  133.         # 3) Unique Runtime Function Definition
  134.         #######################################
  135.         function srestore_inside_%%%(clip source, dm, om, bom, thr, frfac, numr, denm, mec, det, bclp, dclp, fin) {
  136.             out = source
  137.  
  138.             ### preparation ###
  139.             cfr = current_frame
  140.             jmp = Srestore_lfr%%%+1==cfr
  141.             cfo = (((cfr%denm)*numr*2+denm+(versionnumber()>2.575 ? numr : 0))%(2*denm))-denm
  142.             bfo = cfo>-numr && cfo<=numr
  143.  
  144.             global  Srestore_lfr%%%     = cfr
  145.             global  Srestore_offs%%%    = bfo && Srestore_offs%%%<=-4*numr
  146.                                                 \? Srestore_offs%%%+2*denm
  147.                                                 \: bfo && Srestore_offs%%%>=4*numr
  148.                                                     \? Srestore_offs%%%-2*denm
  149.                                                     \: Srestore_offs%%%
  150.  
  151.             pos = frfac==1 ? 0 : bfo ? -round((cfo+Srestore_offs%%%)/(2.*numr)) : Srestore_lpos%%%
  152.             cof = cfo+Srestore_offs%%%+2*numr*pos
  153.  
  154.             global  Srestore_ldet%%%    = cfr+pos==Srestore_ldet%%% ? -1 : cfr+pos
  155.  
  156.             ## diff value shifting ##
  157.             d_v = yplanemax(dclp)+.015625
  158.             Srestore_d43%%% = jmp ? Srestore_d32%%% : d_v
  159.             global  Srestore_d32%%% = jmp ? Srestore_d21%%% : d_v
  160.             global  Srestore_d21%%% = jmp ? Srestore_d10%%% : d_v
  161.             global  Srestore_d10%%% = jmp ? Srestore_d01%%% : d_v
  162.             global  Srestore_d01%%% = jmp ? Srestore_d12%%% : d_v
  163.             global  Srestore_d12%%% = jmp ? Srestore_d23%%% : d_v
  164.             global  Srestore_d23%%% = jmp ? Srestore_d34%%% : d_v
  165.             global  Srestore_d34%%% = d_v
  166.  
  167.             ## diff value shifting ##
  168.             m_v = isfloat(om) && abs(om)>5 ? lumadifference(det, det.trim(2, 0))+.015625 : 1
  169.             Srestore_m53%%% = jmp ? Srestore_m42%%% : m_v
  170.             global  Srestore_m42%%% = jmp ? Srestore_m31%%% : m_v
  171.             global  Srestore_m31%%% = jmp ? Srestore_m20%%% : m_v
  172.             global  Srestore_m20%%% = jmp ? Srestore_m11%%% : m_v
  173.             global  Srestore_m11%%% = jmp ? Srestore_m02%%% : m_v
  174.             global  Srestore_m02%%% = jmp ? Srestore_m13%%% : m_v
  175.             global  Srestore_m13%%% = jmp ? Srestore_m24%%% : m_v
  176.             global  Srestore_m24%%% = m_v
  177.  
  178.             ## get blend and clear values ##
  179.             b_v = 128-yplanemin(bclp)
  180.             b_v = b_v<1 ? .125 : b_v
  181.             c_v = yplanemax(bclp)-128
  182.             c_v = c_v<1 ? .125 : c_v
  183.  
  184.             ## blend value shifting ##
  185.             Srestore_bp3%%% = jmp ? Srestore_bp2%%% : bom ? b_v-c_v : b_v
  186.             global  Srestore_bp2%%% = jmp ? Srestore_bp1%%% : Srestore_bp3%%%
  187.             global  Srestore_bp1%%% = jmp ? Srestore_bn0%%% : Srestore_bp3%%%
  188.             global  Srestore_bn0%%% = jmp ? Srestore_bn1%%% : Srestore_bp3%%%
  189.             global  Srestore_bn1%%% = jmp ? Srestore_bn2%%% : Srestore_bp3%%%
  190.             global  Srestore_bn2%%% = jmp ? Srestore_bn3%%% : Srestore_bp3%%%
  191.             global  Srestore_bn3%%% = bom ? b_v-c_v : b_v
  192.  
  193.             ## clear value shifting ##
  194.             Srestore_cp3%%% = jmp ? Srestore_cp2%%% : c_v
  195.             global  Srestore_cp2%%% = jmp ? Srestore_cp1%%% : c_v
  196.             global  Srestore_cp1%%% = jmp ? Srestore_cn0%%% : c_v
  197.             global  Srestore_cn0%%% = jmp ? Srestore_cn1%%% : c_v
  198.             global  Srestore_cn1%%% = jmp ? Srestore_cn2%%% : c_v
  199.             global  Srestore_cn2%%% = jmp ? Srestore_cn3%%% : c_v
  200.             global  Srestore_cn3%%% = c_v
  201.  
  202.             ## used detection values ##
  203.             bb  = select(pos+2, Srestore_bp3%%%, Srestore_bp2%%%, Srestore_bp1%%%, Srestore_bn0%%%, Srestore_bn1%%%)
  204.             bc  = select(pos+2, Srestore_bp2%%%, Srestore_bp1%%%, Srestore_bn0%%%, Srestore_bn1%%%, Srestore_bn2%%%)
  205.             bn  = select(pos+2, Srestore_bp1%%%, Srestore_bn0%%%, Srestore_bn1%%%, Srestore_bn2%%%, Srestore_bn3%%%)
  206.  
  207.             cb  = select(pos+2, Srestore_cp3%%%, Srestore_cp2%%%, Srestore_cp1%%%, Srestore_cn0%%%, Srestore_cn1%%%)
  208.             cc  = select(pos+2, Srestore_cp2%%%, Srestore_cp1%%%, Srestore_cn0%%%, Srestore_cn1%%%, Srestore_cn2%%%)
  209.             cn  = select(pos+2, Srestore_cp1%%%, Srestore_cn0%%%, Srestore_cn1%%%, Srestore_cn2%%%, Srestore_cn3%%%)
  210.  
  211.             dbb = select(pos+2, Srestore_d43%%%, Srestore_d32%%%, Srestore_d21%%%, Srestore_d10%%%, Srestore_d01%%%)
  212.             dbc = select(pos+2, Srestore_d32%%%, Srestore_d21%%%, Srestore_d10%%%, Srestore_d01%%%, Srestore_d12%%%)
  213.             dcn = select(pos+2, Srestore_d21%%%, Srestore_d10%%%, Srestore_d01%%%, Srestore_d12%%%, Srestore_d23%%%)
  214.             dnn = select(pos+2, Srestore_d10%%%, Srestore_d01%%%, Srestore_d12%%%, Srestore_d23%%%, Srestore_d34%%%)
  215.             dn2 = select(pos+2, Srestore_d01%%%, Srestore_d12%%%, Srestore_d23%%%, Srestore_d34%%%, Srestore_d34%%%)
  216.  
  217.             mb1 = select(pos+2, Srestore_m53%%%, Srestore_m42%%%, Srestore_m31%%%, Srestore_m20%%%, Srestore_m11%%%)
  218.             mb  = select(pos+2, Srestore_m42%%%, Srestore_m31%%%, Srestore_m20%%%, Srestore_m11%%%, Srestore_m02%%%)
  219.             mc  = select(pos+2, Srestore_m31%%%, Srestore_m20%%%, Srestore_m11%%%, Srestore_m02%%%, Srestore_m13%%%)
  220.             mn  = select(pos+2, Srestore_m20%%%, Srestore_m11%%%, Srestore_m02%%%, Srestore_m13%%%, Srestore_m24%%%)
  221.             mn1 = select(pos+2, Srestore_m11%%%, Srestore_m02%%%, Srestore_m13%%%, Srestore_m24%%%, .01)
  222.  
  223.  
  224.             ### basic calculation ###
  225.             bbool   = .8*bc*cb>bb*cc && .8*bc*cn>bn*cc && bc*bc>cc
  226.             blend   = bbool && bc*5>cc && dbc+dcn>1.5*thr && (dbb<7*dbc || dbb<8*dcn) && (dnn<8*dcn || dnn<7*dbc) &&
  227.                     \ (mb<mb1 && mb<mc || mn<mn1 && mn<mc || (dbb+dnn)*4<dbc+dcn || (bb*cc*5<bc*cb || mb>thr) && (bn*cc*5<bc*cn || mn>thr) && bc>thr)
  228.  
  229.             clear   = dbb+dbc>thr && dcn+dnn>thr && (bc<2*bb || bc<2*bn) && (dbb+dnn)*2>dbc+dcn && (mc<.96*mb && mc<.96*mn && (bb*2>cb || bn*2>cn) &&
  230.                     \ cc>cb && cc>cn || frfac>.45 && frfac<.55 && .8*mc>mb1 && .8*mc>mn1 && mb>.8*mn && mn>.8*mb)
  231.  
  232.             highd   = dcn>5*dbc && dcn>5*dnn && dcn>thr && dbc<thr && dnn<thr
  233.  
  234.             lowd    = dcn*5<dbc && dcn*5<dnn && dbc>thr && dnn>thr && dcn<thr && frfac>.35 && (frfac<.51 || dcn*5<dbb)
  235.  
  236.             res     = (Srestore_d43%%%<thr
  237.                       \&& Srestore_d32%%%<thr
  238.                       \&& Srestore_d21%%%<thr
  239.                       \&& Srestore_d10%%%<thr
  240.                       \&& Srestore_d01%%%<thr
  241.                       \&& Srestore_d12%%%<thr
  242.                       \&& Srestore_d23%%%<thr
  243.                       \&& Srestore_d34%%%<thr)
  244.                       \|| (dbc*4<dbb && dcn*4<dbb && dnn*4<dbb && dn2*4<dbb)
  245.                       \|| (dcn*4<dbc && dnn*4<dbc && dn2*4<dbc)
  246.  
  247.  
  248.             ### offset calculation ###
  249.             odm     = blend ? denm : clear ? 0 : highd ? denm-numr : lowd ? 2*denm-numr : cof
  250.             odm     = odm+round((cof-odm)/(2.*denm))*2*denm
  251.             odr     = (blend ? denm-numr : clear ? numr : highd ? numr : frfac<0.5 ? 2*numr : 2*(denm-numr)) * .9
  252.  
  253.             cof     = Srestore_ldet%%%<0
  254.                         \? cof
  255.                         \: cof>odm+odr
  256.                             \? cof-Srestore_offs%%%-odm-odr>denm && res
  257.                                 \? odm+2*denm-odr
  258.                                 \: odm+odr
  259.                             \: cof<odm-odr
  260.                                 \? Srestore_offs%%%>denm && res
  261.                                     \? odm-2*denm+odr
  262.                                     \: odm-odr
  263.                                 \: Srestore_offs%%%<-1.15*denm && res
  264.                                     \? cof+2*denm
  265.                                     \: Srestore_offs%%%>1.25*denm && res
  266.                                         \? cof-2*denm
  267.                                         \: cof
  268.  
  269.             global  Srestore_offs%%%    = frfac==1 ? 0 : cof-cfo-2*numr*pos
  270.             global  Srestore_lpos%%%    = pos
  271.             opos    = frfac==1 ? 0 : -round((cfo+Srestore_offs%%%+(bfo && Srestore_offs%%%<=-4*numr ? denm : 0))/(2.*numr))
  272.             pos     = opos<-2 ? -2 : opos>2 ? 2 : opos
  273.  
  274.             ### frame output calculation - resync - dup ###
  275.             dbb = select(pos+2, Srestore_d43%%%, Srestore_d32%%%, Srestore_d21%%%, Srestore_d10%%%, Srestore_d01%%%)
  276.             dbc = select(pos+2, Srestore_d32%%%, Srestore_d21%%%, Srestore_d10%%%, Srestore_d01%%%, Srestore_d12%%%)
  277.             dcn = select(pos+2, Srestore_d21%%%, Srestore_d10%%%, Srestore_d01%%%, Srestore_d12%%%, Srestore_d23%%%)
  278.             dnn = select(pos+2, Srestore_d10%%%, Srestore_d01%%%, Srestore_d12%%%, Srestore_d23%%%, Srestore_d34%%%)
  279.  
  280.             ## dup_hq - merge ##
  281.             dup     = opos!=pos || abs(dm)<2 || abs(dm)==3 ? 0 : dcn*5<dbc && dnn*5<dbc && (dcn<1.25*thr || bn<bc && pos==Srestore_lpos%%%) ||
  282.                     \ (dcn*dcn<dbc || dcn*5<dbc) && bn<bc && pos==Srestore_lpos%%% && dnn<.9*dbc || dnn*9<dbc && dcn*3<dbc ? 1 :
  283.                     \ (dbc*dbc<dcn || dbc*5<dcn) && bb<bc && pos==Srestore_lpos%%% && dbb<.9*dcn || dbb*9<dcn && dbc*3<dcn ||
  284.                     \ dbb*5<dcn && dbc*5<dcn && (dbc<1.25*thr || bb<bc && pos==Srestore_lpos%%%) ? -1 : 0
  285.             mer     = bom==false && opos==pos && dup==0 && abs(dm)>2 && (dbc*8<dcn || dbc*8<dbb || dcn*8<dbc || dcn*8<dnn || dbc*2<thr ||
  286.                     \ dcn*2<thr || dnn*9<dbc && dcn*3<dbc || dbb*9<dcn && dbc*3<dcn)
  287.  
  288.             ## deblend - doubleblend removal - postprocessing ##
  289.             add     = Srestore_bp1%%%*Srestore_cn2%%%>Srestore_bn2%%%*Srestore_cp1%%%*(1+thr*.01)
  290.                       \&& Srestore_bn0%%%*Srestore_cn2%%%>Srestore_bn2%%%*Srestore_cn0%%%*(1+thr*.01)
  291.                       \&& Srestore_cn2%%%*Srestore_bn1%%%>Srestore_cn1%%%*Srestore_bn2%%%*(1+thr*.01)
  292.             dup     = bom
  293.                         \? (Srestore_bn0%%%>Srestore_bp2%%%
  294.                             \&& Srestore_bn0%%%>=Srestore_bp1%%%
  295.                             \&& Srestore_bn0%%%>Srestore_bn1%%%
  296.                             \&& Srestore_bn0%%%>Srestore_bn2%%%
  297.                             \&& Srestore_cn0%%%<125
  298.                             \? (Srestore_d12%%%*Srestore_d12%%%<Srestore_d10%%%
  299.                                 \|| Srestore_d12%%%*9<Srestore_d10%%%)
  300.                                 \? 1
  301.                                 \: (Srestore_d10%%%*Srestore_d10%%%<Srestore_d12%%%
  302.                                     \|| Srestore_d10%%%*9<Srestore_d12%%%)
  303.                                     \? 0
  304.                                     \: 4
  305.                             \: Srestore_bp1%%%>Srestore_bp3%%%
  306.                                 \&& Srestore_bp1%%%>=Srestore_bp2%%%
  307.                                 \&& Srestore_bp1%%%>Srestore_bn0%%%
  308.                                 \&& Srestore_bp1%%%>Srestore_bn1%%%
  309.                                 \? 1
  310.                                 \: 0)
  311.                         \: dup!=0
  312.                             \? dup
  313.                             \: om>0 && om<5
  314.                                 \? (bbool==false
  315.                                     \? 0
  316.                                     \: (om==4 && Srestore_bp1%%%*Srestore_cn1%%%<Srestore_bn1%%%*Srestore_cp1%%%)
  317.                                         \|| (om==3 && Srestore_d10%%%<Srestore_d01%%%)
  318.                                         \|| om==1
  319.                                         \? -1
  320.                                         \: 1)
  321.                                 \: om==5
  322.                                     \? (Srestore_bp1%%%*Srestore_cp2%%%>Srestore_bp2%%%*Srestore_cp1%%%*(1+thr*.01)
  323.                                         \&& Srestore_bn0%%%*Srestore_cp2%%%>Srestore_bp2%%%*Srestore_cn0%%%*(1+thr*.01)
  324.                                         \&& Srestore_cp2%%%*Srestore_bn1%%%>Srestore_cn1%%%*Srestore_bp2%%%*(1+thr*.01)
  325.                                         \&& (add==false || Srestore_cp2%%%*Srestore_bn2%%%>Srestore_cn2%%%*Srestore_bp2%%%)
  326.                                         \? -2
  327.                                         \: add
  328.                                             \? 2
  329.                                             \: Srestore_bn0%%%*Srestore_cp1%%%>Srestore_bp1%%%*Srestore_cn0%%%
  330.                                                 \&& (Srestore_bn0%%%*Srestore_cn1%%%<Srestore_bn1%%%*Srestore_cn0%%%
  331.                                                 \|| Srestore_cp1%%%*Srestore_bn1%%%>Srestore_cn1%%%*Srestore_bp1%%%)
  332.                                                 \? -1
  333.                                                 \: Srestore_bn0%%%*Srestore_cn1%%%>Srestore_bn1%%%*Srestore_cn0%%%
  334.                                                     \? 1
  335.                                                     \: 0)
  336.                                     \: 0
  337.  
  338.             ### output clip ###
  339.             oclp    = mer && dup==0 ? mec : out
  340.             opos    = opos + dup - (dup==0 && mer && dbc<dcn ? 1 : 0)
  341.             dup==4 ? fin : opos<0 ? oclp.loop(1-opos, 0, 0) : oclp.trim(opos, 0)
  342.  
  343.         }
  344.     """, "%%%", string(Srestore_InstanceNumber)))   #"
  345. }
  346.  
  347.  
  348.  
  349. # Original:- By Vampiredom, Gavino, IanB
  350. # Repeated, string replacements
  351.  
  352. Function StrReplace(string s, string find, string replace)
  353. { i = s.FindStr(find) return (i==0 ? s : (s.LeftStr(i-1)+replace+s.MidStr(Strlen(find)+i)).StrReplace(find, replace)) }
Advertisement
Add Comment
Please, Sign In to add comment