Advertisement
Zastin

f3kdb stuff (AVS)

Feb 8th, 2017
513
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function f3kpf(clip src, int "range", int "y", int "c", float "thr", float "elast", bool "lsb_in", bool "tv_range"){
  2.  
  3. lsb_in=default(lsb_in, true)
  4. w = src.Width
  5. h = lsb_in ? src.Height/2 : src.Height
  6.  
  7. range    = default(range, min(30, max((w-1280)/160 + 12, (h-720)/ 90 + 12, 8)))
  8. y        = default(y, 40)
  9. c        = default(c, 40)
  10. thr      = default(thr, 0.3)
  11. elast    = default(elast, 2.5)
  12. tv_range = default(tv_range, true)
  13.  
  14. yp = y > 0
  15. cp = c > 0
  16. rgy1 = yp ? 11 : -1
  17. rgc1 = cp ? 11 : -1
  18. rgy2 = yp ? 20 : -1
  19. rgc2 = cp ? 0 : -1
  20. y31 = yp ? 3 : 1
  21. c31 = cp ? 3 : 1
  22.  
  23. src16 = lsb_in ? src : tv_range ? src.Dither_convert_8_to_16() : StackVertical(src, src)
  24.  
  25. rg16  = src16.Dither_removegrain16(rgy1, rgc1).Dither_removegrain16(rgy2, rgc2)
  26. noise = src16.Dither_sub16(rg16, y=y31, u=c31, v=c31, dif=True)
  27. rg16  = src16.Dither_sub16(noise, y=y31, u=c31, v=c31, dif=True)
  28.  
  29. smooth = rg16.f3kdb(range, y, c, c, 0, 0, keep_tv_range=tv_range, input_mode=1, output_mode=1)
  30. smooth = thr > 0 ? smooth.Dither_limit_dif16(rg16, thr=thr, elast=elast, y=y31, u=c31, v=c31) : smooth
  31. output = smooth.Dither_add16(noise, y=y31, u=c31, v=c31, dif=True)
  32.  
  33. return !yp ? mergeluma(output, src16) : !cp ? mergechroma(output, src16) : output
  34. }
  35.  
  36.  
  37. function lfdeband(clip clp, int "y", int "uv"){
  38.  
  39. y = Default(y, 3)
  40. c = clp.IsY ? 1 : Default(uv, 3)
  41.  
  42. fy = y==3 ? 80 : 0
  43. fc = c==3 ? 80 : 0
  44.  
  45. y31 = y==3 ? 3 : 1
  46. c31 = c==3 ? 3 : 1
  47.  
  48. w = clp.Width
  49. h = clp.Height
  50.  
  51. hss = clp.IsY || clp.IsYV24 || clp.Dither_isYV411 ? 1 : 2
  52. vss = clp.IsY || clp.IsYV24 || clp.IsYV16 ? 1 : clp.IsYV411 ? 4 : 2
  53.  
  54. dw = (Float(w) / 2.0)
  55. dw = Round(dw / Float(hss)) * hss
  56. dh = (Float(h) / 2.0)
  57. dh = Round(dh / Float(vss)) * vss
  58.  
  59. lo = clp.dither_resize16(dw,dh,kernel="spline64",y=y31,u=c31,v=c31)
  60. lo = clp.IsY ? lo.converttoyv12() : lo
  61.  
  62. lof = lo.f3kdb(range=30,y=fy,cb=fc,cr=fc,grainy=0,grainc=0,sample_mode=2,input_depth=16,output_depth=16)
  63. lof = clp.IsY ? lof.converttoy8() : lof
  64.  
  65. f = dither_sub16(lof,lo,dif=true,y=y31,u=c31,v=c31).dither_resize16(w,h,kernel="spline64",y=y31,u=c31,v=c31)
  66.  
  67. return dither_add16(clp, f, dif=true,y=y,u=c,v=c)
  68.  
  69.  
  70. ###############################################################################################################################
  71. # Internally, Gradfun3's default detail/linemask threshold is defined as follows, relative to the GradFun3 ''thr'' parameter. #
  72. ###############################################################################################################################
  73. # thr = 0.05 ~ 0.45 --> thr_det=2 #  BASIC USAGE                                                                              #
  74. # thr = 0.50 ~ 0.75 --> thr_det=3 #  -----------                                                                              #
  75. # thr = 0.80 ~ 1.05 --> thr_det=4 #  deband = f3kdb (16, 64, 64, 64, 0, 0, keep_tv_range=true, input_mode=1, output_mode=1)   #
  76. # thr = 1.10 ~ 1.30 --> thr_det=5 #  mask = gf3mask (mask=2, thr_det=2, lsb_in=true)                                          #
  77. # thr = 1.30 ~ 1.65 --> thr_det=6 #  Dither_merge16_8 (deband, last, mask, luma=true)                                         #
  78. # thr = 1.70 ~ 1.95 --> thr_det=7 #                                                                                           #
  79. ###############################################################################################################################
  80.  
  81. function gf3mask(clip c, int "mask", int "thr_det", bool "lsb_in"){
  82.     lsb_in  = default(lsb_in, true)
  83.     thr_det = default(thr_det,   2)
  84.     mask    = default(mask,      2)
  85.    
  86.     yv411_flag = c.Dither_isyv411 ()
  87.    
  88.     td_lo  = Dither_max (thr_det * 0.75, 1)
  89.     td_hi  = Dither_max (thr_det,        1)
  90.     mexpr  = Dither_make_expr_gate (td_lo, td_hi)
  91.    
  92.     src_8  = (lsb_in    ) ? c.ditherpost(mode=-1,u=1,v=1)   : c
  93.     src_8  = (yv411_flag) ? src_8.ConvertToY8 () : src_8
  94.    
  95.     dmask  = src_8.Dither_build_gf3_range_mask(mask)
  96.     dmask  = thr_det < 5 ? dmask.mt_binarize(thr_det-1) : dmask.mt_lut (expr=mexpr)
  97.    
  98.     dmask  = dmask.removegrain (22, -1)
  99.     dmask  = (mask > 1) ? dmask.removegrain (11, -1) : dmask
  100.     dmask  = (mask > 2) ? dmask.removegrain (20, -1) : dmask
  101.    
  102.     return (yv411_flag) ? dmask.ConvertToYV411 ()  : dmask
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement