| Index: core/src/fxcodec/jbig2/JBig2_Image.cpp
|
| diff --git a/core/src/fxcodec/jbig2/JBig2_Image.cpp b/core/src/fxcodec/jbig2/JBig2_Image.cpp
|
| index 9ef4464ef08a0486a6c7b83e9dd6d53e4814b3e6..772e4e5f62084b0f7dd11961d23c227cc7baf2f5 100644
|
| --- a/core/src/fxcodec/jbig2/JBig2_Image.cpp
|
| +++ b/core/src/fxcodec/jbig2/JBig2_Image.cpp
|
| @@ -1,7 +1,7 @@
|
| // Copyright 2014 PDFium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
| -
|
| +
|
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
|
|
|
| #include <limits.h>
|
| @@ -10,1621 +10,1646 @@
|
| #include "../../../include/fxcrt/fx_safe_types.h"
|
| #include "JBig2_Image.h"
|
|
|
| -CJBig2_Image::CJBig2_Image(int32_t w, int32_t h)
|
| -{
|
| - m_nWidth = w;
|
| - m_nHeight = h;
|
| - if (m_nWidth <= 0 || m_nHeight <= 0 || m_nWidth > INT_MAX - 31) {
|
| - m_pData = NULL;
|
| - m_bNeedFree = FALSE;
|
| - return;
|
| - }
|
| - m_nStride = ((w + 31) >> 5) << 2;
|
| - if (m_nStride * m_nHeight > 0 && 104857600 / (int)m_nStride > m_nHeight) {
|
| - m_pData = (uint8_t *)m_pModule->JBig2_Malloc2(m_nStride, m_nHeight);
|
| - } else {
|
| - m_pData = NULL;
|
| - }
|
| - m_bNeedFree = TRUE;
|
| -}
|
| -CJBig2_Image::CJBig2_Image(int32_t w, int32_t h, int32_t stride, uint8_t*pBuf)
|
| -{
|
| - m_nWidth = w;
|
| - m_nHeight = h;
|
| - m_nStride = stride;
|
| - m_pData = pBuf;
|
| +CJBig2_Image::CJBig2_Image(int32_t w, int32_t h) {
|
| + m_nWidth = w;
|
| + m_nHeight = h;
|
| + if (m_nWidth <= 0 || m_nHeight <= 0 || m_nWidth > INT_MAX - 31) {
|
| + m_pData = NULL;
|
| m_bNeedFree = FALSE;
|
| + return;
|
| + }
|
| + m_nStride = ((w + 31) >> 5) << 2;
|
| + if (m_nStride * m_nHeight > 0 && 104857600 / (int)m_nStride > m_nHeight) {
|
| + m_pData = (uint8_t*)m_pModule->JBig2_Malloc2(m_nStride, m_nHeight);
|
| + } else {
|
| + m_pData = NULL;
|
| + }
|
| + m_bNeedFree = TRUE;
|
| }
|
| -CJBig2_Image::CJBig2_Image(CJBig2_Image &im)
|
| -{
|
| - m_pModule = im.m_pModule;
|
| - m_nWidth = im.m_nWidth;
|
| - m_nHeight = im.m_nHeight;
|
| - m_nStride = im.m_nStride;
|
| - if (im.m_pData) {
|
| - m_pData = (uint8_t*)m_pModule->JBig2_Malloc2(m_nStride, m_nHeight);
|
| - JBIG2_memcpy(m_pData, im.m_pData, m_nStride * m_nHeight);
|
| - } else {
|
| - m_pData = NULL;
|
| - }
|
| - m_bNeedFree = TRUE;
|
| +CJBig2_Image::CJBig2_Image(int32_t w,
|
| + int32_t h,
|
| + int32_t stride,
|
| + uint8_t* pBuf) {
|
| + m_nWidth = w;
|
| + m_nHeight = h;
|
| + m_nStride = stride;
|
| + m_pData = pBuf;
|
| + m_bNeedFree = FALSE;
|
| }
|
| -CJBig2_Image::~CJBig2_Image()
|
| -{
|
| - if(m_bNeedFree && m_pData) {
|
| - m_pModule->JBig2_Free(m_pData);
|
| - }
|
| +CJBig2_Image::CJBig2_Image(CJBig2_Image& im) {
|
| + m_pModule = im.m_pModule;
|
| + m_nWidth = im.m_nWidth;
|
| + m_nHeight = im.m_nHeight;
|
| + m_nStride = im.m_nStride;
|
| + if (im.m_pData) {
|
| + m_pData = (uint8_t*)m_pModule->JBig2_Malloc2(m_nStride, m_nHeight);
|
| + JBIG2_memcpy(m_pData, im.m_pData, m_nStride * m_nHeight);
|
| + } else {
|
| + m_pData = NULL;
|
| + }
|
| + m_bNeedFree = TRUE;
|
| }
|
| -FX_BOOL CJBig2_Image::getPixel(int32_t x, int32_t y)
|
| -{
|
| - if (!m_pData) {
|
| - return 0;
|
| - }
|
| - int32_t m, n;
|
| - if(x < 0 || x >= m_nWidth) {
|
| - return 0;
|
| - }
|
| - if(y < 0 || y >= m_nHeight) {
|
| - return 0;
|
| - }
|
| - m = y * m_nStride + (x >> 3);
|
| - n = x & 7;
|
| - return ((m_pData[m] >> (7 - n)) & 1);
|
| +CJBig2_Image::~CJBig2_Image() {
|
| + if (m_bNeedFree && m_pData) {
|
| + m_pModule->JBig2_Free(m_pData);
|
| + }
|
| +}
|
| +FX_BOOL CJBig2_Image::getPixel(int32_t x, int32_t y) {
|
| + if (!m_pData) {
|
| + return 0;
|
| + }
|
| + int32_t m, n;
|
| + if (x < 0 || x >= m_nWidth) {
|
| + return 0;
|
| + }
|
| + if (y < 0 || y >= m_nHeight) {
|
| + return 0;
|
| + }
|
| + m = y * m_nStride + (x >> 3);
|
| + n = x & 7;
|
| + return ((m_pData[m] >> (7 - n)) & 1);
|
| }
|
|
|
| -int32_t CJBig2_Image::setPixel(int32_t x, int32_t y, FX_BOOL v)
|
| -{
|
| - if (!m_pData) {
|
| - return 0;
|
| - }
|
| - int32_t m, n;
|
| - if(x < 0 || x >= m_nWidth) {
|
| - return 0;
|
| - }
|
| - if(y < 0 || y >= m_nHeight) {
|
| - return 0;
|
| - }
|
| - m = y * m_nStride + (x >> 3);
|
| - n = x & 7;
|
| - if(v) {
|
| - m_pData[m] |= 1 << (7 - n);
|
| - } else {
|
| - m_pData[m] &= ~(1 << (7 - n));
|
| - }
|
| - return 1;
|
| +int32_t CJBig2_Image::setPixel(int32_t x, int32_t y, FX_BOOL v) {
|
| + if (!m_pData) {
|
| + return 0;
|
| + }
|
| + int32_t m, n;
|
| + if (x < 0 || x >= m_nWidth) {
|
| + return 0;
|
| + }
|
| + if (y < 0 || y >= m_nHeight) {
|
| + return 0;
|
| + }
|
| + m = y * m_nStride + (x >> 3);
|
| + n = x & 7;
|
| + if (v) {
|
| + m_pData[m] |= 1 << (7 - n);
|
| + } else {
|
| + m_pData[m] &= ~(1 << (7 - n));
|
| + }
|
| + return 1;
|
| }
|
| -void CJBig2_Image::copyLine(int32_t hTo, int32_t hFrom)
|
| -{
|
| - if (!m_pData) {
|
| - return;
|
| - }
|
| - if(hFrom < 0 || hFrom >= m_nHeight) {
|
| - JBIG2_memset(m_pData + hTo * m_nStride, 0, m_nStride);
|
| - } else {
|
| - JBIG2_memcpy(m_pData + hTo * m_nStride, m_pData + hFrom * m_nStride, m_nStride);
|
| - }
|
| +void CJBig2_Image::copyLine(int32_t hTo, int32_t hFrom) {
|
| + if (!m_pData) {
|
| + return;
|
| + }
|
| + if (hFrom < 0 || hFrom >= m_nHeight) {
|
| + JBIG2_memset(m_pData + hTo * m_nStride, 0, m_nStride);
|
| + } else {
|
| + JBIG2_memcpy(m_pData + hTo * m_nStride, m_pData + hFrom * m_nStride,
|
| + m_nStride);
|
| + }
|
| }
|
| -void CJBig2_Image::fill(FX_BOOL v)
|
| -{
|
| - if (!m_pData) {
|
| - return;
|
| - }
|
| - JBIG2_memset(m_pData, v ? 0xff : 0, m_nStride * m_nHeight);
|
| +void CJBig2_Image::fill(FX_BOOL v) {
|
| + if (!m_pData) {
|
| + return;
|
| + }
|
| + JBIG2_memset(m_pData, v ? 0xff : 0, m_nStride * m_nHeight);
|
| }
|
| -FX_BOOL CJBig2_Image::composeTo(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op)
|
| -{
|
| - if (!m_pData) {
|
| - return FALSE;
|
| - }
|
| +FX_BOOL CJBig2_Image::composeTo(CJBig2_Image* pDst,
|
| + int32_t x,
|
| + int32_t y,
|
| + JBig2ComposeOp op) {
|
| + if (!m_pData) {
|
| + return FALSE;
|
| + }
|
| + return composeTo_opt2(pDst, x, y, op);
|
| +}
|
| +FX_BOOL CJBig2_Image::composeTo(CJBig2_Image* pDst,
|
| + int32_t x,
|
| + int32_t y,
|
| + JBig2ComposeOp op,
|
| + const FX_RECT* pSrcRect) {
|
| + if (!m_pData) {
|
| + return FALSE;
|
| + }
|
| + if (NULL == pSrcRect || *pSrcRect == FX_RECT(0, 0, m_nWidth, m_nHeight)) {
|
| return composeTo_opt2(pDst, x, y, op);
|
| + }
|
| + return composeTo_opt2(pDst, x, y, op, pSrcRect);
|
| }
|
| -FX_BOOL CJBig2_Image::composeTo(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op, const FX_RECT* pSrcRect)
|
| -{
|
| - if (!m_pData) {
|
| - return FALSE;
|
| - }
|
| - if (NULL == pSrcRect || *pSrcRect == FX_RECT(0, 0, m_nWidth, m_nHeight)) {
|
| - return composeTo_opt2(pDst, x, y, op);
|
| - }
|
| - return composeTo_opt2(pDst, x, y, op, pSrcRect);
|
| +FX_BOOL CJBig2_Image::composeTo_unopt(CJBig2_Image* pDst,
|
| + int32_t x,
|
| + int32_t y,
|
| + JBig2ComposeOp op) {
|
| + int32_t w, h, dx, dy;
|
| + int32_t i, j;
|
| + w = m_nWidth;
|
| + h = m_nHeight;
|
| + dx = dy = 0;
|
| + if (x < 0) {
|
| + dx += -x;
|
| + w -= -x;
|
| + x = 0;
|
| + }
|
| + if (y < 0) {
|
| + dy += -y;
|
| + h -= -y;
|
| + y = 0;
|
| + }
|
| + if (x + w > pDst->m_nWidth) {
|
| + w = pDst->m_nWidth - x;
|
| + }
|
| + if (y + h > pDst->m_nHeight) {
|
| + h = pDst->m_nHeight - y;
|
| + }
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + for (j = 0; j < h; j++) {
|
| + for (i = 0; i < w; i++) {
|
| + pDst->setPixel(
|
| + x + i, y + j,
|
| + (getPixel(i + dx, j + dy) | pDst->getPixel(x + i, y + j)) & 1);
|
| + }
|
| + }
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + for (j = 0; j < h; j++) {
|
| + for (i = 0; i < w; i++) {
|
| + pDst->setPixel(
|
| + x + i, y + j,
|
| + (getPixel(i + dx, j + dy) & pDst->getPixel(x + i, y + j)) & 1);
|
| + }
|
| + }
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + for (j = 0; j < h; j++) {
|
| + for (i = 0; i < w; i++) {
|
| + pDst->setPixel(
|
| + x + i, y + j,
|
| + (getPixel(i + dx, j + dy) ^ pDst->getPixel(x + i, y + j)) & 1);
|
| + }
|
| + }
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + for (j = 0; j < h; j++) {
|
| + for (i = 0; i < w; i++) {
|
| + pDst->setPixel(
|
| + x + i, y + j,
|
| + (~(getPixel(i + dx, j + dy) ^ pDst->getPixel(x + i, y + j))) & 1);
|
| + }
|
| + }
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + for (j = 0; j < h; j++) {
|
| + for (i = 0; i < w; i++) {
|
| + pDst->setPixel(x + i, y + j, getPixel(i + dx, j + dy));
|
| + }
|
| + }
|
| + break;
|
| + }
|
| + return TRUE;
|
| }
|
| -FX_BOOL CJBig2_Image::composeTo_unopt(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op)
|
| -{
|
| - int32_t w, h, dx, dy;
|
| - int32_t i, j;
|
| - w = m_nWidth;
|
| - h = m_nHeight;
|
| - dx = dy = 0;
|
| - if(x < 0) {
|
| - dx += -x;
|
| - w -= -x;
|
| - x = 0;
|
| - }
|
| - if(y < 0) {
|
| - dy += -y;
|
| - h -= -y;
|
| - y = 0;
|
| - }
|
| - if(x + w > pDst->m_nWidth) {
|
| - w = pDst->m_nWidth - x;
|
| - }
|
| - if(y + h > pDst->m_nHeight) {
|
| - h = pDst->m_nHeight - y;
|
| +
|
| +FX_BOOL CJBig2_Image::composeTo_opt(CJBig2_Image* pDst,
|
| + int32_t x,
|
| + int32_t y,
|
| + JBig2ComposeOp op) {
|
| + int32_t x0, x1, y0, y1, xx, yy;
|
| + uint8_t *pLineSrc, *pLineDst, *srcPtr, *destPtr;
|
| + FX_DWORD src0, src1, src, dest, s1, s2, m1, m2, m3;
|
| + FX_BOOL oneByte;
|
| + if (!m_pData) {
|
| + return FALSE;
|
| + }
|
| + if (y < 0) {
|
| + y0 = -y;
|
| + } else {
|
| + y0 = 0;
|
| + }
|
| + if (y + m_nHeight > pDst->m_nHeight) {
|
| + y1 = pDst->m_nHeight - y;
|
| + } else {
|
| + y1 = m_nHeight;
|
| + }
|
| + if (y0 >= y1) {
|
| + return FALSE;
|
| + }
|
| + if (x >= 0) {
|
| + x0 = x & ~7;
|
| + } else {
|
| + x0 = 0;
|
| + }
|
| + x1 = x + m_nWidth;
|
| + if (x1 > pDst->m_nWidth) {
|
| + x1 = pDst->m_nWidth;
|
| + }
|
| + if (x0 >= x1) {
|
| + return FALSE;
|
| + }
|
| + s1 = x & 7;
|
| + s2 = 8 - s1;
|
| + m1 = 0xff >> (x1 & 7);
|
| + m2 = 0xff << (((x1 & 7) == 0) ? 0 : 8 - (x1 & 7));
|
| + m3 = (0xff >> s1) & m2;
|
| + oneByte = x0 == ((x1 - 1) & ~7);
|
| + pLineDst = pDst->m_pData + y * pDst->m_nStride;
|
| + pLineSrc = m_pData + y0 * m_nStride;
|
| + if (oneByte) {
|
| + if (x >= 0) {
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst + (x >> 3);
|
| + srcPtr = pLineSrc;
|
| + dest = *destPtr;
|
| + dest |= (*srcPtr >> s1) & m2;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_AND: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst + (x >> 3);
|
| + srcPtr = pLineSrc;
|
| + dest = *destPtr;
|
| + dest &= ((0xff00 | *srcPtr) >> s1) | m1;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_XOR: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst + (x >> 3);
|
| + srcPtr = pLineSrc;
|
| + dest = *destPtr;
|
| + dest ^= (*srcPtr >> s1) & m2;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_XNOR: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst + (x >> 3);
|
| + srcPtr = pLineSrc;
|
| + dest = *destPtr;
|
| + dest ^= ((*srcPtr ^ 0xff) >> s1) & m2;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_REPLACE: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst + (x >> 3);
|
| + srcPtr = pLineSrc;
|
| + dest = *destPtr;
|
| + dest = (dest & ~m3) | ((*srcPtr >> s1) & m3);
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + }
|
| + } else {
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst;
|
| + srcPtr = pLineSrc + (-x >> 3);
|
| + dest = *destPtr;
|
| + dest |= *srcPtr & m2;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_AND: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst;
|
| + srcPtr = pLineSrc + (-x >> 3);
|
| + dest = *destPtr;
|
| + dest &= *srcPtr | m1;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_XOR: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst;
|
| + srcPtr = pLineSrc + (-x >> 3);
|
| + dest = *destPtr;
|
| + dest ^= *srcPtr & m2;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_XNOR: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst;
|
| + srcPtr = pLineSrc + (-x >> 3);
|
| + dest = *destPtr;
|
| + dest ^= (*srcPtr ^ 0xff) & m2;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_REPLACE: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst;
|
| + srcPtr = pLineSrc + (-x >> 3);
|
| + dest = *destPtr;
|
| + dest = (*srcPtr & m2) | (dest & m1);
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + }
|
| }
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - for(j = 0; j < h; j++) {
|
| - for(i = 0; i < w; i++) {
|
| - pDst->setPixel(x + i, y + j,
|
| - (getPixel(i + dx, j + dy) | pDst->getPixel(x + i, y + j)) & 1);
|
| - }
|
| + } else {
|
| + if (x >= 0) {
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst + (x >> 3);
|
| + srcPtr = pLineSrc;
|
| + src1 = *srcPtr++;
|
| + dest = *destPtr;
|
| + dest |= src1 >> s1;
|
| + *destPtr++ = (uint8_t)dest;
|
| + xx = x0 + 8;
|
| + for (; xx < x1 - 8; xx += 8) {
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + src1 = *srcPtr++;
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest |= src;
|
| + *destPtr++ = (uint8_t)dest;
|
| }
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - for(j = 0; j < h; j++) {
|
| - for(i = 0; i < w; i++) {
|
| - pDst->setPixel(x + i, y + j,
|
| - (getPixel(i + dx, j + dy) & pDst->getPixel(x + i, y + j)) & 1);
|
| - }
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + if (srcPtr - pLineSrc < m_nStride) {
|
| + src1 = *srcPtr++;
|
| + } else {
|
| + src1 = 0;
|
| }
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - for(j = 0; j < h; j++) {
|
| - for(i = 0; i < w; i++) {
|
| - pDst->setPixel(x + i, y + j,
|
| - (getPixel(i + dx, j + dy) ^ pDst->getPixel(x + i, y + j)) & 1);
|
| - }
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest |= src & m2;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_AND: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst + (x >> 3);
|
| + srcPtr = pLineSrc;
|
| + src1 = *srcPtr++;
|
| + dest = *destPtr;
|
| + dest &= (0xff00 | src1) >> s1;
|
| + *destPtr++ = (uint8_t)dest;
|
| + xx = x0 + 8;
|
| + for (; xx < x1 - 8; xx += 8) {
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + src1 = *srcPtr++;
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest &= src;
|
| + *destPtr++ = (uint8_t)dest;
|
| }
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - for(j = 0; j < h; j++) {
|
| - for(i = 0; i < w; i++) {
|
| - pDst->setPixel(x + i, y + j,
|
| - (~(getPixel(i + dx, j + dy) ^ pDst->getPixel(x + i, y + j))) & 1);
|
| - }
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + if (srcPtr - pLineSrc < m_nStride) {
|
| + src1 = *srcPtr++;
|
| + } else {
|
| + src1 = 0;
|
| }
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - for(j = 0; j < h; j++) {
|
| - for(i = 0; i < w; i++) {
|
| - pDst->setPixel(x + i, y + j, getPixel(i + dx, j + dy));
|
| - }
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest &= src | m1;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_XOR: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst + (x >> 3);
|
| + srcPtr = pLineSrc;
|
| + src1 = *srcPtr++;
|
| + dest = *destPtr;
|
| + dest ^= src1 >> s1;
|
| + *destPtr++ = (uint8_t)dest;
|
| + xx = x0 + 8;
|
| + for (; xx < x1 - 8; xx += 8) {
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + src1 = *srcPtr++;
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest ^= src;
|
| + *destPtr++ = (uint8_t)dest;
|
| }
|
| - break;
|
| - }
|
| - return TRUE;
|
| -}
|
| -
|
| -FX_BOOL CJBig2_Image::composeTo_opt(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op)
|
| -{
|
| - int32_t x0, x1, y0, y1, xx, yy;
|
| - uint8_t *pLineSrc, *pLineDst, *srcPtr, *destPtr;
|
| - FX_DWORD src0, src1, src, dest, s1, s2, m1, m2, m3;
|
| - FX_BOOL oneByte;
|
| - if (!m_pData) {
|
| - return FALSE;
|
| - }
|
| - if (y < 0) {
|
| - y0 = -y;
|
| - } else {
|
| - y0 = 0;
|
| - }
|
| - if (y + m_nHeight > pDst->m_nHeight) {
|
| - y1 = pDst->m_nHeight - y;
|
| - } else {
|
| - y1 = m_nHeight;
|
| - }
|
| - if (y0 >= y1) {
|
| - return FALSE;
|
| - }
|
| - if (x >= 0) {
|
| - x0 = x & ~7;
|
| - } else {
|
| - x0 = 0;
|
| - }
|
| - x1 = x + m_nWidth;
|
| - if (x1 > pDst->m_nWidth) {
|
| - x1 = pDst->m_nWidth;
|
| - }
|
| - if (x0 >= x1) {
|
| - return FALSE;
|
| - }
|
| - s1 = x & 7;
|
| - s2 = 8 - s1;
|
| - m1 = 0xff >> (x1 & 7);
|
| - m2 = 0xff << (((x1 & 7) == 0) ? 0 : 8 - (x1 & 7));
|
| - m3 = (0xff >> s1) & m2;
|
| - oneByte = x0 == ((x1 - 1) & ~7);
|
| - pLineDst = pDst->m_pData + y * pDst->m_nStride;
|
| - pLineSrc = m_pData + y0 * m_nStride;
|
| - if(oneByte) {
|
| - if(x >= 0) {
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR: {
|
| - for (yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst + (x >> 3);
|
| - srcPtr = pLineSrc;
|
| - dest = *destPtr;
|
| - dest |= (*srcPtr >> s1) & m2;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_AND: {
|
| - for (yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst + (x >> 3);
|
| - srcPtr = pLineSrc;
|
| - dest = *destPtr;
|
| - dest &= ((0xff00 | *srcPtr) >> s1) | m1;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_XOR: {
|
| - for (yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst + (x >> 3);
|
| - srcPtr = pLineSrc;
|
| - dest = *destPtr;
|
| - dest ^= (*srcPtr >> s1) & m2;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR: {
|
| - for (yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst + (x >> 3);
|
| - srcPtr = pLineSrc;
|
| - dest = *destPtr;
|
| - dest ^= ((*srcPtr ^ 0xff) >> s1) & m2;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE: {
|
| - for (yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst + (x >> 3);
|
| - srcPtr = pLineSrc;
|
| - dest = *destPtr;
|
| - dest = (dest & ~m3) | ((*srcPtr >> s1) & m3);
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + if (srcPtr - pLineSrc < m_nStride) {
|
| + src1 = *srcPtr++;
|
| + } else {
|
| + src1 = 0;
|
| }
|
| - } else {
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst;
|
| - srcPtr = pLineSrc + (-x >> 3);
|
| - dest = *destPtr;
|
| - dest |= *srcPtr & m2;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_AND: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst;
|
| - srcPtr = pLineSrc + (-x >> 3);
|
| - dest = *destPtr;
|
| - dest &= *srcPtr | m1;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_XOR: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst;
|
| - srcPtr = pLineSrc + (-x >> 3);
|
| - dest = *destPtr;
|
| - dest ^= *srcPtr & m2;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst;
|
| - srcPtr = pLineSrc + (-x >> 3);
|
| - dest = *destPtr;
|
| - dest ^= (*srcPtr ^ 0xff) & m2;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst;
|
| - srcPtr = pLineSrc + (-x >> 3);
|
| - dest = *destPtr;
|
| - dest = (*srcPtr & m2) | (dest & m1);
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest ^= src & m2;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_XNOR: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst + (x >> 3);
|
| + srcPtr = pLineSrc;
|
| + src1 = *srcPtr++;
|
| + dest = *destPtr;
|
| + dest ^= (src1 ^ 0xff) >> s1;
|
| + *destPtr++ = (uint8_t)dest;
|
| + xx = x0 + 8;
|
| + for (; xx < x1 - 8; xx += 8) {
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + src1 = *srcPtr++;
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest ^= src ^ 0xff;
|
| + *destPtr++ = (uint8_t)dest;
|
| }
|
| - }
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + if (srcPtr - pLineSrc < m_nStride) {
|
| + src1 = *srcPtr++;
|
| + } else {
|
| + src1 = 0;
|
| + }
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest ^= (src ^ 0xff) & m2;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_REPLACE: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst + (x >> 3);
|
| + srcPtr = pLineSrc;
|
| + src1 = *srcPtr++;
|
| + dest = *destPtr;
|
| + dest = (dest & (0xff << s2)) | (src1 >> s1);
|
| + *destPtr++ = (uint8_t)dest;
|
| + xx = x0 + 8;
|
| + for (; xx < x1 - 8; xx += 8) {
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + src1 = *srcPtr++;
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest = src;
|
| + *destPtr++ = (uint8_t)dest;
|
| + }
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + if (srcPtr - pLineSrc < m_nStride) {
|
| + src1 = *srcPtr++;
|
| + } else {
|
| + src1 = 0;
|
| + }
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest = (src & m2) | (dest & m1);
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + }
|
| } else {
|
| - if(x >= 0) {
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst + (x >> 3);
|
| - srcPtr = pLineSrc;
|
| - src1 = *srcPtr++;
|
| - dest = *destPtr;
|
| - dest |= src1 >> s1;
|
| - *destPtr++ = (uint8_t)dest;
|
| - xx = x0 + 8;
|
| - for (; xx < x1 - 8; xx += 8) {
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - src1 = *srcPtr++;
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest |= src;
|
| - *destPtr++ = (uint8_t)dest;
|
| - }
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - if(srcPtr - pLineSrc < m_nStride) {
|
| - src1 = *srcPtr++;
|
| - } else {
|
| - src1 = 0;
|
| - }
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest |= src & m2;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_AND: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst + (x >> 3);
|
| - srcPtr = pLineSrc;
|
| - src1 = *srcPtr++;
|
| - dest = *destPtr;
|
| - dest &= (0xff00 | src1) >> s1;
|
| - *destPtr++ = (uint8_t)dest;
|
| - xx = x0 + 8;
|
| - for (; xx < x1 - 8; xx += 8) {
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - src1 = *srcPtr++;
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest &= src;
|
| - *destPtr++ = (uint8_t)dest;
|
| - }
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - if(srcPtr - pLineSrc < m_nStride) {
|
| - src1 = *srcPtr++;
|
| - } else {
|
| - src1 = 0;
|
| - }
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest &= src | m1;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_XOR: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst + (x >> 3);
|
| - srcPtr = pLineSrc;
|
| - src1 = *srcPtr++;
|
| - dest = *destPtr;
|
| - dest ^= src1 >> s1;
|
| - *destPtr++ = (uint8_t)dest;
|
| - xx = x0 + 8;
|
| - for (; xx < x1 - 8; xx += 8) {
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - src1 = *srcPtr++;
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest ^= src;
|
| - *destPtr++ = (uint8_t)dest;
|
| - }
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - if(srcPtr - pLineSrc < m_nStride) {
|
| - src1 = *srcPtr++;
|
| - } else {
|
| - src1 = 0;
|
| - }
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest ^= src & m2;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst + (x >> 3);
|
| - srcPtr = pLineSrc;
|
| - src1 = *srcPtr++;
|
| - dest = *destPtr;
|
| - dest ^= (src1 ^ 0xff) >> s1;
|
| - *destPtr++ = (uint8_t)dest;
|
| - xx = x0 + 8;
|
| - for (; xx < x1 - 8; xx += 8) {
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - src1 = *srcPtr++;
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest ^= src ^ 0xff;
|
| - *destPtr++ = (uint8_t)dest;
|
| - }
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - if(srcPtr - pLineSrc < m_nStride) {
|
| - src1 = *srcPtr++;
|
| - } else {
|
| - src1 = 0;
|
| - }
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest ^= (src ^ 0xff) & m2;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst + (x >> 3);
|
| - srcPtr = pLineSrc;
|
| - src1 = *srcPtr++;
|
| - dest = *destPtr;
|
| - dest = (dest & (0xff << s2)) | (src1 >> s1);
|
| - *destPtr++ = (uint8_t)dest;
|
| - xx = x0 + 8;
|
| - for (; xx < x1 - 8; xx += 8) {
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - src1 = *srcPtr++;
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest = src;
|
| - *destPtr++ = (uint8_t)dest;
|
| - }
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - if(srcPtr - pLineSrc < m_nStride) {
|
| - src1 = *srcPtr++;
|
| - } else {
|
| - src1 = 0;
|
| - }
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest = (src & m2) | (dest & m1);
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst;
|
| + srcPtr = pLineSrc + (-x >> 3);
|
| + src1 = *srcPtr++;
|
| + xx = x0;
|
| + for (; xx < x1 - 8; xx += 8) {
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + src1 = *srcPtr++;
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest |= src;
|
| + *destPtr++ = (uint8_t)dest;
|
| }
|
| - } else {
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst;
|
| - srcPtr = pLineSrc + (-x >> 3);
|
| - src1 = *srcPtr++;
|
| - xx = x0;
|
| - for (; xx < x1 - 8; xx += 8) {
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - src1 = *srcPtr++;
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest |= src;
|
| - *destPtr++ = (uint8_t)dest;
|
| - }
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - if(srcPtr - pLineSrc < m_nStride) {
|
| - src1 = *srcPtr++;
|
| - } else {
|
| - src1 = 0;
|
| - }
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest |= src & m2;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_AND: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst;
|
| - srcPtr = pLineSrc + (-x >> 3);
|
| - src1 = *srcPtr++;
|
| - xx = x0;
|
| - for (; xx < x1 - 8; xx += 8) {
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - src1 = *srcPtr++;
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest &= src;
|
| - *destPtr++ = (uint8_t)dest;
|
| - }
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - if(srcPtr - pLineSrc < m_nStride) {
|
| - src1 = *srcPtr++;
|
| - } else {
|
| - src1 = 0;
|
| - }
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest &= src | m1;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_XOR: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst;
|
| - srcPtr = pLineSrc + (-x >> 3);
|
| - src1 = *srcPtr++;
|
| - xx = x0;
|
| - for (; xx < x1 - 8; xx += 8) {
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - src1 = *srcPtr++;
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest ^= src;
|
| - *destPtr++ = (uint8_t)dest;
|
| - }
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - if(srcPtr - pLineSrc < m_nStride) {
|
| - src1 = *srcPtr++;
|
| - } else {
|
| - src1 = 0;
|
| - }
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest ^= src & m2;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst;
|
| - srcPtr = pLineSrc + (-x >> 3);
|
| - src1 = *srcPtr++;
|
| - xx = x0;
|
| - for (; xx < x1 - 8; xx += 8) {
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - src1 = *srcPtr++;
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest ^= src ^ 0xff;
|
| - *destPtr++ = (uint8_t)dest;
|
| - }
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - if(srcPtr - pLineSrc < m_nStride) {
|
| - src1 = *srcPtr++;
|
| - } else {
|
| - src1 = 0;
|
| - }
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest ^= (src ^ 0xff) & m2;
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE: {
|
| - for(yy = y0; yy < y1; ++yy) {
|
| - destPtr = pLineDst;
|
| - srcPtr = pLineSrc + (-x >> 3);
|
| - src1 = *srcPtr++;
|
| - xx = x0;
|
| - for (; xx < x1 - 8; xx += 8) {
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - src1 = *srcPtr++;
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest = src;
|
| - *destPtr++ = (uint8_t)dest;
|
| - }
|
| - dest = *destPtr;
|
| - src0 = src1;
|
| - if(srcPtr - pLineSrc < m_nStride) {
|
| - src1 = *srcPtr++;
|
| - } else {
|
| - src1 = 0;
|
| - }
|
| - src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| - dest = (src & m2) | (dest & m1);
|
| - *destPtr = (uint8_t)dest;
|
| - pLineDst += pDst->m_nStride;
|
| - pLineSrc += m_nStride;
|
| - }
|
| - }
|
| - break;
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + if (srcPtr - pLineSrc < m_nStride) {
|
| + src1 = *srcPtr++;
|
| + } else {
|
| + src1 = 0;
|
| }
|
| - }
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest |= src & m2;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_AND: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst;
|
| + srcPtr = pLineSrc + (-x >> 3);
|
| + src1 = *srcPtr++;
|
| + xx = x0;
|
| + for (; xx < x1 - 8; xx += 8) {
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + src1 = *srcPtr++;
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest &= src;
|
| + *destPtr++ = (uint8_t)dest;
|
| + }
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + if (srcPtr - pLineSrc < m_nStride) {
|
| + src1 = *srcPtr++;
|
| + } else {
|
| + src1 = 0;
|
| + }
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest &= src | m1;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_XOR: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst;
|
| + srcPtr = pLineSrc + (-x >> 3);
|
| + src1 = *srcPtr++;
|
| + xx = x0;
|
| + for (; xx < x1 - 8; xx += 8) {
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + src1 = *srcPtr++;
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest ^= src;
|
| + *destPtr++ = (uint8_t)dest;
|
| + }
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + if (srcPtr - pLineSrc < m_nStride) {
|
| + src1 = *srcPtr++;
|
| + } else {
|
| + src1 = 0;
|
| + }
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest ^= src & m2;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_XNOR: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst;
|
| + srcPtr = pLineSrc + (-x >> 3);
|
| + src1 = *srcPtr++;
|
| + xx = x0;
|
| + for (; xx < x1 - 8; xx += 8) {
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + src1 = *srcPtr++;
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest ^= src ^ 0xff;
|
| + *destPtr++ = (uint8_t)dest;
|
| + }
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + if (srcPtr - pLineSrc < m_nStride) {
|
| + src1 = *srcPtr++;
|
| + } else {
|
| + src1 = 0;
|
| + }
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest ^= (src ^ 0xff) & m2;
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + case JBIG2_COMPOSE_REPLACE: {
|
| + for (yy = y0; yy < y1; ++yy) {
|
| + destPtr = pLineDst;
|
| + srcPtr = pLineSrc + (-x >> 3);
|
| + src1 = *srcPtr++;
|
| + xx = x0;
|
| + for (; xx < x1 - 8; xx += 8) {
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + src1 = *srcPtr++;
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest = src;
|
| + *destPtr++ = (uint8_t)dest;
|
| + }
|
| + dest = *destPtr;
|
| + src0 = src1;
|
| + if (srcPtr - pLineSrc < m_nStride) {
|
| + src1 = *srcPtr++;
|
| + } else {
|
| + src1 = 0;
|
| + }
|
| + src = (((src0 << 8) | src1) >> s1) & 0xff;
|
| + dest = (src & m2) | (dest & m1);
|
| + *destPtr = (uint8_t)dest;
|
| + pLineDst += pDst->m_nStride;
|
| + pLineSrc += m_nStride;
|
| + }
|
| + } break;
|
| + }
|
| }
|
| - return TRUE;
|
| + }
|
| + return TRUE;
|
| }
|
| -FX_BOOL CJBig2_Image::composeFrom(int32_t x, int32_t y, CJBig2_Image *pSrc, JBig2ComposeOp op)
|
| -{
|
| - if (!m_pData) {
|
| - return FALSE;
|
| - }
|
| - return pSrc->composeTo(this, x, y, op);
|
| +FX_BOOL CJBig2_Image::composeFrom(int32_t x,
|
| + int32_t y,
|
| + CJBig2_Image* pSrc,
|
| + JBig2ComposeOp op) {
|
| + if (!m_pData) {
|
| + return FALSE;
|
| + }
|
| + return pSrc->composeTo(this, x, y, op);
|
| }
|
| -FX_BOOL CJBig2_Image::composeFrom(int32_t x, int32_t y, CJBig2_Image *pSrc, JBig2ComposeOp op, const FX_RECT* pSrcRect)
|
| -{
|
| - if (!m_pData) {
|
| - return FALSE;
|
| - }
|
| - return pSrc->composeTo(this, x, y, op, pSrcRect);
|
| +FX_BOOL CJBig2_Image::composeFrom(int32_t x,
|
| + int32_t y,
|
| + CJBig2_Image* pSrc,
|
| + JBig2ComposeOp op,
|
| + const FX_RECT* pSrcRect) {
|
| + if (!m_pData) {
|
| + return FALSE;
|
| + }
|
| + return pSrc->composeTo(this, x, y, op, pSrcRect);
|
| }
|
| -CJBig2_Image *CJBig2_Image::subImage_unopt(int32_t x, int32_t y, int32_t w, int32_t h)
|
| -{
|
| - CJBig2_Image *pImage;
|
| - int32_t i, j;
|
| - JBIG2_ALLOC(pImage, CJBig2_Image(w, h));
|
| - for(j = 0; j < h; j++) {
|
| - for(i = 0; i < w; i++) {
|
| - pImage->setPixel(i, j, getPixel(x + i, y + j));
|
| - }
|
| +CJBig2_Image* CJBig2_Image::subImage_unopt(int32_t x,
|
| + int32_t y,
|
| + int32_t w,
|
| + int32_t h) {
|
| + CJBig2_Image* pImage;
|
| + int32_t i, j;
|
| + JBIG2_ALLOC(pImage, CJBig2_Image(w, h));
|
| + for (j = 0; j < h; j++) {
|
| + for (i = 0; i < w; i++) {
|
| + pImage->setPixel(i, j, getPixel(x + i, y + j));
|
| }
|
| - return pImage;
|
| + }
|
| + return pImage;
|
| }
|
| -#define JBIG2_GETDWORD(buf) ((FX_DWORD)(((buf)[0] << 24) | ((buf)[1] << 16) | ((buf)[2] << 8) | (buf)[3]))
|
| -CJBig2_Image *CJBig2_Image::subImage(int32_t x, int32_t y, int32_t w, int32_t h)
|
| -{
|
| - CJBig2_Image *pImage;
|
| - int32_t m, n, j;
|
| - uint8_t *pLineSrc, *pLineDst;
|
| - FX_DWORD wTmp;
|
| - uint8_t *pSrc, *pSrcEnd, *pDst, *pDstEnd;
|
| - if (w == 0 || h == 0) {
|
| - return NULL;
|
| - }
|
| - JBIG2_ALLOC(pImage, CJBig2_Image(w, h));
|
| - if (!m_pData) {
|
| - pImage->fill(0);
|
| - return pImage;
|
| - }
|
| - if (!pImage->m_pData) {
|
| - return pImage;
|
| +#define JBIG2_GETDWORD(buf) \
|
| + ((FX_DWORD)(((buf)[0] << 24) | ((buf)[1] << 16) | ((buf)[2] << 8) | (buf)[3]))
|
| +CJBig2_Image* CJBig2_Image::subImage(int32_t x,
|
| + int32_t y,
|
| + int32_t w,
|
| + int32_t h) {
|
| + CJBig2_Image* pImage;
|
| + int32_t m, n, j;
|
| + uint8_t *pLineSrc, *pLineDst;
|
| + FX_DWORD wTmp;
|
| + uint8_t *pSrc, *pSrcEnd, *pDst, *pDstEnd;
|
| + if (w == 0 || h == 0) {
|
| + return NULL;
|
| + }
|
| + JBIG2_ALLOC(pImage, CJBig2_Image(w, h));
|
| + if (!m_pData) {
|
| + pImage->fill(0);
|
| + return pImage;
|
| + }
|
| + if (!pImage->m_pData) {
|
| + return pImage;
|
| + }
|
| + pLineSrc = m_pData + m_nStride * y;
|
| + pLineDst = pImage->m_pData;
|
| + m = (x >> 5) << 2;
|
| + n = x & 31;
|
| + if (n == 0) {
|
| + for (j = 0; j < h; j++) {
|
| + pSrc = pLineSrc + m;
|
| + pSrcEnd = pLineSrc + m_nStride;
|
| + pDst = pLineDst;
|
| + pDstEnd = pLineDst + pImage->m_nStride;
|
| + for (; pDst < pDstEnd; pSrc += 4, pDst += 4) {
|
| + *((FX_DWORD*)pDst) = *((FX_DWORD*)pSrc);
|
| + }
|
| + pLineSrc += m_nStride;
|
| + pLineDst += pImage->m_nStride;
|
| }
|
| - pLineSrc = m_pData + m_nStride * y;
|
| - pLineDst = pImage->m_pData;
|
| - m = (x >> 5) << 2;
|
| - n = x & 31;
|
| - if(n == 0) {
|
| - for(j = 0; j < h; j++) {
|
| - pSrc = pLineSrc + m;
|
| - pSrcEnd = pLineSrc + m_nStride;
|
| - pDst = pLineDst;
|
| - pDstEnd = pLineDst + pImage->m_nStride;
|
| - for(; pDst < pDstEnd; pSrc += 4, pDst += 4) {
|
| - *((FX_DWORD *)pDst) = *((FX_DWORD *)pSrc);
|
| - }
|
| - pLineSrc += m_nStride;
|
| - pLineDst += pImage->m_nStride;
|
| - }
|
| - } else {
|
| - for(j = 0; j < h; j++) {
|
| - pSrc = pLineSrc + m;
|
| - pSrcEnd = pLineSrc + m_nStride;
|
| - pDst = pLineDst;
|
| - pDstEnd = pLineDst + pImage->m_nStride;
|
| - for(; pDst < pDstEnd; pSrc += 4, pDst += 4) {
|
| - if(pSrc + 4 < pSrcEnd) {
|
| - wTmp = (JBIG2_GETDWORD(pSrc) << n) | (JBIG2_GETDWORD(pSrc + 4) >> (32 - n));
|
| - } else {
|
| - wTmp = JBIG2_GETDWORD(pSrc) << n;
|
| - }
|
| - pDst[0] = (uint8_t)(wTmp >> 24);
|
| - pDst[1] = (uint8_t)(wTmp >> 16);
|
| - pDst[2] = (uint8_t)(wTmp >> 8);
|
| - pDst[3] = (uint8_t)wTmp;
|
| - }
|
| - pLineSrc += m_nStride;
|
| - pLineDst += pImage->m_nStride;
|
| + } else {
|
| + for (j = 0; j < h; j++) {
|
| + pSrc = pLineSrc + m;
|
| + pSrcEnd = pLineSrc + m_nStride;
|
| + pDst = pLineDst;
|
| + pDstEnd = pLineDst + pImage->m_nStride;
|
| + for (; pDst < pDstEnd; pSrc += 4, pDst += 4) {
|
| + if (pSrc + 4 < pSrcEnd) {
|
| + wTmp = (JBIG2_GETDWORD(pSrc) << n) |
|
| + (JBIG2_GETDWORD(pSrc + 4) >> (32 - n));
|
| + } else {
|
| + wTmp = JBIG2_GETDWORD(pSrc) << n;
|
| }
|
| + pDst[0] = (uint8_t)(wTmp >> 24);
|
| + pDst[1] = (uint8_t)(wTmp >> 16);
|
| + pDst[2] = (uint8_t)(wTmp >> 8);
|
| + pDst[3] = (uint8_t)wTmp;
|
| + }
|
| + pLineSrc += m_nStride;
|
| + pLineDst += pImage->m_nStride;
|
| }
|
| - return pImage;
|
| + }
|
| + return pImage;
|
| }
|
| -void CJBig2_Image::expand(int32_t h, FX_BOOL v)
|
| -{
|
| - if (!m_pData || h <= m_nHeight) {
|
| - return;
|
| - }
|
| - FX_DWORD dwH = pdfium::base::checked_cast<FX_DWORD>(h);
|
| - FX_DWORD dwStride = pdfium::base::checked_cast<FX_DWORD>(m_nStride);
|
| - FX_DWORD dwHeight = pdfium::base::checked_cast<FX_DWORD>(m_nHeight);
|
| - FX_SAFE_DWORD safeMemSize = dwH;
|
| - safeMemSize *= dwStride;
|
| - if (!safeMemSize.IsValid()) {
|
| - return;
|
| - }
|
| - //The guaranteed reallocated memory is to be < 4GB (unsigned int).
|
| - m_pData = (uint8_t*)m_pModule->JBig2_Realloc(m_pData, safeMemSize.ValueOrDie());
|
| - //The result of dwHeight * dwStride doesn't overflow after the
|
| - //checking of safeMemSize.
|
| - //The same as the result of (dwH - dwHeight) * dwStride) because
|
| - //dwH - dwHeight is always less than dwH(h) which is checked in
|
| - //the calculation of dwH * dwStride.
|
| - JBIG2_memset(m_pData + dwHeight * dwStride, v ? 0xff : 0, (dwH - dwHeight) * dwStride);
|
| - m_nHeight = h;
|
| +void CJBig2_Image::expand(int32_t h, FX_BOOL v) {
|
| + if (!m_pData || h <= m_nHeight) {
|
| + return;
|
| + }
|
| + FX_DWORD dwH = pdfium::base::checked_cast<FX_DWORD>(h);
|
| + FX_DWORD dwStride = pdfium::base::checked_cast<FX_DWORD>(m_nStride);
|
| + FX_DWORD dwHeight = pdfium::base::checked_cast<FX_DWORD>(m_nHeight);
|
| + FX_SAFE_DWORD safeMemSize = dwH;
|
| + safeMemSize *= dwStride;
|
| + if (!safeMemSize.IsValid()) {
|
| + return;
|
| + }
|
| + // The guaranteed reallocated memory is to be < 4GB (unsigned int).
|
| + m_pData =
|
| + (uint8_t*)m_pModule->JBig2_Realloc(m_pData, safeMemSize.ValueOrDie());
|
| + // The result of dwHeight * dwStride doesn't overflow after the
|
| + // checking of safeMemSize.
|
| + // The same as the result of (dwH - dwHeight) * dwStride) because
|
| + // dwH - dwHeight is always less than dwH(h) which is checked in
|
| + // the calculation of dwH * dwStride.
|
| + JBIG2_memset(m_pData + dwHeight * dwStride, v ? 0xff : 0,
|
| + (dwH - dwHeight) * dwStride);
|
| + m_nHeight = h;
|
| }
|
| -FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op)
|
| -{
|
| - int32_t xs0 = 0, ys0 = 0, xs1 = 0, ys1 = 0, xd0 = 0, yd0 = 0, xd1 = 0,
|
| - yd1 = 0, xx = 0, yy = 0, w = 0, h = 0, middleDwords = 0, lineLeft = 0;
|
| +FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image* pDst,
|
| + int32_t x,
|
| + int32_t y,
|
| + JBig2ComposeOp op) {
|
| + int32_t xs0 = 0, ys0 = 0, xs1 = 0, ys1 = 0, xd0 = 0, yd0 = 0, xd1 = 0,
|
| + yd1 = 0, xx = 0, yy = 0, w = 0, h = 0, middleDwords = 0, lineLeft = 0;
|
|
|
| - FX_DWORD s1 = 0, d1 = 0, d2 = 0, shift = 0, shift1 = 0, shift2 = 0,
|
| - tmp = 0, tmp1 = 0, tmp2 = 0, maskL = 0, maskR = 0, maskM = 0;
|
| + FX_DWORD s1 = 0, d1 = 0, d2 = 0, shift = 0, shift1 = 0, shift2 = 0, tmp = 0,
|
| + tmp1 = 0, tmp2 = 0, maskL = 0, maskR = 0, maskM = 0;
|
|
|
| - uint8_t *lineSrc = NULL, *lineDst = NULL, *sp = NULL, *dp = NULL;
|
| + uint8_t *lineSrc = NULL, *lineDst = NULL, *sp = NULL, *dp = NULL;
|
|
|
| - if (!m_pData) {
|
| - return FALSE;
|
| - }
|
| - if (x < -1048576 || x > 1048576 || y < -1048576 || y > 1048576) {
|
| - return FALSE;
|
| - }
|
| - if(y < 0) {
|
| - ys0 = -y;
|
| - }
|
| - if(y + m_nHeight > pDst->m_nHeight) {
|
| - ys1 = pDst->m_nHeight - y;
|
| - } else {
|
| - ys1 = m_nHeight;
|
| - }
|
| - if(x < 0) {
|
| - xs0 = -x;
|
| - }
|
| - if(x + m_nWidth > pDst->m_nWidth) {
|
| - xs1 = pDst->m_nWidth - x;
|
| + if (!m_pData) {
|
| + return FALSE;
|
| + }
|
| + if (x < -1048576 || x > 1048576 || y < -1048576 || y > 1048576) {
|
| + return FALSE;
|
| + }
|
| + if (y < 0) {
|
| + ys0 = -y;
|
| + }
|
| + if (y + m_nHeight > pDst->m_nHeight) {
|
| + ys1 = pDst->m_nHeight - y;
|
| + } else {
|
| + ys1 = m_nHeight;
|
| + }
|
| + if (x < 0) {
|
| + xs0 = -x;
|
| + }
|
| + if (x + m_nWidth > pDst->m_nWidth) {
|
| + xs1 = pDst->m_nWidth - x;
|
| + } else {
|
| + xs1 = m_nWidth;
|
| + }
|
| + if ((ys0 >= ys1) || (xs0 >= xs1)) {
|
| + return 0;
|
| + }
|
| + w = xs1 - xs0;
|
| + h = ys1 - ys0;
|
| + if (y >= 0) {
|
| + yd0 = y;
|
| + }
|
| + if (x >= 0) {
|
| + xd0 = x;
|
| + }
|
| + xd1 = xd0 + w;
|
| + yd1 = yd0 + h;
|
| + d1 = xd0 & 31;
|
| + d2 = xd1 & 31;
|
| + s1 = xs0 & 31;
|
| + maskL = 0xffffffff >> d1;
|
| + maskR = 0xffffffff << ((32 - (xd1 & 31)) % 32);
|
| + maskM = maskL & maskR;
|
| + lineSrc = m_pData + ys0 * m_nStride + ((xs0 >> 5) << 2);
|
| + lineLeft = m_nStride - ((xs0 >> 5) << 2);
|
| + lineDst = pDst->m_pData + yd0 * pDst->m_nStride + ((xd0 >> 5) << 2);
|
| + if ((xd0 & ~31) == ((xd1 - 1) & ~31)) {
|
| + if ((xs0 & ~31) == ((xs1 - 1) & ~31)) {
|
| + if (s1 > d1) {
|
| + shift = s1 - d1;
|
| + for (yy = yd0; yy < yd1; yy++) {
|
| + tmp1 = JBIG2_GETDWORD(lineSrc) << shift;
|
| + tmp2 = JBIG2_GETDWORD(lineDst);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
|
| + break;
|
| + }
|
| + lineDst[0] = (uint8_t)(tmp >> 24);
|
| + lineDst[1] = (uint8_t)(tmp >> 16);
|
| + lineDst[2] = (uint8_t)(tmp >> 8);
|
| + lineDst[3] = (uint8_t)tmp;
|
| + lineSrc += m_nStride;
|
| + lineDst += pDst->m_nStride;
|
| + }
|
| + } else {
|
| + shift = d1 - s1;
|
| + for (yy = yd0; yy < yd1; yy++) {
|
| + tmp1 = JBIG2_GETDWORD(lineSrc) >> shift;
|
| + tmp2 = JBIG2_GETDWORD(lineDst);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
|
| + break;
|
| + }
|
| + lineDst[0] = (uint8_t)(tmp >> 24);
|
| + lineDst[1] = (uint8_t)(tmp >> 16);
|
| + lineDst[2] = (uint8_t)(tmp >> 8);
|
| + lineDst[3] = (uint8_t)tmp;
|
| + lineSrc += m_nStride;
|
| + lineDst += pDst->m_nStride;
|
| + }
|
| + }
|
| } else {
|
| - xs1 = m_nWidth;
|
| - }
|
| - if((ys0 >= ys1) || (xs0 >= xs1)) {
|
| - return 0;
|
| - }
|
| - w = xs1 - xs0;
|
| - h = ys1 - ys0;
|
| - if(y >= 0) {
|
| - yd0 = y;
|
| - }
|
| - if(x >= 0) {
|
| - xd0 = x;
|
| + shift1 = s1 - d1;
|
| + shift2 = 32 - shift1;
|
| + for (yy = yd0; yy < yd1; yy++) {
|
| + tmp1 = (JBIG2_GETDWORD(lineSrc) << shift1) |
|
| + (JBIG2_GETDWORD(lineSrc + 4) >> shift2);
|
| + tmp2 = JBIG2_GETDWORD(lineDst);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
|
| + break;
|
| + }
|
| + lineDst[0] = (uint8_t)(tmp >> 24);
|
| + lineDst[1] = (uint8_t)(tmp >> 16);
|
| + lineDst[2] = (uint8_t)(tmp >> 8);
|
| + lineDst[3] = (uint8_t)tmp;
|
| + lineSrc += m_nStride;
|
| + lineDst += pDst->m_nStride;
|
| + }
|
| }
|
| - xd1 = xd0 + w;
|
| - yd1 = yd0 + h;
|
| - d1 = xd0 & 31;
|
| - d2 = xd1 & 31;
|
| - s1 = xs0 & 31;
|
| - maskL = 0xffffffff >> d1;
|
| - maskR = 0xffffffff << ((32 - (xd1 & 31)) % 32);
|
| - maskM = maskL & maskR;
|
| - lineSrc = m_pData + ys0 * m_nStride + ((xs0 >> 5) << 2);
|
| - lineLeft = m_nStride - ((xs0 >> 5) << 2);
|
| - lineDst = pDst->m_pData + yd0 * pDst->m_nStride + ((xd0 >> 5) << 2);
|
| - if((xd0 & ~31) == ((xd1 - 1) & ~31)) {
|
| - if((xs0 & ~31) == ((xs1 - 1) & ~31)) {
|
| - if(s1 > d1) {
|
| - shift = s1 - d1;
|
| - for(yy = yd0; yy < yd1; yy++) {
|
| - tmp1 = JBIG2_GETDWORD(lineSrc) << shift;
|
| - tmp2 = JBIG2_GETDWORD(lineDst);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
|
| - break;
|
| - }
|
| - lineDst[0] = (uint8_t)(tmp >> 24);
|
| - lineDst[1] = (uint8_t)(tmp >> 16);
|
| - lineDst[2] = (uint8_t)(tmp >> 8);
|
| - lineDst[3] = (uint8_t)tmp;
|
| - lineSrc += m_nStride;
|
| - lineDst += pDst->m_nStride;
|
| - }
|
| - } else {
|
| - shift = d1 - s1;
|
| - for(yy = yd0; yy < yd1; yy++) {
|
| - tmp1 = JBIG2_GETDWORD(lineSrc) >> shift;
|
| - tmp2 = JBIG2_GETDWORD(lineDst);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
|
| - break;
|
| - }
|
| - lineDst[0] = (uint8_t)(tmp >> 24);
|
| - lineDst[1] = (uint8_t)(tmp >> 16);
|
| - lineDst[2] = (uint8_t)(tmp >> 8);
|
| - lineDst[3] = (uint8_t)tmp;
|
| - lineSrc += m_nStride;
|
| - lineDst += pDst->m_nStride;
|
| - }
|
| - }
|
| - } else {
|
| - shift1 = s1 - d1;
|
| - shift2 = 32 - shift1;
|
| - for(yy = yd0; yy < yd1; yy++) {
|
| - tmp1 = (JBIG2_GETDWORD(lineSrc) << shift1) | (JBIG2_GETDWORD(lineSrc + 4) >> shift2);
|
| - tmp2 = JBIG2_GETDWORD(lineDst);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
|
| - break;
|
| - }
|
| - lineDst[0] = (uint8_t)(tmp >> 24);
|
| - lineDst[1] = (uint8_t)(tmp >> 16);
|
| - lineDst[2] = (uint8_t)(tmp >> 8);
|
| - lineDst[3] = (uint8_t)tmp;
|
| - lineSrc += m_nStride;
|
| - lineDst += pDst->m_nStride;
|
| - }
|
| + } else {
|
| + if (s1 > d1) {
|
| + shift1 = s1 - d1;
|
| + shift2 = 32 - shift1;
|
| + middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
|
| + for (yy = yd0; yy < yd1; yy++) {
|
| + sp = lineSrc;
|
| + dp = lineDst;
|
| + if (d1 != 0) {
|
| + tmp1 = (JBIG2_GETDWORD(sp) << shift1) |
|
| + (JBIG2_GETDWORD(sp + 4) >> shift2);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + sp += 4;
|
| + dp += 4;
|
| + }
|
| + for (xx = 0; xx < middleDwords; xx++) {
|
| + tmp1 = (JBIG2_GETDWORD(sp) << shift1) |
|
| + (JBIG2_GETDWORD(sp + 4) >> shift2);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = tmp1 | tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = tmp1 & tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = tmp1 ^ tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = ~(tmp1 ^ tmp2);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = tmp1;
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + sp += 4;
|
| + dp += 4;
|
| }
|
| + if (d2 != 0) {
|
| + tmp1 =
|
| + (JBIG2_GETDWORD(sp) << shift1) |
|
| + (((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >>
|
| + shift2);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + }
|
| + lineSrc += m_nStride;
|
| + lineDst += pDst->m_nStride;
|
| + }
|
| + } else if (s1 == d1) {
|
| + middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
|
| + for (yy = yd0; yy < yd1; yy++) {
|
| + sp = lineSrc;
|
| + dp = lineDst;
|
| + if (d1 != 0) {
|
| + tmp1 = JBIG2_GETDWORD(sp);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + sp += 4;
|
| + dp += 4;
|
| + }
|
| + for (xx = 0; xx < middleDwords; xx++) {
|
| + tmp1 = JBIG2_GETDWORD(sp);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = tmp1 | tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = tmp1 & tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = tmp1 ^ tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = ~(tmp1 ^ tmp2);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = tmp1;
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + sp += 4;
|
| + dp += 4;
|
| + }
|
| + if (d2 != 0) {
|
| + tmp1 = JBIG2_GETDWORD(sp);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + }
|
| + lineSrc += m_nStride;
|
| + lineDst += pDst->m_nStride;
|
| + }
|
| } else {
|
| - if(s1 > d1) {
|
| - shift1 = s1 - d1;
|
| - shift2 = 32 - shift1;
|
| - middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
|
| - for(yy = yd0; yy < yd1; yy++) {
|
| - sp = lineSrc;
|
| - dp = lineDst;
|
| - if(d1 != 0) {
|
| - tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (JBIG2_GETDWORD(sp + 4) >> shift2);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - sp += 4;
|
| - dp += 4;
|
| - }
|
| - for(xx = 0; xx < middleDwords; xx++) {
|
| - tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (JBIG2_GETDWORD(sp + 4) >> shift2);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = tmp1 | tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = tmp1 & tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = tmp1 ^ tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = ~(tmp1 ^ tmp2);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = tmp1;
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - sp += 4;
|
| - dp += 4;
|
| - }
|
| - if(d2 != 0) {
|
| - tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (
|
| - ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >> shift2);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - }
|
| - lineSrc += m_nStride;
|
| - lineDst += pDst->m_nStride;
|
| - }
|
| - } else if(s1 == d1) {
|
| - middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
|
| - for(yy = yd0; yy < yd1; yy++) {
|
| - sp = lineSrc;
|
| - dp = lineDst;
|
| - if(d1 != 0) {
|
| - tmp1 = JBIG2_GETDWORD(sp);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - sp += 4;
|
| - dp += 4;
|
| - }
|
| - for(xx = 0; xx < middleDwords; xx++) {
|
| - tmp1 = JBIG2_GETDWORD(sp);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = tmp1 | tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = tmp1 & tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = tmp1 ^ tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = ~(tmp1 ^ tmp2);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = tmp1;
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - sp += 4;
|
| - dp += 4;
|
| - }
|
| - if(d2 != 0) {
|
| - tmp1 = JBIG2_GETDWORD(sp);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - }
|
| - lineSrc += m_nStride;
|
| - lineDst += pDst->m_nStride;
|
| - }
|
| - } else {
|
| - shift1 = d1 - s1;
|
| - shift2 = 32 - shift1;
|
| - middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
|
| - for(yy = yd0; yy < yd1; yy++) {
|
| - sp = lineSrc;
|
| - dp = lineDst;
|
| - if(d1 != 0) {
|
| - tmp1 = JBIG2_GETDWORD(sp) >> shift1;
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - dp += 4;
|
| - }
|
| - for(xx = 0; xx < middleDwords; xx++) {
|
| - tmp1 = (JBIG2_GETDWORD(sp) << shift2) | ((JBIG2_GETDWORD(sp + 4)) >> shift1);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = tmp1 | tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = tmp1 & tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = tmp1 ^ tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = ~(tmp1 ^ tmp2);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = tmp1;
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - sp += 4;
|
| - dp += 4;
|
| - }
|
| - if(d2 != 0) {
|
| - tmp1 = (JBIG2_GETDWORD(sp) << shift2) | (
|
| - ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >> shift1);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - }
|
| - lineSrc += m_nStride;
|
| - lineDst += pDst->m_nStride;
|
| - }
|
| + shift1 = d1 - s1;
|
| + shift2 = 32 - shift1;
|
| + middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
|
| + for (yy = yd0; yy < yd1; yy++) {
|
| + sp = lineSrc;
|
| + dp = lineDst;
|
| + if (d1 != 0) {
|
| + tmp1 = JBIG2_GETDWORD(sp) >> shift1;
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + dp += 4;
|
| + }
|
| + for (xx = 0; xx < middleDwords; xx++) {
|
| + tmp1 = (JBIG2_GETDWORD(sp) << shift2) |
|
| + ((JBIG2_GETDWORD(sp + 4)) >> shift1);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = tmp1 | tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = tmp1 & tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = tmp1 ^ tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = ~(tmp1 ^ tmp2);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = tmp1;
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + sp += 4;
|
| + dp += 4;
|
| }
|
| + if (d2 != 0) {
|
| + tmp1 =
|
| + (JBIG2_GETDWORD(sp) << shift2) |
|
| + (((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >>
|
| + shift1);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + }
|
| + lineSrc += m_nStride;
|
| + lineDst += pDst->m_nStride;
|
| + }
|
| }
|
| - return 1;
|
| + }
|
| + return 1;
|
| }
|
| -FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op, const FX_RECT* pSrcRect)
|
| -{
|
| - int32_t xs0, ys0, xs1, ys1, xd0, yd0, xd1, yd1, xx, yy, w, h, middleDwords, lineLeft;
|
| - FX_DWORD s1, d1, d2, shift, shift1, shift2, tmp, tmp1, tmp2, maskL, maskR, maskM;
|
| - uint8_t *lineSrc, *lineDst, *sp, *dp;
|
| - int32_t sw, sh;
|
| - if (!m_pData) {
|
| - return FALSE;
|
| - }
|
| - if (x < -1048576 || x > 1048576 || y < -1048576 || y > 1048576) {
|
| - return FALSE;
|
| - }
|
| - sw = pSrcRect->Width();
|
| - sh = pSrcRect->Height();
|
| - if(y < 0) {
|
| - ys0 = -y;
|
| - } else {
|
| - ys0 = 0;
|
| - }
|
| - if(y + sh > pDst->m_nHeight) {
|
| - ys1 = pDst->m_nHeight - y;
|
| - } else {
|
| - ys1 = sh;
|
| - }
|
| - if(x < 0) {
|
| - xs0 = -x;
|
| - } else {
|
| - xs0 = 0;
|
| - }
|
| - if(x + sw > pDst->m_nWidth) {
|
| - xs1 = pDst->m_nWidth - x;
|
| - } else {
|
| - xs1 = sw;
|
| - }
|
| - if((ys0 >= ys1) || (xs0 >= xs1)) {
|
| - return 0;
|
| - }
|
| - w = xs1 - xs0;
|
| - h = ys1 - ys0;
|
| - if(y < 0) {
|
| - yd0 = 0;
|
| - } else {
|
| - yd0 = y;
|
| - }
|
| - if(x < 0) {
|
| - xd0 = 0;
|
| +FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image* pDst,
|
| + int32_t x,
|
| + int32_t y,
|
| + JBig2ComposeOp op,
|
| + const FX_RECT* pSrcRect) {
|
| + int32_t xs0, ys0, xs1, ys1, xd0, yd0, xd1, yd1, xx, yy, w, h, middleDwords,
|
| + lineLeft;
|
| + FX_DWORD s1, d1, d2, shift, shift1, shift2, tmp, tmp1, tmp2, maskL, maskR,
|
| + maskM;
|
| + uint8_t *lineSrc, *lineDst, *sp, *dp;
|
| + int32_t sw, sh;
|
| + if (!m_pData) {
|
| + return FALSE;
|
| + }
|
| + if (x < -1048576 || x > 1048576 || y < -1048576 || y > 1048576) {
|
| + return FALSE;
|
| + }
|
| + sw = pSrcRect->Width();
|
| + sh = pSrcRect->Height();
|
| + if (y < 0) {
|
| + ys0 = -y;
|
| + } else {
|
| + ys0 = 0;
|
| + }
|
| + if (y + sh > pDst->m_nHeight) {
|
| + ys1 = pDst->m_nHeight - y;
|
| + } else {
|
| + ys1 = sh;
|
| + }
|
| + if (x < 0) {
|
| + xs0 = -x;
|
| + } else {
|
| + xs0 = 0;
|
| + }
|
| + if (x + sw > pDst->m_nWidth) {
|
| + xs1 = pDst->m_nWidth - x;
|
| + } else {
|
| + xs1 = sw;
|
| + }
|
| + if ((ys0 >= ys1) || (xs0 >= xs1)) {
|
| + return 0;
|
| + }
|
| + w = xs1 - xs0;
|
| + h = ys1 - ys0;
|
| + if (y < 0) {
|
| + yd0 = 0;
|
| + } else {
|
| + yd0 = y;
|
| + }
|
| + if (x < 0) {
|
| + xd0 = 0;
|
| + } else {
|
| + xd0 = x;
|
| + }
|
| + xd1 = xd0 + w;
|
| + yd1 = yd0 + h;
|
| + d1 = xd0 & 31;
|
| + d2 = xd1 & 31;
|
| + s1 = xs0 & 31;
|
| + maskL = 0xffffffff >> d1;
|
| + maskR = 0xffffffff << ((32 - (xd1 & 31)) % 32);
|
| + maskM = maskL & maskR;
|
| + lineSrc = m_pData + (pSrcRect->top + ys0) * m_nStride +
|
| + (((xs0 + pSrcRect->left) >> 5) << 2);
|
| + lineLeft = m_nStride - ((xs0 >> 5) << 2);
|
| + lineDst = pDst->m_pData + yd0 * pDst->m_nStride + ((xd0 >> 5) << 2);
|
| + if ((xd0 & ~31) == ((xd1 - 1) & ~31)) {
|
| + if ((xs0 & ~31) == ((xs1 - 1) & ~31)) {
|
| + if (s1 > d1) {
|
| + shift = s1 - d1;
|
| + for (yy = yd0; yy < yd1; yy++) {
|
| + tmp1 = JBIG2_GETDWORD(lineSrc) << shift;
|
| + tmp2 = JBIG2_GETDWORD(lineDst);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
|
| + break;
|
| + }
|
| + lineDst[0] = (uint8_t)(tmp >> 24);
|
| + lineDst[1] = (uint8_t)(tmp >> 16);
|
| + lineDst[2] = (uint8_t)(tmp >> 8);
|
| + lineDst[3] = (uint8_t)tmp;
|
| + lineSrc += m_nStride;
|
| + lineDst += pDst->m_nStride;
|
| + }
|
| + } else {
|
| + shift = d1 - s1;
|
| + for (yy = yd0; yy < yd1; yy++) {
|
| + tmp1 = JBIG2_GETDWORD(lineSrc) >> shift;
|
| + tmp2 = JBIG2_GETDWORD(lineDst);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
|
| + break;
|
| + }
|
| + lineDst[0] = (uint8_t)(tmp >> 24);
|
| + lineDst[1] = (uint8_t)(tmp >> 16);
|
| + lineDst[2] = (uint8_t)(tmp >> 8);
|
| + lineDst[3] = (uint8_t)tmp;
|
| + lineSrc += m_nStride;
|
| + lineDst += pDst->m_nStride;
|
| + }
|
| + }
|
| } else {
|
| - xd0 = x;
|
| + shift1 = s1 - d1;
|
| + shift2 = 32 - shift1;
|
| + for (yy = yd0; yy < yd1; yy++) {
|
| + tmp1 = (JBIG2_GETDWORD(lineSrc) << shift1) |
|
| + (JBIG2_GETDWORD(lineSrc + 4) >> shift2);
|
| + tmp2 = JBIG2_GETDWORD(lineDst);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
|
| + break;
|
| + }
|
| + lineDst[0] = (uint8_t)(tmp >> 24);
|
| + lineDst[1] = (uint8_t)(tmp >> 16);
|
| + lineDst[2] = (uint8_t)(tmp >> 8);
|
| + lineDst[3] = (uint8_t)tmp;
|
| + lineSrc += m_nStride;
|
| + lineDst += pDst->m_nStride;
|
| + }
|
| }
|
| - xd1 = xd0 + w;
|
| - yd1 = yd0 + h;
|
| - d1 = xd0 & 31;
|
| - d2 = xd1 & 31;
|
| - s1 = xs0 & 31;
|
| - maskL = 0xffffffff >> d1;
|
| - maskR = 0xffffffff << ((32 - (xd1 & 31)) % 32);
|
| - maskM = maskL & maskR;
|
| - lineSrc = m_pData + (pSrcRect->top + ys0) * m_nStride + (((xs0 + pSrcRect->left) >> 5) << 2);
|
| - lineLeft = m_nStride - ((xs0 >> 5) << 2);
|
| - lineDst = pDst->m_pData + yd0 * pDst->m_nStride + ((xd0 >> 5) << 2);
|
| - if((xd0 & ~31) == ((xd1 - 1) & ~31)) {
|
| - if((xs0 & ~31) == ((xs1 - 1) & ~31)) {
|
| - if(s1 > d1) {
|
| - shift = s1 - d1;
|
| - for(yy = yd0; yy < yd1; yy++) {
|
| - tmp1 = JBIG2_GETDWORD(lineSrc) << shift;
|
| - tmp2 = JBIG2_GETDWORD(lineDst);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
|
| - break;
|
| - }
|
| - lineDst[0] = (uint8_t)(tmp >> 24);
|
| - lineDst[1] = (uint8_t)(tmp >> 16);
|
| - lineDst[2] = (uint8_t)(tmp >> 8);
|
| - lineDst[3] = (uint8_t)tmp;
|
| - lineSrc += m_nStride;
|
| - lineDst += pDst->m_nStride;
|
| - }
|
| - } else {
|
| - shift = d1 - s1;
|
| - for(yy = yd0; yy < yd1; yy++) {
|
| - tmp1 = JBIG2_GETDWORD(lineSrc) >> shift;
|
| - tmp2 = JBIG2_GETDWORD(lineDst);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
|
| - break;
|
| - }
|
| - lineDst[0] = (uint8_t)(tmp >> 24);
|
| - lineDst[1] = (uint8_t)(tmp >> 16);
|
| - lineDst[2] = (uint8_t)(tmp >> 8);
|
| - lineDst[3] = (uint8_t)tmp;
|
| - lineSrc += m_nStride;
|
| - lineDst += pDst->m_nStride;
|
| - }
|
| - }
|
| - } else {
|
| - shift1 = s1 - d1;
|
| - shift2 = 32 - shift1;
|
| - for(yy = yd0; yy < yd1; yy++) {
|
| - tmp1 = (JBIG2_GETDWORD(lineSrc) << shift1) | (JBIG2_GETDWORD(lineSrc + 4) >> shift2);
|
| - tmp2 = JBIG2_GETDWORD(lineDst);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
|
| - break;
|
| - }
|
| - lineDst[0] = (uint8_t)(tmp >> 24);
|
| - lineDst[1] = (uint8_t)(tmp >> 16);
|
| - lineDst[2] = (uint8_t)(tmp >> 8);
|
| - lineDst[3] = (uint8_t)tmp;
|
| - lineSrc += m_nStride;
|
| - lineDst += pDst->m_nStride;
|
| - }
|
| + } else {
|
| + if (s1 > d1) {
|
| + shift1 = s1 - d1;
|
| + shift2 = 32 - shift1;
|
| + middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
|
| + for (yy = yd0; yy < yd1; yy++) {
|
| + sp = lineSrc;
|
| + dp = lineDst;
|
| + if (d1 != 0) {
|
| + tmp1 = (JBIG2_GETDWORD(sp) << shift1) |
|
| + (JBIG2_GETDWORD(sp + 4) >> shift2);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + sp += 4;
|
| + dp += 4;
|
| }
|
| + for (xx = 0; xx < middleDwords; xx++) {
|
| + tmp1 = (JBIG2_GETDWORD(sp) << shift1) |
|
| + (JBIG2_GETDWORD(sp + 4) >> shift2);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = tmp1 | tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = tmp1 & tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = tmp1 ^ tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = ~(tmp1 ^ tmp2);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = tmp1;
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + sp += 4;
|
| + dp += 4;
|
| + }
|
| + if (d2 != 0) {
|
| + tmp1 =
|
| + (JBIG2_GETDWORD(sp) << shift1) |
|
| + (((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >>
|
| + shift2);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + }
|
| + lineSrc += m_nStride;
|
| + lineDst += pDst->m_nStride;
|
| + }
|
| + } else if (s1 == d1) {
|
| + middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
|
| + for (yy = yd0; yy < yd1; yy++) {
|
| + sp = lineSrc;
|
| + dp = lineDst;
|
| + if (d1 != 0) {
|
| + tmp1 = JBIG2_GETDWORD(sp);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + sp += 4;
|
| + dp += 4;
|
| + }
|
| + for (xx = 0; xx < middleDwords; xx++) {
|
| + tmp1 = JBIG2_GETDWORD(sp);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = tmp1 | tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = tmp1 & tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = tmp1 ^ tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = ~(tmp1 ^ tmp2);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = tmp1;
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + sp += 4;
|
| + dp += 4;
|
| + }
|
| + if (d2 != 0) {
|
| + tmp1 = JBIG2_GETDWORD(sp);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + }
|
| + lineSrc += m_nStride;
|
| + lineDst += pDst->m_nStride;
|
| + }
|
| } else {
|
| - if(s1 > d1) {
|
| - shift1 = s1 - d1;
|
| - shift2 = 32 - shift1;
|
| - middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
|
| - for(yy = yd0; yy < yd1; yy++) {
|
| - sp = lineSrc;
|
| - dp = lineDst;
|
| - if(d1 != 0) {
|
| - tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (JBIG2_GETDWORD(sp + 4) >> shift2);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - sp += 4;
|
| - dp += 4;
|
| - }
|
| - for(xx = 0; xx < middleDwords; xx++) {
|
| - tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (JBIG2_GETDWORD(sp + 4) >> shift2);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = tmp1 | tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = tmp1 & tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = tmp1 ^ tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = ~(tmp1 ^ tmp2);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = tmp1;
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - sp += 4;
|
| - dp += 4;
|
| - }
|
| - if(d2 != 0) {
|
| - tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (
|
| - ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >> shift2);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - }
|
| - lineSrc += m_nStride;
|
| - lineDst += pDst->m_nStride;
|
| - }
|
| - } else if(s1 == d1) {
|
| - middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
|
| - for(yy = yd0; yy < yd1; yy++) {
|
| - sp = lineSrc;
|
| - dp = lineDst;
|
| - if(d1 != 0) {
|
| - tmp1 = JBIG2_GETDWORD(sp);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - sp += 4;
|
| - dp += 4;
|
| - }
|
| - for(xx = 0; xx < middleDwords; xx++) {
|
| - tmp1 = JBIG2_GETDWORD(sp);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = tmp1 | tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = tmp1 & tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = tmp1 ^ tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = ~(tmp1 ^ tmp2);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = tmp1;
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - sp += 4;
|
| - dp += 4;
|
| - }
|
| - if(d2 != 0) {
|
| - tmp1 = JBIG2_GETDWORD(sp);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - }
|
| - lineSrc += m_nStride;
|
| - lineDst += pDst->m_nStride;
|
| - }
|
| - } else {
|
| - shift1 = d1 - s1;
|
| - shift2 = 32 - shift1;
|
| - middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
|
| - for(yy = yd0; yy < yd1; yy++) {
|
| - sp = lineSrc;
|
| - dp = lineDst;
|
| - if(d1 != 0) {
|
| - tmp1 = JBIG2_GETDWORD(sp) >> shift1;
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - dp += 4;
|
| - }
|
| - for(xx = 0; xx < middleDwords; xx++) {
|
| - tmp1 = (JBIG2_GETDWORD(sp) << shift2) | ((JBIG2_GETDWORD(sp + 4)) >> shift1);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = tmp1 | tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = tmp1 & tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = tmp1 ^ tmp2;
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = ~(tmp1 ^ tmp2);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = tmp1;
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - sp += 4;
|
| - dp += 4;
|
| - }
|
| - if(d2 != 0) {
|
| - tmp1 = (JBIG2_GETDWORD(sp) << shift2) | (
|
| - ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >> shift1);
|
| - tmp2 = JBIG2_GETDWORD(dp);
|
| - switch(op) {
|
| - case JBIG2_COMPOSE_OR:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_AND:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_XOR:
|
| - tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_XNOR:
|
| - tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
|
| - break;
|
| - case JBIG2_COMPOSE_REPLACE:
|
| - tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
|
| - break;
|
| - }
|
| - dp[0] = (uint8_t)(tmp >> 24);
|
| - dp[1] = (uint8_t)(tmp >> 16);
|
| - dp[2] = (uint8_t)(tmp >> 8);
|
| - dp[3] = (uint8_t)tmp;
|
| - }
|
| - lineSrc += m_nStride;
|
| - lineDst += pDst->m_nStride;
|
| - }
|
| + shift1 = d1 - s1;
|
| + shift2 = 32 - shift1;
|
| + middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
|
| + for (yy = yd0; yy < yd1; yy++) {
|
| + sp = lineSrc;
|
| + dp = lineDst;
|
| + if (d1 != 0) {
|
| + tmp1 = JBIG2_GETDWORD(sp) >> shift1;
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + dp += 4;
|
| + }
|
| + for (xx = 0; xx < middleDwords; xx++) {
|
| + tmp1 = (JBIG2_GETDWORD(sp) << shift2) |
|
| + ((JBIG2_GETDWORD(sp + 4)) >> shift1);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = tmp1 | tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = tmp1 & tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = tmp1 ^ tmp2;
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = ~(tmp1 ^ tmp2);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = tmp1;
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| + sp += 4;
|
| + dp += 4;
|
| + }
|
| + if (d2 != 0) {
|
| + tmp1 =
|
| + (JBIG2_GETDWORD(sp) << shift2) |
|
| + (((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >>
|
| + shift1);
|
| + tmp2 = JBIG2_GETDWORD(dp);
|
| + switch (op) {
|
| + case JBIG2_COMPOSE_OR:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_AND:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_XOR:
|
| + tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_XNOR:
|
| + tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
|
| + break;
|
| + case JBIG2_COMPOSE_REPLACE:
|
| + tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
|
| + break;
|
| + }
|
| + dp[0] = (uint8_t)(tmp >> 24);
|
| + dp[1] = (uint8_t)(tmp >> 16);
|
| + dp[2] = (uint8_t)(tmp >> 8);
|
| + dp[3] = (uint8_t)tmp;
|
| }
|
| + lineSrc += m_nStride;
|
| + lineDst += pDst->m_nStride;
|
| + }
|
| }
|
| - return 1;
|
| + }
|
| + return 1;
|
| }
|
|
|