If you want to take matters into your own hands, you can do the scale
yourself by calling the two unidimensional shear bottleneck functions
to do the resampling. This would allow you to do things like always do
the horizontal pass first.
Which would work out just fine. Sounds like I can count on
horizontal-first
always being faster (maybe even under Tiger) since my v/h ratio never
seems
to be greater than about 11/8.5 for some reason or other ;-) All my
scaling
goes through 1 function and it shouldn't be a big deal to change it to
shear
in 2 passes.
I don't have data on relative performance on Tiger. I improved the
performance of the vertical pass for the special case that scaling
falls into by up to 30x for images of this size. It is quite possible
that vertical is now faster than horizontal, provided that the shearing
is zero, which it always is for scale.
Horizontal first is only faster for downsampling on Panther. For
upsampling you'd want to do vertical first.
And now I remember 1 question I forgot earlier: it seems that vImage
doesn't
tile these big images on a dual-processor machine. Not a big concern
to me
since the client is not buying dual-processor machines, but just a
suggestion. At some point it becomes a definite performance win. Maybe
a
feature request for Tiger...
This has already been done for Tiger. Turn off with kvImageDoNotTile.
FYI my ultimate goal is to be able to read, decompress, scale &
display a
full-page (~850x1100) 2550x3300 (1-bit) scan in ~80ms. That's what's
needed
to provide really good usability for "paperless office" type
applications. I
don't think it can be done on current hardware, but I hope we can get
there
in the next couple of iterations. And it would be a bonus if Apple gets
there before Wintel...
Give Tiger a try (latest seed). We also did some performance work for
CoreGraphics for basic image types (TIFF, JPEG, GIF, etc.) with
improvements up to 3x. I'd be interested in a Shark trace of the entire
process end to end to see if there is something more that might be done
on our end.