|
|
1.1 ! root 1: ! 2: /******************************************************************** ! 3: * * ! 4: * THIS FILE IS PART OF THE 'ZYWRLE' VNC CODEC SOURCE CODE. * ! 5: * * ! 6: * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * ! 7: * GOVERNED BY A FOLLOWING BSD-STYLE SOURCE LICENSE. * ! 8: * PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * ! 9: * * ! 10: * THE 'ZYWRLE' VNC CODEC SOURCE CODE IS (C) COPYRIGHT 2006 * ! 11: * BY Hitachi Systems & Services, Ltd. * ! 12: * (Noriaki Yamazaki, Research & Developement Center) * ! 13: * * ! 14: * * ! 15: ******************************************************************** ! 16: Redistribution and use in source and binary forms, with or without ! 17: modification, are permitted provided that the following conditions ! 18: are met: ! 19: ! 20: - Redistributions of source code must retain the above copyright ! 21: notice, this list of conditions and the following disclaimer. ! 22: ! 23: - Redistributions in binary form must reproduce the above copyright ! 24: notice, this list of conditions and the following disclaimer in the ! 25: documentation and/or other materials provided with the distribution. ! 26: ! 27: - Neither the name of the Hitachi Systems & Services, Ltd. nor ! 28: the names of its contributors may be used to endorse or promote ! 29: products derived from this software without specific prior written ! 30: permission. ! 31: ! 32: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! 33: ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ! 34: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ! 35: A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION ! 36: OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ! 37: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ! 38: LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ! 39: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ! 40: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ! 41: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ! 42: OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ! 43: ********************************************************************/ ! 44: ! 45: /* Change Log: ! 46: V0.02 : 2008/02/04 : Fix mis encode/decode when width != scanline ! 47: (Thanks Johannes Schindelin, author of LibVNC ! 48: Server/Client) ! 49: V0.01 : 2007/02/06 : Initial release ! 50: */ ! 51: ! 52: /* ! 53: [References] ! 54: PLHarr: ! 55: Senecal, J. G., P. Lindstrom, M. A. Duchaineau, and K. I. Joy, ! 56: "An Improved N-Bit to N-Bit Reversible Haar-Like Transform," ! 57: Pacific Graphics 2004, October 2004, pp. 371-380. ! 58: EZW: ! 59: Shapiro, JM: Embedded Image Coding Using Zerotrees of Wavelet Coefficients, ! 60: IEEE Trans. Signal. Process., Vol.41, pp.3445-3462 (1993). ! 61: */ ! 62: ! 63: ! 64: /* Template Macro stuffs. */ ! 65: #undef ZYWRLE_ANALYZE ! 66: #undef ZYWRLE_SYNTHESIZE ! 67: ! 68: #define ZYWRLE_SUFFIX ZRLE_CONCAT2(ZRLE_BPP,ZRLE_ENDIAN_SUFFIX) ! 69: ! 70: #define ZYWRLE_ANALYZE ZRLE_CONCAT2(zywrle_analyze_, ZYWRLE_SUFFIX) ! 71: #define ZYWRLE_SYNTHESIZE ZRLE_CONCAT2(zywrle_synthesize_,ZYWRLE_SUFFIX) ! 72: ! 73: #define ZYWRLE_RGBYUV ZRLE_CONCAT2(zywrle_rgbyuv_, ZYWRLE_SUFFIX) ! 74: #define ZYWRLE_YUVRGB ZRLE_CONCAT2(zywrle_yuvrgb_, ZYWRLE_SUFFIX) ! 75: #define ZYWRLE_YMASK ZRLE_CONCAT2(ZYWRLE_YMASK, ZRLE_BPP) ! 76: #define ZYWRLE_UVMASK ZRLE_CONCAT2(ZYWRLE_UVMASK, ZRLE_BPP) ! 77: #define ZYWRLE_LOAD_PIXEL ZRLE_CONCAT2(ZYWRLE_LOAD_PIXEL, ZRLE_BPP) ! 78: #define ZYWRLE_SAVE_PIXEL ZRLE_CONCAT2(ZYWRLE_SAVE_PIXEL, ZRLE_BPP) ! 79: ! 80: /* Packing/Unpacking pixel stuffs. ! 81: Endian conversion stuffs. */ ! 82: #undef S_0 ! 83: #undef S_1 ! 84: #undef L_0 ! 85: #undef L_1 ! 86: #undef L_2 ! 87: ! 88: #if ZYWRLE_ENDIAN == ENDIAN_BIG ! 89: # define S_0 1 ! 90: # define S_1 0 ! 91: # define L_0 3 ! 92: # define L_1 2 ! 93: # define L_2 1 ! 94: #else ! 95: # define S_0 0 ! 96: # define S_1 1 ! 97: # define L_0 0 ! 98: # define L_1 1 ! 99: # define L_2 2 ! 100: #endif ! 101: ! 102: #define ZYWRLE_QUANTIZE ! 103: #include "vnc-enc-zywrle.h" ! 104: ! 105: #ifndef ZRLE_COMPACT_PIXEL ! 106: static inline void ZYWRLE_RGBYUV(int *buf, ZRLE_PIXEL *data, ! 107: int width, int height, int scanline) ! 108: { ! 109: int r, g, b; ! 110: int y, u, v; ! 111: int *line; ! 112: int *end; ! 113: ! 114: end = buf + height * width; ! 115: while (buf < end) { ! 116: line = buf + width; ! 117: while (buf < line) { ! 118: ZYWRLE_LOAD_PIXEL(data, r, g, b); ! 119: ZYWRLE_RGBYUV_(r, g, b, y, u, v, ZYWRLE_YMASK, ZYWRLE_UVMASK); ! 120: ZYWRLE_SAVE_COEFF(buf, v, y, u); ! 121: buf++; ! 122: data++; ! 123: } ! 124: data += scanline - width; ! 125: } ! 126: } ! 127: ! 128: static ZRLE_PIXEL *ZYWRLE_ANALYZE(ZRLE_PIXEL *dst, ZRLE_PIXEL *src, ! 129: int w, int h, int scanline, int level, ! 130: int *buf) { ! 131: int l; ! 132: int uw = w; ! 133: int uh = h; ! 134: int *top; ! 135: int *end; ! 136: int *line; ! 137: ZRLE_PIXEL *p; ! 138: int r, g, b; ! 139: int s; ! 140: int *ph; ! 141: ! 142: zywrle_calc_size(&w, &h, level); ! 143: ! 144: if (w == 0 || h == 0) { ! 145: return NULL; ! 146: } ! 147: uw -= w; ! 148: uh -= h; ! 149: ! 150: p = dst; ! 151: ZYWRLE_LOAD_UNALIGN(src,*(ZRLE_PIXEL*)top = *p;); ! 152: ZYWRLE_RGBYUV(buf, src, w, h, scanline); ! 153: wavelet(buf, w, h, level); ! 154: for (l = 0; l < level; l++) { ! 155: ZYWRLE_PACK_COEFF(buf, dst, 3, w, h, scanline, l); ! 156: ZYWRLE_PACK_COEFF(buf, dst, 2, w, h, scanline, l); ! 157: ZYWRLE_PACK_COEFF(buf, dst, 1, w, h, scanline, l); ! 158: if (l == level - 1) { ! 159: ZYWRLE_PACK_COEFF(buf, dst, 0, w, h, scanline, l); ! 160: } ! 161: } ! 162: ZYWRLE_SAVE_UNALIGN(dst,*dst = *(ZRLE_PIXEL*)top;); ! 163: return dst; ! 164: } ! 165: #endif /* ZRLE_COMPACT_PIXEL */ ! 166: ! 167: #undef ZYWRLE_RGBYUV ! 168: #undef ZYWRLE_YUVRGB ! 169: #undef ZYWRLE_LOAD_PIXEL ! 170: #undef ZYWRLE_SAVE_PIXEL
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.