View Single Post
Old 9th February 2007, 19:25   #10  |  Link
foxyshadis
Angel of Night
 
foxyshadis's Avatar
 
Join Date: Nov 2004
Location: Tangled in the silks
Posts: 9,559
Quote:
Originally Posted by *.mp4 guy View Post
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
foxyshadis is offline   Reply With Quote