View Single Post
Old 12th February 2007, 10:51   #37  |  Link
foxyshadis
ангел смерти
 
foxyshadis's Avatar
 
Join Date: Nov 2004
Location: Lost
Posts: 9,558
I really need to keep better track of my mental notes, it would save me so much time debugging later on. So anyway, I got you a version that'll do offsets, but unfortunately several attempts to get higher precision out of it failed. I'm going to have to ask someone who knows mmx/sse to find out why, because there's so much wasted extra room. But at least it takes less memory to do its thing:

Plugin

Code:
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
	align1 =  source.dfilter( 1,  0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align2 =  source.dfilter( 1,  1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align3 =  source.dfilter( 1,  2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align4 =  source.dfilter( 1,  3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align5 =  source.dfilter( 1,  4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align6 =  source.dfilter( 1,  5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align7 =  source.dfilter( 1,  6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align8 =  source.dfilter( 1,  7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align9 =  source.dfilter( 2,  0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align10 = source.dfilter( 2,  1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align11 = source.dfilter( 2,  2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align12 = source.dfilter( 2,  3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align13 = source.dfilter( 2,  4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align14 = source.dfilter( 2,  5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align15 = source.dfilter( 2,  6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align16 = source.dfilter( 2,  7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)

	################################################################## dct32 2
	align17 = source.dfilter( 3,  0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align18 = source.dfilter( 3,  1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align19 = source.dfilter( 3,  2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align20 = source.dfilter( 3,  3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align21 = source.dfilter( 3,  4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align22 = source.dfilter( 3,  5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align23 = source.dfilter( 3,  6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align24 = source.dfilter( 3,  7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align25 = source.dfilter( 4,  0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align26 = source.dfilter( 4,  1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align27 = source.dfilter( 4,  2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align28 = source.dfilter( 4,  3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align29 = source.dfilter( 4,  4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align30 = source.dfilter( 4,  5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align31 = source.dfilter( 4,  6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align32 = source.dfilter( 4,  7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)

	################################################################## dct48 3
	align33 = source.dfilter( 5,  0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align34 = source.dfilter( 5,  1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align35 = source.dfilter( 5,  2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align36 = source.dfilter( 5,  3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align37 = source.dfilter( 5,  4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align38 = source.dfilter( 5,  5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align39 = source.dfilter( 5,  6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align40 = source.dfilter( 5,  7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align41 = source.dfilter( 4,  0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align42 = source.dfilter( 6,  1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align43 = source.dfilter( 6,  2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align44 = source.dfilter( 6,  3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align45 = source.dfilter( 6,  4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align46 = source.dfilter( 6,  5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align47 = source.dfilter( 6,  6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align48 = source.dfilter( 6,  7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)

	################################################################## dct64 4
	align49 = source.dfilter( 7,  0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align50 = source.dfilter( 7,  1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align51 = source.dfilter( 7,  2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align52 = source.dfilter( 7,  3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align53 = source.dfilter( 7,  4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align54 = source.dfilter( 7,  5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align55 = source.dfilter( 7,  6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align56 = source.dfilter( 7,  7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align57 = source.dfilter( 0,  0, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align58 = source.dfilter( 0,  1, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align59 = source.dfilter( 0,  2, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align60 = source.dfilter( 0,  3, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align61 = source.dfilter( 0,  4, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align62 = source.dfilter( 0,  5, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align63 = source.dfilter( 0,  6, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)
	align64 = source.dfilter( 0,  7, dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8)

	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(source, 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=0,offx=offx,offy=offy).PointResize(c.width,c.height,-offx,-offy,c.width,c.height)
	c.dctfilter(dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8,chroma=0,offx=offx,offy=offy)
}
(The dctlimit stuff is something I should have done the first time I cleaned it up, didn't affect anything.)

Nonetheless, I think I'm going to look at CAFxX's filter for now, unless I have any sudden insights on how to make this more efficient.

I think the current version leans too heavily on warpsharp, it really has a rather dull and hollow look at 4x, very much like EKG - toning it down looks rather nicer imho. Still, I'm having a hard time choosing between this and Photozoom2, my other current favorite. PZ2 has much more deviation in line thickness that is very pleasant, but way too much contrast, where WD retains an enormous amount of detail, but somehow or another, those thick lines could really use some help. I only wish I knew how to get that effect.

Last edited by foxyshadis; 12th February 2007 at 11:41.
foxyshadis is offline   Reply With Quote