SHOW:
|
|
- or go back to the newest paste.
1 | - | # NNEDI chroma upsubsampling v0.5 by A.SONY |
1 | + | # NNEDI chroma upsubsampling v0.6 by A.SONY |
2 | FUNCTION nnchromaupsubsampling(clip srco, bool "interlaced", bool "inv420") { | |
3 | ||
4 | interlaced = default(interlaced, false) | |
5 | inv420 = default(inv420 , false) | |
6 | ssispmt = Findstr(VersionString(), "AviSynth+") != 0 && Findstr(VersionString(), "r1576") == 0 | |
7 | sislumaonly = ssispmt ? srco.isy() : srco.isy8() | |
8 | sis420 = ssispmt ? srco.is420() : srco.isyv12() | |
9 | sisfullchroma = ssispmt ? srco.is444() : srco.isyv24() | |
10 | ||
11 | Assert(IsPlanar(srco) && isyuv(srco), "nnchromaupsubsampling: input clip must be planar YUV") | |
12 | Assert(!(Isyv12(srco) && !interlaced), "nnchromaupsubsampling: YV12/420 must be interlaced PAL DV") | |
13 | Assert(!(sisfullchroma || sislumaonly), "nnchromaupsubsampling: this function for subsampling sources") | |
14 | ||
15 | src = interlaced ? srco.SeparateFields().AssumeFrameBased() : srco | |
16 | ||
17 | chromay8 = ssispmt ? Interleave(src.ExtractU(),src.ExtractV()) : Interleave(src.UToY8(),src.VToY8()) | |
18 | - | chromaturn = !sis420 ? Eval("try { fTurnLeft(ssispmt ? nop() : chromay8) } catch(error_msg) { TurnLeft(chromay8) }").nnedi3(field=0,dh=true) : nop() |
18 | + | chromaturn = !sis420 ? Eval("try { fTurnLeft(ssispmt ? nop() : chromay8) } catch(error_msg) { TurnLeft(chromay8) }").Padding(2,2,2,2).nnedi3(field=0,dh=true).crop(2,4,-2,-4,true) : nop() |
19 | chromaupturn = !sis420 ? Eval("try { fTurnRight(ssispmt ? nop() : chromaturn) } catch(error_msg) { TurnRight(chromaturn) }") : nop() | |
20 | ||
21 | - | chromaup = sis420 ? ssispmt ? YToUV(chromaupturn.SelectEven().nnedi3(field=inv420 ? 1 : 0,dh=true),chromaupturn.SelectOdd().nnedi3(field=inv420 ? 0 : 1,dh=true),src.ConvertToY()) : \ |
21 | + | chromaup = sis420 ? ssispmt ? YToUV(chromaupturn.SelectEven().Padding(2,2,2,2).nnedi3(field=inv420 ? 1 : 0,dh=true).crop(2,4,-2,-4,true),chromaupturn.SelectOdd().Padding(2,2,2,2).nnedi3(field=inv420 ? 0 : 1,dh=true).crop(2,4,-2,-4,true),src.ConvertToY()) : \ |
22 | - | YToUV(chromay8.SelectEven().nnedi3(field=inv420 ? 1 : 0,dh=true),chromay8.SelectOdd().nnedi3(field=inv420 ? 0 : 1,dh=true),src.ConvertToY8()) : \ |
22 | + | YToUV(chromay8.SelectEven().Padding(2,2,2,2).nnedi3(field=inv420 ? 1 : 0,dh=true).crop(2,4,-2,-4,true),chromay8.SelectOdd().Padding(2,2,2,2).nnedi3(field=inv420 ? 0 : 1,dh=true).crop(2,4,-2,-4,true),src.ConvertToY8()) : \ |
23 | ssispmt ? YToUV(chromaupturn.SelectEven(),chromaupturn.SelectOdd(),src.ConvertToY()) : \ | |
24 | YToUV(chromaupturn.SelectEven(),chromaupturn.SelectOdd(),src.ConvertToY8()) | |
25 | ||
26 | return interlaced ? GetParity(srco) ? chromaup.AssumeFieldBased().AssumeTFF().Weave() : chromaup.AssumeFieldBased().AssumeBFF().Weave() : chromaup | |
27 | } | |
28 | ||
29 | # NNEDI chroma upsubsampling v0.4 by A.SONY (Inverse for testing purposes) | |
30 | FUNCTION Innchromaupsubsampling(clip srco, bool "interlaced") { | |
31 | srco | |
32 | nnchromaupsubsampling(interlaced,true) | |
33 | } | |
34 | ||
35 | - | # NNEDI yv12 point subsampling fix v0.4 by A.SONY |
35 | + | # NNEDI yv12 point subsampling fix v0.5 by A.SONY |
36 | # the output will be yv12 in mode 2 and yv16 in mode 1 and yv24 in mode 3, convert it back to yv12 by the method you like, the default setting work with Konjiki no Gash Bell!! S1 R2J DVD | |
37 | - | FUNCTION yv12pointsamplingnnfix(clip srco, bool "interlaced", bool "top", bool "left", int "mode", bool "leftshift", int "qual", int "nns", int "nsize", int "etype", int "pscrn", bool "eed", int "vcheck", float "vthresh0", float "vthresh1", float "vthresh2", int "nrad", int "mdis", float "alpha", float "beta", float "gamma" ) { |
37 | + | FUNCTION yv12pointsamplingnnfix(clip srco, bool "interlaced", bool "top", bool "left", int "mode", bool "leftshift", int "qual", int "nns", int "nsize", int "etype", int "pscrn", bool "eed", int "vcheck", float "vthresh0", float "vthresh1", float "vthresh2", int "nrad", int "mdis", float "alpha", float "beta", float "gamma", bool "nnrep" ) { |
38 | interlaced = default(interlaced, false) | |
39 | eed = default(eed, false) | |
40 | top = default(top, true) | |
41 | left = default(left, true) | |
42 | mode = default(mode, 1) | |
43 | leftshift = default(leftshift, left) | |
44 | nnrep = Default(nnrep, false) | |
45 | ||
46 | Assert(Isyv12(srco), "yv12pointsamplingnnfix: input must be YV12") | |
47 | ||
48 | src = interlaced ? srco.SeparateFields().AssumeFrameBased() : srco | |
49 | ||
50 | - | chromay8 = mode==3 || mode==1 ? eed ? chromay8.ConvertToYV12().EEdi3(field=top ? 1 : 0,dh=true,sclip=chromay8.nnedi3(field=top ? 1 : 0,dh=true, qual=qual, nns=nns, nsize=nsize, etype=etype, pscrn=pscrn ).ConvertToYV12(),u=false,v=false,vcheck=vcheck, nrad=nrad, mdis=mdis, alpha=alpha, beta=beta, gamma=gamma, vthresh0=vthresh0, vthresh1=vthresh1, vthresh2=vthresh2).ConvertToY8() : chromay8.nnedi3(field=top ? 1 : 0,dh=true, qual=qual, nns=nns, nsize=nsize, etype=etype, pscrn=pscrn ) : chromay8 |
50 | + | |
51 | ||
52 | - | chromay8 = mode==2 || mode==3 ? eed ? chromay8.ConvertToYV12().EEdi3(field=left ? 1 : 0,dh=true,sclip=chromay8.nnedi3(field=left ? 1 : 0,dh=true, qual=qual, nns=nns, nsize=nsize, etype=etype, pscrn=pscrn ).ConvertToYV12(),u=false,v=false,vcheck=vcheck, nrad=nrad, mdis=mdis, alpha=alpha, beta=beta, gamma=gamma, vthresh0=vthresh0, vthresh1=vthresh1, vthresh2=vthresh2).ConvertToY8() : chromay8.nnedi3(field=left ? 1 : 0,dh=true, qual=qual, nns=nns, nsize=nsize, etype=etype, pscrn=pscrn ) : chromay8 |
52 | + | chromay8n = mode==3 || mode==1 ? chromay8.Padding(2,2,2,2) : chromay8 |
53 | chromay8n = mode==3 || mode==1 ? chromay8n.nnedi3(field=top ? 1 : 0,dh=true, qual=qual, nns=nns, nsize=nsize, etype=etype, pscrn=pscrn ).crop(2,4,-2,-4,true) : chromay8n | |
54 | chromay8e = (mode==3 || mode==1) && eed ? chromay8.EEdi3(field=top ? 1 : 0,dh=true,sclip=chromay8n,u=false,v=false,vcheck=vcheck, nrad=nrad, mdis=mdis, alpha=alpha, beta=beta, gamma=gamma, vthresh0=vthresh0, vthresh1=vthresh1, vthresh2=vthresh2) : chromay8n | |
55 | chromay8 = (mode==3 || mode==1) && eed && nnrep ? chromay8e.Repair(chromay8n,9) : chromay8e | |
56 | ||
57 | chromay8 = mode==2 || mode==3 ? Eval("try { fTurnRight(mode==3 ? chromay8 : Interleave(src.UToY8(),src.VToY8())) } catch(error_msg) { TurnRight(mode==3 ? chromay8 : Interleave(src.UToY8(),src.VToY8())) }") : chromay8 | |
58 | ||
59 | chromay8n = mode==2 || mode==3 ? chromay8.Padding(2,2,2,2) : chromay8 | |
60 | chromay8n = mode==2 || mode==3 ? chromay8n.nnedi3(field=left ? 1 : 0,dh=true, qual=qual, nns=nns, nsize=nsize, etype=etype, pscrn=pscrn ).crop(2,4,-2,-4,true) : chromay8n | |
61 | chromay8e = (mode==2 || mode==3) && eed ? chromay8.EEdi3(field=left ? 1 : 0,dh=true,sclip=chromay8n,u=false,v=false,vcheck=vcheck, nrad=nrad, mdis=mdis, alpha=alpha, beta=beta, gamma=gamma, vthresh0=vthresh0, vthresh1=vthresh1, vthresh2=vthresh2) : chromay8n | |
62 | chromay8 = (mode==2 || mode==3) && eed && nnrep ? chromay8e.Repair(chromay8n,9) : chromay8e | |
63 | ||
64 | chromay8 = mode==2 || mode==3 ? Eval("try { fTurnLeft(chromay8) } catch(error_msg) { TurnLeft(chromay8) }") : chromay8 | |
65 | ||
66 | chromay8 = mode==2 ? chromay8.BilinearResize(width(chromay8)/2,height(chromay8),src_left=leftshift ? -0.5 : 0.5) : chromay8 | |
67 | chromaup = YToUV(chromay8.SelectEven(),chromay8.SelectOdd(),src.ConvertToY8()) | |
68 | return interlaced ? GetParity(srco) ? chromaup.AssumeFieldBased().AssumeTFF().Weave() : chromaup.AssumeFieldBased().AssumeBFF().Weave() : chromaup | |
69 | } |