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