Guest User

MCLS 16 "plus" avs+ only

a guest
Mar 13th, 2017
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function MCLS_16_plus(clip c, float "strength", clip "sharp", int "thsad", int "plane",\
  2. float "ss", bool "repair", bool "secure", int "dmode", int "edgemode", clip "mask", bool "blur_gaussian")
  3. {
  4.  
  5.    #Motion Compensate Limited Sharpen for a 16bit stacked clip by Motenai Yoda
  6.    #first relase - beta 12
  7.    #it works (or should) with 16bit avs+ only input (but mask is still 8bit only, I have to read how pinterf's autoscale works)
  8.    #dependencies avs+, modded masktools2, rgtools, mvtools, dither_package, resamplemt
  9.  
  10.    strength = Default(strength, 1.0)
  11.    thsad = Default(thsad, 400)
  12.    plane = Default(plane, 0)
  13.    ss = Default(ss, Defined(sharp) ? 1.0 : 1.25)
  14.    repair = Default(repair, (Defined(sharp)) ? false : true)
  15.    dmode = Default(dmode, 1)
  16.    edgemode = Default(edgemode, 1)
  17.    blur_gaussian = Default(blur_gaussian, false)
  18.    secure = Default(secure, false)
  19.    stacked = Default(stacked, true)
  20.  
  21.    str_lo = (strength < 1) ? " "+String(strength)+" *" : ""
  22.    str_hi = (strength > 1) ? " "+String(strength)+" *" : ""
  23.    
  24.    HD = (c.width > 1280) ? 2 : (c.width > 720) ? 1 : 0
  25.    Pel = Select(HD, 2, 1, 1)
  26.    Truemotion = Select(HD, True, False, False)
  27.    Blksize = Select(HD, 8, 16, 32)
  28.    Overlap = Select(HD, 4, 8, 8)
  29.      
  30.    Yp = (plane == 0 || plane == 4) ? 3 : 1
  31.    Up = (plane == 1 || plane == 3 || plane == 4) ? 3 : 1
  32.    Vp = (plane == 2 || plane == 3 || plane == 4) ? 3 : 1
  33.    
  34.    Chromap = (plane == 0) ? false : true
  35.    masked = (edgemode != 0) || Defined(mask)
  36.    
  37.    width2 = Round(c.width*ss)
  38.    height2 = Round(c.height*ss)
  39.  
  40.    wpad = 16-(width2%16)
  41.    hpad = 16-(height2%16)
  42.    
  43.    bRadius = Round(Select(HD, 3, 3, 4) / 1.25 * ss)
  44.      
  45.    resized_source = (ss != 1.0) ? c.Spline36resizemt(width2+wpad, height2+hpad) : c
  46.    resized_sharp = Defined(sharp) ? (ss != 1.0) ? sharp.Spline36resizemt(width2+wpad, height2+hpad) : sharp : nop()
  47.    
  48.    pre = resized_source.removegrain(3, (Up == 3) ? 3 : -1, (Vp == 3) ? 3 : -1)
  49.    
  50.    blur = blur_gaussian ? Dither_box_filter16(resized_source.converttostacked(),\
  51.    radius=max(bRadius-2, 1), y=Yp, u=Up, v=Vp).Dither_box_filter16(radius=max(bRadius-1,1), y=Yp, u=Up, v=Vp).\
  52.    Dither_box_filter16(radius=max(bRadius-1,1), y=Yp, u=Up, v=Vp) : Dither_box_filter16(resized_source.converttostacked(),\
  53.    radius=bRadius, y=Yp, u=Up, v=Vp)
  54.    
  55.    sharp0 = Defined(sharp) ? mt_makediff(resized_sharp, resized_source,  y=Yp, u=Up,\
  56.    v=Vp) : mt_makediff(resized_source, blur.convertfromstacked(bits=16),  y=Yp, u=Up, v=Vp)
  57.  
  58.    source0 = pre.ConvertBits(8)
  59.    
  60.    mask = Defined(mask) ? mask :\
  61.    (abs(edgemode) == 1) ? source0.mt_edge("min/max", y=3, u=1, v=1).mt_deflate(y=3, u=1, v=1).\
  62.    removegrain(12, -1, -1) :\
  63.    (abs(edgemode) == 2) ? source0.mt_edge("min/max",6,255,y=3,u=1,v=1).mt_lut("x 255 / 1 1.5 / ^ 1024 *",u=1,v=1).\
  64.    removegrain(2,-1,-1).mt_expand(u=1,v=1).mt_deflate(u=1,v=1) : nop()
  65.    mask = (edgemode < 0) ? mask.mt_invert(y=3,u=1,v=1) : mask
  66.    mask = (masked) ? mask.convertbits(16) : nop()
  67.  
  68.    sup0 = pre.MSuper(pel=Pel, sharp=2, chroma=Chromap)
  69.    sup1 = sharp0.MSuper(pel=Pel, sharp=2, chroma=Chromap)
  70.    
  71.    bv1 = sup0.MAnalyse(isb=true, delta=1, chroma=Chromap, blksize=Blksize, truemotion=Truemotion, overlap=Overlap)
  72.    fv1 = sup0.MAnalyse(isb=false, delta=1, chroma=Chromap, blksize=Blksize, truemotion=Truemotion, overlap=Overlap)
  73.    
  74.    diff = sharp0.MDegrain1(sup1, bv1, fv1, plane=plane, thsad=thsad)
  75.    secured = secure ? diff.mt_lut("x 32768 - abs 512 < x x 32768 < 32256 33280 ? ?",  y=Yp, u=Up, v=Vp):\
  76.    diff
  77.    
  78.    sharped_back = mt_adddiff(resized_source, secured, y=Yp, u=Up, v=Vp)
  79.    
  80.    repaired = (repair) ? repair(sharped_back, resized_source, (Yp == 3) ? 1 : -1 ,\
  81.    (Up == 3) ? 1 : -1, (Vp == 3) ? 1 : -1).merge(sharped_back,0.33) : sharped_back
  82.    
  83.    bias = (dmode == 1) ? resized_source.mt_lut("x 4096. - 56064. / 0 1 clip pi * sin 0.5 ^ 65536. *"+\
  84.    str_lo, y=3, u=1, v=1) : nop()
  85.    
  86.    bias = (masked) ? (dmode == 1) ? bias.mt_lutxy(mask, "x y * 8 >>u", y=3, u=1, v=1) : mask : bias
  87.    
  88.    repaired = (dmode == 1 || masked) ?\
  89.    mt_merge(resized_source, repaired, bias, y=Yp, u=Up, v=Vp, luma=true) : repaired
  90.    
  91.    stronged = (strength > 1) ? repaired.mt_makediff(resized_source, y=Yp, u=Up, v=Vp).\
  92.    mt_lut("x 32768 -"+str_hi+" 32768 +", y=Yp, u=Up, v=Vp).\
  93.    mt_adddiff(resized_source, y=Yp, u=Up, v=Vp) : repaired
  94.    
  95.    resized_back =  (ss != 1.0) ? spline36resizemt(stronged, c.width(), c.height()) : stronged
  96.  
  97.    return ytouv((Up == 3) ? resized_back.utoy() : c.utoy(), (Vp == 3) ? resized_back.vtoy() : c.vtoy(),\
  98.    (Yp == 3) ? resized_back : c)
  99.  
  100. }
Add Comment
Please, Sign In to add comment