Angel of Night
Join Date: Nov 2004
Location: Tangled in the silks
Posts: 9,559
|
Quote:
Originally Posted by *.mp4 guy
It would be much more memory efficient if each independant instance of dct filter ulnoaded its memory after it processed its data aswell.
|
That makes an enormous difference. Enjoy.
I also added a chroma=-1 parameter so that it won't bother doing all that, since it's grey-only currently. 0 also works, but I'm reserving that for "copy" eventually (current behavior is "trash it"). Also enabled the dormant SSE2 fdct; it hasn't crashed on me so far, though the idct was buggy.
btw, you could put the mergechroma immediately before the return, instead of multiple times after each average; not much of a speedup but something. And I think you mixed up the rep logic.
Prettied up version:
Code:
# DCTlimit, by *.mp4 guy
#
function dctlimit(clip c, float "dct2", float "dct3", float "dct4", float "dct5", float "dct6", float "dct7", float "dct8", \
float "dc", bool "use8dct", bool "use32dct", bool "use64dct", bool "use4dct"){
dc = default(dc, 1)
dct2 = default(dct2, 1)
dct3 = default(dct3, 1)
dct4 = default(dct4, 1)
dct5 = default(dct5, 0)
dct6 = default(dct6, 0)
dct7 = default(dct7, 0)
dct8 = default(dct8, 0)
use4dct = default(use4dct, false)
use8dct = default(use8dct, true)
use32dct = default(use32dct, false)
use64dct = default(use64dct, false)
w = c.width
h = c.height
sourcey = c
source = sourcey
cropc = sourcey
#crop0 = sourcey.dctfilter(dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8,chroma=-1)
##################################################################-dct16-1
crop1 = source.dfilter(-1, 0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop2 = source.dfilter(-1, -1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop3 = source.dfilter(-1, -2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop4 = source.dfilter(-1, -3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop5 = source.dfilter(-1, -4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop6 = source.dfilter(-1, -5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop7 = source.dfilter(-1, -6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop8 = source.dfilter(-1, -7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop9 = source.dfilter(-2, -0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop10 = source.dfilter(-2, -1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop11 = source.dfilter(-2, -2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop12 = source.dfilter(-2, -3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop13 = source.dfilter(-2, -4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop14 = source.dfilter(-2, -5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop15 = source.dfilter(-2, -6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop16 = source.dfilter(-2, -7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
##################################################################-dct32-2
crop17 = source.dfilter(-3, 0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop18 = source.dfilter(-3, -1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop19 = source.dfilter(-3, -2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop20 = source.dfilter(-3, -3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop21 = source.dfilter(-3, -4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop22 = source.dfilter(-3, -5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop23 = source.dfilter(-3, -6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop24 = source.dfilter(-3, -7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop25 = source.dfilter(-4, -0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop26 = source.dfilter(-4, -1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop27 = source.dfilter(-4, -2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop28 = source.dfilter(-4, -3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop29 = source.dfilter(-4, -4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop30 = source.dfilter(-4, -5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop31 = source.dfilter(-4, -6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop32 = source.dfilter(-4, -7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
##################################################################-dct48-3
crop33 = source.dfilter(-5, 0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop34 = source.dfilter(-5, -1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop35 = source.dfilter(-5, -2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop36 = source.dfilter(-5, -3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop37 = source.dfilter(-5, -4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop38 = source.dfilter(-5, -5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop39 = source.dfilter(-5, -6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop40 = source.dfilter(-5, -7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop41 = source.dfilter(-4, -0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop42 = source.dfilter(-6, -1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop43 = source.dfilter(-6, -2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop44 = source.dfilter(-6, -3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop45 = source.dfilter(-6, -4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop46 = source.dfilter(-6, -5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop47 = source.dfilter(-6, -6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop48 = source.dfilter(-6, -7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
##################################################################-dct64-4
crop49 = source.dfilter(-7, 0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop50 = source.dfilter(-7, -1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop51 = source.dfilter(-7, -2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop52 = source.dfilter(-7, -3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop53 = source.dfilter(-7, -4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop54 = source.dfilter(-7, -5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop55 = source.dfilter(-7, -6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop56 = source.dfilter(-7, -7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop57 = source.dfilter(-0, 0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop58 = source.dfilter(-0, -1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop59 = source.dfilter(-0, -2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop60 = source.dfilter(-0, -3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop61 = source.dfilter(-0, -4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop62 = source.dfilter(-0, -5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop63 = source.dfilter(-0, -6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
crop64 = source.dfilter(-0, -7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
###################################
alignc = cropc
###################################
##################################################################-align16-1
align1 = crop1 .pointResize(W, H, 1, 0, W, H)
align2 = crop2 .pointResize(W, H, 1, 1, W, H)
align3 = crop3 .pointResize(W, H, 1, 2, W, H)
align4 = crop4 .pointResize(W, H, 1, 3, W, H)
align5 = crop5 .pointResize(W, H, 1, 4, W, H)
align6 = crop6 .pointResize(W, H, 1, 5, W, H)
align7 = crop7 .pointResize(W, H, 1, 6, W, H)
align8 = crop8 .pointResize(W, H, 1, 7, W, H)
align9 = crop9 .pointResize(W, H, 2, 0, W, H)
align10 = crop10.pointResize(W, H, 2, 1, W, H)
align11 = crop11.pointResize(W, H, 2, 2, W, H)
align12 = crop12.pointResize(W, H, 2, 3, W, H)
align13 = crop13.pointResize(W, H, 2, 4, W, H)
align14 = crop14.pointResize(W, H, 2, 5, W, H)
align15 = crop15.pointResize(W, H, 2, 6, W, H)
align16 = crop16.pointResize(W, H, 2, 7, W, H)
##################################################################-align32-2
align17 = crop17.pointResize(W, H, 3, 0, W, H)
align18 = crop18.pointResize(W, H, 3, 1, W, H)
align19 = crop19.pointResize(W, H, 3, 2, W, H)
align20 = crop20.pointResize(W, H, 3, 3, W, H)
align21 = crop21.pointResize(W, H, 3, 4, W, H)
align22 = crop22.pointResize(W, H, 3, 5, W, H)
align23 = crop23.pointResize(W, H, 3, 6, W, H)
align24 = crop24.pointResize(W, H, 3, 7, W, H)
align25 = crop25.pointResize(W, H, 4, 0, W, H)
align26 = crop26.pointResize(W, H, 4, 1, W, H)
align27 = crop27.pointResize(W, H, 4, 2, W, H)
align28 = crop28.pointResize(W, H, 4, 3, W, H)
align29 = crop29.pointResize(W, H, 4, 4, W, H)
align30 = crop30.pointResize(W, H, 4, 5, W, H)
align31 = crop31.pointResize(W, H, 4, 6, W, H)
align32 = crop32.pointResize(W, H, 4, 7, W, H)
##################################################################-align48-3
align33 = crop33.pointResize(W, H, 5, 0, W, H)
align34 = crop34.pointResize(W, H, 5, 1, W, H)
align35 = crop35.pointResize(W, H, 5, 2, W, H)
align36 = crop36.pointResize(W, H, 5, 3, W, H)
align37 = crop37.pointResize(W, H, 5, 4, W, H)
align38 = crop38.pointResize(W, H, 5, 5, W, H)
align39 = crop39.pointResize(W, H, 5, 6, W, H)
align40 = crop40.pointResize(W, H, 5, 7, W, H)
align41 = crop41.pointResize(W, H, 6, 0, W, H)
align42 = crop42.pointResize(W, H, 6, 1, W, H)
align43 = crop43.pointResize(W, H, 6, 2, W, H)
align44 = crop44.pointResize(W, H, 6, 3, W, H)
align45 = crop45.pointResize(W, H, 6, 4, W, H)
align46 = crop46.pointResize(W, H, 6, 5, W, H)
align47 = crop47.pointResize(W, H, 6, 6, W, H)
align48 = crop48.pointResize(W, H, 6, 7, W, H)
##################################################################-align64-4
align49 = crop49.pointResize(W, H, 7, 0, W, H)
align50 = crop50.pointResize(W, H, 7, 1, W, H)
align51 = crop51.pointResize(W, H, 7, 2, W, H)
align52 = crop52.pointResize(W, H, 7, 3, W, H)
align53 = crop53.pointResize(W, H, 7, 4, W, H)
align54 = crop54.pointResize(W, H, 7, 5, W, H)
align55 = crop55.pointResize(W, H, 7, 6, W, H)
align56 = crop56.pointResize(W, H, 7, 7, W, H)
align57 = crop57#.pointResize(W, H, 0, 0, W, H)
align58 = crop58.pointResize(W, H, 0, 1, W, H)
align59 = crop59.pointResize(W, H, 0, 2, W, H)
align60 = crop60.pointResize(W, H, 0, 3, W, H)
align61 = crop61.pointResize(W, H, 0, 4, W, H)
align62 = crop62.pointResize(W, H, 0, 5, W, H)
align63 = crop63.pointResize(W, H, 0, 6, W, H)
align64 = crop64.pointResize(W, H, 0, 7, W, H)
dct4_1 = average(align56, 0.25, align38, 0.25, align20, 0.25, align2, 0.25)
dct8_1 = average(align57, 0.125, align56, 0.125, align38, 0.125, align47, 0.125, align20, 0.125, align29, 0.125, align2, 0.125, align11, 0.125)
dct16_1 = average(align1, 0.0625, align2, 0.0625, align3, 0.0625, align4, 0.0625, align5, 0.0625, align6, 0.0625, align7, 0.0625, align8, 0.0625, \
align9, 0.0625, align10, 0.0625, align11, 0.0625, align12, 0.0625, align13, 0.0625, align14, 0.0625, align15, 0.0625, align16, 0.0625)
dct32_2 = average(align17, 0.0625, align18, 0.0625, align19, 0.0625, align20, 0.0625, align21, 0.0625, align22, 0.0625, align23, 0.0625, align24, 0.0625, \
align25, 0.0625, align26, 0.0625, align27, 0.0625, align28, 0.0625, align29, 0.0625, align30, 0.0625, align31, 0.0625, align32, 0.0625)
dct48_3 = average(align33, 0.0625, align34, 0.0625, align35, 0.0625, align36, 0.0625, align37, 0.0625, align38, 0.0625, align39, 0.0625, align40, 0.0625, \
align41, 0.0625, align42, 0.0625, align43, 0.0625, align44, 0.0625, align45, 0.0625, align46, 0.0625, align47, 0.0625, align48, 0.0625)
dct64_4 = average(align49, 0.0625, align50, 0.0625, align51, 0.0625, align52, 0.0625, align53, 0.0625, align54, 0.0625, align55, 0.0625, align56, 0.0625, \
align57, 0.0625, align58, 0.0625, align59, 0.0625, align60, 0.0625, align61, 0.0625, align62, 0.0625, align63, 0.0625, align64, 0.0625)
align57
use4dct ? dct4_1 : last
use8dct ? dct8_1 : last
use32dct ? average(dct16_1, 0.5, dct32_2, 0.5) : last
use64dct ? average(dct16_1, 0.25, dct48_3, 0.25, dct32_2, 0.25, dct64_4, 0.25) : last
mergechroma(alignc, 1)
return(last)
}
function m(int r, float x) {return(x<16?16:int(round(x/float(r))*r))}
Function DCTus(clip clp, float "sharpness", bool "u64dct"){
OX = m(16,Clp.Width)
OY = m(16,Clp.Height)
dx = ox - clp.width
dy = oy - clp.height
sharpness = default(sharpness, 2)
u64dct = default(u64dct, false)
luma = clp.pointresize(Clp.Width*4,Clp.Height*4).addborders(dx*4, dy*4, 0, 0).dctlimit(dct2=sharpness, dct3=0, dct4=0, dct5=0, \
use64dct=u64dct, use8dct=true).crop(dx*4, dy*4, 0, 0)
luma.mergechroma(lanczosresize(clp,Clp.Width*4 ,Clp.Height*4), 1)
return(last)
}
Function DCTds(clip clp,int destx, int desty, float "sharpness"){
sharpness = default(sharpness,1)
OX = m(16,Clp.Width)
OY = m(16,Clp.Height)
dx = ox - clp.width
dy = oy - clp.height
(clp.width < destx*2) ? dx*2 : dx
(clp.width < destx*2) ? dy*2 : dy
clp
(width < destx*2) ? dctus(sharpness) : last
(width < destx*2) ? dctds(destx=destx, desty=desty, sharpness=sharpness) : \
bilinearresize(destx,desty).addborders(dx, dy, 0, 0).dctlimit(dct3=0.75+(sharpness/4),dct4=sharpness, dct5=0).crop(dx, dy, 0, 0).pointresize(destx,desty)
return last
}
function wdresize(clip clp, float "sharpness", bool "u64dct", int "warp", int "thresh", int "rep"){
sharpness = default(sharpness, 2)
u64dct = default(u64dct, false)
warp = default(warp, 4)
thresh = default(thresh, 50)
rep = default(rep, 1)
clp.dctus(sharpness=sharpness, u64dct=u64dct).DeHalo_alpha(ss=1, lowsens=30, highsens=30, rx=2, ry=2)
w = last.width
h = last.height
pointresize(w/2, h/2)
(rep>= 2) ? last.dctlimit(use64dct=u64dct, dct2=1, dct3=1, dct4=sharpness, dct5=0) : last
(rep>= 2) ? last.DeHalo_alpha(ss=1, lowsens=15, highsens=15, rx=2, ry=2) : last
(rep>= 3) ? last.dctlimit(use64dct=u64dct, dct2=1, dct3=1, dct4=0.5, dct5=sharpness).dctlimit(use64dct=u64dct, dct2=1, dct3=1, dct4=sharpness, dct5=0) : last
(rep>= 3) ? last.DeHalo_alpha(ss=1, lowsens=20, highsens=20, rx=2, ry=2) : last
awarpsharp(depth=warp, cm=0, blurlevel=1)
awarpsharp(depth=warp, cm=0, blurlevel=1)
awarpsharp(depth=warp, cm=0, blurlevel=1)
awarpsharp(depth=warp, cm=0, blurlevel=1)
return(last)
}
function dfilter(clip c, int offx, int offy, float dc, float dct2, float dct3, float dct4, float dct5, float dct6, float dct7, float dct8) {
c.PointResize(c.width,c.height,offx,offy,c.width,c.height).dctfilter(dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8,chroma=-1)
}
Last edited by foxyshadis; 22nd December 2014 at 00:16.
Reason: fixed link
|