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