SHOW:
|
|
- or go back to the newest paste.
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.24 by A.SONY |
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,"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 |
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 | } |