I've been implementing tiled resizing using TBB with IPP resizing functions. All works well with the TBB tiled resizing sample code using the newer resizing API in IPP 8.2 update 1 (.e.g. ResizeFilterInit, ResizeFilter). I can divide the image vertically into groups of scan lines and the results are bytewise identical however many scan lines I use as the TBB grain size.
My problem concerns resizing YUV422. As far as I can tell newer resizing APIs for YUV422 so far only exist for nearest neighbour and linear interpolation. I'd like to use Supersampling, Lanczos or possibly cubic interpolation (often with antialiasing) for better quality.
My options seem to be:
For Lanczos and cubic ResizeYCbCr422
For supersampling ResizeYUV422 (which is deprecated).
However I'm finding ResizeYCbCr gives different results when than image is tiled too finely - the individual slices end up getting vertically stretched or squashed slightly and the output image contains noticeable visual artifacts. The rule of thumb seems to be that the image can't be divided by more than the power of two that divides both the source and destination height or horizontally by half the highest power of two that divides the source and destination width. The same problem happens if not using TBB for tiling.
ResizeYUV422 with supersampling doesn't seem to allow any vertical tiling without changing the results.
Will Intel be implementing YUV422 resizing support for supersampling and Lanczos any time soon so that I can move to the new resizing APIs which will hopefully allow seamless tiling? If not are there any workarounds?
I doubt that it would be worthwhile in performance terms to upsample from YUV422 to YUV444, resize in YUV444 and then subsample back to YUV422. I also couldn't find any appropriate upsampling or downsampling primitives in IPP from a brief inspection. It sounds like taking the simple mean of two pixels for subsampling doesn't give good results with edges in images.
Thanks for any advice or suggestions,