Advertisement
Guest User

MCLS_16 ver beta 0.9 (the right one)

a guest
Oct 17th, 2016
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function MCLS_16(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",bool "stacked")
  3. {
  4.  
  5.    #Motion Compensate Limited Sharpen for a 16bit stacked clip by Motenai Yoda
  6.    #first relase - beta 9
  7.    #it works (or should) with 16bit stacked clip input/output
  8.  
  9.    strength = Default(strength, 1.0)
  10.    thsad = Default(thsad, 400)
  11.    plane = Default(plane, 0)
  12.    ss = Default(ss, Defined(sharp) ? 1.0 : 1.25)
  13.    repair = Default(repair, (Defined(sharp)) ? false : true)
  14.    dmode = Default(dmode, 1)
  15.    edgemode = Default(edgemode, 1)
  16.    blur_gaussian = Default(blur_gaussian, false)
  17.    secure = Default(secure, false)
  18.    stacked = Default(stacked, true)
  19.  
  20.    isPlus=(FindStr(VersionString(), "AviSynth+") != 0)
  21.  
  22.    cS = !stacked ? isPlus ? c.ConvertFromDoubleWidth().ConvertToStacked() :\
  23.    c.MCLS_16_aux_interleaved(false) : c
  24.    
  25.    str_lo = (strength < 1) ? " "+String(strength)+" *" : ""
  26.    str_hi = (strength > 1) ? " "+String(strength)+" *" : ""
  27.    
  28.    HD = (cS.width > 1280) ? 2 : (cS.width > 720) ? 1 : 0
  29.    Pel = Select(HD, 2, 1, 1)
  30.    Truemotion = Select(HD, True, False, False)
  31.    Blksize = Select(HD, 8, 16, 32)
  32.    Overlap = Select(HD, 4, 8, 8)
  33.      
  34.    Yp = (plane == 0 || plane == 4) ? 3 : 1
  35.    Up = (plane == 1 || plane == 3 || plane == 4) ? 3 : 1
  36.    Vp = (plane == 2 || plane == 3 || plane == 4) ? 3 : 1
  37.    
  38.    Chromap = (plane == 0) ? false : true
  39.    masked = (edgemode != 0) || Defined(mask)
  40.    
  41.    width2 = Round(cS.width*ss)
  42.    height2 = Round(cS.height*ss/2.0)
  43.  
  44.    wpad = 16-(width2%16)
  45.    hpad = 16-(height2%16)
  46.    
  47.    bRadius = Round(Select(HD, 3, 3, 4) / 1.25 * ss)
  48.  
  49.  
  50.  
  51.      
  52.    resized_source = (ss != 1.0) ? cS.Dither_resize16(width2+wpad, height2+hpad, y=3, u=Up,\
  53.    v=Vp) : c
  54.    resized_sharp = Defined(sharp) ? (ss != 1.0) ? sharp.Dither_resize16(width2+wpad, height2+hpad,\
  55.    y=Yp, u=Up, v=Vp) : sharp : nop()
  56.    
  57.    pre = resized_source.Dither_removegrain16(3, (Up == 3) ? 3 : -1, (Vp == 3) ? 3 : -1)
  58.    
  59.    sharp0 = Defined(sharp) ? Dither_sub16(resized_sharp, resized_source, wrap=False,  y=Yp, u=Up,\
  60.    v=Vp, dif=true) : Dither_sub16(resized_source, blur_gaussian ? Dither_box_filter16(resized_source,\
  61.    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).\
  62.    Dither_box_filter16(radius=max(bRadius-1,1), y=Yp, u=Up, v=Vp) : Dither_box_filter16(resized_source,\
  63.    radius=bRadius, y=Yp, u=Up, v=Vp), wrap=False,  y=Yp, u=Up, v=Vp, dif=true)
  64.  
  65.    source0 = Ditherpost(pre, mode=-1, y=3, u=Up, v=Vp)
  66.    
  67.    mask = Defined(mask) ? mask :\
  68.    (abs(edgemode) == 1) ? source0.mt_edge("min/max", y=3, u=1, v=1).mt_deflate(y=3, u=1, v=1).\
  69.    removegrain(12, -1, -1) :\
  70.    (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).\
  71.    removegrain(2,-1,-1).mt_expand(u=1,v=1).mt_deflate(u=1,v=1) : nop()
  72.    mask = (edgemode < 0) ? mask.mt_invert(y=3,u=1,v=1) : mask
  73.    mask = (masked) ? stackvertical(mask, mask) : nop()
  74.  
  75.    sup0 = source0.MSuper(pel=Pel, sharp=2, chroma=Chromap)
  76.    sharp0m = sharp0.Dither_get_msb()
  77.    sup1 = sharp0m.MSuper(pel=Pel, sharp=2, chroma=Chromap)
  78.    sharp0l = sharp0.Dither_get_lsb()
  79.    sup2 = sharp0l.MSuper(pel=Pel, sharp=2, chroma=Chromap)
  80.    
  81.    bv1 = sup0.MAnalyse(isb=true, delta=1, chroma=Chromap, blksize=Blksize, truemotion=Truemotion, overlap=Overlap)
  82.    fv1 = sup0.MAnalyse(isb=false, delta=1, chroma=Chromap, blksize=Blksize, truemotion=Truemotion, overlap=Overlap)
  83.    
  84.    nullclip = source0.mt_lut(y= (Yp==3) ? -0 : 1, u= (Up==3) ? -0 : 1, v= (Vp==3) ? -0 : 1)
  85.    
  86.    diff1 = sharp0m.MDegrain1(sup1, bv1, fv1, plane=plane, thsad=thsad, lsb=true)
  87.    diff2 = sharp0l.MDegrain1(sup2, bv1, fv1, plane=plane, thsad=thsad, lsb=false)
  88.    diff2_16 = stackvertical(nullclip, diff2)
  89.    
  90.    diff3 = Dither_add16(diff1, diff2_16, wrap=False,  y=Yp, u=Up, v=Vp, dif=false)
  91.    secured = secure ? diff3.dither_lut16("x 32768 - abs 512 < x x 32768 < 32256 33280 ? ?",  y=Yp, u=Up, v=Vp) :\
  92.    diff3
  93.    
  94.    sharped_back = Dither_add16(resized_source, secured, wrap=False,  y=Yp, u=Up, v=Vp, dif=true)
  95.    
  96.    repaired = (repair) ? Dither_repair16(sharped_back, resized_source, (Yp == 3) ? 1 : -1 ,\
  97.    (Up == 3) ? 1 : -1, (Vp == 3) ? 1 : -1).Dither_merge16(sharped_back,sharped_back.mt_lut(y=-76,\
  98.    u=1,v=1),luma=true, y=Yp, u=Up, v=Vp): sharped_back
  99.    
  100.    bias = (dmode == 1) ? resized_source.Dither_lut16("x 4096. - 56064. / 0 1 clip pi * sin 0.5 ^ 65536. *"+\
  101.    str_lo, y=3, u=1, v=1) : nop()
  102.    
  103.    bias = (masked) ? (dmode == 1) ? bias.mt_lutxy(mask, "x y * 8 >>u", y=3, u=1, v=1) : mask : bias
  104.    
  105.    repaired = (dmode == 1 || masked) ?\
  106.    Dither_merge16(resized_source, repaired, bias, y=Yp, u=Up, v=Vp, luma=true) : repaired
  107.    
  108.    stronged = (strength > 1) ? repaired.dither_sub16(resized_source,dif=true, y=Yp, u=Up, v=Vp).\
  109.    dither_lut16("x 32768 -"+str_hi+" 32768 +", y=Yp, u=Up, v=Vp).\
  110.    dither_add16(resized_source,dif=true, y=Yp, u=Up, v=Vp) : repaired
  111.    
  112.    resized_back =  (ss != 1.0) ? Dither_resize16(stronged, cS.width(), cS.height()/2, y=Yp, u=Up, v=Vp) : stronged
  113.  
  114.    cWW = !stacked ? isPlus ? resized_back.ConvertFromStacked().ConvertToDoubleWidth() :\
  115.    resized_back.MCLS_16_aux_interleaved(true) : resized_back
  116.    
  117.    return ytouv((Up == 3) ? cWW.utoy() : c.utoy(), (Vp == 3) ? cWW.vtoy() : c.vtoy(),\
  118.    (Yp == 3) ? cWW : c)
  119.    #~ mask
  120.  
  121.  
  122.    function MCLS_16_aux_interleaved(clip c, bool reverse)
  123.    {
  124.       separated = c.FTurnLeft().SeparateFields().AssumeFrameBased().FTurnRight()
  125.       return !reverse ? StackVertical(separated.SelectEven(),separated.SelectOdd()) :\
  126.       Interleave(c.Dither_get_msb(),c.Dither_get_lsb()).FTurnRight().AssumeFieldBased().Weave().FTurnLeft()
  127.    }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement