OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include <limits.h> | 7 #include <limits.h> |
8 | 8 |
9 #include "../../../include/fxcrt/fx_basic.h" | 9 #include "../../../include/fxcrt/fx_basic.h" |
10 #include "../../../include/fxcrt/fx_coordinates.h" | 10 #include "../../../include/fxcrt/fx_coordinates.h" |
11 #include "../../../include/fxcrt/fx_safe_types.h" | 11 #include "../../../include/fxcrt/fx_safe_types.h" |
12 #include "JBig2_Image.h" | 12 #include "JBig2_Image.h" |
13 | 13 |
14 CJBig2_Image::CJBig2_Image(FX_INT32 w, FX_INT32 h) | 14 CJBig2_Image::CJBig2_Image(int32_t w, int32_t h) |
15 { | 15 { |
16 m_nWidth = w; | 16 m_nWidth = w; |
17 m_nHeight = h; | 17 m_nHeight = h; |
18 if (m_nWidth <= 0 || m_nHeight <= 0 || m_nWidth > INT_MAX - 31) { | 18 if (m_nWidth <= 0 || m_nHeight <= 0 || m_nWidth > INT_MAX - 31) { |
19 m_pData = NULL; | 19 m_pData = NULL; |
20 m_bNeedFree = FALSE; | 20 m_bNeedFree = FALSE; |
21 return; | 21 return; |
22 } | 22 } |
23 m_nStride = ((w + 31) >> 5) << 2; | 23 m_nStride = ((w + 31) >> 5) << 2; |
24 if (m_nStride * m_nHeight > 0 && 104857600 / (int)m_nStride > m_nHeight) { | 24 if (m_nStride * m_nHeight > 0 && 104857600 / (int)m_nStride > m_nHeight) { |
25 m_pData = (FX_BYTE *)m_pModule->JBig2_Malloc2(m_nStride, m_nHeight); | 25 m_pData = (uint8_t *)m_pModule->JBig2_Malloc2(m_nStride, m_nHeight); |
26 } else { | 26 } else { |
27 m_pData = NULL; | 27 m_pData = NULL; |
28 } | 28 } |
29 m_bNeedFree = TRUE; | 29 m_bNeedFree = TRUE; |
30 } | 30 } |
31 CJBig2_Image::CJBig2_Image(FX_INT32 w, FX_INT32 h, FX_INT32 stride, FX_BYTE*pBuf
) | 31 CJBig2_Image::CJBig2_Image(int32_t w, int32_t h, int32_t stride, uint8_t*pBuf) |
32 { | 32 { |
33 m_nWidth = w; | 33 m_nWidth = w; |
34 m_nHeight = h; | 34 m_nHeight = h; |
35 m_nStride = stride; | 35 m_nStride = stride; |
36 m_pData = pBuf; | 36 m_pData = pBuf; |
37 m_bNeedFree = FALSE; | 37 m_bNeedFree = FALSE; |
38 } | 38 } |
39 CJBig2_Image::CJBig2_Image(CJBig2_Image &im) | 39 CJBig2_Image::CJBig2_Image(CJBig2_Image &im) |
40 { | 40 { |
41 m_pModule = im.m_pModule; | 41 m_pModule = im.m_pModule; |
42 m_nWidth = im.m_nWidth; | 42 m_nWidth = im.m_nWidth; |
43 m_nHeight = im.m_nHeight; | 43 m_nHeight = im.m_nHeight; |
44 m_nStride = im.m_nStride; | 44 m_nStride = im.m_nStride; |
45 if (im.m_pData) { | 45 if (im.m_pData) { |
46 m_pData = (FX_BYTE*)m_pModule->JBig2_Malloc2(m_nStride, m_nHeight); | 46 m_pData = (uint8_t*)m_pModule->JBig2_Malloc2(m_nStride, m_nHeight); |
47 JBIG2_memcpy(m_pData, im.m_pData, m_nStride * m_nHeight); | 47 JBIG2_memcpy(m_pData, im.m_pData, m_nStride * m_nHeight); |
48 } else { | 48 } else { |
49 m_pData = NULL; | 49 m_pData = NULL; |
50 } | 50 } |
51 m_bNeedFree = TRUE; | 51 m_bNeedFree = TRUE; |
52 } | 52 } |
53 CJBig2_Image::~CJBig2_Image() | 53 CJBig2_Image::~CJBig2_Image() |
54 { | 54 { |
55 if(m_bNeedFree && m_pData) { | 55 if(m_bNeedFree && m_pData) { |
56 m_pModule->JBig2_Free(m_pData); | 56 m_pModule->JBig2_Free(m_pData); |
57 } | 57 } |
58 } | 58 } |
59 FX_BOOL CJBig2_Image::getPixel(FX_INT32 x, FX_INT32 y) | 59 FX_BOOL CJBig2_Image::getPixel(int32_t x, int32_t y) |
60 { | 60 { |
61 if (!m_pData) { | 61 if (!m_pData) { |
62 return 0; | 62 return 0; |
63 } | 63 } |
64 FX_INT32 m, n; | 64 int32_t m, n; |
65 if(x < 0 || x >= m_nWidth) { | 65 if(x < 0 || x >= m_nWidth) { |
66 return 0; | 66 return 0; |
67 } | 67 } |
68 if(y < 0 || y >= m_nHeight) { | 68 if(y < 0 || y >= m_nHeight) { |
69 return 0; | 69 return 0; |
70 } | 70 } |
71 m = y * m_nStride + (x >> 3); | 71 m = y * m_nStride + (x >> 3); |
72 n = x & 7; | 72 n = x & 7; |
73 return ((m_pData[m] >> (7 - n)) & 1); | 73 return ((m_pData[m] >> (7 - n)) & 1); |
74 } | 74 } |
75 | 75 |
76 FX_INT32 CJBig2_Image::setPixel(FX_INT32 x, FX_INT32 y, FX_BOOL v) | 76 int32_t CJBig2_Image::setPixel(int32_t x, int32_t y, FX_BOOL v) |
77 { | 77 { |
78 if (!m_pData) { | 78 if (!m_pData) { |
79 return 0; | 79 return 0; |
80 } | 80 } |
81 FX_INT32 m, n; | 81 int32_t m, n; |
82 if(x < 0 || x >= m_nWidth) { | 82 if(x < 0 || x >= m_nWidth) { |
83 return 0; | 83 return 0; |
84 } | 84 } |
85 if(y < 0 || y >= m_nHeight) { | 85 if(y < 0 || y >= m_nHeight) { |
86 return 0; | 86 return 0; |
87 } | 87 } |
88 m = y * m_nStride + (x >> 3); | 88 m = y * m_nStride + (x >> 3); |
89 n = x & 7; | 89 n = x & 7; |
90 if(v) { | 90 if(v) { |
91 m_pData[m] |= 1 << (7 - n); | 91 m_pData[m] |= 1 << (7 - n); |
92 } else { | 92 } else { |
93 m_pData[m] &= ~(1 << (7 - n)); | 93 m_pData[m] &= ~(1 << (7 - n)); |
94 } | 94 } |
95 return 1; | 95 return 1; |
96 } | 96 } |
97 void CJBig2_Image::copyLine(FX_INT32 hTo, FX_INT32 hFrom) | 97 void CJBig2_Image::copyLine(int32_t hTo, int32_t hFrom) |
98 { | 98 { |
99 if (!m_pData) { | 99 if (!m_pData) { |
100 return; | 100 return; |
101 } | 101 } |
102 if(hFrom < 0 || hFrom >= m_nHeight) { | 102 if(hFrom < 0 || hFrom >= m_nHeight) { |
103 JBIG2_memset(m_pData + hTo * m_nStride, 0, m_nStride); | 103 JBIG2_memset(m_pData + hTo * m_nStride, 0, m_nStride); |
104 } else { | 104 } else { |
105 JBIG2_memcpy(m_pData + hTo * m_nStride, m_pData + hFrom * m_nStride, m_n
Stride); | 105 JBIG2_memcpy(m_pData + hTo * m_nStride, m_pData + hFrom * m_nStride, m_n
Stride); |
106 } | 106 } |
107 } | 107 } |
108 void CJBig2_Image::fill(FX_BOOL v) | 108 void CJBig2_Image::fill(FX_BOOL v) |
109 { | 109 { |
110 if (!m_pData) { | 110 if (!m_pData) { |
111 return; | 111 return; |
112 } | 112 } |
113 JBIG2_memset(m_pData, v ? 0xff : 0, m_nStride * m_nHeight); | 113 JBIG2_memset(m_pData, v ? 0xff : 0, m_nStride * m_nHeight); |
114 } | 114 } |
115 FX_BOOL CJBig2_Image::composeTo(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y, JBig
2ComposeOp op) | 115 FX_BOOL CJBig2_Image::composeTo(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2C
omposeOp op) |
116 { | 116 { |
117 if (!m_pData) { | 117 if (!m_pData) { |
118 return FALSE; | 118 return FALSE; |
119 } | 119 } |
120 return composeTo_opt2(pDst, x, y, op); | 120 return composeTo_opt2(pDst, x, y, op); |
121 } | 121 } |
122 FX_BOOL CJBig2_Image::composeTo(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y, JBig
2ComposeOp op, const FX_RECT* pSrcRect) | 122 FX_BOOL CJBig2_Image::composeTo(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2C
omposeOp op, const FX_RECT* pSrcRect) |
123 { | 123 { |
124 if (!m_pData) { | 124 if (!m_pData) { |
125 return FALSE; | 125 return FALSE; |
126 } | 126 } |
127 if (NULL == pSrcRect || *pSrcRect == FX_RECT(0, 0, m_nWidth, m_nHeight)) { | 127 if (NULL == pSrcRect || *pSrcRect == FX_RECT(0, 0, m_nWidth, m_nHeight)) { |
128 return composeTo_opt2(pDst, x, y, op); | 128 return composeTo_opt2(pDst, x, y, op); |
129 } | 129 } |
130 return composeTo_opt2(pDst, x, y, op, pSrcRect); | 130 return composeTo_opt2(pDst, x, y, op, pSrcRect); |
131 } | 131 } |
132 FX_BOOL CJBig2_Image::composeTo_unopt(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y
, JBig2ComposeOp op) | 132 FX_BOOL CJBig2_Image::composeTo_unopt(CJBig2_Image *pDst, int32_t x, int32_t y,
JBig2ComposeOp op) |
133 { | 133 { |
134 FX_INT32 w, h, dx, dy; | 134 int32_t w, h, dx, dy; |
135 FX_INT32 i, j; | 135 int32_t i, j; |
136 w = m_nWidth; | 136 w = m_nWidth; |
137 h = m_nHeight; | 137 h = m_nHeight; |
138 dx = dy = 0; | 138 dx = dy = 0; |
139 if(x < 0) { | 139 if(x < 0) { |
140 dx += -x; | 140 dx += -x; |
141 w -= -x; | 141 w -= -x; |
142 x = 0; | 142 x = 0; |
143 } | 143 } |
144 if(y < 0) { | 144 if(y < 0) { |
145 dy += -y; | 145 dy += -y; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 for(j = 0; j < h; j++) { | 189 for(j = 0; j < h; j++) { |
190 for(i = 0; i < w; i++) { | 190 for(i = 0; i < w; i++) { |
191 pDst->setPixel(x + i, y + j, getPixel(i + dx, j + dy)); | 191 pDst->setPixel(x + i, y + j, getPixel(i + dx, j + dy)); |
192 } | 192 } |
193 } | 193 } |
194 break; | 194 break; |
195 } | 195 } |
196 return TRUE; | 196 return TRUE; |
197 } | 197 } |
198 | 198 |
199 FX_BOOL CJBig2_Image::composeTo_opt(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y,
JBig2ComposeOp op) | 199 FX_BOOL CJBig2_Image::composeTo_opt(CJBig2_Image *pDst, int32_t x, int32_t y, JB
ig2ComposeOp op) |
200 { | 200 { |
201 FX_INT32 x0, x1, y0, y1, xx, yy; | 201 int32_t x0, x1, y0, y1, xx, yy; |
202 FX_BYTE *pLineSrc, *pLineDst, *srcPtr, *destPtr; | 202 uint8_t *pLineSrc, *pLineDst, *srcPtr, *destPtr; |
203 FX_DWORD src0, src1, src, dest, s1, s2, m1, m2, m3; | 203 FX_DWORD src0, src1, src, dest, s1, s2, m1, m2, m3; |
204 FX_BOOL oneByte; | 204 FX_BOOL oneByte; |
205 if (!m_pData) { | 205 if (!m_pData) { |
206 return FALSE; | 206 return FALSE; |
207 } | 207 } |
208 if (y < 0) { | 208 if (y < 0) { |
209 y0 = -y; | 209 y0 = -y; |
210 } else { | 210 } else { |
211 y0 = 0; | 211 y0 = 0; |
212 } | 212 } |
(...skipping 27 matching lines...) Expand all Loading... |
240 pLineSrc = m_pData + y0 * m_nStride; | 240 pLineSrc = m_pData + y0 * m_nStride; |
241 if(oneByte) { | 241 if(oneByte) { |
242 if(x >= 0) { | 242 if(x >= 0) { |
243 switch(op) { | 243 switch(op) { |
244 case JBIG2_COMPOSE_OR: { | 244 case JBIG2_COMPOSE_OR: { |
245 for (yy = y0; yy < y1; ++yy) { | 245 for (yy = y0; yy < y1; ++yy) { |
246 destPtr = pLineDst + (x >> 3); | 246 destPtr = pLineDst + (x >> 3); |
247 srcPtr = pLineSrc; | 247 srcPtr = pLineSrc; |
248 dest = *destPtr; | 248 dest = *destPtr; |
249 dest |= (*srcPtr >> s1) & m2; | 249 dest |= (*srcPtr >> s1) & m2; |
250 *destPtr = (FX_BYTE)dest; | 250 *destPtr = (uint8_t)dest; |
251 pLineDst += pDst->m_nStride; | 251 pLineDst += pDst->m_nStride; |
252 pLineSrc += m_nStride; | 252 pLineSrc += m_nStride; |
253 } | 253 } |
254 } | 254 } |
255 break; | 255 break; |
256 case JBIG2_COMPOSE_AND: { | 256 case JBIG2_COMPOSE_AND: { |
257 for (yy = y0; yy < y1; ++yy) { | 257 for (yy = y0; yy < y1; ++yy) { |
258 destPtr = pLineDst + (x >> 3); | 258 destPtr = pLineDst + (x >> 3); |
259 srcPtr = pLineSrc; | 259 srcPtr = pLineSrc; |
260 dest = *destPtr; | 260 dest = *destPtr; |
261 dest &= ((0xff00 | *srcPtr) >> s1) | m1; | 261 dest &= ((0xff00 | *srcPtr) >> s1) | m1; |
262 *destPtr = (FX_BYTE)dest; | 262 *destPtr = (uint8_t)dest; |
263 pLineDst += pDst->m_nStride; | 263 pLineDst += pDst->m_nStride; |
264 pLineSrc += m_nStride; | 264 pLineSrc += m_nStride; |
265 } | 265 } |
266 } | 266 } |
267 break; | 267 break; |
268 case JBIG2_COMPOSE_XOR: { | 268 case JBIG2_COMPOSE_XOR: { |
269 for (yy = y0; yy < y1; ++yy) { | 269 for (yy = y0; yy < y1; ++yy) { |
270 destPtr = pLineDst + (x >> 3); | 270 destPtr = pLineDst + (x >> 3); |
271 srcPtr = pLineSrc; | 271 srcPtr = pLineSrc; |
272 dest = *destPtr; | 272 dest = *destPtr; |
273 dest ^= (*srcPtr >> s1) & m2; | 273 dest ^= (*srcPtr >> s1) & m2; |
274 *destPtr = (FX_BYTE)dest; | 274 *destPtr = (uint8_t)dest; |
275 pLineDst += pDst->m_nStride; | 275 pLineDst += pDst->m_nStride; |
276 pLineSrc += m_nStride; | 276 pLineSrc += m_nStride; |
277 } | 277 } |
278 } | 278 } |
279 break; | 279 break; |
280 case JBIG2_COMPOSE_XNOR: { | 280 case JBIG2_COMPOSE_XNOR: { |
281 for (yy = y0; yy < y1; ++yy) { | 281 for (yy = y0; yy < y1; ++yy) { |
282 destPtr = pLineDst + (x >> 3); | 282 destPtr = pLineDst + (x >> 3); |
283 srcPtr = pLineSrc; | 283 srcPtr = pLineSrc; |
284 dest = *destPtr; | 284 dest = *destPtr; |
285 dest ^= ((*srcPtr ^ 0xff) >> s1) & m2; | 285 dest ^= ((*srcPtr ^ 0xff) >> s1) & m2; |
286 *destPtr = (FX_BYTE)dest; | 286 *destPtr = (uint8_t)dest; |
287 pLineDst += pDst->m_nStride; | 287 pLineDst += pDst->m_nStride; |
288 pLineSrc += m_nStride; | 288 pLineSrc += m_nStride; |
289 } | 289 } |
290 } | 290 } |
291 break; | 291 break; |
292 case JBIG2_COMPOSE_REPLACE: { | 292 case JBIG2_COMPOSE_REPLACE: { |
293 for (yy = y0; yy < y1; ++yy) { | 293 for (yy = y0; yy < y1; ++yy) { |
294 destPtr = pLineDst + (x >> 3); | 294 destPtr = pLineDst + (x >> 3); |
295 srcPtr = pLineSrc; | 295 srcPtr = pLineSrc; |
296 dest = *destPtr; | 296 dest = *destPtr; |
297 dest = (dest & ~m3) | ((*srcPtr >> s1) & m3); | 297 dest = (dest & ~m3) | ((*srcPtr >> s1) & m3); |
298 *destPtr = (FX_BYTE)dest; | 298 *destPtr = (uint8_t)dest; |
299 pLineDst += pDst->m_nStride; | 299 pLineDst += pDst->m_nStride; |
300 pLineSrc += m_nStride; | 300 pLineSrc += m_nStride; |
301 } | 301 } |
302 } | 302 } |
303 break; | 303 break; |
304 } | 304 } |
305 } else { | 305 } else { |
306 switch(op) { | 306 switch(op) { |
307 case JBIG2_COMPOSE_OR: { | 307 case JBIG2_COMPOSE_OR: { |
308 for(yy = y0; yy < y1; ++yy) { | 308 for(yy = y0; yy < y1; ++yy) { |
309 destPtr = pLineDst; | 309 destPtr = pLineDst; |
310 srcPtr = pLineSrc + (-x >> 3); | 310 srcPtr = pLineSrc + (-x >> 3); |
311 dest = *destPtr; | 311 dest = *destPtr; |
312 dest |= *srcPtr & m2; | 312 dest |= *srcPtr & m2; |
313 *destPtr = (FX_BYTE)dest; | 313 *destPtr = (uint8_t)dest; |
314 pLineDst += pDst->m_nStride; | 314 pLineDst += pDst->m_nStride; |
315 pLineSrc += m_nStride; | 315 pLineSrc += m_nStride; |
316 } | 316 } |
317 } | 317 } |
318 break; | 318 break; |
319 case JBIG2_COMPOSE_AND: { | 319 case JBIG2_COMPOSE_AND: { |
320 for(yy = y0; yy < y1; ++yy) { | 320 for(yy = y0; yy < y1; ++yy) { |
321 destPtr = pLineDst; | 321 destPtr = pLineDst; |
322 srcPtr = pLineSrc + (-x >> 3); | 322 srcPtr = pLineSrc + (-x >> 3); |
323 dest = *destPtr; | 323 dest = *destPtr; |
324 dest &= *srcPtr | m1; | 324 dest &= *srcPtr | m1; |
325 *destPtr = (FX_BYTE)dest; | 325 *destPtr = (uint8_t)dest; |
326 pLineDst += pDst->m_nStride; | 326 pLineDst += pDst->m_nStride; |
327 pLineSrc += m_nStride; | 327 pLineSrc += m_nStride; |
328 } | 328 } |
329 } | 329 } |
330 break; | 330 break; |
331 case JBIG2_COMPOSE_XOR: { | 331 case JBIG2_COMPOSE_XOR: { |
332 for(yy = y0; yy < y1; ++yy) { | 332 for(yy = y0; yy < y1; ++yy) { |
333 destPtr = pLineDst; | 333 destPtr = pLineDst; |
334 srcPtr = pLineSrc + (-x >> 3); | 334 srcPtr = pLineSrc + (-x >> 3); |
335 dest = *destPtr; | 335 dest = *destPtr; |
336 dest ^= *srcPtr & m2; | 336 dest ^= *srcPtr & m2; |
337 *destPtr = (FX_BYTE)dest; | 337 *destPtr = (uint8_t)dest; |
338 pLineDst += pDst->m_nStride; | 338 pLineDst += pDst->m_nStride; |
339 pLineSrc += m_nStride; | 339 pLineSrc += m_nStride; |
340 } | 340 } |
341 } | 341 } |
342 break; | 342 break; |
343 case JBIG2_COMPOSE_XNOR: { | 343 case JBIG2_COMPOSE_XNOR: { |
344 for(yy = y0; yy < y1; ++yy) { | 344 for(yy = y0; yy < y1; ++yy) { |
345 destPtr = pLineDst; | 345 destPtr = pLineDst; |
346 srcPtr = pLineSrc + (-x >> 3); | 346 srcPtr = pLineSrc + (-x >> 3); |
347 dest = *destPtr; | 347 dest = *destPtr; |
348 dest ^= (*srcPtr ^ 0xff) & m2; | 348 dest ^= (*srcPtr ^ 0xff) & m2; |
349 *destPtr = (FX_BYTE)dest; | 349 *destPtr = (uint8_t)dest; |
350 pLineDst += pDst->m_nStride; | 350 pLineDst += pDst->m_nStride; |
351 pLineSrc += m_nStride; | 351 pLineSrc += m_nStride; |
352 } | 352 } |
353 } | 353 } |
354 break; | 354 break; |
355 case JBIG2_COMPOSE_REPLACE: { | 355 case JBIG2_COMPOSE_REPLACE: { |
356 for(yy = y0; yy < y1; ++yy) { | 356 for(yy = y0; yy < y1; ++yy) { |
357 destPtr = pLineDst; | 357 destPtr = pLineDst; |
358 srcPtr = pLineSrc + (-x >> 3); | 358 srcPtr = pLineSrc + (-x >> 3); |
359 dest = *destPtr; | 359 dest = *destPtr; |
360 dest = (*srcPtr & m2) | (dest & m1); | 360 dest = (*srcPtr & m2) | (dest & m1); |
361 *destPtr = (FX_BYTE)dest; | 361 *destPtr = (uint8_t)dest; |
362 pLineDst += pDst->m_nStride; | 362 pLineDst += pDst->m_nStride; |
363 pLineSrc += m_nStride; | 363 pLineSrc += m_nStride; |
364 } | 364 } |
365 } | 365 } |
366 break; | 366 break; |
367 } | 367 } |
368 } | 368 } |
369 } else { | 369 } else { |
370 if(x >= 0) { | 370 if(x >= 0) { |
371 switch(op) { | 371 switch(op) { |
372 case JBIG2_COMPOSE_OR: { | 372 case JBIG2_COMPOSE_OR: { |
373 for(yy = y0; yy < y1; ++yy) { | 373 for(yy = y0; yy < y1; ++yy) { |
374 destPtr = pLineDst + (x >> 3); | 374 destPtr = pLineDst + (x >> 3); |
375 srcPtr = pLineSrc; | 375 srcPtr = pLineSrc; |
376 src1 = *srcPtr++; | 376 src1 = *srcPtr++; |
377 dest = *destPtr; | 377 dest = *destPtr; |
378 dest |= src1 >> s1; | 378 dest |= src1 >> s1; |
379 *destPtr++ = (FX_BYTE)dest; | 379 *destPtr++ = (uint8_t)dest; |
380 xx = x0 + 8; | 380 xx = x0 + 8; |
381 for (; xx < x1 - 8; xx += 8) { | 381 for (; xx < x1 - 8; xx += 8) { |
382 dest = *destPtr; | 382 dest = *destPtr; |
383 src0 = src1; | 383 src0 = src1; |
384 src1 = *srcPtr++; | 384 src1 = *srcPtr++; |
385 src = (((src0 << 8) | src1) >> s1) & 0xff; | 385 src = (((src0 << 8) | src1) >> s1) & 0xff; |
386 dest |= src; | 386 dest |= src; |
387 *destPtr++ = (FX_BYTE)dest; | 387 *destPtr++ = (uint8_t)dest; |
388 } | 388 } |
389 dest = *destPtr; | 389 dest = *destPtr; |
390 src0 = src1; | 390 src0 = src1; |
391 if(srcPtr - pLineSrc < m_nStride) { | 391 if(srcPtr - pLineSrc < m_nStride) { |
392 src1 = *srcPtr++; | 392 src1 = *srcPtr++; |
393 } else { | 393 } else { |
394 src1 = 0; | 394 src1 = 0; |
395 } | 395 } |
396 src = (((src0 << 8) | src1) >> s1) & 0xff; | 396 src = (((src0 << 8) | src1) >> s1) & 0xff; |
397 dest |= src & m2; | 397 dest |= src & m2; |
398 *destPtr = (FX_BYTE)dest; | 398 *destPtr = (uint8_t)dest; |
399 pLineDst += pDst->m_nStride; | 399 pLineDst += pDst->m_nStride; |
400 pLineSrc += m_nStride; | 400 pLineSrc += m_nStride; |
401 } | 401 } |
402 } | 402 } |
403 break; | 403 break; |
404 case JBIG2_COMPOSE_AND: { | 404 case JBIG2_COMPOSE_AND: { |
405 for(yy = y0; yy < y1; ++yy) { | 405 for(yy = y0; yy < y1; ++yy) { |
406 destPtr = pLineDst + (x >> 3); | 406 destPtr = pLineDst + (x >> 3); |
407 srcPtr = pLineSrc; | 407 srcPtr = pLineSrc; |
408 src1 = *srcPtr++; | 408 src1 = *srcPtr++; |
409 dest = *destPtr; | 409 dest = *destPtr; |
410 dest &= (0xff00 | src1) >> s1; | 410 dest &= (0xff00 | src1) >> s1; |
411 *destPtr++ = (FX_BYTE)dest; | 411 *destPtr++ = (uint8_t)dest; |
412 xx = x0 + 8; | 412 xx = x0 + 8; |
413 for (; xx < x1 - 8; xx += 8) { | 413 for (; xx < x1 - 8; xx += 8) { |
414 dest = *destPtr; | 414 dest = *destPtr; |
415 src0 = src1; | 415 src0 = src1; |
416 src1 = *srcPtr++; | 416 src1 = *srcPtr++; |
417 src = (((src0 << 8) | src1) >> s1) & 0xff; | 417 src = (((src0 << 8) | src1) >> s1) & 0xff; |
418 dest &= src; | 418 dest &= src; |
419 *destPtr++ = (FX_BYTE)dest; | 419 *destPtr++ = (uint8_t)dest; |
420 } | 420 } |
421 dest = *destPtr; | 421 dest = *destPtr; |
422 src0 = src1; | 422 src0 = src1; |
423 if(srcPtr - pLineSrc < m_nStride) { | 423 if(srcPtr - pLineSrc < m_nStride) { |
424 src1 = *srcPtr++; | 424 src1 = *srcPtr++; |
425 } else { | 425 } else { |
426 src1 = 0; | 426 src1 = 0; |
427 } | 427 } |
428 src = (((src0 << 8) | src1) >> s1) & 0xff; | 428 src = (((src0 << 8) | src1) >> s1) & 0xff; |
429 dest &= src | m1; | 429 dest &= src | m1; |
430 *destPtr = (FX_BYTE)dest; | 430 *destPtr = (uint8_t)dest; |
431 pLineDst += pDst->m_nStride; | 431 pLineDst += pDst->m_nStride; |
432 pLineSrc += m_nStride; | 432 pLineSrc += m_nStride; |
433 } | 433 } |
434 } | 434 } |
435 break; | 435 break; |
436 case JBIG2_COMPOSE_XOR: { | 436 case JBIG2_COMPOSE_XOR: { |
437 for(yy = y0; yy < y1; ++yy) { | 437 for(yy = y0; yy < y1; ++yy) { |
438 destPtr = pLineDst + (x >> 3); | 438 destPtr = pLineDst + (x >> 3); |
439 srcPtr = pLineSrc; | 439 srcPtr = pLineSrc; |
440 src1 = *srcPtr++; | 440 src1 = *srcPtr++; |
441 dest = *destPtr; | 441 dest = *destPtr; |
442 dest ^= src1 >> s1; | 442 dest ^= src1 >> s1; |
443 *destPtr++ = (FX_BYTE)dest; | 443 *destPtr++ = (uint8_t)dest; |
444 xx = x0 + 8; | 444 xx = x0 + 8; |
445 for (; xx < x1 - 8; xx += 8) { | 445 for (; xx < x1 - 8; xx += 8) { |
446 dest = *destPtr; | 446 dest = *destPtr; |
447 src0 = src1; | 447 src0 = src1; |
448 src1 = *srcPtr++; | 448 src1 = *srcPtr++; |
449 src = (((src0 << 8) | src1) >> s1) & 0xff; | 449 src = (((src0 << 8) | src1) >> s1) & 0xff; |
450 dest ^= src; | 450 dest ^= src; |
451 *destPtr++ = (FX_BYTE)dest; | 451 *destPtr++ = (uint8_t)dest; |
452 } | 452 } |
453 dest = *destPtr; | 453 dest = *destPtr; |
454 src0 = src1; | 454 src0 = src1; |
455 if(srcPtr - pLineSrc < m_nStride) { | 455 if(srcPtr - pLineSrc < m_nStride) { |
456 src1 = *srcPtr++; | 456 src1 = *srcPtr++; |
457 } else { | 457 } else { |
458 src1 = 0; | 458 src1 = 0; |
459 } | 459 } |
460 src = (((src0 << 8) | src1) >> s1) & 0xff; | 460 src = (((src0 << 8) | src1) >> s1) & 0xff; |
461 dest ^= src & m2; | 461 dest ^= src & m2; |
462 *destPtr = (FX_BYTE)dest; | 462 *destPtr = (uint8_t)dest; |
463 pLineDst += pDst->m_nStride; | 463 pLineDst += pDst->m_nStride; |
464 pLineSrc += m_nStride; | 464 pLineSrc += m_nStride; |
465 } | 465 } |
466 } | 466 } |
467 break; | 467 break; |
468 case JBIG2_COMPOSE_XNOR: { | 468 case JBIG2_COMPOSE_XNOR: { |
469 for(yy = y0; yy < y1; ++yy) { | 469 for(yy = y0; yy < y1; ++yy) { |
470 destPtr = pLineDst + (x >> 3); | 470 destPtr = pLineDst + (x >> 3); |
471 srcPtr = pLineSrc; | 471 srcPtr = pLineSrc; |
472 src1 = *srcPtr++; | 472 src1 = *srcPtr++; |
473 dest = *destPtr; | 473 dest = *destPtr; |
474 dest ^= (src1 ^ 0xff) >> s1; | 474 dest ^= (src1 ^ 0xff) >> s1; |
475 *destPtr++ = (FX_BYTE)dest; | 475 *destPtr++ = (uint8_t)dest; |
476 xx = x0 + 8; | 476 xx = x0 + 8; |
477 for (; xx < x1 - 8; xx += 8) { | 477 for (; xx < x1 - 8; xx += 8) { |
478 dest = *destPtr; | 478 dest = *destPtr; |
479 src0 = src1; | 479 src0 = src1; |
480 src1 = *srcPtr++; | 480 src1 = *srcPtr++; |
481 src = (((src0 << 8) | src1) >> s1) & 0xff; | 481 src = (((src0 << 8) | src1) >> s1) & 0xff; |
482 dest ^= src ^ 0xff; | 482 dest ^= src ^ 0xff; |
483 *destPtr++ = (FX_BYTE)dest; | 483 *destPtr++ = (uint8_t)dest; |
484 } | 484 } |
485 dest = *destPtr; | 485 dest = *destPtr; |
486 src0 = src1; | 486 src0 = src1; |
487 if(srcPtr - pLineSrc < m_nStride) { | 487 if(srcPtr - pLineSrc < m_nStride) { |
488 src1 = *srcPtr++; | 488 src1 = *srcPtr++; |
489 } else { | 489 } else { |
490 src1 = 0; | 490 src1 = 0; |
491 } | 491 } |
492 src = (((src0 << 8) | src1) >> s1) & 0xff; | 492 src = (((src0 << 8) | src1) >> s1) & 0xff; |
493 dest ^= (src ^ 0xff) & m2; | 493 dest ^= (src ^ 0xff) & m2; |
494 *destPtr = (FX_BYTE)dest; | 494 *destPtr = (uint8_t)dest; |
495 pLineDst += pDst->m_nStride; | 495 pLineDst += pDst->m_nStride; |
496 pLineSrc += m_nStride; | 496 pLineSrc += m_nStride; |
497 } | 497 } |
498 } | 498 } |
499 break; | 499 break; |
500 case JBIG2_COMPOSE_REPLACE: { | 500 case JBIG2_COMPOSE_REPLACE: { |
501 for(yy = y0; yy < y1; ++yy) { | 501 for(yy = y0; yy < y1; ++yy) { |
502 destPtr = pLineDst + (x >> 3); | 502 destPtr = pLineDst + (x >> 3); |
503 srcPtr = pLineSrc; | 503 srcPtr = pLineSrc; |
504 src1 = *srcPtr++; | 504 src1 = *srcPtr++; |
505 dest = *destPtr; | 505 dest = *destPtr; |
506 dest = (dest & (0xff << s2)) | (src1 >> s1); | 506 dest = (dest & (0xff << s2)) | (src1 >> s1); |
507 *destPtr++ = (FX_BYTE)dest; | 507 *destPtr++ = (uint8_t)dest; |
508 xx = x0 + 8; | 508 xx = x0 + 8; |
509 for (; xx < x1 - 8; xx += 8) { | 509 for (; xx < x1 - 8; xx += 8) { |
510 dest = *destPtr; | 510 dest = *destPtr; |
511 src0 = src1; | 511 src0 = src1; |
512 src1 = *srcPtr++; | 512 src1 = *srcPtr++; |
513 src = (((src0 << 8) | src1) >> s1) & 0xff; | 513 src = (((src0 << 8) | src1) >> s1) & 0xff; |
514 dest = src; | 514 dest = src; |
515 *destPtr++ = (FX_BYTE)dest; | 515 *destPtr++ = (uint8_t)dest; |
516 } | 516 } |
517 dest = *destPtr; | 517 dest = *destPtr; |
518 src0 = src1; | 518 src0 = src1; |
519 if(srcPtr - pLineSrc < m_nStride) { | 519 if(srcPtr - pLineSrc < m_nStride) { |
520 src1 = *srcPtr++; | 520 src1 = *srcPtr++; |
521 } else { | 521 } else { |
522 src1 = 0; | 522 src1 = 0; |
523 } | 523 } |
524 src = (((src0 << 8) | src1) >> s1) & 0xff; | 524 src = (((src0 << 8) | src1) >> s1) & 0xff; |
525 dest = (src & m2) | (dest & m1); | 525 dest = (src & m2) | (dest & m1); |
526 *destPtr = (FX_BYTE)dest; | 526 *destPtr = (uint8_t)dest; |
527 pLineDst += pDst->m_nStride; | 527 pLineDst += pDst->m_nStride; |
528 pLineSrc += m_nStride; | 528 pLineSrc += m_nStride; |
529 } | 529 } |
530 } | 530 } |
531 break; | 531 break; |
532 } | 532 } |
533 } else { | 533 } else { |
534 switch(op) { | 534 switch(op) { |
535 case JBIG2_COMPOSE_OR: { | 535 case JBIG2_COMPOSE_OR: { |
536 for(yy = y0; yy < y1; ++yy) { | 536 for(yy = y0; yy < y1; ++yy) { |
537 destPtr = pLineDst; | 537 destPtr = pLineDst; |
538 srcPtr = pLineSrc + (-x >> 3); | 538 srcPtr = pLineSrc + (-x >> 3); |
539 src1 = *srcPtr++; | 539 src1 = *srcPtr++; |
540 xx = x0; | 540 xx = x0; |
541 for (; xx < x1 - 8; xx += 8) { | 541 for (; xx < x1 - 8; xx += 8) { |
542 dest = *destPtr; | 542 dest = *destPtr; |
543 src0 = src1; | 543 src0 = src1; |
544 src1 = *srcPtr++; | 544 src1 = *srcPtr++; |
545 src = (((src0 << 8) | src1) >> s1) & 0xff; | 545 src = (((src0 << 8) | src1) >> s1) & 0xff; |
546 dest |= src; | 546 dest |= src; |
547 *destPtr++ = (FX_BYTE)dest; | 547 *destPtr++ = (uint8_t)dest; |
548 } | 548 } |
549 dest = *destPtr; | 549 dest = *destPtr; |
550 src0 = src1; | 550 src0 = src1; |
551 if(srcPtr - pLineSrc < m_nStride) { | 551 if(srcPtr - pLineSrc < m_nStride) { |
552 src1 = *srcPtr++; | 552 src1 = *srcPtr++; |
553 } else { | 553 } else { |
554 src1 = 0; | 554 src1 = 0; |
555 } | 555 } |
556 src = (((src0 << 8) | src1) >> s1) & 0xff; | 556 src = (((src0 << 8) | src1) >> s1) & 0xff; |
557 dest |= src & m2; | 557 dest |= src & m2; |
558 *destPtr = (FX_BYTE)dest; | 558 *destPtr = (uint8_t)dest; |
559 pLineDst += pDst->m_nStride; | 559 pLineDst += pDst->m_nStride; |
560 pLineSrc += m_nStride; | 560 pLineSrc += m_nStride; |
561 } | 561 } |
562 } | 562 } |
563 break; | 563 break; |
564 case JBIG2_COMPOSE_AND: { | 564 case JBIG2_COMPOSE_AND: { |
565 for(yy = y0; yy < y1; ++yy) { | 565 for(yy = y0; yy < y1; ++yy) { |
566 destPtr = pLineDst; | 566 destPtr = pLineDst; |
567 srcPtr = pLineSrc + (-x >> 3); | 567 srcPtr = pLineSrc + (-x >> 3); |
568 src1 = *srcPtr++; | 568 src1 = *srcPtr++; |
569 xx = x0; | 569 xx = x0; |
570 for (; xx < x1 - 8; xx += 8) { | 570 for (; xx < x1 - 8; xx += 8) { |
571 dest = *destPtr; | 571 dest = *destPtr; |
572 src0 = src1; | 572 src0 = src1; |
573 src1 = *srcPtr++; | 573 src1 = *srcPtr++; |
574 src = (((src0 << 8) | src1) >> s1) & 0xff; | 574 src = (((src0 << 8) | src1) >> s1) & 0xff; |
575 dest &= src; | 575 dest &= src; |
576 *destPtr++ = (FX_BYTE)dest; | 576 *destPtr++ = (uint8_t)dest; |
577 } | 577 } |
578 dest = *destPtr; | 578 dest = *destPtr; |
579 src0 = src1; | 579 src0 = src1; |
580 if(srcPtr - pLineSrc < m_nStride) { | 580 if(srcPtr - pLineSrc < m_nStride) { |
581 src1 = *srcPtr++; | 581 src1 = *srcPtr++; |
582 } else { | 582 } else { |
583 src1 = 0; | 583 src1 = 0; |
584 } | 584 } |
585 src = (((src0 << 8) | src1) >> s1) & 0xff; | 585 src = (((src0 << 8) | src1) >> s1) & 0xff; |
586 dest &= src | m1; | 586 dest &= src | m1; |
587 *destPtr = (FX_BYTE)dest; | 587 *destPtr = (uint8_t)dest; |
588 pLineDst += pDst->m_nStride; | 588 pLineDst += pDst->m_nStride; |
589 pLineSrc += m_nStride; | 589 pLineSrc += m_nStride; |
590 } | 590 } |
591 } | 591 } |
592 break; | 592 break; |
593 case JBIG2_COMPOSE_XOR: { | 593 case JBIG2_COMPOSE_XOR: { |
594 for(yy = y0; yy < y1; ++yy) { | 594 for(yy = y0; yy < y1; ++yy) { |
595 destPtr = pLineDst; | 595 destPtr = pLineDst; |
596 srcPtr = pLineSrc + (-x >> 3); | 596 srcPtr = pLineSrc + (-x >> 3); |
597 src1 = *srcPtr++; | 597 src1 = *srcPtr++; |
598 xx = x0; | 598 xx = x0; |
599 for (; xx < x1 - 8; xx += 8) { | 599 for (; xx < x1 - 8; xx += 8) { |
600 dest = *destPtr; | 600 dest = *destPtr; |
601 src0 = src1; | 601 src0 = src1; |
602 src1 = *srcPtr++; | 602 src1 = *srcPtr++; |
603 src = (((src0 << 8) | src1) >> s1) & 0xff; | 603 src = (((src0 << 8) | src1) >> s1) & 0xff; |
604 dest ^= src; | 604 dest ^= src; |
605 *destPtr++ = (FX_BYTE)dest; | 605 *destPtr++ = (uint8_t)dest; |
606 } | 606 } |
607 dest = *destPtr; | 607 dest = *destPtr; |
608 src0 = src1; | 608 src0 = src1; |
609 if(srcPtr - pLineSrc < m_nStride) { | 609 if(srcPtr - pLineSrc < m_nStride) { |
610 src1 = *srcPtr++; | 610 src1 = *srcPtr++; |
611 } else { | 611 } else { |
612 src1 = 0; | 612 src1 = 0; |
613 } | 613 } |
614 src = (((src0 << 8) | src1) >> s1) & 0xff; | 614 src = (((src0 << 8) | src1) >> s1) & 0xff; |
615 dest ^= src & m2; | 615 dest ^= src & m2; |
616 *destPtr = (FX_BYTE)dest; | 616 *destPtr = (uint8_t)dest; |
617 pLineDst += pDst->m_nStride; | 617 pLineDst += pDst->m_nStride; |
618 pLineSrc += m_nStride; | 618 pLineSrc += m_nStride; |
619 } | 619 } |
620 } | 620 } |
621 break; | 621 break; |
622 case JBIG2_COMPOSE_XNOR: { | 622 case JBIG2_COMPOSE_XNOR: { |
623 for(yy = y0; yy < y1; ++yy) { | 623 for(yy = y0; yy < y1; ++yy) { |
624 destPtr = pLineDst; | 624 destPtr = pLineDst; |
625 srcPtr = pLineSrc + (-x >> 3); | 625 srcPtr = pLineSrc + (-x >> 3); |
626 src1 = *srcPtr++; | 626 src1 = *srcPtr++; |
627 xx = x0; | 627 xx = x0; |
628 for (; xx < x1 - 8; xx += 8) { | 628 for (; xx < x1 - 8; xx += 8) { |
629 dest = *destPtr; | 629 dest = *destPtr; |
630 src0 = src1; | 630 src0 = src1; |
631 src1 = *srcPtr++; | 631 src1 = *srcPtr++; |
632 src = (((src0 << 8) | src1) >> s1) & 0xff; | 632 src = (((src0 << 8) | src1) >> s1) & 0xff; |
633 dest ^= src ^ 0xff; | 633 dest ^= src ^ 0xff; |
634 *destPtr++ = (FX_BYTE)dest; | 634 *destPtr++ = (uint8_t)dest; |
635 } | 635 } |
636 dest = *destPtr; | 636 dest = *destPtr; |
637 src0 = src1; | 637 src0 = src1; |
638 if(srcPtr - pLineSrc < m_nStride) { | 638 if(srcPtr - pLineSrc < m_nStride) { |
639 src1 = *srcPtr++; | 639 src1 = *srcPtr++; |
640 } else { | 640 } else { |
641 src1 = 0; | 641 src1 = 0; |
642 } | 642 } |
643 src = (((src0 << 8) | src1) >> s1) & 0xff; | 643 src = (((src0 << 8) | src1) >> s1) & 0xff; |
644 dest ^= (src ^ 0xff) & m2; | 644 dest ^= (src ^ 0xff) & m2; |
645 *destPtr = (FX_BYTE)dest; | 645 *destPtr = (uint8_t)dest; |
646 pLineDst += pDst->m_nStride; | 646 pLineDst += pDst->m_nStride; |
647 pLineSrc += m_nStride; | 647 pLineSrc += m_nStride; |
648 } | 648 } |
649 } | 649 } |
650 break; | 650 break; |
651 case JBIG2_COMPOSE_REPLACE: { | 651 case JBIG2_COMPOSE_REPLACE: { |
652 for(yy = y0; yy < y1; ++yy) { | 652 for(yy = y0; yy < y1; ++yy) { |
653 destPtr = pLineDst; | 653 destPtr = pLineDst; |
654 srcPtr = pLineSrc + (-x >> 3); | 654 srcPtr = pLineSrc + (-x >> 3); |
655 src1 = *srcPtr++; | 655 src1 = *srcPtr++; |
656 xx = x0; | 656 xx = x0; |
657 for (; xx < x1 - 8; xx += 8) { | 657 for (; xx < x1 - 8; xx += 8) { |
658 dest = *destPtr; | 658 dest = *destPtr; |
659 src0 = src1; | 659 src0 = src1; |
660 src1 = *srcPtr++; | 660 src1 = *srcPtr++; |
661 src = (((src0 << 8) | src1) >> s1) & 0xff; | 661 src = (((src0 << 8) | src1) >> s1) & 0xff; |
662 dest = src; | 662 dest = src; |
663 *destPtr++ = (FX_BYTE)dest; | 663 *destPtr++ = (uint8_t)dest; |
664 } | 664 } |
665 dest = *destPtr; | 665 dest = *destPtr; |
666 src0 = src1; | 666 src0 = src1; |
667 if(srcPtr - pLineSrc < m_nStride) { | 667 if(srcPtr - pLineSrc < m_nStride) { |
668 src1 = *srcPtr++; | 668 src1 = *srcPtr++; |
669 } else { | 669 } else { |
670 src1 = 0; | 670 src1 = 0; |
671 } | 671 } |
672 src = (((src0 << 8) | src1) >> s1) & 0xff; | 672 src = (((src0 << 8) | src1) >> s1) & 0xff; |
673 dest = (src & m2) | (dest & m1); | 673 dest = (src & m2) | (dest & m1); |
674 *destPtr = (FX_BYTE)dest; | 674 *destPtr = (uint8_t)dest; |
675 pLineDst += pDst->m_nStride; | 675 pLineDst += pDst->m_nStride; |
676 pLineSrc += m_nStride; | 676 pLineSrc += m_nStride; |
677 } | 677 } |
678 } | 678 } |
679 break; | 679 break; |
680 } | 680 } |
681 } | 681 } |
682 } | 682 } |
683 return TRUE; | 683 return TRUE; |
684 } | 684 } |
685 FX_BOOL CJBig2_Image::composeFrom(FX_INT32 x, FX_INT32 y, CJBig2_Image *pSrc, JB
ig2ComposeOp op) | 685 FX_BOOL CJBig2_Image::composeFrom(int32_t x, int32_t y, CJBig2_Image *pSrc, JBig
2ComposeOp op) |
686 { | 686 { |
687 if (!m_pData) { | 687 if (!m_pData) { |
688 return FALSE; | 688 return FALSE; |
689 } | 689 } |
690 return pSrc->composeTo(this, x, y, op); | 690 return pSrc->composeTo(this, x, y, op); |
691 } | 691 } |
692 FX_BOOL CJBig2_Image::composeFrom(FX_INT32 x, FX_INT32 y, CJBig2_Image *pSrc, JB
ig2ComposeOp op, const FX_RECT* pSrcRect) | 692 FX_BOOL CJBig2_Image::composeFrom(int32_t x, int32_t y, CJBig2_Image *pSrc, JBig
2ComposeOp op, const FX_RECT* pSrcRect) |
693 { | 693 { |
694 if (!m_pData) { | 694 if (!m_pData) { |
695 return FALSE; | 695 return FALSE; |
696 } | 696 } |
697 return pSrc->composeTo(this, x, y, op, pSrcRect); | 697 return pSrc->composeTo(this, x, y, op, pSrcRect); |
698 } | 698 } |
699 CJBig2_Image *CJBig2_Image::subImage_unopt(FX_INT32 x, FX_INT32 y, FX_INT32 w, F
X_INT32 h) | 699 CJBig2_Image *CJBig2_Image::subImage_unopt(int32_t x, int32_t y, int32_t w, int3
2_t h) |
700 { | 700 { |
701 CJBig2_Image *pImage; | 701 CJBig2_Image *pImage; |
702 FX_INT32 i, j; | 702 int32_t i, j; |
703 JBIG2_ALLOC(pImage, CJBig2_Image(w, h)); | 703 JBIG2_ALLOC(pImage, CJBig2_Image(w, h)); |
704 for(j = 0; j < h; j++) { | 704 for(j = 0; j < h; j++) { |
705 for(i = 0; i < w; i++) { | 705 for(i = 0; i < w; i++) { |
706 pImage->setPixel(i, j, getPixel(x + i, y + j)); | 706 pImage->setPixel(i, j, getPixel(x + i, y + j)); |
707 } | 707 } |
708 } | 708 } |
709 return pImage; | 709 return pImage; |
710 } | 710 } |
711 #define JBIG2_GETDWORD(buf) ((FX_DWORD)(((buf)[0] << 24) | ((buf)[1] << 16)
| ((buf)[2] << 8) | (buf)[3])) | 711 #define JBIG2_GETDWORD(buf) ((FX_DWORD)(((buf)[0] << 24) | ((buf)[1] << 16)
| ((buf)[2] << 8) | (buf)[3])) |
712 CJBig2_Image *CJBig2_Image::subImage(FX_INT32 x, FX_INT32 y, FX_INT32 w, FX_INT3
2 h) | 712 CJBig2_Image *CJBig2_Image::subImage(int32_t x, int32_t y, int32_t w, int32_t h) |
713 { | 713 { |
714 CJBig2_Image *pImage; | 714 CJBig2_Image *pImage; |
715 FX_INT32 m, n, j; | 715 int32_t m, n, j; |
716 FX_BYTE *pLineSrc, *pLineDst; | 716 uint8_t *pLineSrc, *pLineDst; |
717 FX_DWORD wTmp; | 717 FX_DWORD wTmp; |
718 FX_BYTE *pSrc, *pSrcEnd, *pDst, *pDstEnd; | 718 uint8_t *pSrc, *pSrcEnd, *pDst, *pDstEnd; |
719 if (w == 0 || h == 0) { | 719 if (w == 0 || h == 0) { |
720 return NULL; | 720 return NULL; |
721 } | 721 } |
722 JBIG2_ALLOC(pImage, CJBig2_Image(w, h)); | 722 JBIG2_ALLOC(pImage, CJBig2_Image(w, h)); |
723 if (!m_pData) { | 723 if (!m_pData) { |
724 pImage->fill(0); | 724 pImage->fill(0); |
725 return pImage; | 725 return pImage; |
726 } | 726 } |
727 if (!pImage->m_pData) { | 727 if (!pImage->m_pData) { |
728 return pImage; | 728 return pImage; |
(...skipping 19 matching lines...) Expand all Loading... |
748 pSrc = pLineSrc + m; | 748 pSrc = pLineSrc + m; |
749 pSrcEnd = pLineSrc + m_nStride; | 749 pSrcEnd = pLineSrc + m_nStride; |
750 pDst = pLineDst; | 750 pDst = pLineDst; |
751 pDstEnd = pLineDst + pImage->m_nStride; | 751 pDstEnd = pLineDst + pImage->m_nStride; |
752 for(; pDst < pDstEnd; pSrc += 4, pDst += 4) { | 752 for(; pDst < pDstEnd; pSrc += 4, pDst += 4) { |
753 if(pSrc + 4 < pSrcEnd) { | 753 if(pSrc + 4 < pSrcEnd) { |
754 wTmp = (JBIG2_GETDWORD(pSrc) << n) | (JBIG2_GETDWORD(pSrc +
4) >> (32 - n)); | 754 wTmp = (JBIG2_GETDWORD(pSrc) << n) | (JBIG2_GETDWORD(pSrc +
4) >> (32 - n)); |
755 } else { | 755 } else { |
756 wTmp = JBIG2_GETDWORD(pSrc) << n; | 756 wTmp = JBIG2_GETDWORD(pSrc) << n; |
757 } | 757 } |
758 pDst[0] = (FX_BYTE)(wTmp >> 24); | 758 pDst[0] = (uint8_t)(wTmp >> 24); |
759 pDst[1] = (FX_BYTE)(wTmp >> 16); | 759 pDst[1] = (uint8_t)(wTmp >> 16); |
760 pDst[2] = (FX_BYTE)(wTmp >> 8); | 760 pDst[2] = (uint8_t)(wTmp >> 8); |
761 pDst[3] = (FX_BYTE)wTmp; | 761 pDst[3] = (uint8_t)wTmp; |
762 } | 762 } |
763 pLineSrc += m_nStride; | 763 pLineSrc += m_nStride; |
764 pLineDst += pImage->m_nStride; | 764 pLineDst += pImage->m_nStride; |
765 } | 765 } |
766 } | 766 } |
767 return pImage; | 767 return pImage; |
768 } | 768 } |
769 void CJBig2_Image::expand(FX_INT32 h, FX_BOOL v) | 769 void CJBig2_Image::expand(int32_t h, FX_BOOL v) |
770 { | 770 { |
771 if (!m_pData || h <= m_nHeight) { | 771 if (!m_pData || h <= m_nHeight) { |
772 return; | 772 return; |
773 } | 773 } |
774 FX_DWORD dwH = pdfium::base::checked_cast<FX_DWORD>(h); | 774 FX_DWORD dwH = pdfium::base::checked_cast<FX_DWORD>(h); |
775 FX_DWORD dwStride = pdfium::base::checked_cast<FX_DWORD>(m_nStride); | 775 FX_DWORD dwStride = pdfium::base::checked_cast<FX_DWORD>(m_nStride); |
776 FX_DWORD dwHeight = pdfium::base::checked_cast<FX_DWORD>(m_nHeight); | 776 FX_DWORD dwHeight = pdfium::base::checked_cast<FX_DWORD>(m_nHeight); |
777 FX_SAFE_DWORD safeMemSize = dwH; | 777 FX_SAFE_DWORD safeMemSize = dwH; |
778 safeMemSize *= dwStride; | 778 safeMemSize *= dwStride; |
779 if (!safeMemSize.IsValid()) { | 779 if (!safeMemSize.IsValid()) { |
780 return; | 780 return; |
781 } | 781 } |
782 //The guaranteed reallocated memory is to be < 4GB (unsigned int). | 782 //The guaranteed reallocated memory is to be < 4GB (unsigned int). |
783 m_pData = (FX_BYTE*)m_pModule->JBig2_Realloc(m_pData, safeMemSize.ValueOrDie
()); | 783 m_pData = (uint8_t*)m_pModule->JBig2_Realloc(m_pData, safeMemSize.ValueOrDie
()); |
784 //The result of dwHeight * dwStride doesn't overflow after the | 784 //The result of dwHeight * dwStride doesn't overflow after the |
785 //checking of safeMemSize. | 785 //checking of safeMemSize. |
786 //The same as the result of (dwH - dwHeight) * dwStride) because | 786 //The same as the result of (dwH - dwHeight) * dwStride) because |
787 //dwH - dwHeight is always less than dwH(h) which is checked in | 787 //dwH - dwHeight is always less than dwH(h) which is checked in |
788 //the calculation of dwH * dwStride. | 788 //the calculation of dwH * dwStride. |
789 JBIG2_memset(m_pData + dwHeight * dwStride, v ? 0xff : 0, (dwH - dwHeight) *
dwStride); | 789 JBIG2_memset(m_pData + dwHeight * dwStride, v ? 0xff : 0, (dwH - dwHeight) *
dwStride); |
790 m_nHeight = h; | 790 m_nHeight = h; |
791 } | 791 } |
792 FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y,
JBig2ComposeOp op) | 792 FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image *pDst, int32_t x, int32_t y, J
Big2ComposeOp op) |
793 { | 793 { |
794 FX_INT32 xs0 = 0, ys0 = 0, xs1 = 0, ys1 = 0, xd0 = 0, yd0 =
0, xd1 = 0, | 794 int32_t xs0 = 0, ys0 = 0, xs1 = 0, ys1 = 0, xd0 = 0, yd0 = 0
, xd1 = 0, |
795 yd1 = 0, xx = 0, yy = 0, w = 0, h = 0, middleDwords =
0, lineLeft = 0; | 795 yd1 = 0, xx = 0, yy = 0, w = 0, h = 0, middleDwords =
0, lineLeft = 0; |
796 | 796 |
797 FX_DWORD s1 = 0, d1 = 0, d2 = 0, shift = 0, shift1 = 0, shift2 =
0, | 797 FX_DWORD s1 = 0, d1 = 0, d2 = 0, shift = 0, shift1 = 0, shift2 =
0, |
798 tmp = 0, tmp1 = 0, tmp2 = 0, maskL = 0, maskR = 0, maskM =
0; | 798 tmp = 0, tmp1 = 0, tmp2 = 0, maskL = 0, maskR = 0, maskM =
0; |
799 | 799 |
800 FX_BYTE *lineSrc = NULL, *lineDst = NULL, *sp = NULL, *dp = NULL; | 800 uint8_t *lineSrc = NULL, *lineDst = NULL, *sp = NULL, *dp = NULL; |
801 | 801 |
802 if (!m_pData) { | 802 if (!m_pData) { |
803 return FALSE; | 803 return FALSE; |
804 } | 804 } |
805 if (x < -1048576 || x > 1048576 || y < -1048576 || y > 1048576) { | 805 if (x < -1048576 || x > 1048576 || y < -1048576 || y > 1048576) { |
806 return FALSE; | 806 return FALSE; |
807 } | 807 } |
808 if(y < 0) { | 808 if(y < 0) { |
809 ys0 = -y; | 809 ys0 = -y; |
810 } | 810 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
860 case JBIG2_COMPOSE_XOR: | 860 case JBIG2_COMPOSE_XOR: |
861 tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM); | 861 tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM); |
862 break; | 862 break; |
863 case JBIG2_COMPOSE_XNOR: | 863 case JBIG2_COMPOSE_XNOR: |
864 tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM); | 864 tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM); |
865 break; | 865 break; |
866 case JBIG2_COMPOSE_REPLACE: | 866 case JBIG2_COMPOSE_REPLACE: |
867 tmp = (tmp2 & ~maskM) | (tmp1 & maskM); | 867 tmp = (tmp2 & ~maskM) | (tmp1 & maskM); |
868 break; | 868 break; |
869 } | 869 } |
870 lineDst[0] = (FX_BYTE)(tmp >> 24); | 870 lineDst[0] = (uint8_t)(tmp >> 24); |
871 lineDst[1] = (FX_BYTE)(tmp >> 16); | 871 lineDst[1] = (uint8_t)(tmp >> 16); |
872 lineDst[2] = (FX_BYTE)(tmp >> 8); | 872 lineDst[2] = (uint8_t)(tmp >> 8); |
873 lineDst[3] = (FX_BYTE)tmp; | 873 lineDst[3] = (uint8_t)tmp; |
874 lineSrc += m_nStride; | 874 lineSrc += m_nStride; |
875 lineDst += pDst->m_nStride; | 875 lineDst += pDst->m_nStride; |
876 } | 876 } |
877 } else { | 877 } else { |
878 shift = d1 - s1; | 878 shift = d1 - s1; |
879 for(yy = yd0; yy < yd1; yy++) { | 879 for(yy = yd0; yy < yd1; yy++) { |
880 tmp1 = JBIG2_GETDWORD(lineSrc) >> shift; | 880 tmp1 = JBIG2_GETDWORD(lineSrc) >> shift; |
881 tmp2 = JBIG2_GETDWORD(lineDst); | 881 tmp2 = JBIG2_GETDWORD(lineDst); |
882 switch(op) { | 882 switch(op) { |
883 case JBIG2_COMPOSE_OR: | 883 case JBIG2_COMPOSE_OR: |
884 tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM); | 884 tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM); |
885 break; | 885 break; |
886 case JBIG2_COMPOSE_AND: | 886 case JBIG2_COMPOSE_AND: |
887 tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM); | 887 tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM); |
888 break; | 888 break; |
889 case JBIG2_COMPOSE_XOR: | 889 case JBIG2_COMPOSE_XOR: |
890 tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM); | 890 tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM); |
891 break; | 891 break; |
892 case JBIG2_COMPOSE_XNOR: | 892 case JBIG2_COMPOSE_XNOR: |
893 tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM); | 893 tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM); |
894 break; | 894 break; |
895 case JBIG2_COMPOSE_REPLACE: | 895 case JBIG2_COMPOSE_REPLACE: |
896 tmp = (tmp2 & ~maskM) | (tmp1 & maskM); | 896 tmp = (tmp2 & ~maskM) | (tmp1 & maskM); |
897 break; | 897 break; |
898 } | 898 } |
899 lineDst[0] = (FX_BYTE)(tmp >> 24); | 899 lineDst[0] = (uint8_t)(tmp >> 24); |
900 lineDst[1] = (FX_BYTE)(tmp >> 16); | 900 lineDst[1] = (uint8_t)(tmp >> 16); |
901 lineDst[2] = (FX_BYTE)(tmp >> 8); | 901 lineDst[2] = (uint8_t)(tmp >> 8); |
902 lineDst[3] = (FX_BYTE)tmp; | 902 lineDst[3] = (uint8_t)tmp; |
903 lineSrc += m_nStride; | 903 lineSrc += m_nStride; |
904 lineDst += pDst->m_nStride; | 904 lineDst += pDst->m_nStride; |
905 } | 905 } |
906 } | 906 } |
907 } else { | 907 } else { |
908 shift1 = s1 - d1; | 908 shift1 = s1 - d1; |
909 shift2 = 32 - shift1; | 909 shift2 = 32 - shift1; |
910 for(yy = yd0; yy < yd1; yy++) { | 910 for(yy = yd0; yy < yd1; yy++) { |
911 tmp1 = (JBIG2_GETDWORD(lineSrc) << shift1) | (JBIG2_GETDWORD(lin
eSrc + 4) >> shift2); | 911 tmp1 = (JBIG2_GETDWORD(lineSrc) << shift1) | (JBIG2_GETDWORD(lin
eSrc + 4) >> shift2); |
912 tmp2 = JBIG2_GETDWORD(lineDst); | 912 tmp2 = JBIG2_GETDWORD(lineDst); |
913 switch(op) { | 913 switch(op) { |
914 case JBIG2_COMPOSE_OR: | 914 case JBIG2_COMPOSE_OR: |
915 tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM); | 915 tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM); |
916 break; | 916 break; |
917 case JBIG2_COMPOSE_AND: | 917 case JBIG2_COMPOSE_AND: |
918 tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM); | 918 tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM); |
919 break; | 919 break; |
920 case JBIG2_COMPOSE_XOR: | 920 case JBIG2_COMPOSE_XOR: |
921 tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM); | 921 tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM); |
922 break; | 922 break; |
923 case JBIG2_COMPOSE_XNOR: | 923 case JBIG2_COMPOSE_XNOR: |
924 tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM); | 924 tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM); |
925 break; | 925 break; |
926 case JBIG2_COMPOSE_REPLACE: | 926 case JBIG2_COMPOSE_REPLACE: |
927 tmp = (tmp2 & ~maskM) | (tmp1 & maskM); | 927 tmp = (tmp2 & ~maskM) | (tmp1 & maskM); |
928 break; | 928 break; |
929 } | 929 } |
930 lineDst[0] = (FX_BYTE)(tmp >> 24); | 930 lineDst[0] = (uint8_t)(tmp >> 24); |
931 lineDst[1] = (FX_BYTE)(tmp >> 16); | 931 lineDst[1] = (uint8_t)(tmp >> 16); |
932 lineDst[2] = (FX_BYTE)(tmp >> 8); | 932 lineDst[2] = (uint8_t)(tmp >> 8); |
933 lineDst[3] = (FX_BYTE)tmp; | 933 lineDst[3] = (uint8_t)tmp; |
934 lineSrc += m_nStride; | 934 lineSrc += m_nStride; |
935 lineDst += pDst->m_nStride; | 935 lineDst += pDst->m_nStride; |
936 } | 936 } |
937 } | 937 } |
938 } else { | 938 } else { |
939 if(s1 > d1) { | 939 if(s1 > d1) { |
940 shift1 = s1 - d1; | 940 shift1 = s1 - d1; |
941 shift2 = 32 - shift1; | 941 shift2 = 32 - shift1; |
942 middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5); | 942 middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5); |
943 for(yy = yd0; yy < yd1; yy++) { | 943 for(yy = yd0; yy < yd1; yy++) { |
(...skipping 12 matching lines...) Expand all Loading... |
956 case JBIG2_COMPOSE_XOR: | 956 case JBIG2_COMPOSE_XOR: |
957 tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL); | 957 tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL); |
958 break; | 958 break; |
959 case JBIG2_COMPOSE_XNOR: | 959 case JBIG2_COMPOSE_XNOR: |
960 tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL); | 960 tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL); |
961 break; | 961 break; |
962 case JBIG2_COMPOSE_REPLACE: | 962 case JBIG2_COMPOSE_REPLACE: |
963 tmp = (tmp2 & ~maskL) | (tmp1 & maskL); | 963 tmp = (tmp2 & ~maskL) | (tmp1 & maskL); |
964 break; | 964 break; |
965 } | 965 } |
966 dp[0] = (FX_BYTE)(tmp >> 24); | 966 dp[0] = (uint8_t)(tmp >> 24); |
967 dp[1] = (FX_BYTE)(tmp >> 16); | 967 dp[1] = (uint8_t)(tmp >> 16); |
968 dp[2] = (FX_BYTE)(tmp >> 8); | 968 dp[2] = (uint8_t)(tmp >> 8); |
969 dp[3] = (FX_BYTE)tmp; | 969 dp[3] = (uint8_t)tmp; |
970 sp += 4; | 970 sp += 4; |
971 dp += 4; | 971 dp += 4; |
972 } | 972 } |
973 for(xx = 0; xx < middleDwords; xx++) { | 973 for(xx = 0; xx < middleDwords; xx++) { |
974 tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (JBIG2_GETDWORD(sp +
4) >> shift2); | 974 tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (JBIG2_GETDWORD(sp +
4) >> shift2); |
975 tmp2 = JBIG2_GETDWORD(dp); | 975 tmp2 = JBIG2_GETDWORD(dp); |
976 switch(op) { | 976 switch(op) { |
977 case JBIG2_COMPOSE_OR: | 977 case JBIG2_COMPOSE_OR: |
978 tmp = tmp1 | tmp2; | 978 tmp = tmp1 | tmp2; |
979 break; | 979 break; |
980 case JBIG2_COMPOSE_AND: | 980 case JBIG2_COMPOSE_AND: |
981 tmp = tmp1 & tmp2; | 981 tmp = tmp1 & tmp2; |
982 break; | 982 break; |
983 case JBIG2_COMPOSE_XOR: | 983 case JBIG2_COMPOSE_XOR: |
984 tmp = tmp1 ^ tmp2; | 984 tmp = tmp1 ^ tmp2; |
985 break; | 985 break; |
986 case JBIG2_COMPOSE_XNOR: | 986 case JBIG2_COMPOSE_XNOR: |
987 tmp = ~(tmp1 ^ tmp2); | 987 tmp = ~(tmp1 ^ tmp2); |
988 break; | 988 break; |
989 case JBIG2_COMPOSE_REPLACE: | 989 case JBIG2_COMPOSE_REPLACE: |
990 tmp = tmp1; | 990 tmp = tmp1; |
991 break; | 991 break; |
992 } | 992 } |
993 dp[0] = (FX_BYTE)(tmp >> 24); | 993 dp[0] = (uint8_t)(tmp >> 24); |
994 dp[1] = (FX_BYTE)(tmp >> 16); | 994 dp[1] = (uint8_t)(tmp >> 16); |
995 dp[2] = (FX_BYTE)(tmp >> 8); | 995 dp[2] = (uint8_t)(tmp >> 8); |
996 dp[3] = (FX_BYTE)tmp; | 996 dp[3] = (uint8_t)tmp; |
997 sp += 4; | 997 sp += 4; |
998 dp += 4; | 998 dp += 4; |
999 } | 999 } |
1000 if(d2 != 0) { | 1000 if(d2 != 0) { |
1001 tmp1 = (JBIG2_GETDWORD(sp) << shift1) | ( | 1001 tmp1 = (JBIG2_GETDWORD(sp) << shift1) | ( |
1002 ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(s
p + 4) : 0) >> shift2); | 1002 ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(s
p + 4) : 0) >> shift2); |
1003 tmp2 = JBIG2_GETDWORD(dp); | 1003 tmp2 = JBIG2_GETDWORD(dp); |
1004 switch(op) { | 1004 switch(op) { |
1005 case JBIG2_COMPOSE_OR: | 1005 case JBIG2_COMPOSE_OR: |
1006 tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR); | 1006 tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR); |
1007 break; | 1007 break; |
1008 case JBIG2_COMPOSE_AND: | 1008 case JBIG2_COMPOSE_AND: |
1009 tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR); | 1009 tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR); |
1010 break; | 1010 break; |
1011 case JBIG2_COMPOSE_XOR: | 1011 case JBIG2_COMPOSE_XOR: |
1012 tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR); | 1012 tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR); |
1013 break; | 1013 break; |
1014 case JBIG2_COMPOSE_XNOR: | 1014 case JBIG2_COMPOSE_XNOR: |
1015 tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR); | 1015 tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR); |
1016 break; | 1016 break; |
1017 case JBIG2_COMPOSE_REPLACE: | 1017 case JBIG2_COMPOSE_REPLACE: |
1018 tmp = (tmp2 & ~maskR) | (tmp1 & maskR); | 1018 tmp = (tmp2 & ~maskR) | (tmp1 & maskR); |
1019 break; | 1019 break; |
1020 } | 1020 } |
1021 dp[0] = (FX_BYTE)(tmp >> 24); | 1021 dp[0] = (uint8_t)(tmp >> 24); |
1022 dp[1] = (FX_BYTE)(tmp >> 16); | 1022 dp[1] = (uint8_t)(tmp >> 16); |
1023 dp[2] = (FX_BYTE)(tmp >> 8); | 1023 dp[2] = (uint8_t)(tmp >> 8); |
1024 dp[3] = (FX_BYTE)tmp; | 1024 dp[3] = (uint8_t)tmp; |
1025 } | 1025 } |
1026 lineSrc += m_nStride; | 1026 lineSrc += m_nStride; |
1027 lineDst += pDst->m_nStride; | 1027 lineDst += pDst->m_nStride; |
1028 } | 1028 } |
1029 } else if(s1 == d1) { | 1029 } else if(s1 == d1) { |
1030 middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5); | 1030 middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5); |
1031 for(yy = yd0; yy < yd1; yy++) { | 1031 for(yy = yd0; yy < yd1; yy++) { |
1032 sp = lineSrc; | 1032 sp = lineSrc; |
1033 dp = lineDst; | 1033 dp = lineDst; |
1034 if(d1 != 0) { | 1034 if(d1 != 0) { |
1035 tmp1 = JBIG2_GETDWORD(sp); | 1035 tmp1 = JBIG2_GETDWORD(sp); |
1036 tmp2 = JBIG2_GETDWORD(dp); | 1036 tmp2 = JBIG2_GETDWORD(dp); |
1037 switch(op) { | 1037 switch(op) { |
1038 case JBIG2_COMPOSE_OR: | 1038 case JBIG2_COMPOSE_OR: |
1039 tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL); | 1039 tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL); |
1040 break; | 1040 break; |
1041 case JBIG2_COMPOSE_AND: | 1041 case JBIG2_COMPOSE_AND: |
1042 tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL); | 1042 tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL); |
1043 break; | 1043 break; |
1044 case JBIG2_COMPOSE_XOR: | 1044 case JBIG2_COMPOSE_XOR: |
1045 tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL); | 1045 tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL); |
1046 break; | 1046 break; |
1047 case JBIG2_COMPOSE_XNOR: | 1047 case JBIG2_COMPOSE_XNOR: |
1048 tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL); | 1048 tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL); |
1049 break; | 1049 break; |
1050 case JBIG2_COMPOSE_REPLACE: | 1050 case JBIG2_COMPOSE_REPLACE: |
1051 tmp = (tmp2 & ~maskL) | (tmp1 & maskL); | 1051 tmp = (tmp2 & ~maskL) | (tmp1 & maskL); |
1052 break; | 1052 break; |
1053 } | 1053 } |
1054 dp[0] = (FX_BYTE)(tmp >> 24); | 1054 dp[0] = (uint8_t)(tmp >> 24); |
1055 dp[1] = (FX_BYTE)(tmp >> 16); | 1055 dp[1] = (uint8_t)(tmp >> 16); |
1056 dp[2] = (FX_BYTE)(tmp >> 8); | 1056 dp[2] = (uint8_t)(tmp >> 8); |
1057 dp[3] = (FX_BYTE)tmp; | 1057 dp[3] = (uint8_t)tmp; |
1058 sp += 4; | 1058 sp += 4; |
1059 dp += 4; | 1059 dp += 4; |
1060 } | 1060 } |
1061 for(xx = 0; xx < middleDwords; xx++) { | 1061 for(xx = 0; xx < middleDwords; xx++) { |
1062 tmp1 = JBIG2_GETDWORD(sp); | 1062 tmp1 = JBIG2_GETDWORD(sp); |
1063 tmp2 = JBIG2_GETDWORD(dp); | 1063 tmp2 = JBIG2_GETDWORD(dp); |
1064 switch(op) { | 1064 switch(op) { |
1065 case JBIG2_COMPOSE_OR: | 1065 case JBIG2_COMPOSE_OR: |
1066 tmp = tmp1 | tmp2; | 1066 tmp = tmp1 | tmp2; |
1067 break; | 1067 break; |
1068 case JBIG2_COMPOSE_AND: | 1068 case JBIG2_COMPOSE_AND: |
1069 tmp = tmp1 & tmp2; | 1069 tmp = tmp1 & tmp2; |
1070 break; | 1070 break; |
1071 case JBIG2_COMPOSE_XOR: | 1071 case JBIG2_COMPOSE_XOR: |
1072 tmp = tmp1 ^ tmp2; | 1072 tmp = tmp1 ^ tmp2; |
1073 break; | 1073 break; |
1074 case JBIG2_COMPOSE_XNOR: | 1074 case JBIG2_COMPOSE_XNOR: |
1075 tmp = ~(tmp1 ^ tmp2); | 1075 tmp = ~(tmp1 ^ tmp2); |
1076 break; | 1076 break; |
1077 case JBIG2_COMPOSE_REPLACE: | 1077 case JBIG2_COMPOSE_REPLACE: |
1078 tmp = tmp1; | 1078 tmp = tmp1; |
1079 break; | 1079 break; |
1080 } | 1080 } |
1081 dp[0] = (FX_BYTE)(tmp >> 24); | 1081 dp[0] = (uint8_t)(tmp >> 24); |
1082 dp[1] = (FX_BYTE)(tmp >> 16); | 1082 dp[1] = (uint8_t)(tmp >> 16); |
1083 dp[2] = (FX_BYTE)(tmp >> 8); | 1083 dp[2] = (uint8_t)(tmp >> 8); |
1084 dp[3] = (FX_BYTE)tmp; | 1084 dp[3] = (uint8_t)tmp; |
1085 sp += 4; | 1085 sp += 4; |
1086 dp += 4; | 1086 dp += 4; |
1087 } | 1087 } |
1088 if(d2 != 0) { | 1088 if(d2 != 0) { |
1089 tmp1 = JBIG2_GETDWORD(sp); | 1089 tmp1 = JBIG2_GETDWORD(sp); |
1090 tmp2 = JBIG2_GETDWORD(dp); | 1090 tmp2 = JBIG2_GETDWORD(dp); |
1091 switch(op) { | 1091 switch(op) { |
1092 case JBIG2_COMPOSE_OR: | 1092 case JBIG2_COMPOSE_OR: |
1093 tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR); | 1093 tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR); |
1094 break; | 1094 break; |
1095 case JBIG2_COMPOSE_AND: | 1095 case JBIG2_COMPOSE_AND: |
1096 tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR); | 1096 tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR); |
1097 break; | 1097 break; |
1098 case JBIG2_COMPOSE_XOR: | 1098 case JBIG2_COMPOSE_XOR: |
1099 tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR); | 1099 tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR); |
1100 break; | 1100 break; |
1101 case JBIG2_COMPOSE_XNOR: | 1101 case JBIG2_COMPOSE_XNOR: |
1102 tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR); | 1102 tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR); |
1103 break; | 1103 break; |
1104 case JBIG2_COMPOSE_REPLACE: | 1104 case JBIG2_COMPOSE_REPLACE: |
1105 tmp = (tmp2 & ~maskR) | (tmp1 & maskR); | 1105 tmp = (tmp2 & ~maskR) | (tmp1 & maskR); |
1106 break; | 1106 break; |
1107 } | 1107 } |
1108 dp[0] = (FX_BYTE)(tmp >> 24); | 1108 dp[0] = (uint8_t)(tmp >> 24); |
1109 dp[1] = (FX_BYTE)(tmp >> 16); | 1109 dp[1] = (uint8_t)(tmp >> 16); |
1110 dp[2] = (FX_BYTE)(tmp >> 8); | 1110 dp[2] = (uint8_t)(tmp >> 8); |
1111 dp[3] = (FX_BYTE)tmp; | 1111 dp[3] = (uint8_t)tmp; |
1112 } | 1112 } |
1113 lineSrc += m_nStride; | 1113 lineSrc += m_nStride; |
1114 lineDst += pDst->m_nStride; | 1114 lineDst += pDst->m_nStride; |
1115 } | 1115 } |
1116 } else { | 1116 } else { |
1117 shift1 = d1 - s1; | 1117 shift1 = d1 - s1; |
1118 shift2 = 32 - shift1; | 1118 shift2 = 32 - shift1; |
1119 middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5); | 1119 middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5); |
1120 for(yy = yd0; yy < yd1; yy++) { | 1120 for(yy = yd0; yy < yd1; yy++) { |
1121 sp = lineSrc; | 1121 sp = lineSrc; |
(...skipping 11 matching lines...) Expand all Loading... |
1133 case JBIG2_COMPOSE_XOR: | 1133 case JBIG2_COMPOSE_XOR: |
1134 tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL); | 1134 tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL); |
1135 break; | 1135 break; |
1136 case JBIG2_COMPOSE_XNOR: | 1136 case JBIG2_COMPOSE_XNOR: |
1137 tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL); | 1137 tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL); |
1138 break; | 1138 break; |
1139 case JBIG2_COMPOSE_REPLACE: | 1139 case JBIG2_COMPOSE_REPLACE: |
1140 tmp = (tmp2 & ~maskL) | (tmp1 & maskL); | 1140 tmp = (tmp2 & ~maskL) | (tmp1 & maskL); |
1141 break; | 1141 break; |
1142 } | 1142 } |
1143 dp[0] = (FX_BYTE)(tmp >> 24); | 1143 dp[0] = (uint8_t)(tmp >> 24); |
1144 dp[1] = (FX_BYTE)(tmp >> 16); | 1144 dp[1] = (uint8_t)(tmp >> 16); |
1145 dp[2] = (FX_BYTE)(tmp >> 8); | 1145 dp[2] = (uint8_t)(tmp >> 8); |
1146 dp[3] = (FX_BYTE)tmp; | 1146 dp[3] = (uint8_t)tmp; |
1147 dp += 4; | 1147 dp += 4; |
1148 } | 1148 } |
1149 for(xx = 0; xx < middleDwords; xx++) { | 1149 for(xx = 0; xx < middleDwords; xx++) { |
1150 tmp1 = (JBIG2_GETDWORD(sp) << shift2) | ((JBIG2_GETDWORD(sp
+ 4)) >> shift1); | 1150 tmp1 = (JBIG2_GETDWORD(sp) << shift2) | ((JBIG2_GETDWORD(sp
+ 4)) >> shift1); |
1151 tmp2 = JBIG2_GETDWORD(dp); | 1151 tmp2 = JBIG2_GETDWORD(dp); |
1152 switch(op) { | 1152 switch(op) { |
1153 case JBIG2_COMPOSE_OR: | 1153 case JBIG2_COMPOSE_OR: |
1154 tmp = tmp1 | tmp2; | 1154 tmp = tmp1 | tmp2; |
1155 break; | 1155 break; |
1156 case JBIG2_COMPOSE_AND: | 1156 case JBIG2_COMPOSE_AND: |
1157 tmp = tmp1 & tmp2; | 1157 tmp = tmp1 & tmp2; |
1158 break; | 1158 break; |
1159 case JBIG2_COMPOSE_XOR: | 1159 case JBIG2_COMPOSE_XOR: |
1160 tmp = tmp1 ^ tmp2; | 1160 tmp = tmp1 ^ tmp2; |
1161 break; | 1161 break; |
1162 case JBIG2_COMPOSE_XNOR: | 1162 case JBIG2_COMPOSE_XNOR: |
1163 tmp = ~(tmp1 ^ tmp2); | 1163 tmp = ~(tmp1 ^ tmp2); |
1164 break; | 1164 break; |
1165 case JBIG2_COMPOSE_REPLACE: | 1165 case JBIG2_COMPOSE_REPLACE: |
1166 tmp = tmp1; | 1166 tmp = tmp1; |
1167 break; | 1167 break; |
1168 } | 1168 } |
1169 dp[0] = (FX_BYTE)(tmp >> 24); | 1169 dp[0] = (uint8_t)(tmp >> 24); |
1170 dp[1] = (FX_BYTE)(tmp >> 16); | 1170 dp[1] = (uint8_t)(tmp >> 16); |
1171 dp[2] = (FX_BYTE)(tmp >> 8); | 1171 dp[2] = (uint8_t)(tmp >> 8); |
1172 dp[3] = (FX_BYTE)tmp; | 1172 dp[3] = (uint8_t)tmp; |
1173 sp += 4; | 1173 sp += 4; |
1174 dp += 4; | 1174 dp += 4; |
1175 } | 1175 } |
1176 if(d2 != 0) { | 1176 if(d2 != 0) { |
1177 tmp1 = (JBIG2_GETDWORD(sp) << shift2) | ( | 1177 tmp1 = (JBIG2_GETDWORD(sp) << shift2) | ( |
1178 ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(s
p + 4) : 0) >> shift1); | 1178 ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(s
p + 4) : 0) >> shift1); |
1179 tmp2 = JBIG2_GETDWORD(dp); | 1179 tmp2 = JBIG2_GETDWORD(dp); |
1180 switch(op) { | 1180 switch(op) { |
1181 case JBIG2_COMPOSE_OR: | 1181 case JBIG2_COMPOSE_OR: |
1182 tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR); | 1182 tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR); |
1183 break; | 1183 break; |
1184 case JBIG2_COMPOSE_AND: | 1184 case JBIG2_COMPOSE_AND: |
1185 tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR); | 1185 tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR); |
1186 break; | 1186 break; |
1187 case JBIG2_COMPOSE_XOR: | 1187 case JBIG2_COMPOSE_XOR: |
1188 tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR); | 1188 tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR); |
1189 break; | 1189 break; |
1190 case JBIG2_COMPOSE_XNOR: | 1190 case JBIG2_COMPOSE_XNOR: |
1191 tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR); | 1191 tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR); |
1192 break; | 1192 break; |
1193 case JBIG2_COMPOSE_REPLACE: | 1193 case JBIG2_COMPOSE_REPLACE: |
1194 tmp = (tmp2 & ~maskR) | (tmp1 & maskR); | 1194 tmp = (tmp2 & ~maskR) | (tmp1 & maskR); |
1195 break; | 1195 break; |
1196 } | 1196 } |
1197 dp[0] = (FX_BYTE)(tmp >> 24); | 1197 dp[0] = (uint8_t)(tmp >> 24); |
1198 dp[1] = (FX_BYTE)(tmp >> 16); | 1198 dp[1] = (uint8_t)(tmp >> 16); |
1199 dp[2] = (FX_BYTE)(tmp >> 8); | 1199 dp[2] = (uint8_t)(tmp >> 8); |
1200 dp[3] = (FX_BYTE)tmp; | 1200 dp[3] = (uint8_t)tmp; |
1201 } | 1201 } |
1202 lineSrc += m_nStride; | 1202 lineSrc += m_nStride; |
1203 lineDst += pDst->m_nStride; | 1203 lineDst += pDst->m_nStride; |
1204 } | 1204 } |
1205 } | 1205 } |
1206 } | 1206 } |
1207 return 1; | 1207 return 1; |
1208 } | 1208 } |
1209 FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y,
JBig2ComposeOp op, const FX_RECT* pSrcRect) | 1209 FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image *pDst, int32_t x, int32_t y, J
Big2ComposeOp op, const FX_RECT* pSrcRect) |
1210 { | 1210 { |
1211 FX_INT32 xs0, ys0, xs1, ys1, xd0, yd0, xd1, yd1, xx, yy, w, h, middleDwords,
lineLeft; | 1211 int32_t xs0, ys0, xs1, ys1, xd0, yd0, xd1, yd1, xx, yy, w, h, middleDwords,
lineLeft; |
1212 FX_DWORD s1, d1, d2, shift, shift1, shift2, tmp, tmp1, tmp2, maskL, maskR, m
askM; | 1212 FX_DWORD s1, d1, d2, shift, shift1, shift2, tmp, tmp1, tmp2, maskL, maskR, m
askM; |
1213 FX_BYTE *lineSrc, *lineDst, *sp, *dp; | 1213 uint8_t *lineSrc, *lineDst, *sp, *dp; |
1214 FX_INT32 sw, sh; | 1214 int32_t sw, sh; |
1215 if (!m_pData) { | 1215 if (!m_pData) { |
1216 return FALSE; | 1216 return FALSE; |
1217 } | 1217 } |
1218 if (x < -1048576 || x > 1048576 || y < -1048576 || y > 1048576) { | 1218 if (x < -1048576 || x > 1048576 || y < -1048576 || y > 1048576) { |
1219 return FALSE; | 1219 return FALSE; |
1220 } | 1220 } |
1221 sw = pSrcRect->Width(); | 1221 sw = pSrcRect->Width(); |
1222 sh = pSrcRect->Height(); | 1222 sh = pSrcRect->Height(); |
1223 if(y < 0) { | 1223 if(y < 0) { |
1224 ys0 = -y; | 1224 ys0 = -y; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1283 case JBIG2_COMPOSE_XOR: | 1283 case JBIG2_COMPOSE_XOR: |
1284 tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM); | 1284 tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM); |
1285 break; | 1285 break; |
1286 case JBIG2_COMPOSE_XNOR: | 1286 case JBIG2_COMPOSE_XNOR: |
1287 tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM); | 1287 tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM); |
1288 break; | 1288 break; |
1289 case JBIG2_COMPOSE_REPLACE: | 1289 case JBIG2_COMPOSE_REPLACE: |
1290 tmp = (tmp2 & ~maskM) | (tmp1 & maskM); | 1290 tmp = (tmp2 & ~maskM) | (tmp1 & maskM); |
1291 break; | 1291 break; |
1292 } | 1292 } |
1293 lineDst[0] = (FX_BYTE)(tmp >> 24); | 1293 lineDst[0] = (uint8_t)(tmp >> 24); |
1294 lineDst[1] = (FX_BYTE)(tmp >> 16); | 1294 lineDst[1] = (uint8_t)(tmp >> 16); |
1295 lineDst[2] = (FX_BYTE)(tmp >> 8); | 1295 lineDst[2] = (uint8_t)(tmp >> 8); |
1296 lineDst[3] = (FX_BYTE)tmp; | 1296 lineDst[3] = (uint8_t)tmp; |
1297 lineSrc += m_nStride; | 1297 lineSrc += m_nStride; |
1298 lineDst += pDst->m_nStride; | 1298 lineDst += pDst->m_nStride; |
1299 } | 1299 } |
1300 } else { | 1300 } else { |
1301 shift = d1 - s1; | 1301 shift = d1 - s1; |
1302 for(yy = yd0; yy < yd1; yy++) { | 1302 for(yy = yd0; yy < yd1; yy++) { |
1303 tmp1 = JBIG2_GETDWORD(lineSrc) >> shift; | 1303 tmp1 = JBIG2_GETDWORD(lineSrc) >> shift; |
1304 tmp2 = JBIG2_GETDWORD(lineDst); | 1304 tmp2 = JBIG2_GETDWORD(lineDst); |
1305 switch(op) { | 1305 switch(op) { |
1306 case JBIG2_COMPOSE_OR: | 1306 case JBIG2_COMPOSE_OR: |
1307 tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM); | 1307 tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM); |
1308 break; | 1308 break; |
1309 case JBIG2_COMPOSE_AND: | 1309 case JBIG2_COMPOSE_AND: |
1310 tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM); | 1310 tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM); |
1311 break; | 1311 break; |
1312 case JBIG2_COMPOSE_XOR: | 1312 case JBIG2_COMPOSE_XOR: |
1313 tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM); | 1313 tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM); |
1314 break; | 1314 break; |
1315 case JBIG2_COMPOSE_XNOR: | 1315 case JBIG2_COMPOSE_XNOR: |
1316 tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM); | 1316 tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM); |
1317 break; | 1317 break; |
1318 case JBIG2_COMPOSE_REPLACE: | 1318 case JBIG2_COMPOSE_REPLACE: |
1319 tmp = (tmp2 & ~maskM) | (tmp1 & maskM); | 1319 tmp = (tmp2 & ~maskM) | (tmp1 & maskM); |
1320 break; | 1320 break; |
1321 } | 1321 } |
1322 lineDst[0] = (FX_BYTE)(tmp >> 24); | 1322 lineDst[0] = (uint8_t)(tmp >> 24); |
1323 lineDst[1] = (FX_BYTE)(tmp >> 16); | 1323 lineDst[1] = (uint8_t)(tmp >> 16); |
1324 lineDst[2] = (FX_BYTE)(tmp >> 8); | 1324 lineDst[2] = (uint8_t)(tmp >> 8); |
1325 lineDst[3] = (FX_BYTE)tmp; | 1325 lineDst[3] = (uint8_t)tmp; |
1326 lineSrc += m_nStride; | 1326 lineSrc += m_nStride; |
1327 lineDst += pDst->m_nStride; | 1327 lineDst += pDst->m_nStride; |
1328 } | 1328 } |
1329 } | 1329 } |
1330 } else { | 1330 } else { |
1331 shift1 = s1 - d1; | 1331 shift1 = s1 - d1; |
1332 shift2 = 32 - shift1; | 1332 shift2 = 32 - shift1; |
1333 for(yy = yd0; yy < yd1; yy++) { | 1333 for(yy = yd0; yy < yd1; yy++) { |
1334 tmp1 = (JBIG2_GETDWORD(lineSrc) << shift1) | (JBIG2_GETDWORD(lin
eSrc + 4) >> shift2); | 1334 tmp1 = (JBIG2_GETDWORD(lineSrc) << shift1) | (JBIG2_GETDWORD(lin
eSrc + 4) >> shift2); |
1335 tmp2 = JBIG2_GETDWORD(lineDst); | 1335 tmp2 = JBIG2_GETDWORD(lineDst); |
1336 switch(op) { | 1336 switch(op) { |
1337 case JBIG2_COMPOSE_OR: | 1337 case JBIG2_COMPOSE_OR: |
1338 tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM); | 1338 tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM); |
1339 break; | 1339 break; |
1340 case JBIG2_COMPOSE_AND: | 1340 case JBIG2_COMPOSE_AND: |
1341 tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM); | 1341 tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM); |
1342 break; | 1342 break; |
1343 case JBIG2_COMPOSE_XOR: | 1343 case JBIG2_COMPOSE_XOR: |
1344 tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM); | 1344 tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM); |
1345 break; | 1345 break; |
1346 case JBIG2_COMPOSE_XNOR: | 1346 case JBIG2_COMPOSE_XNOR: |
1347 tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM); | 1347 tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM); |
1348 break; | 1348 break; |
1349 case JBIG2_COMPOSE_REPLACE: | 1349 case JBIG2_COMPOSE_REPLACE: |
1350 tmp = (tmp2 & ~maskM) | (tmp1 & maskM); | 1350 tmp = (tmp2 & ~maskM) | (tmp1 & maskM); |
1351 break; | 1351 break; |
1352 } | 1352 } |
1353 lineDst[0] = (FX_BYTE)(tmp >> 24); | 1353 lineDst[0] = (uint8_t)(tmp >> 24); |
1354 lineDst[1] = (FX_BYTE)(tmp >> 16); | 1354 lineDst[1] = (uint8_t)(tmp >> 16); |
1355 lineDst[2] = (FX_BYTE)(tmp >> 8); | 1355 lineDst[2] = (uint8_t)(tmp >> 8); |
1356 lineDst[3] = (FX_BYTE)tmp; | 1356 lineDst[3] = (uint8_t)tmp; |
1357 lineSrc += m_nStride; | 1357 lineSrc += m_nStride; |
1358 lineDst += pDst->m_nStride; | 1358 lineDst += pDst->m_nStride; |
1359 } | 1359 } |
1360 } | 1360 } |
1361 } else { | 1361 } else { |
1362 if(s1 > d1) { | 1362 if(s1 > d1) { |
1363 shift1 = s1 - d1; | 1363 shift1 = s1 - d1; |
1364 shift2 = 32 - shift1; | 1364 shift2 = 32 - shift1; |
1365 middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5); | 1365 middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5); |
1366 for(yy = yd0; yy < yd1; yy++) { | 1366 for(yy = yd0; yy < yd1; yy++) { |
(...skipping 12 matching lines...) Expand all Loading... |
1379 case JBIG2_COMPOSE_XOR: | 1379 case JBIG2_COMPOSE_XOR: |
1380 tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL); | 1380 tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL); |
1381 break; | 1381 break; |
1382 case JBIG2_COMPOSE_XNOR: | 1382 case JBIG2_COMPOSE_XNOR: |
1383 tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL); | 1383 tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL); |
1384 break; | 1384 break; |
1385 case JBIG2_COMPOSE_REPLACE: | 1385 case JBIG2_COMPOSE_REPLACE: |
1386 tmp = (tmp2 & ~maskL) | (tmp1 & maskL); | 1386 tmp = (tmp2 & ~maskL) | (tmp1 & maskL); |
1387 break; | 1387 break; |
1388 } | 1388 } |
1389 dp[0] = (FX_BYTE)(tmp >> 24); | 1389 dp[0] = (uint8_t)(tmp >> 24); |
1390 dp[1] = (FX_BYTE)(tmp >> 16); | 1390 dp[1] = (uint8_t)(tmp >> 16); |
1391 dp[2] = (FX_BYTE)(tmp >> 8); | 1391 dp[2] = (uint8_t)(tmp >> 8); |
1392 dp[3] = (FX_BYTE)tmp; | 1392 dp[3] = (uint8_t)tmp; |
1393 sp += 4; | 1393 sp += 4; |
1394 dp += 4; | 1394 dp += 4; |
1395 } | 1395 } |
1396 for(xx = 0; xx < middleDwords; xx++) { | 1396 for(xx = 0; xx < middleDwords; xx++) { |
1397 tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (JBIG2_GETDWORD(sp +
4) >> shift2); | 1397 tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (JBIG2_GETDWORD(sp +
4) >> shift2); |
1398 tmp2 = JBIG2_GETDWORD(dp); | 1398 tmp2 = JBIG2_GETDWORD(dp); |
1399 switch(op) { | 1399 switch(op) { |
1400 case JBIG2_COMPOSE_OR: | 1400 case JBIG2_COMPOSE_OR: |
1401 tmp = tmp1 | tmp2; | 1401 tmp = tmp1 | tmp2; |
1402 break; | 1402 break; |
1403 case JBIG2_COMPOSE_AND: | 1403 case JBIG2_COMPOSE_AND: |
1404 tmp = tmp1 & tmp2; | 1404 tmp = tmp1 & tmp2; |
1405 break; | 1405 break; |
1406 case JBIG2_COMPOSE_XOR: | 1406 case JBIG2_COMPOSE_XOR: |
1407 tmp = tmp1 ^ tmp2; | 1407 tmp = tmp1 ^ tmp2; |
1408 break; | 1408 break; |
1409 case JBIG2_COMPOSE_XNOR: | 1409 case JBIG2_COMPOSE_XNOR: |
1410 tmp = ~(tmp1 ^ tmp2); | 1410 tmp = ~(tmp1 ^ tmp2); |
1411 break; | 1411 break; |
1412 case JBIG2_COMPOSE_REPLACE: | 1412 case JBIG2_COMPOSE_REPLACE: |
1413 tmp = tmp1; | 1413 tmp = tmp1; |
1414 break; | 1414 break; |
1415 } | 1415 } |
1416 dp[0] = (FX_BYTE)(tmp >> 24); | 1416 dp[0] = (uint8_t)(tmp >> 24); |
1417 dp[1] = (FX_BYTE)(tmp >> 16); | 1417 dp[1] = (uint8_t)(tmp >> 16); |
1418 dp[2] = (FX_BYTE)(tmp >> 8); | 1418 dp[2] = (uint8_t)(tmp >> 8); |
1419 dp[3] = (FX_BYTE)tmp; | 1419 dp[3] = (uint8_t)tmp; |
1420 sp += 4; | 1420 sp += 4; |
1421 dp += 4; | 1421 dp += 4; |
1422 } | 1422 } |
1423 if(d2 != 0) { | 1423 if(d2 != 0) { |
1424 tmp1 = (JBIG2_GETDWORD(sp) << shift1) | ( | 1424 tmp1 = (JBIG2_GETDWORD(sp) << shift1) | ( |
1425 ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(s
p + 4) : 0) >> shift2); | 1425 ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(s
p + 4) : 0) >> shift2); |
1426 tmp2 = JBIG2_GETDWORD(dp); | 1426 tmp2 = JBIG2_GETDWORD(dp); |
1427 switch(op) { | 1427 switch(op) { |
1428 case JBIG2_COMPOSE_OR: | 1428 case JBIG2_COMPOSE_OR: |
1429 tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR); | 1429 tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR); |
1430 break; | 1430 break; |
1431 case JBIG2_COMPOSE_AND: | 1431 case JBIG2_COMPOSE_AND: |
1432 tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR); | 1432 tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR); |
1433 break; | 1433 break; |
1434 case JBIG2_COMPOSE_XOR: | 1434 case JBIG2_COMPOSE_XOR: |
1435 tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR); | 1435 tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR); |
1436 break; | 1436 break; |
1437 case JBIG2_COMPOSE_XNOR: | 1437 case JBIG2_COMPOSE_XNOR: |
1438 tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR); | 1438 tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR); |
1439 break; | 1439 break; |
1440 case JBIG2_COMPOSE_REPLACE: | 1440 case JBIG2_COMPOSE_REPLACE: |
1441 tmp = (tmp2 & ~maskR) | (tmp1 & maskR); | 1441 tmp = (tmp2 & ~maskR) | (tmp1 & maskR); |
1442 break; | 1442 break; |
1443 } | 1443 } |
1444 dp[0] = (FX_BYTE)(tmp >> 24); | 1444 dp[0] = (uint8_t)(tmp >> 24); |
1445 dp[1] = (FX_BYTE)(tmp >> 16); | 1445 dp[1] = (uint8_t)(tmp >> 16); |
1446 dp[2] = (FX_BYTE)(tmp >> 8); | 1446 dp[2] = (uint8_t)(tmp >> 8); |
1447 dp[3] = (FX_BYTE)tmp; | 1447 dp[3] = (uint8_t)tmp; |
1448 } | 1448 } |
1449 lineSrc += m_nStride; | 1449 lineSrc += m_nStride; |
1450 lineDst += pDst->m_nStride; | 1450 lineDst += pDst->m_nStride; |
1451 } | 1451 } |
1452 } else if(s1 == d1) { | 1452 } else if(s1 == d1) { |
1453 middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5); | 1453 middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5); |
1454 for(yy = yd0; yy < yd1; yy++) { | 1454 for(yy = yd0; yy < yd1; yy++) { |
1455 sp = lineSrc; | 1455 sp = lineSrc; |
1456 dp = lineDst; | 1456 dp = lineDst; |
1457 if(d1 != 0) { | 1457 if(d1 != 0) { |
1458 tmp1 = JBIG2_GETDWORD(sp); | 1458 tmp1 = JBIG2_GETDWORD(sp); |
1459 tmp2 = JBIG2_GETDWORD(dp); | 1459 tmp2 = JBIG2_GETDWORD(dp); |
1460 switch(op) { | 1460 switch(op) { |
1461 case JBIG2_COMPOSE_OR: | 1461 case JBIG2_COMPOSE_OR: |
1462 tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL); | 1462 tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL); |
1463 break; | 1463 break; |
1464 case JBIG2_COMPOSE_AND: | 1464 case JBIG2_COMPOSE_AND: |
1465 tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL); | 1465 tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL); |
1466 break; | 1466 break; |
1467 case JBIG2_COMPOSE_XOR: | 1467 case JBIG2_COMPOSE_XOR: |
1468 tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL); | 1468 tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL); |
1469 break; | 1469 break; |
1470 case JBIG2_COMPOSE_XNOR: | 1470 case JBIG2_COMPOSE_XNOR: |
1471 tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL); | 1471 tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL); |
1472 break; | 1472 break; |
1473 case JBIG2_COMPOSE_REPLACE: | 1473 case JBIG2_COMPOSE_REPLACE: |
1474 tmp = (tmp2 & ~maskL) | (tmp1 & maskL); | 1474 tmp = (tmp2 & ~maskL) | (tmp1 & maskL); |
1475 break; | 1475 break; |
1476 } | 1476 } |
1477 dp[0] = (FX_BYTE)(tmp >> 24); | 1477 dp[0] = (uint8_t)(tmp >> 24); |
1478 dp[1] = (FX_BYTE)(tmp >> 16); | 1478 dp[1] = (uint8_t)(tmp >> 16); |
1479 dp[2] = (FX_BYTE)(tmp >> 8); | 1479 dp[2] = (uint8_t)(tmp >> 8); |
1480 dp[3] = (FX_BYTE)tmp; | 1480 dp[3] = (uint8_t)tmp; |
1481 sp += 4; | 1481 sp += 4; |
1482 dp += 4; | 1482 dp += 4; |
1483 } | 1483 } |
1484 for(xx = 0; xx < middleDwords; xx++) { | 1484 for(xx = 0; xx < middleDwords; xx++) { |
1485 tmp1 = JBIG2_GETDWORD(sp); | 1485 tmp1 = JBIG2_GETDWORD(sp); |
1486 tmp2 = JBIG2_GETDWORD(dp); | 1486 tmp2 = JBIG2_GETDWORD(dp); |
1487 switch(op) { | 1487 switch(op) { |
1488 case JBIG2_COMPOSE_OR: | 1488 case JBIG2_COMPOSE_OR: |
1489 tmp = tmp1 | tmp2; | 1489 tmp = tmp1 | tmp2; |
1490 break; | 1490 break; |
1491 case JBIG2_COMPOSE_AND: | 1491 case JBIG2_COMPOSE_AND: |
1492 tmp = tmp1 & tmp2; | 1492 tmp = tmp1 & tmp2; |
1493 break; | 1493 break; |
1494 case JBIG2_COMPOSE_XOR: | 1494 case JBIG2_COMPOSE_XOR: |
1495 tmp = tmp1 ^ tmp2; | 1495 tmp = tmp1 ^ tmp2; |
1496 break; | 1496 break; |
1497 case JBIG2_COMPOSE_XNOR: | 1497 case JBIG2_COMPOSE_XNOR: |
1498 tmp = ~(tmp1 ^ tmp2); | 1498 tmp = ~(tmp1 ^ tmp2); |
1499 break; | 1499 break; |
1500 case JBIG2_COMPOSE_REPLACE: | 1500 case JBIG2_COMPOSE_REPLACE: |
1501 tmp = tmp1; | 1501 tmp = tmp1; |
1502 break; | 1502 break; |
1503 } | 1503 } |
1504 dp[0] = (FX_BYTE)(tmp >> 24); | 1504 dp[0] = (uint8_t)(tmp >> 24); |
1505 dp[1] = (FX_BYTE)(tmp >> 16); | 1505 dp[1] = (uint8_t)(tmp >> 16); |
1506 dp[2] = (FX_BYTE)(tmp >> 8); | 1506 dp[2] = (uint8_t)(tmp >> 8); |
1507 dp[3] = (FX_BYTE)tmp; | 1507 dp[3] = (uint8_t)tmp; |
1508 sp += 4; | 1508 sp += 4; |
1509 dp += 4; | 1509 dp += 4; |
1510 } | 1510 } |
1511 if(d2 != 0) { | 1511 if(d2 != 0) { |
1512 tmp1 = JBIG2_GETDWORD(sp); | 1512 tmp1 = JBIG2_GETDWORD(sp); |
1513 tmp2 = JBIG2_GETDWORD(dp); | 1513 tmp2 = JBIG2_GETDWORD(dp); |
1514 switch(op) { | 1514 switch(op) { |
1515 case JBIG2_COMPOSE_OR: | 1515 case JBIG2_COMPOSE_OR: |
1516 tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR); | 1516 tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR); |
1517 break; | 1517 break; |
1518 case JBIG2_COMPOSE_AND: | 1518 case JBIG2_COMPOSE_AND: |
1519 tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR); | 1519 tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR); |
1520 break; | 1520 break; |
1521 case JBIG2_COMPOSE_XOR: | 1521 case JBIG2_COMPOSE_XOR: |
1522 tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR); | 1522 tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR); |
1523 break; | 1523 break; |
1524 case JBIG2_COMPOSE_XNOR: | 1524 case JBIG2_COMPOSE_XNOR: |
1525 tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR); | 1525 tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR); |
1526 break; | 1526 break; |
1527 case JBIG2_COMPOSE_REPLACE: | 1527 case JBIG2_COMPOSE_REPLACE: |
1528 tmp = (tmp2 & ~maskR) | (tmp1 & maskR); | 1528 tmp = (tmp2 & ~maskR) | (tmp1 & maskR); |
1529 break; | 1529 break; |
1530 } | 1530 } |
1531 dp[0] = (FX_BYTE)(tmp >> 24); | 1531 dp[0] = (uint8_t)(tmp >> 24); |
1532 dp[1] = (FX_BYTE)(tmp >> 16); | 1532 dp[1] = (uint8_t)(tmp >> 16); |
1533 dp[2] = (FX_BYTE)(tmp >> 8); | 1533 dp[2] = (uint8_t)(tmp >> 8); |
1534 dp[3] = (FX_BYTE)tmp; | 1534 dp[3] = (uint8_t)tmp; |
1535 } | 1535 } |
1536 lineSrc += m_nStride; | 1536 lineSrc += m_nStride; |
1537 lineDst += pDst->m_nStride; | 1537 lineDst += pDst->m_nStride; |
1538 } | 1538 } |
1539 } else { | 1539 } else { |
1540 shift1 = d1 - s1; | 1540 shift1 = d1 - s1; |
1541 shift2 = 32 - shift1; | 1541 shift2 = 32 - shift1; |
1542 middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5); | 1542 middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5); |
1543 for(yy = yd0; yy < yd1; yy++) { | 1543 for(yy = yd0; yy < yd1; yy++) { |
1544 sp = lineSrc; | 1544 sp = lineSrc; |
(...skipping 11 matching lines...) Expand all Loading... |
1556 case JBIG2_COMPOSE_XOR: | 1556 case JBIG2_COMPOSE_XOR: |
1557 tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL); | 1557 tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL); |
1558 break; | 1558 break; |
1559 case JBIG2_COMPOSE_XNOR: | 1559 case JBIG2_COMPOSE_XNOR: |
1560 tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL); | 1560 tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL); |
1561 break; | 1561 break; |
1562 case JBIG2_COMPOSE_REPLACE: | 1562 case JBIG2_COMPOSE_REPLACE: |
1563 tmp = (tmp2 & ~maskL) | (tmp1 & maskL); | 1563 tmp = (tmp2 & ~maskL) | (tmp1 & maskL); |
1564 break; | 1564 break; |
1565 } | 1565 } |
1566 dp[0] = (FX_BYTE)(tmp >> 24); | 1566 dp[0] = (uint8_t)(tmp >> 24); |
1567 dp[1] = (FX_BYTE)(tmp >> 16); | 1567 dp[1] = (uint8_t)(tmp >> 16); |
1568 dp[2] = (FX_BYTE)(tmp >> 8); | 1568 dp[2] = (uint8_t)(tmp >> 8); |
1569 dp[3] = (FX_BYTE)tmp; | 1569 dp[3] = (uint8_t)tmp; |
1570 dp += 4; | 1570 dp += 4; |
1571 } | 1571 } |
1572 for(xx = 0; xx < middleDwords; xx++) { | 1572 for(xx = 0; xx < middleDwords; xx++) { |
1573 tmp1 = (JBIG2_GETDWORD(sp) << shift2) | ((JBIG2_GETDWORD(sp
+ 4)) >> shift1); | 1573 tmp1 = (JBIG2_GETDWORD(sp) << shift2) | ((JBIG2_GETDWORD(sp
+ 4)) >> shift1); |
1574 tmp2 = JBIG2_GETDWORD(dp); | 1574 tmp2 = JBIG2_GETDWORD(dp); |
1575 switch(op) { | 1575 switch(op) { |
1576 case JBIG2_COMPOSE_OR: | 1576 case JBIG2_COMPOSE_OR: |
1577 tmp = tmp1 | tmp2; | 1577 tmp = tmp1 | tmp2; |
1578 break; | 1578 break; |
1579 case JBIG2_COMPOSE_AND: | 1579 case JBIG2_COMPOSE_AND: |
1580 tmp = tmp1 & tmp2; | 1580 tmp = tmp1 & tmp2; |
1581 break; | 1581 break; |
1582 case JBIG2_COMPOSE_XOR: | 1582 case JBIG2_COMPOSE_XOR: |
1583 tmp = tmp1 ^ tmp2; | 1583 tmp = tmp1 ^ tmp2; |
1584 break; | 1584 break; |
1585 case JBIG2_COMPOSE_XNOR: | 1585 case JBIG2_COMPOSE_XNOR: |
1586 tmp = ~(tmp1 ^ tmp2); | 1586 tmp = ~(tmp1 ^ tmp2); |
1587 break; | 1587 break; |
1588 case JBIG2_COMPOSE_REPLACE: | 1588 case JBIG2_COMPOSE_REPLACE: |
1589 tmp = tmp1; | 1589 tmp = tmp1; |
1590 break; | 1590 break; |
1591 } | 1591 } |
1592 dp[0] = (FX_BYTE)(tmp >> 24); | 1592 dp[0] = (uint8_t)(tmp >> 24); |
1593 dp[1] = (FX_BYTE)(tmp >> 16); | 1593 dp[1] = (uint8_t)(tmp >> 16); |
1594 dp[2] = (FX_BYTE)(tmp >> 8); | 1594 dp[2] = (uint8_t)(tmp >> 8); |
1595 dp[3] = (FX_BYTE)tmp; | 1595 dp[3] = (uint8_t)tmp; |
1596 sp += 4; | 1596 sp += 4; |
1597 dp += 4; | 1597 dp += 4; |
1598 } | 1598 } |
1599 if(d2 != 0) { | 1599 if(d2 != 0) { |
1600 tmp1 = (JBIG2_GETDWORD(sp) << shift2) | ( | 1600 tmp1 = (JBIG2_GETDWORD(sp) << shift2) | ( |
1601 ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(s
p + 4) : 0) >> shift1); | 1601 ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(s
p + 4) : 0) >> shift1); |
1602 tmp2 = JBIG2_GETDWORD(dp); | 1602 tmp2 = JBIG2_GETDWORD(dp); |
1603 switch(op) { | 1603 switch(op) { |
1604 case JBIG2_COMPOSE_OR: | 1604 case JBIG2_COMPOSE_OR: |
1605 tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR); | 1605 tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR); |
1606 break; | 1606 break; |
1607 case JBIG2_COMPOSE_AND: | 1607 case JBIG2_COMPOSE_AND: |
1608 tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR); | 1608 tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR); |
1609 break; | 1609 break; |
1610 case JBIG2_COMPOSE_XOR: | 1610 case JBIG2_COMPOSE_XOR: |
1611 tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR); | 1611 tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR); |
1612 break; | 1612 break; |
1613 case JBIG2_COMPOSE_XNOR: | 1613 case JBIG2_COMPOSE_XNOR: |
1614 tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR); | 1614 tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR); |
1615 break; | 1615 break; |
1616 case JBIG2_COMPOSE_REPLACE: | 1616 case JBIG2_COMPOSE_REPLACE: |
1617 tmp = (tmp2 & ~maskR) | (tmp1 & maskR); | 1617 tmp = (tmp2 & ~maskR) | (tmp1 & maskR); |
1618 break; | 1618 break; |
1619 } | 1619 } |
1620 dp[0] = (FX_BYTE)(tmp >> 24); | 1620 dp[0] = (uint8_t)(tmp >> 24); |
1621 dp[1] = (FX_BYTE)(tmp >> 16); | 1621 dp[1] = (uint8_t)(tmp >> 16); |
1622 dp[2] = (FX_BYTE)(tmp >> 8); | 1622 dp[2] = (uint8_t)(tmp >> 8); |
1623 dp[3] = (FX_BYTE)tmp; | 1623 dp[3] = (uint8_t)tmp; |
1624 } | 1624 } |
1625 lineSrc += m_nStride; | 1625 lineSrc += m_nStride; |
1626 lineDst += pDst->m_nStride; | 1626 lineDst += pDst->m_nStride; |
1627 } | 1627 } |
1628 } | 1628 } |
1629 } | 1629 } |
1630 return 1; | 1630 return 1; |
1631 } | 1631 } |
OLD | NEW |