avcodec/jpeg2000dwt: Fix order of operations in integer decomposition wavelets
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
7e2bdea764
commit
75651cd63f
9 changed files with 66 additions and 64 deletions
|
|
@ -111,22 +111,6 @@ static void dwt_encode53(DWTContext *s, int *t)
|
|||
int *l;
|
||||
|
||||
av_assert1(!mh && !mv);
|
||||
// HOR_SD
|
||||
l = line + mh;
|
||||
for (lp = 0; lp < lv; lp++){
|
||||
int i, j = 0;
|
||||
|
||||
for (i = 0; i < lh; i++)
|
||||
l[i] = t[w*lp + i];
|
||||
|
||||
sd_1d53(line, mh, mh + lh);
|
||||
|
||||
// copy back and deinterleave
|
||||
for (i = mh; i < lh; i+=2, j++)
|
||||
t[w*lp + j] = l[i];
|
||||
for (i = 1-mh; i < lh; i+=2, j++)
|
||||
t[w*lp + j] = l[i];
|
||||
}
|
||||
|
||||
// VER_SD
|
||||
l = line + mv;
|
||||
|
|
@ -144,6 +128,23 @@ static void dwt_encode53(DWTContext *s, int *t)
|
|||
for (i = 1-mv; i < lv; i+=2, j++)
|
||||
t[w*j + lp] = l[i];
|
||||
}
|
||||
|
||||
// HOR_SD
|
||||
l = line + mh;
|
||||
for (lp = 0; lp < lv; lp++){
|
||||
int i, j = 0;
|
||||
|
||||
for (i = 0; i < lh; i++)
|
||||
l[i] = t[w*lp + i];
|
||||
|
||||
sd_1d53(line, mh, mh + lh);
|
||||
|
||||
// copy back and deinterleave
|
||||
for (i = mh; i < lh; i+=2, j++)
|
||||
t[w*lp + j] = l[i];
|
||||
for (i = 1-mh; i < lh; i+=2, j++)
|
||||
t[w*lp + j] = l[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
static void sd_1d97_float(float *p, int i0, int i1)
|
||||
|
|
@ -265,6 +266,23 @@ static void dwt_encode97_int(DWTContext *s, int *t)
|
|||
|
||||
av_assert1(!mh && !mv);
|
||||
|
||||
// VER_SD
|
||||
l = line + mv;
|
||||
for (lp = 0; lp < lh; lp++) {
|
||||
int i, j = 0;
|
||||
|
||||
for (i = 0; i < lv; i++)
|
||||
l[i] = t[w*i + lp];
|
||||
|
||||
sd_1d97_int(line, mv, mv + lv);
|
||||
|
||||
// copy back and deinterleave
|
||||
for (i = mv; i < lv; i+=2, j++)
|
||||
t[w*j + lp] = ((l[i] * I_LFTG_X) + (1 << 16)) >> 17;
|
||||
for (i = 1-mv; i < lv; i+=2, j++)
|
||||
t[w*j + lp] = ((l[i] * I_LFTG_K) + (1 << 16)) >> 17;
|
||||
}
|
||||
|
||||
// HOR_SD
|
||||
l = line + mh;
|
||||
for (lp = 0; lp < lv; lp++){
|
||||
|
|
@ -282,22 +300,6 @@ static void dwt_encode97_int(DWTContext *s, int *t)
|
|||
t[w*lp + j] = ((l[i] * I_LFTG_K) + (1 << 16)) >> 17;
|
||||
}
|
||||
|
||||
// VER_SD
|
||||
l = line + mv;
|
||||
for (lp = 0; lp < lh; lp++) {
|
||||
int i, j = 0;
|
||||
|
||||
for (i = 0; i < lv; i++)
|
||||
l[i] = t[w*i + lp];
|
||||
|
||||
sd_1d97_int(line, mv, mv + lv);
|
||||
|
||||
// copy back and deinterleave
|
||||
for (i = mv; i < lv; i+=2, j++)
|
||||
t[w*j + lp] = ((l[i] * I_LFTG_X) + (1 << 16)) >> 17;
|
||||
for (i = 1-mv; i < lv; i+=2, j++)
|
||||
t[w*j + lp] = ((l[i] * I_LFTG_K) + (1 << 16)) >> 17;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue