Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # pmaskmerge
- # pinterf chroma Expr
- # base on MasknotCL and MaskCL and smaskmerge
- # need masktools 2.2.6 or up in avs 2.6 or avs+, will work with CLExpr if it possible
- function pmaskmerge(clip src, clip overlay, clip mask, int "y", int "u", int "v", bool "luma", string "cplace") {
- y = Default(y,3)
- u = Default(u,2)
- v = Default(v,2)
- luma = Default(luma,false)
- cplace = default(cplace, "MPEG2")
- assert(cplace == "MPEG2" || cplace == "MPEG1", "smaskmerge: chroma siting must be MPEG2 or MPEG1")
- yuy2 = isyuy2(src)
- sisavs26 = !(VersionNumber() < 2.6)
- sisphbd = sisavs26 ? AvsPlusVersionNumber > 2294 : false
- sislumaonly = sisphbd ? src.isy() : sisavs26 ? src.isy8() : true
- fullchr = sisphbd ? src.is444() : sisavs26 ? src.isyv24() : false
- chr420 = sisphbd ? src.is420() : src.isyv12()
- chr411 = sisavs26 ? src.isyv411() : false
- luma = (sisavs26 && sislumaonly) || (u!=3 && v!=3) ? false : luma
- uc=luma ? !sislumaonly && !fullchr ? sisphbd ? ExtractU(src) : UToY8(src) : !sisavs26 ? UToY(src) : nop() : nop()
- uvh=luma && !fullchr ? !sisavs26 || !sislumaonly ? uc.height() : nop() : nop()
- uvw=luma && !fullchr ? !sisavs26 || !sislumaonly ? uc.width() : nop() : nop()
- mask = yuy2 && luma ? mask.planar2Interleaved(true) : mask
- mask26=luma && !fullchr && sisavs26 ? sisphbd ? mask.converttoy() : mask.converttoy8() : mask
- chromalumam=luma && !fullchr ? mask.BilinearResize(uvw,uvh,src_left=chr420 && cplace == "MPEG1" ? 0 : chr411 ? -1.5 : -0.5) : nop()
- mask = luma && !fullchr ? sisphbd ? CombinePlanes(mask,chromalumam,chromalumam,source_planes="YYY",planes="YUV",sample_clip=mask) : ytouv(chromalumam,chromalumam,mask26) : mask
- nocl=false
- try { cl_exprxyz(src,overlay,mask,"x y x - z 255 / * +",y=y,u=u,v=v) } catch(error_msg) { nocl=true }
- uvexpr = nocl && sisavs26 ? "x range_max range_min - z - * y z * + range_max range_min - /" : nop()
- 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
- }
- # smaskmerge 1.25 by A.SONY
- # base on MasknotCL and MaskCL
- # need masktools 2.2.6 or up in avs 2.6 or avs+, will work with CLExpr if it possible
- function smaskmerge(clip src, clip overlay, clip mask, int "y", int "u", int "v", bool "luma", string "cplace") {
- y = Default(y,3)
- u = Default(u,2)
- v = Default(v,2)
- luma = Default(luma,false)
- cplace = default(cplace, "MPEG2")
- assert(cplace == "MPEG2" || cplace == "MPEG1", "smaskmerge: chroma siting must be MPEG2 or MPEG1")
- yuy2 = isyuy2(src)
- sisavs26 = !(VersionNumber() < 2.6)
- sisphbd = sisavs26 ? AvsPlusVersionNumber > 2294 : false
- sislumaonly = sisphbd ? src.isy() : sisavs26 ? src.isy8() : true
- fullchr = sisphbd ? src.is444() : sisavs26 ? src.isyv24() : false
- chr420 = sisphbd ? src.is420() : src.isyv12()
- chr411 = sisavs26 ? src.isyv411() : false
- luma = (sisavs26 && sislumaonly) || (u!=3 && v!=3) ? false : luma
- uc=luma ? !sislumaonly && !fullchr ? sisphbd ? ExtractU(src) : UToY8(src) : !sisavs26 ? UToY(src) : nop() : nop()
- uvh=luma && !fullchr ? !sisavs26 || !sislumaonly ? uc.height() : nop() : nop()
- uvw=luma && !fullchr ? !sisavs26 || !sislumaonly ? uc.width() : nop() : nop()
- mask = yuy2 && luma ? mask.planar2Interleaved(true) : mask
- mask26=luma && !fullchr && sisavs26 ? sisphbd ? mask.converttoy() : mask.converttoy8() : mask
- chromalumam=luma && !fullchr ? mask.BilinearResize(uvw,uvh,src_left=chr420 && cplace == "MPEG1" ? 0 : chr411 ? -1.5 : -0.5) : nop()
- mask = luma && !fullchr ? sisphbd ? CombinePlanes(mask,chromalumam,chromalumam,source_planes="YYY",planes="YUV",sample_clip=mask) : ytouv(chromalumam,chromalumam,mask26) : mask
- nocl=false
- try { cl_exprxyz(src,overlay,mask,"x y x - z 255 / * +",y=y,u=u,v=v) } catch(error_msg) { nocl=true }
- sisfloatuv=nocl ? sisphbd ? src.isvideofloat() && (u==3 || v==3) : false : false
- !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
- srcchr=sisfloatuv ? Interleave(src.ExtractU,src.ExtractV).mt_lut("x 0.5 +") : nop()
- overlaychr=sisfloatuv ? Interleave(overlay.ExtractU,overlay.ExtractV).expr("x 0.5 +") : nop()
- maskchr=sisfloatuv ? Interleave(mask.ExtractU,mask.ExtractV) : nop()
- finialchr=sisfloatuv ? expr(srcchr,overlaychr,maskchr,"x y x - z * +").expr("x 0.5 -") : nop()
- 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
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement