Thread: Avisynth+
View Single Post
Old 1st July 2016, 08:47   #1886  |  Link
pinterf
Registered User
 
Join Date: Jan 2014
Posts: 2,314
Weird.

Replaced the one-pass combined YUV KNLMeans path
Code:
NL_in   = Dither_convert_8_to_16()
NL_W    = width(NL_in)
U8      = UToY8(NL_in)
V8      = VToY8(NL_in)
NL_lsb  = StackVertical(StackVertical(Dither_get_msb(u8),Dither_get_msb(v8)),StackVertical(Dither_get_lsb(u8),Dither_get_lsb(v8)))
 
Y8      = StackHorizontal(ConvertToY8(NL_in),NL_lsb)

Y8      = Y8.KNLMeansCL(D=1, A=1, h=7.0,lsb_inout=true,device_type="GPU")
 
u_h = u8.height()/2
v_h = v8.height()/2
 
u16 = StackVertical(Dither_get_msb(Y8).crop(NL_W,0,0,-v_h),Dither_get_lsb(Y8).crop(NL_W,0,0,-v_h))
v16 = StackVertical(Dither_get_msb(Y8).crop(NL_W,u_h, 0,0),Dither_get_lsb(Y8).crop(NL_W,u_h, 0,0))
 
prefilter4 = YToUV(u16,v16,Y8.crop(0,0,-u8.width(),0))
With a 3 pass KNLMeans path (distinct Y, U, V)
Code:
NL_in   = Dither_convert_8_to_16()
U8      = UToY8(NL_in)
V8      = VToY8(NL_in)
Y8      = ConvertToY8(NL_in)
U16 = U8.KNLMeansCL(D=1, A=1, h=7.0,lsb_inout=true,device_type="GPU")
V16 = V8.KNLMeansCL(D=1, A=1, h=7.0,lsb_inout=true,device_type="GPU")
Y16 = ConvertToY8(NL_in).KNLMeansCL(D=1, A=1, h=7.0,lsb_inout=true,device_type="GPU")
prefilter4 = YToUV(u16,v16,Y16)
Result is:
KNLMeansCL: fatal error!

No MT.

Then I tried with different avisynth DLLs I have:
Classic AVS 2.6: no error
Avisynth+ r1576: no error
From Avisynth r1689 on: KNLMeansCL: fatal error!

When omitting KNLMeans calculation for clip V16, it works again.
Code:
U8      = UToY8(NL_in)
V8      = VToY8(NL_in)
Y8      = ConvertToY8(NL_in)
U16 = U8.KNLMeansCL(D=1, A=1, h=7.0,lsb_inout=true,device_type="GPU")
V16 = U16 #V8.KNLMeansCL(D=1, A=1, h=7.0,lsb_inout=true,device_type="GPU")
Y16 = ConvertToY8(NL_in).KNLMeansCL(D=1, A=1, h=7.0,lsb_inout=true,device_type="GPU")
prefilter4 = YToUV(u16,v16,Y16)
Could you try if it works or not for you?
pinterf is offline