Advertisement
Guest User

pmaskmerge

a guest
Jul 6th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # pmaskmerge
  2. # pinterf chroma Expr
  3. # base on MasknotCL and MaskCL and smaskmerge
  4. # need masktools 2.2.6 or up in avs 2.6 or avs+, will work with CLExpr if it possible
  5.  
  6. function pmaskmerge(clip src, clip overlay, clip mask, int "y", int "u", int "v", bool "luma", string "cplace") {
  7.  
  8. y = Default(y,3)
  9. u = Default(u,2)
  10. v = Default(v,2)
  11. luma = Default(luma,false)
  12. cplace = default(cplace, "MPEG2")
  13.  
  14. assert(cplace == "MPEG2" || cplace == "MPEG1", "smaskmerge: chroma siting must be MPEG2 or MPEG1")
  15.  
  16. yuy2 = isyuy2(src)
  17. sisavs26 = !(VersionNumber() < 2.6)
  18. sisphbd  = sisavs26 ? AvsPlusVersionNumber > 2294 : false
  19. sislumaonly = sisphbd ? src.isy() : sisavs26 ? src.isy8() : true
  20. fullchr     = sisphbd ? src.is444() : sisavs26 ? src.isyv24() : false
  21. chr420      = sisphbd ? src.is420() : src.isyv12()
  22. chr411      = sisavs26 ? src.isyv411() : false
  23.  
  24. luma = (sisavs26 && sislumaonly) || (u!=3 && v!=3) ? false : luma
  25.  
  26. uc=luma ? !sislumaonly && !fullchr ? sisphbd ? ExtractU(src) : UToY8(src) : !sisavs26 ? UToY(src) : nop() : nop()
  27. uvh=luma && !fullchr ? !sisavs26 || !sislumaonly ? uc.height() : nop() : nop()
  28. uvw=luma && !fullchr ? !sisavs26 || !sislumaonly ? uc.width() : nop() : nop()
  29.  
  30. mask = yuy2 && luma ? mask.planar2Interleaved(true) : mask
  31.  
  32. mask26=luma && !fullchr && sisavs26 ? sisphbd ? mask.converttoy() : mask.converttoy8() : mask
  33. chromalumam=luma && !fullchr ? mask.BilinearResize(uvw,uvh,src_left=chr420 && cplace == "MPEG1" ? 0 : chr411 ? -1.5 : -0.5) : nop()
  34.  
  35. mask = luma && !fullchr ? sisphbd ? CombinePlanes(mask,chromalumam,chromalumam,source_planes="YYY",planes="YUV",sample_clip=mask) : ytouv(chromalumam,chromalumam,mask26) : mask
  36. nocl=false
  37. try { cl_exprxyz(src,overlay,mask,"x y x - z 255 / * +",y=y,u=u,v=v) } catch(error_msg) { nocl=true }
  38. uvexpr = nocl && sisavs26 ? "x range_max range_min - z - * y z * + range_max range_min - /" : nop()
  39. nocl ? sisavs26 ? mt_lutxyz(src,overlay,yuy2 && luma ? mask.Interleaved2planar() : mask,"x y x - z range_max / * +", uvexpr, uvexpr, use_expr=3,y=y,u=u,v=v) : mt_lutxyz(src,overlay,mask,"x y x - z 255 / * +",y=y,u=u,v=v) : last
  40. }
  41.  
  42. # smaskmerge 1.25 by A.SONY
  43. # base on MasknotCL and MaskCL
  44. # need masktools 2.2.6 or up in avs 2.6 or avs+, will work with CLExpr if it possible
  45.  
  46. function smaskmerge(clip src, clip overlay, clip mask, int "y", int "u", int "v", bool "luma", string "cplace") {
  47.  
  48. y = Default(y,3)
  49. u = Default(u,2)
  50. v = Default(v,2)
  51. luma = Default(luma,false)
  52. cplace = default(cplace, "MPEG2")
  53.  
  54. assert(cplace == "MPEG2" || cplace == "MPEG1", "smaskmerge: chroma siting must be MPEG2 or MPEG1")
  55.  
  56. yuy2 = isyuy2(src)
  57. sisavs26 = !(VersionNumber() < 2.6)
  58. sisphbd  = sisavs26 ? AvsPlusVersionNumber > 2294 : false
  59. sislumaonly = sisphbd ? src.isy() : sisavs26 ? src.isy8() : true
  60. fullchr     = sisphbd ? src.is444() : sisavs26 ? src.isyv24() : false
  61. chr420      = sisphbd ? src.is420() : src.isyv12()
  62. chr411      = sisavs26 ? src.isyv411() : false
  63.  
  64. luma = (sisavs26 && sislumaonly) || (u!=3 && v!=3) ? false : luma
  65.  
  66. uc=luma ? !sislumaonly && !fullchr ? sisphbd ? ExtractU(src) : UToY8(src) : !sisavs26 ? UToY(src) : nop() : nop()
  67. uvh=luma && !fullchr ? !sisavs26 || !sislumaonly ? uc.height() : nop() : nop()
  68. uvw=luma && !fullchr ? !sisavs26 || !sislumaonly ? uc.width() : nop() : nop()
  69.  
  70. mask = yuy2 && luma ? mask.planar2Interleaved(true) : mask
  71.  
  72. mask26=luma && !fullchr && sisavs26 ? sisphbd ? mask.converttoy() : mask.converttoy8() : mask
  73. chromalumam=luma && !fullchr ? mask.BilinearResize(uvw,uvh,src_left=chr420 && cplace == "MPEG1" ? 0 : chr411 ? -1.5 : -0.5) : nop()
  74.  
  75. mask = luma && !fullchr ? sisphbd ? CombinePlanes(mask,chromalumam,chromalumam,source_planes="YYY",planes="YUV",sample_clip=mask) : ytouv(chromalumam,chromalumam,mask26) : mask
  76. nocl=false
  77. try { cl_exprxyz(src,overlay,mask,"x y x - z 255 / * +",y=y,u=u,v=v) } catch(error_msg) { nocl=true }
  78. sisfloatuv=nocl ? sisphbd ? src.isvideofloat() && (u==3 || v==3) : false : false
  79. !sisfloatuv && nocl ? sisavs26 ? mt_lutxyz(src,overlay,yuy2 && luma ? mask.Interleaved2planar() : mask, use_expr=3,"x y x - z range_max / * +",y=y,u=u,v=v) : mt_lutxyz(src,overlay,mask,"x y x - z 255 / * +",y=y,u=u,v=v) : last
  80. srcchr=sisfloatuv ? Interleave(src.ExtractU,src.ExtractV).mt_lut("x 0.5 +") : nop()
  81. overlaychr=sisfloatuv ? Interleave(overlay.ExtractU,overlay.ExtractV).expr("x 0.5 +") : nop()
  82. maskchr=sisfloatuv ? Interleave(mask.ExtractU,mask.ExtractV) : nop()
  83. finialchr=sisfloatuv ? expr(srcchr,overlaychr,maskchr,"x y x - z * +").expr("x 0.5 -") : nop()
  84. sisfloatuv ? CombinePlanes(smaskmerge(src, overlay, mask, y, 1, 1),finialchr.SelectEvery(2, 0),finialchr.SelectEvery(2, 1),source_planes="YYY",planes="YUV",sample_clip=src) : last
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement