SHOW:
|
|
- or go back to the newest paste.
1 | # 2019.07.20 | |
2 | function BalanceBorders(clip c, int cTop, int cBottom, int cLeft, int cRight, int "thresh", int "blur") | |
3 | { | |
4 | sisavs26 = !(VersionNumber() < 2.6) | |
5 | sisphbd = AvsPlusVersionNumber > 2294 | |
6 | ||
7 | sislumaonly = sisphbd ? c.isy() : sisavs26 ? c.isy8() : false | |
8 | ||
9 | sisfullchrom = sisphbd ? c.is444() : sisavs26 ? c.isyv24() : false | |
10 | ||
11 | sis420chr = sisphbd ? c.is420() : c.isyv12() | |
12 | ||
13 | Assert(sis420chr || sisfullchrom || sislumaonly, "This is not a Square chroma clip.") | |
14 | ||
15 | thresh = Default(thresh, 128) | |
16 | blur = Default(blur, 999) | |
17 | ||
18 | Assert(blur > 0, "Blur parameter in BalanceBorders() must be > 0") | |
19 | Assert(thresh > 0, "Thresh parameter in BalanceBorders() must be > 0") | |
20 | ||
21 | - | cTop >0 ? BalanceTopBorder(cTop, thresh, blur, sislumaonly, sis420chr).sTryFTurnRight() : last.sTryFTurnRight() |
21 | + | |
22 | - | cLeft >0 ? BalanceTopBorder(cLeft, thresh, blur, sislumaonly, sis420chr).sTryFTurnRight() : last.sTryFTurnRight() |
22 | + | cTop >0 ? BalanceTopBorder(cTop, thresh, blur, sislumaonly, sis420chr, sisavs26).sTryFTurnRight() : last.sTryFTurnRight() |
23 | - | cBottom >0 ? BalanceTopBorder(cBottom, thresh, blur, sislumaonly, sis420chr).sTryFTurnRight() : last.sTryFTurnRight() |
23 | + | cLeft >0 ? BalanceTopBorder(cLeft, thresh, blur, sislumaonly, sis420chr, sisavs26).sTryFTurnRight() : last.sTryFTurnRight() |
24 | - | cRight >0 ? BalanceTopBorder(cRight, thresh, blur, sislumaonly, sis420chr).sTryFTurnRight() : last.sTryFTurnRight() |
24 | + | cBottom >0 ? BalanceTopBorder(cBottom, thresh, blur, sislumaonly, sis420chr, sisavs26).sTryFTurnRight() : last.sTryFTurnRight() |
25 | cRight >0 ? BalanceTopBorder(cRight, thresh, blur, sislumaonly, sis420chr, sisavs26).sTryFTurnRight() : last.sTryFTurnRight() | |
26 | } | |
27 | - | function BalanceTopBorder(clip c, int cTop, int "thresh", int "blur", bool "sislumaonly", bool "sis420chr") |
27 | + | |
28 | function BalanceTopBorder(clip c, int cTop, int "thresh", int "blur", bool "sislumaonly", bool "sis420chr", bool "sisavs26") | |
29 | { | |
30 | cWidth = c.width | |
31 | cHeight = c.height | |
32 | cTop = min(cTop,cHeight-1) | |
33 | cTop2 = max(sis420chr ? 4 : 2,cTop) | |
34 | blurWidth = max(4,floor(cWidth/blur)) | |
35 | ||
36 | c2 = c.PointResize(cWidth*2,cHeight*2) | |
37 | ||
38 | c2.\ | |
39 | Crop(0,cTop*2,cWidth*2,2) | |
40 | PointResize(cWidth*2,cTop2*2) | |
41 | BilinearResize(blurWidth*2,cTop2*2) | |
42 | mt_convolution("1 1 1","0 1 0",y=3,u=sislumaonly ? 1 : 3,v=sislumaonly ? 1 : 3) | |
43 | PointResize(blurWidth*2,cTop*2) | |
44 | BilinearResize(cWidth*2,cTop*2) | |
45 | referenceBlur = last | |
46 | ||
47 | original = c2.Crop(0,0,cWidth*2,cTop*2) | |
48 | ||
49 | original | |
50 | PointResize(Width(),cTop2*2) | |
51 | BilinearResize(blurWidth*2,cTop2*2) | |
52 | mt_convolution("1 1 1","0 1 0",y=3,u=sislumaonly ? 1 : 3,v=sislumaonly ? 1 : 3) | |
53 | PointResize(blurWidth*2,cTop*2) | |
54 | BilinearResize(cWidth*2,cTop*2) | |
55 | originalBlur = last | |
56 | - | balanced = mt_lutXYZ(original,originalBlur,referenceBlur,"z y - x +",y=3,u=3,v=3) |
56 | + | |
57 | balanced = sisavs26 ? mt_lutXYZ(original,originalBlur,referenceBlur,"z y - x +",clamp_float=true,use_expr=3,y=3,u=3,v=3) : mt_lutXYZ(original,originalBlur,referenceBlur,"z y - x +",y=3,u=3,v=3) | |
58 | difference = mt_makeDiff(balanced,original,y=3,u=3,v=3) | |
59 | ||
60 | tp = string(128+thresh) | |
61 | - | difference = difference.mt_lut("x "+tp+" > "+tp+" x ?",y=3,u=3,v=3) |
61 | + | |
62 | - | difference = difference.mt_lut("x "+tm+" < "+tm+" x ?",y=3,u=3,v=3) |
62 | + | difference = sisavs26 ? difference.mt_lut("x "+tp+" scalef > "+tp+" scalef x ?",Use_expr=2,y=3,u=3,v=3) : difference.mt_lut("x "+tp+" > "+tp+" x ?",y=3,u=3,v=3) |
63 | difference = sisavs26 ? difference.mt_lut("x "+tm+" scalef < "+tm+" scalef x ?",Use_expr=2,y=3,u=3,v=3) : difference.mt_lut("x "+tm+" < "+tm+" x ?",y=3,u=3,v=3) | |
64 | ||
65 | mt_addDiff(original,difference,y=3,u=3,v=3) | |
66 | ||
67 | StackVertical(last,c2.Crop(0,cTop*2,cWidth*2,(cHeight-cTop)*2)).PointResize(cWidth,cHeight) | |
68 | } | |
69 | function sTryFTurnRight(clip c, bool "chroma") { | |
70 | - | Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0 ? dontdoft : nop() |
70 | + | |
71 | IsAvsPlus ? dontdoft : nop() | |
72 | return c.FTurnRight(chroma=chroma) | |
73 | } | |
74 | catch(err_msg) { | |
75 | return c.TurnRight() | |
76 | } | |
77 | } |