Upload/f/f7/Deblock QED MT2.avs

From Avisynth

Jump to: navigation, search
# Changes 2008-08-18: (Didée)
#  - Replaced the ugly stackXXX cascade with mt_LutSpa() (requires MaskTools v2.0a35)
#  - Changed Quant and Offset defaults to 24,28,2,4,4,8

function Deblock_QED ( clip clp, int "quant1", int "quant2", 
 \                     int "aOff1", int "bOff1", int "aOff2", int "bOff2", int "uv" )
{
quant1 = default( quant1, 24 )
quant2 = default( quant2, 28 )

aOff1  = default( aOff1, 2 )
bOff1  = default( bOff1, 4 )
aOff2  = default( aOff2, 4 )
bOff2  = default( bOff2, 8 )
uv     = default( uv,    3 )  #  u=3 -> use proposed method for chroma deblocking
                              #  u=2 -> no chroma deblocking at all (fastest method)
ox     = clp.width()          #  u=1|-1 -> directly use chroma debl. from the normal|strong deblock()
oy     = clp.height()                

block  = clp.mt_LutSpa(false,"x 1 + 8 % 1 < x 8 % 1 < y 1 + 8 % 1 < y 8 % 1 < | | | 255 0 ?",U=3,V=3)


# create normal deblocking (for block borders) and strong deblocking (for block interiour)
normal   = clp.deblock(quant=quant1,aOffset=aOff1,bOffset=bOff1)
strong   = clp.deblock(quant=quant2,aOffset=aOff2,bOffset=bOff2)

# build difference maps of both
normalD  = mt_makediff(clp,normal,chroma=uv>2?"process":"ignore") 
strongD  = mt_makediff(clp,strong,chroma=uv>2?"process":"ignore") 

# separate border values of the difference maps, and set the interiours to '128'
strongD2 = mt_lutxy(StrongD,block,expr="y 255 == x 128 ?",U=uv,V=uv)
normalD2 = mt_lutxy(normalD,block,expr="y 255 == x 128 ?",U=uv,V=uv)

# interpolate the border values over the whole block: DCTFilter can do it. (Kiss to Tom Barry!)
# (Note: this is not fully accurate, but a reasonable approximation.)
strongD3 = strongD2.mt_lut(expr="x 128 - 1.01 * 128 +",U=uv,V=uv).dctfilter(1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0)# .yv12lut("x 128 - 2 / 128 +")

# apply compensation from "normal" deblocking to the borders of the full-block-compensations calculated 
# from "strong" deblocking ... 
strongD4 = mt_lutxy(strongD3,normalD2,expr="y 128 == x y ?",U=uv,V=uv)

# ... and apply it.
deblocked= mt_makediff(clp,strongD4,chroma=uv>2?"process":"ignore") 

# simple decisions how to treat chroma
deblocked = (uv<0) ? deblocked.mergechroma(strong) : uv<2 ? deblocked.mergechroma(normal) : deblocked

deblocked
return( last )
}
Personal tools