Advertisement
Guest User

FastLineDarkenMOD 1.42x

a guest
Apr 1st, 2017
437
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ###############################
  2. # FastLineDarken 1.42x MT MOD #
  3. ###############################
  4. #
  5. # Written by Vectrangle    (http://forum.doom9.org/showthread.php?t=82125)
  6. # Didée: - Speed Boost, Updated: 11th May 2007
  7. # Dogway - added protection option. 12-May-2011
  8. # A.SONY - added high bit support and others. 27-Mar-2017
  9. #
  10. #  * requires mt_masktools v2 in avs2.5 and masktools 2.2.5 in avs 2.6 or avs+
  11. #  * requires yuv input
  12. #
  13. #
  14. #
  15. # Parameters are:
  16. #  strength (integer)  - Line darkening amount, 0-256. Default 48. Represents the _maximum_ amount
  17. #                        that the luma will be reduced by, weaker lines will be reduced by
  18. #                        proportionately less.
  19. #  prot     (integer)  - Prevents the darkest lines from being darkened. Protection acts as a threshold.
  20. #                        Values range from 0 (no prot) to ~50 (protect everything). Default 5.
  21. #  luma_cap (integer)  - value from 0 (black) to 255 (white), used to stop the darkening
  22. #                        determination from being 'blinded' by bright pixels, and to stop grey
  23. #                        lines on white backgrounds being darkened. Any pixels brighter than
  24. #                        luma_cap are treated as only being as bright as luma_cap. Lowering
  25. #                        luma_cap tends to reduce line darkening. 255 disables capping. Default 191.
  26. #  threshold (integer) - any pixels that were going to be darkened by an amount less than
  27. #                        threshold will not be touched. setting this to 0 will disable it, setting
  28. #                        it to 4 (default) is recommended, since often a lot of random pixels are
  29. #                        marked for very slight darkening and a threshold of about 4 should fix
  30. #                        them. Note if you set threshold too high, some lines will not be darkened
  31. #  thinning (integer)  - optional line thinning amount, 0-256. Setting this to 0 will disable it,
  32. #                        which is gives a _big_ speed increase. Note that thinning the lines will
  33. #                        inherently darken the remaining pixels in each line a little. Default 0.
  34. #
  35. # Changelog:
  36. #  1.42 - added high bit support in avs+ and others Optmized
  37. #  1.4  - added protection option. Prevents darkest lines to be over darkened thus creating artifacts (i.e. aliasing, clipping...)
  38. #       - Optmized the code as suggested by Didée for possible faster processing. It also deals with the green screen bug.
  39. #  1.3  - added ability to thin lines, now runs much slower unless thinning=0. Changed the defaults (again)
  40. #  1.2  - huge speed increase using yv12lutxy =)
  41. #       - weird darkening issues gone (they were caused by yv12layer)
  42. #       - show option no longer available due to optimizations. Use subtract() instead
  43. #  1.1  - added luma_cap option
  44. #  1.0  - initial release
  45. #
  46.  
  47.  
  48. function FastLineDarkenMOD4( clip input, float "strength", float "prot", float "luma_cap", float "threshold", float "thinning")
  49. {
  50. ## parameters ##
  51. str        = string(default(strength, 48) /128.)
  52. lum        = string(default(luma_cap, 191))
  53. protection = default(prot,5)
  54. thr        = string(default(threshold, 4))
  55. thinning   = default(thinning,0)
  56. thn        = string(thinning /16.)
  57.  
  58. Assert(!(input.isrgb()), "FastLineDarkenMOD4: RGB Color formats is not supported" )
  59.  
  60. ssispmt   = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0
  61.  
  62. sislumaonly = ssispmt ? input.isy() : VersionNumber() < 2.6 ? true : input.isy8()
  63.  
  64. c = sislumaonly ? input : ssispmt ? input.converttoy() : input.converttoy8()
  65.  
  66. ## filtering ##
  67. exin    = c.mt_expand(thy=255/(protection+1)).mt_inpand()
  68. diff    = VersionNumber() < 2.6 ? mt_lutxy(c,exin,yexpr="y "+lum+" < y "+lum+" ? x "+thr+" + > x y "+lum+" < y "+lum+" ? - 0 ? 127 +",uexpr="x",vexpr="x")
  69.           \                     : mt_lutxy(c,exin,yexpr="y "+lum+" scalef < y "+lum+" scalef ? x "+thr+" scalef + > x y "+lum+" scalef < y "+lum+" scalef ? - 0 ? 127 scalef +")
  70. linemask= thinning != 0 ? VersionNumber() < 2.6 ? mt_lut(diff.mt_inpand(),"x 127 - "+thn+" * 255 +").RemoveGrain(20,-1)
  71.             \           : mt_lut(diff.mt_inpand(),"clamp_f_i8 x 127 scalef - "+thn+" * range_max +").RemoveGrain(20,-1) : nop()
  72. thick   = VersionNumber() < 2.6 ? mt_lutxy(c, exin, yexpr="y "+lum+" < y "+lum+" ? x "+thr+" + > x y "+lum+" < y "+lum+" ? - 0 ? "+str+" * x +",uexpr="x",vexpr="x",u=2, v=2)
  73.           \                     : mt_lutxy(c, exin, yexpr="clamp_f_i8 y "+lum+" scalef < y "+lum+" scalef ? x "+thr+" scalef + > x y "+lum+" scalef < y "+lum+" scalef ? - 0 ? "+str+" * x +",u=2, v=2)
  74. thin    = thinning != 0 ? VersionNumber() < 2.6 ? mt_lutxy(c.mt_expand(U=2,V=2),diff,yexpr="x y 127 - "+str+" 1 + * +",u=2, v=2)
  75.             \           : mt_lutxy(c.mt_expand(U=2,V=2),diff,yexpr="clamp_f_i8 x y 127 scalef - "+str+" 1 + * +",u=2, v=2) : nop()
  76.  
  77. thinning == 0 ? thick : mt_merge(thin,thick,linemask,y=3,u=2,v=2)
  78.  
  79. return sislumaonly ? last : ssispmt ? CombinePlanes(last,input,planes="YUV",sample_clip=input) : ytouv(input.utoy8(),input.vtoy8(),last)
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement