Compute fast inverse wavelet transform of all 4 subbands of given level and stores result in LL subband of level - 1.
246 ASSERT(srcLevel > 0 && srcLevel <
m_nLevels);
247 const int destLevel = srcLevel - 1;
250 UINT32 width, height;
253 if (!destBand->
AllocMemory())
return InsufficientMemory;
254 DataT *dest = destBand->
GetBuffer(), *origin = dest, *row0, *row1, *row2, *row3;
256 #ifdef __PGFROISUPPORT__ 257 PGFRect destROI = destBand->GetROI();
258 width = destROI.
Width();
259 height = destROI.
Height();
260 const UINT32 destWidth = width;
261 const UINT32 destHeight = height;
264 if (destROI.
top & 1) {
269 if (destROI.
left & 1) {
277 UINT32 left = (destROI.
left >> 1) -
m_subband[srcLevel][i].GetROI().left;
278 UINT32 top = (destROI.
top >> 1) -
m_subband[srcLevel][i].GetROI().top;
284 PGFRect destROI(0, 0, width, height);
285 const UINT32 destWidth = width;
286 const UINT32 destHeight = height;
296 row0 = origin; row1 = row0 + destWidth;
298 for (UINT32 k=0; k < width; k++) {
299 row0[k] -= ((row1[k] +
c1) >> 1);
303 row2 = row1 + destWidth; row3 = row2 + destWidth;
304 for (UINT32 i=destROI.
top + 2; i < destROI.
bottom - 1; i += 2) {
306 for (UINT32 k=0; k < width; k++) {
307 row2[k] -= ((row1[k] + row3[k] +
c2) >> 2);
308 row1[k] += ((row0[k] + row2[k] +
c1) >> 1);
312 row0 = row2; row1 = row3; row2 = row1 + destWidth; row3 = row2 + destWidth;
318 for (UINT32 k=0; k < width; k++) {
319 row2[k] -= ((row1[k] +
c1) >> 1);
320 row1[k] += ((row0[k] + row2[k] +
c1) >> 1);
325 row0 = row1; row1 = row2; row2 += destWidth;
327 for (UINT32 k=0; k < width; k++) {
332 row0 = row1; row1 += destWidth;
336 row0 = origin; row1 = row0 + destWidth;
338 for (UINT32 k=0; k < height; k += 2) {
342 row0 += destWidth << 1; row1 += destWidth << 1;
void FreeMemory()
Delete the memory buffer of this subband.
#define NSubbands
number of subbands per level