| 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 "../../../include/fxcodec/fx_codec.h" | 7 #include "../../../include/fxcodec/fx_codec.h" |
| 8 #include "codec_int.h" | 8 #include "codec_int.h" |
| 9 CCodec_ModuleMgr::CCodec_ModuleMgr() | 9 CCodec_ModuleMgr::CCodec_ModuleMgr() |
| 10 { | 10 { |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 dest_height = -dest_height; | 116 dest_height = -dest_height; |
| 117 } | 117 } |
| 118 v_DownScale(dest_width, dest_height); | 118 v_DownScale(dest_width, dest_height); |
| 119 if (m_pDataCache) { | 119 if (m_pDataCache) { |
| 120 if (m_pDataCache->m_Height == m_OutputHeight && m_pDataCache->m_Width ==
m_OutputWidth) { | 120 if (m_pDataCache->m_Height == m_OutputHeight && m_pDataCache->m_Width ==
m_OutputWidth) { |
| 121 return; | 121 return; |
| 122 } | 122 } |
| 123 FX_Free(m_pDataCache); | 123 FX_Free(m_pDataCache); |
| 124 m_pDataCache = NULL; | 124 m_pDataCache = NULL; |
| 125 } | 125 } |
| 126 m_pDataCache = (CCodec_ImageDataCache*)FX_TryAlloc(FX_BYTE, sizeof(CCodec_Im
ageDataCache) + m_Pitch * m_OutputHeight); | 126 m_pDataCache = (CCodec_ImageDataCache*)FX_TryAlloc(uint8_t, sizeof(CCodec_Im
ageDataCache) + m_Pitch * m_OutputHeight); |
| 127 if (m_pDataCache == NULL) { | 127 if (m_pDataCache == NULL) { |
| 128 return; | 128 return; |
| 129 } | 129 } |
| 130 m_pDataCache->m_Height = m_OutputHeight; | 130 m_pDataCache->m_Height = m_OutputHeight; |
| 131 m_pDataCache->m_Width = m_OutputWidth; | 131 m_pDataCache->m_Width = m_OutputWidth; |
| 132 m_pDataCache->m_nCachedLines = 0; | 132 m_pDataCache->m_nCachedLines = 0; |
| 133 } | 133 } |
| 134 FX_BOOL CCodec_BasicModule::RunLengthEncode(const FX_BYTE* src_buf, FX_DWORD src
_size, FX_LPBYTE& dest_buf, | 134 FX_BOOL CCodec_BasicModule::RunLengthEncode(const uint8_t* src_buf, FX_DWORD src
_size, FX_LPBYTE& dest_buf, |
| 135 FX_DWORD& dest_size) | 135 FX_DWORD& dest_size) |
| 136 { | 136 { |
| 137 return FALSE; | 137 return FALSE; |
| 138 } | 138 } |
| 139 extern "C" double FXstrtod(const char* nptr, char** endptr) | 139 extern "C" double FXstrtod(const char* nptr, char** endptr) |
| 140 { | 140 { |
| 141 double ret = 0.0; | 141 double ret = 0.0; |
| 142 const char* ptr = nptr; | 142 const char* ptr = nptr; |
| 143 const char* exp_ptr = NULL; | 143 const char* exp_ptr = NULL; |
| 144 int e_number = 0, | 144 int e_number = 0, |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 while(exp_ret--) { | 233 while(exp_ret--) { |
| 234 ret *= 10.0; | 234 ret *= 10.0; |
| 235 } | 235 } |
| 236 } else { | 236 } else { |
| 237 while(exp_ret--) { | 237 while(exp_ret--) { |
| 238 ret /= 10.0; | 238 ret /= 10.0; |
| 239 } | 239 } |
| 240 } | 240 } |
| 241 return is_negative ? -ret : ret; | 241 return is_negative ? -ret : ret; |
| 242 } | 242 } |
| 243 FX_BOOL CCodec_BasicModule::A85Encode(const FX_BYTE* src_buf, FX_DWORD src_size,
FX_LPBYTE& dest_buf, | 243 FX_BOOL CCodec_BasicModule::A85Encode(const uint8_t* src_buf, FX_DWORD src_size,
FX_LPBYTE& dest_buf, |
| 244 FX_DWORD& dest_size) | 244 FX_DWORD& dest_size) |
| 245 { | 245 { |
| 246 return FALSE; | 246 return FALSE; |
| 247 } | 247 } |
| 248 CCodec_ModuleMgr* CCodec_ModuleMgr::Create() | 248 CCodec_ModuleMgr* CCodec_ModuleMgr::Create() |
| 249 { | 249 { |
| 250 return new CCodec_ModuleMgr; | 250 return new CCodec_ModuleMgr; |
| 251 } | 251 } |
| 252 void CCodec_ModuleMgr::Destroy() | 252 void CCodec_ModuleMgr::Destroy() |
| 253 { | 253 { |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 if (pMap && data) { | 361 if (pMap && data) { |
| 362 if (len > 8) { | 362 if (len > 8) { |
| 363 FX_WORD wTagNum = m_readWord(data); | 363 FX_WORD wTagNum = m_readWord(data); |
| 364 data += 2; | 364 data += 2; |
| 365 FX_DWORD wTag; | 365 FX_DWORD wTag; |
| 366 FX_LPBYTE buf; | 366 FX_LPBYTE buf; |
| 367 while (wTagNum--) { | 367 while (wTagNum--) { |
| 368 wTag = m_readWord(data); | 368 wTag = m_readWord(data); |
| 369 data += 2; | 369 data += 2; |
| 370 if (!pMap->Lookup(wTag, buf)) { | 370 if (!pMap->Lookup(wTag, buf)) { |
| 371 buf = FX_Alloc(FX_BYTE, 10); | 371 buf = FX_Alloc(uint8_t, 10); |
| 372 if (buf == NULL) { | 372 if (buf == NULL) { |
| 373 return FALSE; | 373 return FALSE; |
| 374 } | 374 } |
| 375 FXSYS_memcpy32(buf, data, 10); | 375 FXSYS_memcpy32(buf, data, 10); |
| 376 pMap->SetAt(wTag, buf); | 376 pMap->SetAt(wTag, buf); |
| 377 } | 377 } |
| 378 data += 10; | 378 data += 10; |
| 379 } | 379 } |
| 380 FX_DWORD dwIFDOffset; | 380 FX_DWORD dwIFDOffset; |
| 381 dwIFDOffset = m_readDword(data); | 381 dwIFDOffset = m_readDword(data); |
| 382 while (dwIFDOffset && dwIFDOffset < len) { | 382 while (dwIFDOffset && dwIFDOffset < len) { |
| 383 data = m_pExifData + dwIFDOffset; | 383 data = m_pExifData + dwIFDOffset; |
| 384 wTagNum = m_readWord(data); | 384 wTagNum = m_readWord(data); |
| 385 data += 2; | 385 data += 2; |
| 386 while (wTagNum--) { | 386 while (wTagNum--) { |
| 387 wTag = m_readWord(data); | 387 wTag = m_readWord(data); |
| 388 data += 2; | 388 data += 2; |
| 389 if (!pMap->Lookup(wTag, buf)) { | 389 if (!pMap->Lookup(wTag, buf)) { |
| 390 buf = FX_Alloc(FX_BYTE, 10); | 390 buf = FX_Alloc(uint8_t, 10); |
| 391 if (buf == NULL) { | 391 if (buf == NULL) { |
| 392 return FALSE; | 392 return FALSE; |
| 393 } | 393 } |
| 394 FXSYS_memcpy32(buf, data, 10); | 394 FXSYS_memcpy32(buf, data, 10); |
| 395 pMap->SetAt(wTag, buf); | 395 pMap->SetAt(wTag, buf); |
| 396 } | 396 } |
| 397 data += 10; | 397 data += 10; |
| 398 } | 398 } |
| 399 dwIFDOffset = m_readDword(data); | 399 dwIFDOffset = m_readDword(data); |
| 400 } | 400 } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 type = m_readWord(head); | 445 type = m_readWord(head); |
| 446 head += 2; | 446 head += 2; |
| 447 dwModuleNum = m_readDword(head); | 447 dwModuleNum = m_readDword(head); |
| 448 head += 4; | 448 head += 4; |
| 449 switch (type) { | 449 switch (type) { |
| 450 case FX_UnsignedByte: | 450 case FX_UnsignedByte: |
| 451 case FX_AscString: | 451 case FX_AscString: |
| 452 case FX_SignedByte: | 452 case FX_SignedByte: |
| 453 case FX_Undefined: | 453 case FX_Undefined: |
| 454 dwSize = dwModuleNum; | 454 dwSize = dwModuleNum; |
| 455 val = FX_Alloc(FX_BYTE, dwSize); | 455 val = FX_Alloc(uint8_t, dwSize); |
| 456 if (val == NULL) { | 456 if (val == NULL) { |
| 457 return FALSE; | 457 return FALSE; |
| 458 } | 458 } |
| 459 if (dwSize > 4) { | 459 if (dwSize > 4) { |
| 460 FXSYS_memcpy32(val, old_data + m_readDword(head)
, dwSize); | 460 FXSYS_memcpy32(val, old_data + m_readDword(head)
, dwSize); |
| 461 } else { | 461 } else { |
| 462 FXSYS_memcpy32(val, head, dwSize); | 462 FXSYS_memcpy32(val, head, dwSize); |
| 463 } | 463 } |
| 464 break; | 464 break; |
| 465 case FX_UnsignedShort: | 465 case FX_UnsignedShort: |
| 466 case FX_SignedShort: | 466 case FX_SignedShort: |
| 467 dwSize = dwModuleNum << 1; | 467 dwSize = dwModuleNum << 1; |
| 468 val = FX_Alloc(FX_BYTE, dwSize); | 468 val = FX_Alloc(uint8_t, dwSize); |
| 469 if (val == NULL) { | 469 if (val == NULL) { |
| 470 return FALSE; | 470 return FALSE; |
| 471 } | 471 } |
| 472 if (dwSize > 4) { | 472 if (dwSize > 4) { |
| 473 FXSYS_memcpy32(val, old_data + m_readDword(head)
, dwSize); | 473 FXSYS_memcpy32(val, old_data + m_readDword(head)
, dwSize); |
| 474 } else { | 474 } else { |
| 475 FXSYS_memcpy32(val, head, dwSize); | 475 FXSYS_memcpy32(val, head, dwSize); |
| 476 } | 476 } |
| 477 buf = val; | 477 buf = val; |
| 478 for(i = 0; i < (int)dwModuleNum; i ++) { | 478 for(i = 0; i < (int)dwModuleNum; i ++) { |
| 479 *(FX_WORD*)buf = m_readWord(buf); | 479 *(FX_WORD*)buf = m_readWord(buf); |
| 480 buf += 2; | 480 buf += 2; |
| 481 } | 481 } |
| 482 break; | 482 break; |
| 483 case FX_UnsignedLong: | 483 case FX_UnsignedLong: |
| 484 case FX_SignedLong: | 484 case FX_SignedLong: |
| 485 case FX_SignedFloat: | 485 case FX_SignedFloat: |
| 486 dwSize = dwModuleNum << 2; | 486 dwSize = dwModuleNum << 2; |
| 487 val = FX_Alloc(FX_BYTE, dwSize); | 487 val = FX_Alloc(uint8_t, dwSize); |
| 488 if (val == NULL) { | 488 if (val == NULL) { |
| 489 return FALSE; | 489 return FALSE; |
| 490 } | 490 } |
| 491 if (dwSize > 4) { | 491 if (dwSize > 4) { |
| 492 FXSYS_memcpy32(val, old_data + m_readDword(head)
, dwSize); | 492 FXSYS_memcpy32(val, old_data + m_readDword(head)
, dwSize); |
| 493 } else { | 493 } else { |
| 494 FXSYS_memcpy32(val, head, dwSize); | 494 FXSYS_memcpy32(val, head, dwSize); |
| 495 } | 495 } |
| 496 buf = val; | 496 buf = val; |
| 497 for(i = 0; i < (int)dwModuleNum; i ++) { | 497 for(i = 0; i < (int)dwModuleNum; i ++) { |
| 498 *(FX_DWORD*)buf = m_readDword(buf); | 498 *(FX_DWORD*)buf = m_readDword(buf); |
| 499 buf += 4; | 499 buf += 4; |
| 500 } | 500 } |
| 501 break; | 501 break; |
| 502 case FX_UnsignedRation: | 502 case FX_UnsignedRation: |
| 503 case FX_SignedRation: { | 503 case FX_SignedRation: { |
| 504 dwSize = dwModuleNum << 3; | 504 dwSize = dwModuleNum << 3; |
| 505 buf = FX_Alloc(FX_BYTE, dwSize); | 505 buf = FX_Alloc(uint8_t, dwSize); |
| 506 if (buf == NULL) { | 506 if (buf == NULL) { |
| 507 return FALSE; | 507 return FALSE; |
| 508 } | 508 } |
| 509 if (dwSize > 4) { | 509 if (dwSize > 4) { |
| 510 FXSYS_memcpy32(buf, old_data + m_readDword(h
ead), dwSize); | 510 FXSYS_memcpy32(buf, old_data + m_readDword(h
ead), dwSize); |
| 511 } else { | 511 } else { |
| 512 FXSYS_memcpy32(buf, head, dwSize); | 512 FXSYS_memcpy32(buf, head, dwSize); |
| 513 } | 513 } |
| 514 temp = buf; | 514 temp = buf; |
| 515 val = FX_Alloc(FX_BYTE, dwSize / 2); | 515 val = FX_Alloc(uint8_t, dwSize / 2); |
| 516 if (val == NULL) { | 516 if (val == NULL) { |
| 517 FX_Free(buf); | 517 FX_Free(buf); |
| 518 return FALSE; | 518 return FALSE; |
| 519 } | 519 } |
| 520 for(i = 0; i < (int)dwModuleNum; i ++) { | 520 for(i = 0; i < (int)dwModuleNum; i ++) { |
| 521 *(FX_DWORD*)temp = m_readDword(temp); | 521 *(FX_DWORD*)temp = m_readDword(temp); |
| 522 *(FX_DWORD*)(temp + 4) = m_readDword(temp +
4); | 522 *(FX_DWORD*)(temp + 4) = m_readDword(temp +
4); |
| 523 FX_DWORD* lNumerator = (FX_DWORD*)temp; | 523 FX_DWORD* lNumerator = (FX_DWORD*)temp; |
| 524 FX_DWORD* lNenominator = (FX_DWORD*)(temp +
4); | 524 FX_DWORD* lNenominator = (FX_DWORD*)(temp +
4); |
| 525 *(FX_FLOAT*)(val + i * 4) = (FX_FLOAT)(*lNum
erator) / (FX_FLOAT)(*lNenominator); | 525 *(FX_FLOAT*)(val + i * 4) = (FX_FLOAT)(*lNum
erator) / (FX_FLOAT)(*lNenominator); |
| 526 temp += 8; | 526 temp += 8; |
| 527 } | 527 } |
| 528 FX_Free(buf); | 528 FX_Free(buf); |
| 529 } | 529 } |
| 530 break; | 530 break; |
| 531 case FX_DoubleFloat: | 531 case FX_DoubleFloat: |
| 532 dwSize = dwModuleNum << 3; | 532 dwSize = dwModuleNum << 3; |
| 533 val = FX_Alloc(FX_BYTE, dwSize); | 533 val = FX_Alloc(uint8_t, dwSize); |
| 534 if (val == NULL) { | 534 if (val == NULL) { |
| 535 return FALSE; | 535 return FALSE; |
| 536 } | 536 } |
| 537 if (dwSize > 4) { | 537 if (dwSize > 4) { |
| 538 FXSYS_memcpy32(val, old_data + m_readDword(head)
, dwSize); | 538 FXSYS_memcpy32(val, old_data + m_readDword(head)
, dwSize); |
| 539 } else { | 539 } else { |
| 540 FXSYS_memcpy32(val, head, dwSize); | 540 FXSYS_memcpy32(val, head, dwSize); |
| 541 } | 541 } |
| 542 buf = val; | 542 buf = val; |
| 543 for(i = 0; i < (int)dwModuleNum; i ++) { | 543 for(i = 0; i < (int)dwModuleNum; i ++) { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 virtual void v_DownScale(int dest_width, int dest_height) {} | 599 virtual void v_DownScale(int dest_width, int dest_height) {} |
| 600 virtual FX_BOOL v_Rewind(); | 600 virtual FX_BOOL v_Rewind(); |
| 601 virtual FX_LPBYTE v_GetNextLine(); | 601 virtual FX_LPBYTE v_GetNextLine(); |
| 602 virtual FX_DWORD GetSrcOffset() | 602 virtual FX_DWORD GetSrcOffset() |
| 603 { | 603 { |
| 604 return m_SrcOffset; | 604 return m_SrcOffset; |
| 605 } | 605 } |
| 606 protected: | 606 protected: |
| 607 FX_BOOL CheckDestSize(); | 607 FX_BOOL CheckDestSize(); |
| 608 void GetNextOperator(); | 608 void GetNextOperator(); |
| 609 void» » » » UpdateOperator(FX_BYTE used_bytes); | 609 void» » » » UpdateOperator(uint8_t used_bytes); |
| 610 | 610 |
| 611 FX_LPBYTE m_pScanline; | 611 FX_LPBYTE m_pScanline; |
| 612 FX_LPCBYTE m_pSrcBuf; | 612 FX_LPCBYTE m_pSrcBuf; |
| 613 FX_DWORD m_SrcSize; | 613 FX_DWORD m_SrcSize; |
| 614 FX_DWORD m_dwLineBytes; | 614 FX_DWORD m_dwLineBytes; |
| 615 FX_DWORD m_SrcOffset; | 615 FX_DWORD m_SrcOffset; |
| 616 FX_BOOL m_bEOD; | 616 FX_BOOL m_bEOD; |
| 617 FX_BYTE» » » » m_Operator; | 617 uint8_t» » » » m_Operator; |
| 618 }; | 618 }; |
| 619 CCodec_RLScanlineDecoder::CCodec_RLScanlineDecoder() | 619 CCodec_RLScanlineDecoder::CCodec_RLScanlineDecoder() |
| 620 : m_pScanline(NULL) | 620 : m_pScanline(NULL) |
| 621 , m_pSrcBuf(NULL) | 621 , m_pSrcBuf(NULL) |
| 622 , m_SrcSize(0) | 622 , m_SrcSize(0) |
| 623 , m_dwLineBytes(0) | 623 , m_dwLineBytes(0) |
| 624 , m_SrcOffset(0) | 624 , m_SrcOffset(0) |
| 625 , m_bEOD(FALSE) | 625 , m_bEOD(FALSE) |
| 626 , m_Operator(0) | 626 , m_Operator(0) |
| 627 { | 627 { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 666 m_pSrcBuf = src_buf; | 666 m_pSrcBuf = src_buf; |
| 667 m_SrcSize = src_size; | 667 m_SrcSize = src_size; |
| 668 m_OutputWidth = m_OrigWidth = width; | 668 m_OutputWidth = m_OrigWidth = width; |
| 669 m_OutputHeight = m_OrigHeight = height; | 669 m_OutputHeight = m_OrigHeight = height; |
| 670 m_nComps = nComps; | 670 m_nComps = nComps; |
| 671 m_bpc = bpc; | 671 m_bpc = bpc; |
| 672 m_bColorTransformed = FALSE; | 672 m_bColorTransformed = FALSE; |
| 673 m_DownScale = 1; | 673 m_DownScale = 1; |
| 674 m_Pitch = (width * nComps * bpc + 31) / 32 * 4; | 674 m_Pitch = (width * nComps * bpc + 31) / 32 * 4; |
| 675 m_dwLineBytes = (width * nComps * bpc + 7) / 8; | 675 m_dwLineBytes = (width * nComps * bpc + 7) / 8; |
| 676 m_pScanline = FX_Alloc(FX_BYTE, m_Pitch); | 676 m_pScanline = FX_Alloc(uint8_t, m_Pitch); |
| 677 return CheckDestSize(); | 677 return CheckDestSize(); |
| 678 } | 678 } |
| 679 FX_BOOL CCodec_RLScanlineDecoder::v_Rewind() | 679 FX_BOOL CCodec_RLScanlineDecoder::v_Rewind() |
| 680 { | 680 { |
| 681 FXSYS_memset32(m_pScanline, 0, m_Pitch); | 681 FXSYS_memset32(m_pScanline, 0, m_Pitch); |
| 682 m_SrcOffset = 0; | 682 m_SrcOffset = 0; |
| 683 m_bEOD = FALSE; | 683 m_bEOD = FALSE; |
| 684 m_Operator = 0; | 684 m_Operator = 0; |
| 685 return TRUE; | 685 return TRUE; |
| 686 } | 686 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 702 if (col_pos + copy_len >= m_dwLineBytes) { | 702 if (col_pos + copy_len >= m_dwLineBytes) { |
| 703 copy_len = m_dwLineBytes - col_pos; | 703 copy_len = m_dwLineBytes - col_pos; |
| 704 eol = TRUE; | 704 eol = TRUE; |
| 705 } | 705 } |
| 706 if (copy_len >= m_SrcSize - m_SrcOffset) { | 706 if (copy_len >= m_SrcSize - m_SrcOffset) { |
| 707 copy_len = m_SrcSize - m_SrcOffset; | 707 copy_len = m_SrcSize - m_SrcOffset; |
| 708 m_bEOD = TRUE; | 708 m_bEOD = TRUE; |
| 709 } | 709 } |
| 710 FXSYS_memcpy32(m_pScanline + col_pos, m_pSrcBuf + m_SrcOffset, copy_
len); | 710 FXSYS_memcpy32(m_pScanline + col_pos, m_pSrcBuf + m_SrcOffset, copy_
len); |
| 711 col_pos += copy_len; | 711 col_pos += copy_len; |
| 712 UpdateOperator((FX_BYTE)copy_len); | 712 UpdateOperator((uint8_t)copy_len); |
| 713 } else if (m_Operator > 128) { | 713 } else if (m_Operator > 128) { |
| 714 int fill = 0; | 714 int fill = 0; |
| 715 if (m_SrcOffset - 1 < m_SrcSize - 1) { | 715 if (m_SrcOffset - 1 < m_SrcSize - 1) { |
| 716 fill = m_pSrcBuf[m_SrcOffset]; | 716 fill = m_pSrcBuf[m_SrcOffset]; |
| 717 } | 717 } |
| 718 FX_DWORD duplicate_len = 257 - m_Operator; | 718 FX_DWORD duplicate_len = 257 - m_Operator; |
| 719 if (col_pos + duplicate_len >= m_dwLineBytes) { | 719 if (col_pos + duplicate_len >= m_dwLineBytes) { |
| 720 duplicate_len = m_dwLineBytes - col_pos; | 720 duplicate_len = m_dwLineBytes - col_pos; |
| 721 eol = TRUE; | 721 eol = TRUE; |
| 722 } | 722 } |
| 723 FXSYS_memset8(m_pScanline + col_pos, fill, duplicate_len); | 723 FXSYS_memset8(m_pScanline + col_pos, fill, duplicate_len); |
| 724 col_pos += duplicate_len; | 724 col_pos += duplicate_len; |
| 725 UpdateOperator((FX_BYTE)duplicate_len); | 725 UpdateOperator((uint8_t)duplicate_len); |
| 726 } else { | 726 } else { |
| 727 m_bEOD = TRUE; | 727 m_bEOD = TRUE; |
| 728 break; | 728 break; |
| 729 } | 729 } |
| 730 } | 730 } |
| 731 return m_pScanline; | 731 return m_pScanline; |
| 732 } | 732 } |
| 733 void CCodec_RLScanlineDecoder::GetNextOperator() | 733 void CCodec_RLScanlineDecoder::GetNextOperator() |
| 734 { | 734 { |
| 735 if (m_SrcOffset >= m_SrcSize) { | 735 if (m_SrcOffset >= m_SrcSize) { |
| 736 m_Operator = 128; | 736 m_Operator = 128; |
| 737 return; | 737 return; |
| 738 } | 738 } |
| 739 m_Operator = m_pSrcBuf[m_SrcOffset]; | 739 m_Operator = m_pSrcBuf[m_SrcOffset]; |
| 740 m_SrcOffset ++; | 740 m_SrcOffset ++; |
| 741 } | 741 } |
| 742 void CCodec_RLScanlineDecoder::UpdateOperator(FX_BYTE used_bytes) | 742 void CCodec_RLScanlineDecoder::UpdateOperator(uint8_t used_bytes) |
| 743 { | 743 { |
| 744 if (used_bytes == 0) { | 744 if (used_bytes == 0) { |
| 745 return; | 745 return; |
| 746 } | 746 } |
| 747 if (m_Operator < 128) { | 747 if (m_Operator < 128) { |
| 748 FXSYS_assert((FX_DWORD)m_Operator + 1 >= used_bytes); | 748 FXSYS_assert((FX_DWORD)m_Operator + 1 >= used_bytes); |
| 749 if (used_bytes == m_Operator + 1) { | 749 if (used_bytes == m_Operator + 1) { |
| 750 m_SrcOffset += used_bytes; | 750 m_SrcOffset += used_bytes; |
| 751 GetNextOperator(); | 751 GetNextOperator(); |
| 752 return; | 752 return; |
| 753 } | 753 } |
| 754 m_Operator -= used_bytes; | 754 m_Operator -= used_bytes; |
| 755 m_SrcOffset += used_bytes; | 755 m_SrcOffset += used_bytes; |
| 756 if (m_SrcOffset >= m_SrcSize) { | 756 if (m_SrcOffset >= m_SrcSize) { |
| 757 m_Operator = 128; | 757 m_Operator = 128; |
| 758 } | 758 } |
| 759 return; | 759 return; |
| 760 } | 760 } |
| 761 FX_BYTE count = 257 - m_Operator; | 761 uint8_t count = 257 - m_Operator; |
| 762 FXSYS_assert((FX_DWORD)count >= used_bytes); | 762 FXSYS_assert((FX_DWORD)count >= used_bytes); |
| 763 if (used_bytes == count) { | 763 if (used_bytes == count) { |
| 764 m_SrcOffset ++; | 764 m_SrcOffset ++; |
| 765 GetNextOperator(); | 765 GetNextOperator(); |
| 766 return; | 766 return; |
| 767 } | 767 } |
| 768 count -= used_bytes; | 768 count -= used_bytes; |
| 769 m_Operator = 257 - count; | 769 m_Operator = 257 - count; |
| 770 } | 770 } |
| 771 ICodec_ScanlineDecoder* CCodec_BasicModule::CreateRunLengthDecoder(FX_LPCBYTE sr
c_buf, FX_DWORD src_size, int width, int height, | 771 ICodec_ScanlineDecoder* CCodec_BasicModule::CreateRunLengthDecoder(FX_LPCBYTE sr
c_buf, FX_DWORD src_size, int width, int height, |
| 772 int nComps, int bpc) | 772 int nComps, int bpc) |
| 773 { | 773 { |
| 774 CCodec_RLScanlineDecoder* pRLScanlineDecoder = new CCodec_RLScanlineDecoder; | 774 CCodec_RLScanlineDecoder* pRLScanlineDecoder = new CCodec_RLScanlineDecoder; |
| 775 if (!pRLScanlineDecoder->Create(src_buf, src_size, width, height, nComps, bp
c)) { | 775 if (!pRLScanlineDecoder->Create(src_buf, src_size, width, height, nComps, bp
c)) { |
| 776 delete pRLScanlineDecoder; | 776 delete pRLScanlineDecoder; |
| 777 return NULL; | 777 return NULL; |
| 778 } | 778 } |
| 779 return pRLScanlineDecoder; | 779 return pRLScanlineDecoder; |
| 780 } | 780 } |
| OLD | NEW |