]> git.proxmox.com Git - mirror_qemu.git/blobdiff - ui/vnc-enc-zywrle.h
Merge remote-tracking branch 'remotes/jnsnow/tags/bitmaps-pull-request' into staging
[mirror_qemu.git] / ui / vnc-enc-zywrle.h
index 610bd79d1a8696c0be35a386c6e6e10f094e18fd..9b7f6989750f807abc767054e2e0471ab4a79d06 100644 (file)
@@ -48,162 +48,162 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #ifndef ZYWRLE_QUANTIZE
 /* Type A:lower bit omitting of EZW style. */
 static const unsigned int zywrle_param[3][3]={
-       {0x0000F000, 0x00000000, 0x00000000},
-       {0x0000C000, 0x00F0F0F0, 0x00000000},
-       {0x0000C000, 0x00C0C0C0, 0x00F0F0F0},
+        {0x0000F000, 0x00000000, 0x00000000},
+        {0x0000C000, 0x00F0F0F0, 0x00000000},
+        {0x0000C000, 0x00C0C0C0, 0x00F0F0F0},
 /*     {0x0000FF00, 0x00000000, 0x00000000},
-       {0x0000FF00, 0x00FFFFFF, 0x00000000},
-       {0x0000FF00, 0x00FFFFFF, 0x00FFFFFF}, */
+        {0x0000FF00, 0x00FFFFFF, 0x00000000},
+        {0x0000FF00, 0x00FFFFFF, 0x00FFFFFF}, */
 };
 #else
 /* Type B:Non liner quantization filter. */
 static const int8_t zywrle_conv[4][256]={
 {      /* bi=5, bo=5 r=0.0:PSNR=24.849 */
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
 },
 {      /* bi=5, bo=5 r=2.0:PSNR=74.031 */
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 32,
-       32, 32, 32, 32, 32, 32, 32, 32,
-       32, 32, 32, 32, 32, 32, 32, 32,
-       48, 48, 48, 48, 48, 48, 48, 48,
-       48, 48, 48, 56, 56, 56, 56, 56,
-       56, 56, 56, 56, 64, 64, 64, 64,
-       64, 64, 64, 64, 72, 72, 72, 72,
-       72, 72, 72, 72, 80, 80, 80, 80,
-       80, 80, 88, 88, 88, 88, 88, 88,
-       88, 88, 88, 88, 88, 88, 96, 96,
-       96, 96, 96, 104, 104, 104, 104, 104,
-       104, 104, 104, 104, 104, 112, 112, 112,
-       112, 112, 112, 112, 112, 112, 120, 120,
-       120, 120, 120, 120, 120, 120, 120, 120,
-       0, -120, -120, -120, -120, -120, -120, -120,
-       -120, -120, -120, -112, -112, -112, -112, -112,
-       -112, -112, -112, -112, -104, -104, -104, -104,
-       -104, -104, -104, -104, -104, -104, -96, -96,
-       -96, -96, -96, -88, -88, -88, -88, -88,
-       -88, -88, -88, -88, -88, -88, -88, -80,
-       -80, -80, -80, -80, -80, -72, -72, -72,
-       -72, -72, -72, -72, -72, -64, -64, -64,
-       -64, -64, -64, -64, -64, -56, -56, -56,
-       -56, -56, -56, -56, -56, -56, -48, -48,
-       -48, -48, -48, -48, -48, -48, -48, -48,
-       -48, -32, -32, -32, -32, -32, -32, -32,
-       -32, -32, -32, -32, -32, -32, -32, -32,
-       -32, -32, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 32,
+        32, 32, 32, 32, 32, 32, 32, 32,
+        32, 32, 32, 32, 32, 32, 32, 32,
+        48, 48, 48, 48, 48, 48, 48, 48,
+        48, 48, 48, 56, 56, 56, 56, 56,
+        56, 56, 56, 56, 64, 64, 64, 64,
+        64, 64, 64, 64, 72, 72, 72, 72,
+        72, 72, 72, 72, 80, 80, 80, 80,
+        80, 80, 88, 88, 88, 88, 88, 88,
+        88, 88, 88, 88, 88, 88, 96, 96,
+        96, 96, 96, 104, 104, 104, 104, 104,
+        104, 104, 104, 104, 104, 112, 112, 112,
+        112, 112, 112, 112, 112, 112, 120, 120,
+        120, 120, 120, 120, 120, 120, 120, 120,
+        0, -120, -120, -120, -120, -120, -120, -120,
+        -120, -120, -120, -112, -112, -112, -112, -112,
+        -112, -112, -112, -112, -104, -104, -104, -104,
+        -104, -104, -104, -104, -104, -104, -96, -96,
+        -96, -96, -96, -88, -88, -88, -88, -88,
+        -88, -88, -88, -88, -88, -88, -88, -80,
+        -80, -80, -80, -80, -80, -72, -72, -72,
+        -72, -72, -72, -72, -72, -64, -64, -64,
+        -64, -64, -64, -64, -64, -56, -56, -56,
+        -56, -56, -56, -56, -56, -56, -48, -48,
+        -48, -48, -48, -48, -48, -48, -48, -48,
+        -48, -32, -32, -32, -32, -32, -32, -32,
+        -32, -32, -32, -32, -32, -32, -32, -32,
+        -32, -32, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
 },
 {      /* bi=5, bo=4 r=2.0:PSNR=64.441 */
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       48, 48, 48, 48, 48, 48, 48, 48,
-       48, 48, 48, 48, 48, 48, 48, 48,
-       48, 48, 48, 48, 48, 48, 48, 48,
-       64, 64, 64, 64, 64, 64, 64, 64,
-       64, 64, 64, 64, 64, 64, 64, 64,
-       80, 80, 80, 80, 80, 80, 80, 80,
-       80, 80, 80, 80, 80, 88, 88, 88,
-       88, 88, 88, 88, 88, 88, 88, 88,
-       104, 104, 104, 104, 104, 104, 104, 104,
-       104, 104, 104, 112, 112, 112, 112, 112,
-       112, 112, 112, 112, 120, 120, 120, 120,
-       120, 120, 120, 120, 120, 120, 120, 120,
-       0, -120, -120, -120, -120, -120, -120, -120,
-       -120, -120, -120, -120, -120, -112, -112, -112,
-       -112, -112, -112, -112, -112, -112, -104, -104,
-       -104, -104, -104, -104, -104, -104, -104, -104,
-       -104, -88, -88, -88, -88, -88, -88, -88,
-       -88, -88, -88, -88, -80, -80, -80, -80,
-       -80, -80, -80, -80, -80, -80, -80, -80,
-       -80, -64, -64, -64, -64, -64, -64, -64,
-       -64, -64, -64, -64, -64, -64, -64, -64,
-       -64, -48, -48, -48, -48, -48, -48, -48,
-       -48, -48, -48, -48, -48, -48, -48, -48,
-       -48, -48, -48, -48, -48, -48, -48, -48,
-       -48, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        48, 48, 48, 48, 48, 48, 48, 48,
+        48, 48, 48, 48, 48, 48, 48, 48,
+        48, 48, 48, 48, 48, 48, 48, 48,
+        64, 64, 64, 64, 64, 64, 64, 64,
+        64, 64, 64, 64, 64, 64, 64, 64,
+        80, 80, 80, 80, 80, 80, 80, 80,
+        80, 80, 80, 80, 80, 88, 88, 88,
+        88, 88, 88, 88, 88, 88, 88, 88,
+        104, 104, 104, 104, 104, 104, 104, 104,
+        104, 104, 104, 112, 112, 112, 112, 112,
+        112, 112, 112, 112, 120, 120, 120, 120,
+        120, 120, 120, 120, 120, 120, 120, 120,
+        0, -120, -120, -120, -120, -120, -120, -120,
+        -120, -120, -120, -120, -120, -112, -112, -112,
+        -112, -112, -112, -112, -112, -112, -104, -104,
+        -104, -104, -104, -104, -104, -104, -104, -104,
+        -104, -88, -88, -88, -88, -88, -88, -88,
+        -88, -88, -88, -88, -80, -80, -80, -80,
+        -80, -80, -80, -80, -80, -80, -80, -80,
+        -80, -64, -64, -64, -64, -64, -64, -64,
+        -64, -64, -64, -64, -64, -64, -64, -64,
+        -64, -48, -48, -48, -48, -48, -48, -48,
+        -48, -48, -48, -48, -48, -48, -48, -48,
+        -48, -48, -48, -48, -48, -48, -48, -48,
+        -48, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
 },
 {      /* bi=5, bo=2 r=2.0:PSNR=43.175 */
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       88, 88, 88, 88, 88, 88, 88, 88,
-       88, 88, 88, 88, 88, 88, 88, 88,
-       88, 88, 88, 88, 88, 88, 88, 88,
-       88, 88, 88, 88, 88, 88, 88, 88,
-       88, 88, 88, 88, 88, 88, 88, 88,
-       88, 88, 88, 88, 88, 88, 88, 88,
-       88, 88, 88, 88, 88, 88, 88, 88,
-       88, 88, 88, 88, 88, 88, 88, 88,
-       0, -88, -88, -88, -88, -88, -88, -88,
-       -88, -88, -88, -88, -88, -88, -88, -88,
-       -88, -88, -88, -88, -88, -88, -88, -88,
-       -88, -88, -88, -88, -88, -88, -88, -88,
-       -88, -88, -88, -88, -88, -88, -88, -88,
-       -88, -88, -88, -88, -88, -88, -88, -88,
-       -88, -88, -88, -88, -88, -88, -88, -88,
-       -88, -88, -88, -88, -88, -88, -88, -88,
-       -88, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        88, 88, 88, 88, 88, 88, 88, 88,
+        88, 88, 88, 88, 88, 88, 88, 88,
+        88, 88, 88, 88, 88, 88, 88, 88,
+        88, 88, 88, 88, 88, 88, 88, 88,
+        88, 88, 88, 88, 88, 88, 88, 88,
+        88, 88, 88, 88, 88, 88, 88, 88,
+        88, 88, 88, 88, 88, 88, 88, 88,
+        88, 88, 88, 88, 88, 88, 88, 88,
+        0, -88, -88, -88, -88, -88, -88, -88,
+        -88, -88, -88, -88, -88, -88, -88, -88,
+        -88, -88, -88, -88, -88, -88, -88, -88,
+        -88, -88, -88, -88, -88, -88, -88, -88,
+        -88, -88, -88, -88, -88, -88, -88, -88,
+        -88, -88, -88, -88, -88, -88, -88, -88,
+        -88, -88, -88, -88, -88, -88, -88, -88,
+        -88, -88, -88, -88, -88, -88, -88, -88,
+        -88, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0,
 }
 };
 
 static const int8_t *zywrle_param[3][3][3]={
-       {{zywrle_conv[0], zywrle_conv[2], zywrle_conv[0]},
+        {{zywrle_conv[0], zywrle_conv[2], zywrle_conv[0]},
          {zywrle_conv[0], zywrle_conv[0], zywrle_conv[0]},
          {zywrle_conv[0], zywrle_conv[0], zywrle_conv[0]}},
-       {{zywrle_conv[0], zywrle_conv[3], zywrle_conv[0]},
+        {{zywrle_conv[0], zywrle_conv[3], zywrle_conv[0]},
          {zywrle_conv[1], zywrle_conv[1], zywrle_conv[1]},
          {zywrle_conv[0], zywrle_conv[0], zywrle_conv[0]}},
-       {{zywrle_conv[0], zywrle_conv[3], zywrle_conv[0]},
+        {{zywrle_conv[0], zywrle_conv[3], zywrle_conv[0]},
          {zywrle_conv[2], zywrle_conv[2], zywrle_conv[2]},
          {zywrle_conv[1], zywrle_conv[1], zywrle_conv[1]}},
 };
@@ -214,53 +214,53 @@ static const int8_t *zywrle_param[3][3][3]={
 #define ZYWRLE_UVMASK15 0xFFFFFFF8
 #define ZYWRLE_LOAD_PIXEL15(src, r, g, b)                               \
     do {                                                                \
-       r = (((uint8_t*)src)[S_1]<< 1)& 0xF8;                           \
-       g = (((uint8_t*)src)[S_1]<< 6) | (((uint8_t*)src)[S_0]>> 2);    \
+        r = (((uint8_t*)src)[S_1]<< 1)& 0xF8;                           \
+        g = (((uint8_t*)src)[S_1]<< 6) | (((uint8_t*)src)[S_0]>> 2);    \
         g &= 0xF8;                                                      \
-       b =  (((uint8_t*)src)[S_0]<< 3)& 0xF8;                          \
+        b =  (((uint8_t*)src)[S_0]<< 3)& 0xF8;                          \
     } while (0)
 
 #define ZYWRLE_SAVE_PIXEL15(dst, r, g, b)                               \
     do {                                                                \
-       r &= 0xF8;                                                      \
-       g &= 0xF8;                                                      \
-       b &= 0xF8;                                                      \
-       ((uint8_t*)dst)[S_1] = (uint8_t)((r >> 1)|(g >> 6));            \
-       ((uint8_t*)dst)[S_0] = (uint8_t)(((b >> 3)|(g << 2))& 0xFF);    \
+        r &= 0xF8;                                                      \
+        g &= 0xF8;                                                      \
+        b &= 0xF8;                                                      \
+        ((uint8_t*)dst)[S_1] = (uint8_t)((r >> 1)|(g >> 6));            \
+        ((uint8_t*)dst)[S_0] = (uint8_t)(((b >> 3)|(g << 2))& 0xFF);    \
     } while (0)
 
 #define ZYWRLE_YMASK16  0xFFFFFFFC
 #define ZYWRLE_UVMASK16 0xFFFFFFF8
 #define ZYWRLE_LOAD_PIXEL16(src, r, g, b)                               \
     do {                                                                \
-       r = ((uint8_t*)src)[S_1] & 0xF8;                                \
-       g = (((uint8_t*)src)[S_1]<< 5) | (((uint8_t*)src)[S_0] >> 3);   \
+        r = ((uint8_t*)src)[S_1] & 0xF8;                                \
+        g = (((uint8_t*)src)[S_1]<< 5) | (((uint8_t*)src)[S_0] >> 3);   \
         g &= 0xFC;                                                      \
-       b = (((uint8_t*)src)[S_0]<< 3) & 0xF8;                          \
+        b = (((uint8_t*)src)[S_0]<< 3) & 0xF8;                          \
     } while (0)
 
 #define ZYWRLE_SAVE_PIXEL16(dst, r, g,b)                                \
     do {                                                                \
-       r &= 0xF8;                                                      \
-       g &= 0xFC;                                                      \
-       b &= 0xF8;                                                      \
-       ((uint8_t*)dst)[S_1] = (uint8_t)(r | (g >> 5));                 \
-       ((uint8_t*)dst)[S_0] = (uint8_t)(((b >> 3)|(g << 3)) & 0xFF);   \
+        r &= 0xF8;                                                      \
+        g &= 0xFC;                                                      \
+        b &= 0xF8;                                                      \
+        ((uint8_t*)dst)[S_1] = (uint8_t)(r | (g >> 5));                 \
+        ((uint8_t*)dst)[S_0] = (uint8_t)(((b >> 3)|(g << 3)) & 0xFF);   \
     } while (0)
 
 #define ZYWRLE_YMASK32  0xFFFFFFFF
 #define ZYWRLE_UVMASK32 0xFFFFFFFF
 #define ZYWRLE_LOAD_PIXEL32(src, r, g, b)     \
     do {                                      \
-       r = ((uint8_t*)src)[L_2];             \
-       g = ((uint8_t*)src)[L_1];             \
-       b = ((uint8_t*)src)[L_0];             \
+        r = ((uint8_t*)src)[L_2];             \
+        g = ((uint8_t*)src)[L_1];             \
+        b = ((uint8_t*)src)[L_0];             \
     } while (0)
 #define ZYWRLE_SAVE_PIXEL32(dst, r, g, b)             \
     do {                                              \
-       ((uint8_t*)dst)[L_2] = (uint8_t)r;            \
-       ((uint8_t*)dst)[L_1] = (uint8_t)g;            \
-       ((uint8_t*)dst)[L_0] = (uint8_t)b;            \
+        ((uint8_t*)dst)[L_2] = (uint8_t)r;            \
+        ((uint8_t*)dst)[L_1] = (uint8_t)g;            \
+        ((uint8_t*)dst)[L_0] = (uint8_t)b;            \
     } while (0)
 
 static inline void harr(int8_t *px0, int8_t *px1)
@@ -443,27 +443,27 @@ static inline void filter_wavelet_square(int *buf, int width, int height,
 
 static inline void wavelet(int *buf, int width, int height, int level)
 {
-       int l, s;
-       int *top;
-       int *end;
-
-       for (l = 0; l < level; l++) {
-               top = buf;
-               end = buf + height * width;
-               s = width << l;
-               while (top < end) {
-                       wavelet_level(top, width, l, 1);
-                       top += s;
-               }
-               top = buf;
-               end = buf + width;
-               s = 1<<l;
-               while (top < end) {
-                       wavelet_level(top, height, l, width);
-                       top += s;
-               }
-               filter_wavelet_square(buf, width, height, level, l);
-       }
+        int l, s;
+        int *top;
+        int *end;
+
+        for (l = 0; l < level; l++) {
+                top = buf;
+                end = buf + height * width;
+                s = width << l;
+                while (top < end) {
+                        wavelet_level(top, width, l, 1);
+                        top += s;
+                }
+                top = buf;
+                end = buf + width;
+                s = 1<<l;
+                while (top < end) {
+                        wavelet_level(top, height, l, width);
+                        top += s;
+                }
+                filter_wavelet_square(buf, width, height, level, l);
+        }
 }
 
 
@@ -471,16 +471,16 @@ static inline void wavelet(int *buf, int width, int height, int level)
  Coefficients manages as 24 bits little-endian pixel. */
 #define ZYWRLE_LOAD_COEFF(src, r, g, b)         \
     do {                                        \
-       r = ((int8_t*)src)[2];                  \
-       g = ((int8_t*)src)[1];                  \
-       b = ((int8_t*)src)[0];                  \
+        r = ((int8_t*)src)[2];                  \
+        g = ((int8_t*)src)[1];                  \
+        b = ((int8_t*)src)[0];                  \
     } while (0)
 
 #define ZYWRLE_SAVE_COEFF(dst, r, g, b)       \
     do {                                      \
-       ((int8_t*)dst)[2] = (int8_t)r;        \
-       ((int8_t*)dst)[1] = (int8_t)g;        \
-       ((int8_t*)dst)[0] = (int8_t)b;        \
+        ((int8_t*)dst)[2] = (int8_t)r;        \
+        ((int8_t*)dst)[1] = (int8_t)g;        \
+        ((int8_t*)dst)[0] = (int8_t)b;        \
     } while (0)
 
 /*
@@ -502,22 +502,22 @@ static inline void wavelet(int *buf, int width, int height, int level)
    More exact PLHarr, we reduce to odd range(-127<=x<=127). */
 #define ZYWRLE_RGBYUV_(r, g, b, y, u, v, ymask, uvmask)          \
     do {                                                         \
-       y = (r + (g << 1) + b) >> 2;                             \
-       u =  b - g;                                              \
-       v =  r - g;                                              \
-       y -= 128;                                                \
-       u >>= 1;                                                 \
-       v >>= 1;                                                 \
-       y &= ymask;                                              \
-       u &= uvmask;                                             \
-       v &= uvmask;                                             \
-       if (y == -128) {                                         \
+        y = (r + (g << 1) + b) >> 2;                             \
+        u =  b - g;                                              \
+        v =  r - g;                                              \
+        y -= 128;                                                \
+        u >>= 1;                                                 \
+        v >>= 1;                                                 \
+        y &= ymask;                                              \
+        u &= uvmask;                                             \
+        v &= uvmask;                                             \
+        if (y == -128) {                                         \
             y += (0xFFFFFFFF - ymask + 1);                       \
         }                                                        \
-       if (u == -128) {                                         \
+        if (u == -128) {                                         \
             u += (0xFFFFFFFF - uvmask + 1);                      \
         }                                                        \
-       if (v == -128) {                                         \
+        if (v == -128) {                                         \
             v += (0xFFFFFFFF - uvmask + 1);                      \
         }                                                        \
     } while (0)