View difference between Paste ID: 8Xu0WXs4 and UAkjatZ6
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
}