The DCT and IDCT functions provided by your IPP library do not produce matching results.
See, in the case like
[X0] -> DCT -> [Y1] -> IDCT -> [X1] -> DCT -> [Y2]
In result, [Y1] != [Y2].
Here I am refering to ippiDCT8x8Inv_16s8u_C1R() & ippiDCT8x8Fwd_8u16s_C1R(),
what is data range in your case? How big the difference is? Remember, IPP 16-bit DCT functions use integer calculations. If accuracy they can provide does not fit your need you can use 32f DCT functions.