I use UIC for decoding JPEG2K (according to example uic_transcoder_con).
Everything works fine, however I noticed the "ReadImageJPEG2000" function allocates a lot of memory - in example jp2 image with size more less 6,5MB and resolution 4750x3170 needs about 400MB of memory for decoding. Sometimes (not enough available memory) it causes serious problems.
Is there any way to reduce this memory consumption? Any kind of parameters I can set? Do I do it wrong? Or maybe it is normal, decoding algoritms require that amount of memory, and there is nothing I can do?
JPEG2000compression algorithmis based on wavelet transform, which require whole image size intermediate buffer to keep wavelet coefficients in our implementation. The JPEG2000 codec implementations differs in memory requirements depending on whetherthey support progressive image reading from stream orsimpleuse file seeking to access data in random order. Implementation in IPP UIC rely on progressive reading from stream and sorequire more memory on intermediate steps.
The real question is; is this IPP memory problem important?
The answer can only be:
- If your end-user computer has little RAM (<1GByte), then the 600MByte peak will flush all other process memory out to swap file, slowing your APP, and the other processes to a crawl, until the swap file (on the slow HD) has been read back into RAM. This shurely would cause a fast CPU to be considered a slow CPU.
- If your computer has plenty of RAM (>2GByte), then the 600MByte peak will not disturb anything.
In my opinion, Intel should look into the mirror, and ask themselves, do we want to supply/sell IPP in light of what those other suppliers sell, considering that we want to be the best, performance-wise?
I personally think, wow! low-cost Intel IPP Jpeg2000 decoder software, and high-performance image filters, all roalty-free!
The other end of the coin is that it seems Intel will make IPP incompatible with legacy processors (IPP 7).