| 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 "core/fxcodec/codec/fx_codec_progress.h" | 7 #include "core/fxcodec/codec/fx_codec_progress.h" |
| 8 | 8 |
| 9 #include "core/include/fxcodec/fx_codec.h" | 9 #include "core/include/fxcodec/fx_codec.h" |
| 10 #include "core/include/fxge/fx_dib.h" | 10 #include "core/include/fxge/fx_dib.h" |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 if (m_pTiffContext) { | 289 if (m_pTiffContext) { |
| 290 m_pCodecMgr->GetTiffModule()->DestroyDecoder(m_pTiffContext); | 290 m_pCodecMgr->GetTiffModule()->DestroyDecoder(m_pTiffContext); |
| 291 } | 291 } |
| 292 FX_Free(m_pSrcBuf); | 292 FX_Free(m_pSrcBuf); |
| 293 FX_Free(m_pDecodeBuf); | 293 FX_Free(m_pDecodeBuf); |
| 294 FX_Free(m_pSrcPalette); | 294 FX_Free(m_pSrcPalette); |
| 295 } | 295 } |
| 296 FX_BOOL CCodec_ProgressiveDecoder::JpegReadMoreData( | 296 FX_BOOL CCodec_ProgressiveDecoder::JpegReadMoreData( |
| 297 ICodec_JpegModule* pJpegModule, | 297 ICodec_JpegModule* pJpegModule, |
| 298 FXCODEC_STATUS& err_status) { | 298 FXCODEC_STATUS& err_status) { |
| 299 FX_DWORD dwSize = (FX_DWORD)m_pFile->GetSize(); | 299 uint32_t dwSize = (uint32_t)m_pFile->GetSize(); |
| 300 if (dwSize <= m_offSet) { | 300 if (dwSize <= m_offSet) { |
| 301 return FALSE; | 301 return FALSE; |
| 302 } | 302 } |
| 303 dwSize = dwSize - m_offSet; | 303 dwSize = dwSize - m_offSet; |
| 304 FX_DWORD dwAvail = pJpegModule->GetAvailInput(m_pJpegContext, NULL); | 304 uint32_t dwAvail = pJpegModule->GetAvailInput(m_pJpegContext, NULL); |
| 305 if (dwAvail == m_SrcSize) { | 305 if (dwAvail == m_SrcSize) { |
| 306 if (dwSize > FXCODEC_BLOCK_SIZE) { | 306 if (dwSize > FXCODEC_BLOCK_SIZE) { |
| 307 dwSize = FXCODEC_BLOCK_SIZE; | 307 dwSize = FXCODEC_BLOCK_SIZE; |
| 308 } | 308 } |
| 309 m_SrcSize = (dwSize + dwAvail + FXCODEC_BLOCK_SIZE - 1) / | 309 m_SrcSize = (dwSize + dwAvail + FXCODEC_BLOCK_SIZE - 1) / |
| 310 FXCODEC_BLOCK_SIZE * FXCODEC_BLOCK_SIZE; | 310 FXCODEC_BLOCK_SIZE * FXCODEC_BLOCK_SIZE; |
| 311 m_pSrcBuf = FX_Realloc(uint8_t, m_pSrcBuf, m_SrcSize); | 311 m_pSrcBuf = FX_Realloc(uint8_t, m_pSrcBuf, m_SrcSize); |
| 312 if (!m_pSrcBuf) { | 312 if (!m_pSrcBuf) { |
| 313 err_status = FXCODEC_STATUS_ERR_MEMORY; | 313 err_status = FXCODEC_STATUS_ERR_MEMORY; |
| 314 return FALSE; | 314 return FALSE; |
| 315 } | 315 } |
| 316 } else { | 316 } else { |
| 317 FX_DWORD dwConsume = m_SrcSize - dwAvail; | 317 uint32_t dwConsume = m_SrcSize - dwAvail; |
| 318 if (dwAvail) { | 318 if (dwAvail) { |
| 319 FXSYS_memcpy(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); | 319 FXSYS_memcpy(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); |
| 320 } | 320 } |
| 321 if (dwSize > dwConsume) { | 321 if (dwSize > dwConsume) { |
| 322 dwSize = dwConsume; | 322 dwSize = dwConsume; |
| 323 } | 323 } |
| 324 } | 324 } |
| 325 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { | 325 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { |
| 326 err_status = FXCODEC_STATUS_ERR_READ; | 326 err_status = FXCODEC_STATUS_ERR_READ; |
| 327 return FALSE; | 327 return FALSE; |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 switch (pDIBitmap->GetFormat()) { | 410 switch (pDIBitmap->GetFormat()) { |
| 411 case FXDIB_1bppMask: | 411 case FXDIB_1bppMask: |
| 412 case FXDIB_1bppRgb: | 412 case FXDIB_1bppRgb: |
| 413 ASSERT(FALSE); | 413 ASSERT(FALSE); |
| 414 return FALSE; | 414 return FALSE; |
| 415 case FXDIB_8bppMask: | 415 case FXDIB_8bppMask: |
| 416 case FXDIB_8bppRgb: { | 416 case FXDIB_8bppRgb: { |
| 417 if (pDIBitmap->GetPalette()) { | 417 if (pDIBitmap->GetPalette()) { |
| 418 return FALSE; | 418 return FALSE; |
| 419 } | 419 } |
| 420 FX_DWORD des_g = 0; | 420 uint32_t des_g = 0; |
| 421 des_g += pPixelWeights->m_Weights[0] * src_scan[src_col]; | 421 des_g += pPixelWeights->m_Weights[0] * src_scan[src_col]; |
| 422 des_scan[pPixelWeights->m_SrcStart] = (uint8_t)(des_g >> 16); | 422 des_scan[pPixelWeights->m_SrcStart] = (uint8_t)(des_g >> 16); |
| 423 } break; | 423 } break; |
| 424 case FXDIB_Rgb: | 424 case FXDIB_Rgb: |
| 425 case FXDIB_Rgb32: { | 425 case FXDIB_Rgb32: { |
| 426 FX_DWORD des_b = 0, des_g = 0, des_r = 0; | 426 uint32_t des_b = 0, des_g = 0, des_r = 0; |
| 427 const uint8_t* p = src_scan + src_col * src_Bpp; | 427 const uint8_t* p = src_scan + src_col * src_Bpp; |
| 428 des_b += pPixelWeights->m_Weights[0] * (*p++); | 428 des_b += pPixelWeights->m_Weights[0] * (*p++); |
| 429 des_g += pPixelWeights->m_Weights[0] * (*p++); | 429 des_g += pPixelWeights->m_Weights[0] * (*p++); |
| 430 des_r += pPixelWeights->m_Weights[0] * (*p); | 430 des_r += pPixelWeights->m_Weights[0] * (*p); |
| 431 uint8_t* pDes = &des_scan[pPixelWeights->m_SrcStart * des_Bpp]; | 431 uint8_t* pDes = &des_scan[pPixelWeights->m_SrcStart * des_Bpp]; |
| 432 *pDes++ = (uint8_t)((des_b) >> 16); | 432 *pDes++ = (uint8_t)((des_b) >> 16); |
| 433 *pDes++ = (uint8_t)((des_g) >> 16); | 433 *pDes++ = (uint8_t)((des_g) >> 16); |
| 434 *pDes = (uint8_t)((des_r) >> 16); | 434 *pDes = (uint8_t)((des_r) >> 16); |
| 435 } break; | 435 } break; |
| 436 case FXDIB_Argb: { | 436 case FXDIB_Argb: { |
| 437 FX_DWORD des_r = 0, des_g = 0, des_b = 0; | 437 uint32_t des_r = 0, des_g = 0, des_b = 0; |
| 438 const uint8_t* p = src_scan + src_col * src_Bpp; | 438 const uint8_t* p = src_scan + src_col * src_Bpp; |
| 439 des_b += pPixelWeights->m_Weights[0] * (*p++); | 439 des_b += pPixelWeights->m_Weights[0] * (*p++); |
| 440 des_g += pPixelWeights->m_Weights[0] * (*p++); | 440 des_g += pPixelWeights->m_Weights[0] * (*p++); |
| 441 des_r += pPixelWeights->m_Weights[0] * (*p++); | 441 des_r += pPixelWeights->m_Weights[0] * (*p++); |
| 442 uint8_t* pDes = &des_scan[pPixelWeights->m_SrcStart * des_Bpp]; | 442 uint8_t* pDes = &des_scan[pPixelWeights->m_SrcStart * des_Bpp]; |
| 443 *pDes++ = (uint8_t)((des_b) >> 16); | 443 *pDes++ = (uint8_t)((des_b) >> 16); |
| 444 *pDes++ = (uint8_t)((des_g) >> 16); | 444 *pDes++ = (uint8_t)((des_g) >> 16); |
| 445 *pDes++ = (uint8_t)((des_r) >> 16); | 445 *pDes++ = (uint8_t)((des_r) >> 16); |
| 446 *pDes = *p; | 446 *pDes = *p; |
| 447 } break; | 447 } break; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 469 switch (pDeviceBitmap->GetFormat()) { | 469 switch (pDeviceBitmap->GetFormat()) { |
| 470 case FXDIB_1bppMask: | 470 case FXDIB_1bppMask: |
| 471 case FXDIB_1bppRgb: | 471 case FXDIB_1bppRgb: |
| 472 ASSERT(FALSE); | 472 ASSERT(FALSE); |
| 473 return; | 473 return; |
| 474 case FXDIB_8bppMask: | 474 case FXDIB_8bppMask: |
| 475 case FXDIB_8bppRgb: { | 475 case FXDIB_8bppRgb: { |
| 476 if (pDeviceBitmap->GetPalette()) { | 476 if (pDeviceBitmap->GetPalette()) { |
| 477 return; | 477 return; |
| 478 } | 478 } |
| 479 FX_DWORD des_g = 0; | 479 uint32_t des_g = 0; |
| 480 des_g += | 480 des_g += |
| 481 pPixelWeights->m_Weights[0] * src_scan[pPixelWeights->m_SrcStart]; | 481 pPixelWeights->m_Weights[0] * src_scan[pPixelWeights->m_SrcStart]; |
| 482 des_g += | 482 des_g += |
| 483 pPixelWeights->m_Weights[1] * src_scan[pPixelWeights->m_SrcEnd]; | 483 pPixelWeights->m_Weights[1] * src_scan[pPixelWeights->m_SrcEnd]; |
| 484 *des_scan++ = (uint8_t)(des_g >> 16); | 484 *des_scan++ = (uint8_t)(des_g >> 16); |
| 485 } break; | 485 } break; |
| 486 case FXDIB_Rgb: | 486 case FXDIB_Rgb: |
| 487 case FXDIB_Rgb32: { | 487 case FXDIB_Rgb32: { |
| 488 FX_DWORD des_b = 0, des_g = 0, des_r = 0; | 488 uint32_t des_b = 0, des_g = 0, des_r = 0; |
| 489 const uint8_t* p = src_scan; | 489 const uint8_t* p = src_scan; |
| 490 p = src_scan + pPixelWeights->m_SrcStart * src_Bpp; | 490 p = src_scan + pPixelWeights->m_SrcStart * src_Bpp; |
| 491 des_b += pPixelWeights->m_Weights[0] * (*p++); | 491 des_b += pPixelWeights->m_Weights[0] * (*p++); |
| 492 des_g += pPixelWeights->m_Weights[0] * (*p++); | 492 des_g += pPixelWeights->m_Weights[0] * (*p++); |
| 493 des_r += pPixelWeights->m_Weights[0] * (*p); | 493 des_r += pPixelWeights->m_Weights[0] * (*p); |
| 494 p = src_scan + pPixelWeights->m_SrcEnd * src_Bpp; | 494 p = src_scan + pPixelWeights->m_SrcEnd * src_Bpp; |
| 495 des_b += pPixelWeights->m_Weights[1] * (*p++); | 495 des_b += pPixelWeights->m_Weights[1] * (*p++); |
| 496 des_g += pPixelWeights->m_Weights[1] * (*p++); | 496 des_g += pPixelWeights->m_Weights[1] * (*p++); |
| 497 des_r += pPixelWeights->m_Weights[1] * (*p); | 497 des_r += pPixelWeights->m_Weights[1] * (*p); |
| 498 *des_scan++ = (uint8_t)((des_b) >> 16); | 498 *des_scan++ = (uint8_t)((des_b) >> 16); |
| 499 *des_scan++ = (uint8_t)((des_g) >> 16); | 499 *des_scan++ = (uint8_t)((des_g) >> 16); |
| 500 *des_scan++ = (uint8_t)((des_r) >> 16); | 500 *des_scan++ = (uint8_t)((des_r) >> 16); |
| 501 des_scan += des_Bpp - 3; | 501 des_scan += des_Bpp - 3; |
| 502 } break; | 502 } break; |
| 503 case FXDIB_Argb: { | 503 case FXDIB_Argb: { |
| 504 FX_DWORD des_a = 0, des_b = 0, des_g = 0, des_r = 0; | 504 uint32_t des_a = 0, des_b = 0, des_g = 0, des_r = 0; |
| 505 const uint8_t* p = src_scan; | 505 const uint8_t* p = src_scan; |
| 506 p = src_scan + pPixelWeights->m_SrcStart * src_Bpp; | 506 p = src_scan + pPixelWeights->m_SrcStart * src_Bpp; |
| 507 des_b += pPixelWeights->m_Weights[0] * (*p++); | 507 des_b += pPixelWeights->m_Weights[0] * (*p++); |
| 508 des_g += pPixelWeights->m_Weights[0] * (*p++); | 508 des_g += pPixelWeights->m_Weights[0] * (*p++); |
| 509 des_r += pPixelWeights->m_Weights[0] * (*p++); | 509 des_r += pPixelWeights->m_Weights[0] * (*p++); |
| 510 des_a += pPixelWeights->m_Weights[0] * (*p); | 510 des_a += pPixelWeights->m_Weights[0] * (*p); |
| 511 p = src_scan + pPixelWeights->m_SrcEnd * src_Bpp; | 511 p = src_scan + pPixelWeights->m_SrcEnd * src_Bpp; |
| 512 des_b += pPixelWeights->m_Weights[1] * (*p++); | 512 des_b += pPixelWeights->m_Weights[1] * (*p++); |
| 513 des_g += pPixelWeights->m_Weights[1] * (*p++); | 513 des_g += pPixelWeights->m_Weights[1] * (*p++); |
| 514 des_r += pPixelWeights->m_Weights[1] * (*p++); | 514 des_r += pPixelWeights->m_Weights[1] * (*p++); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 547 pCodec->ResampleVert(pDIBitmap, scale_y, des_row); | 547 pCodec->ResampleVert(pDIBitmap, scale_y, des_row); |
| 548 return; | 548 return; |
| 549 } | 549 } |
| 550 if (pass == 6 && scale_y > 1.0) { | 550 if (pass == 6 && scale_y > 1.0) { |
| 551 pCodec->ResampleVert(pDIBitmap, scale_y, des_row); | 551 pCodec->ResampleVert(pDIBitmap, scale_y, des_row); |
| 552 } | 552 } |
| 553 } | 553 } |
| 554 } | 554 } |
| 555 FX_BOOL CCodec_ProgressiveDecoder::GifReadMoreData(ICodec_GifModule* pGifModule, | 555 FX_BOOL CCodec_ProgressiveDecoder::GifReadMoreData(ICodec_GifModule* pGifModule, |
| 556 FXCODEC_STATUS& err_status) { | 556 FXCODEC_STATUS& err_status) { |
| 557 FX_DWORD dwSize = (FX_DWORD)m_pFile->GetSize(); | 557 uint32_t dwSize = (uint32_t)m_pFile->GetSize(); |
| 558 if (dwSize <= m_offSet) { | 558 if (dwSize <= m_offSet) { |
| 559 return FALSE; | 559 return FALSE; |
| 560 } | 560 } |
| 561 dwSize = dwSize - m_offSet; | 561 dwSize = dwSize - m_offSet; |
| 562 FX_DWORD dwAvail = pGifModule->GetAvailInput(m_pGifContext, NULL); | 562 uint32_t dwAvail = pGifModule->GetAvailInput(m_pGifContext, NULL); |
| 563 if (dwAvail == m_SrcSize) { | 563 if (dwAvail == m_SrcSize) { |
| 564 if (dwSize > FXCODEC_BLOCK_SIZE) { | 564 if (dwSize > FXCODEC_BLOCK_SIZE) { |
| 565 dwSize = FXCODEC_BLOCK_SIZE; | 565 dwSize = FXCODEC_BLOCK_SIZE; |
| 566 } | 566 } |
| 567 m_SrcSize = (dwSize + dwAvail + FXCODEC_BLOCK_SIZE - 1) / | 567 m_SrcSize = (dwSize + dwAvail + FXCODEC_BLOCK_SIZE - 1) / |
| 568 FXCODEC_BLOCK_SIZE * FXCODEC_BLOCK_SIZE; | 568 FXCODEC_BLOCK_SIZE * FXCODEC_BLOCK_SIZE; |
| 569 m_pSrcBuf = FX_Realloc(uint8_t, m_pSrcBuf, m_SrcSize); | 569 m_pSrcBuf = FX_Realloc(uint8_t, m_pSrcBuf, m_SrcSize); |
| 570 if (!m_pSrcBuf) { | 570 if (!m_pSrcBuf) { |
| 571 err_status = FXCODEC_STATUS_ERR_MEMORY; | 571 err_status = FXCODEC_STATUS_ERR_MEMORY; |
| 572 return FALSE; | 572 return FALSE; |
| 573 } | 573 } |
| 574 } else { | 574 } else { |
| 575 FX_DWORD dwConsume = m_SrcSize - dwAvail; | 575 uint32_t dwConsume = m_SrcSize - dwAvail; |
| 576 if (dwAvail) { | 576 if (dwAvail) { |
| 577 FXSYS_memcpy(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); | 577 FXSYS_memcpy(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); |
| 578 } | 578 } |
| 579 if (dwSize > dwConsume) { | 579 if (dwSize > dwConsume) { |
| 580 dwSize = dwConsume; | 580 dwSize = dwConsume; |
| 581 } | 581 } |
| 582 } | 582 } |
| 583 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { | 583 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { |
| 584 err_status = FXCODEC_STATUS_ERR_READ; | 584 err_status = FXCODEC_STATUS_ERR_READ; |
| 585 return FALSE; | 585 return FALSE; |
| 586 } | 586 } |
| 587 m_offSet += dwSize; | 587 m_offSet += dwSize; |
| 588 pGifModule->Input(m_pGifContext, m_pSrcBuf, dwSize + dwAvail); | 588 pGifModule->Input(m_pGifContext, m_pSrcBuf, dwSize + dwAvail); |
| 589 return TRUE; | 589 return TRUE; |
| 590 } | 590 } |
| 591 void CCodec_ProgressiveDecoder::GifRecordCurrentPositionCallback( | 591 void CCodec_ProgressiveDecoder::GifRecordCurrentPositionCallback( |
| 592 void* pModule, | 592 void* pModule, |
| 593 FX_DWORD& cur_pos) { | 593 uint32_t& cur_pos) { |
| 594 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; | 594 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; |
| 595 FX_DWORD remain_size = | 595 uint32_t remain_size = |
| 596 pCodec->m_pCodecMgr->GetGifModule()->GetAvailInput(pCodec->m_pGifContext); | 596 pCodec->m_pCodecMgr->GetGifModule()->GetAvailInput(pCodec->m_pGifContext); |
| 597 cur_pos = pCodec->m_offSet - remain_size; | 597 cur_pos = pCodec->m_offSet - remain_size; |
| 598 } | 598 } |
| 599 uint8_t* CCodec_ProgressiveDecoder::GifAskLocalPaletteBufCallback( | 599 uint8_t* CCodec_ProgressiveDecoder::GifAskLocalPaletteBufCallback( |
| 600 void* pModule, | 600 void* pModule, |
| 601 int32_t frame_num, | 601 int32_t frame_num, |
| 602 int32_t pal_size) { | 602 int32_t pal_size) { |
| 603 return FX_Alloc(uint8_t, pal_size); | 603 return FX_Alloc(uint8_t, pal_size); |
| 604 } | 604 } |
| 605 FX_BOOL CCodec_ProgressiveDecoder::GifInputRecordPositionBufCallback( | 605 FX_BOOL CCodec_ProgressiveDecoder::GifInputRecordPositionBufCallback( |
| 606 void* pModule, | 606 void* pModule, |
| 607 FX_DWORD rcd_pos, | 607 uint32_t rcd_pos, |
| 608 const FX_RECT& img_rc, | 608 const FX_RECT& img_rc, |
| 609 int32_t pal_num, | 609 int32_t pal_num, |
| 610 void* pal_ptr, | 610 void* pal_ptr, |
| 611 int32_t delay_time, | 611 int32_t delay_time, |
| 612 FX_BOOL user_input, | 612 FX_BOOL user_input, |
| 613 int32_t trans_index, | 613 int32_t trans_index, |
| 614 int32_t disposal_method, | 614 int32_t disposal_method, |
| 615 FX_BOOL interlace) { | 615 FX_BOOL interlace) { |
| 616 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; | 616 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; |
| 617 pCodec->m_offSet = rcd_pos; | 617 pCodec->m_offSet = rcd_pos; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 630 if (pCodec->m_pSrcPalette == NULL) { | 630 if (pCodec->m_pSrcPalette == NULL) { |
| 631 pCodec->m_pSrcPalette = FX_Alloc(FX_ARGB, pal_num); | 631 pCodec->m_pSrcPalette = FX_Alloc(FX_ARGB, pal_num); |
| 632 } else if (pal_num > pCodec->m_SrcPaletteNumber) { | 632 } else if (pal_num > pCodec->m_SrcPaletteNumber) { |
| 633 pCodec->m_pSrcPalette = FX_Realloc(FX_ARGB, pCodec->m_pSrcPalette, pal_num); | 633 pCodec->m_pSrcPalette = FX_Realloc(FX_ARGB, pCodec->m_pSrcPalette, pal_num); |
| 634 } | 634 } |
| 635 if (pCodec->m_pSrcPalette == NULL) { | 635 if (pCodec->m_pSrcPalette == NULL) { |
| 636 return FALSE; | 636 return FALSE; |
| 637 } | 637 } |
| 638 pCodec->m_SrcPaletteNumber = pal_num; | 638 pCodec->m_SrcPaletteNumber = pal_num; |
| 639 for (int i = 0; i < pal_num; i++) { | 639 for (int i = 0; i < pal_num; i++) { |
| 640 FX_DWORD j = i * 3; | 640 uint32_t j = i * 3; |
| 641 pCodec->m_pSrcPalette[i] = | 641 pCodec->m_pSrcPalette[i] = |
| 642 ArgbEncode(0xff, pPalette[j], pPalette[j + 1], pPalette[j + 2]); | 642 ArgbEncode(0xff, pPalette[j], pPalette[j + 1], pPalette[j + 2]); |
| 643 } | 643 } |
| 644 pCodec->m_GifTransIndex = trans_index; | 644 pCodec->m_GifTransIndex = trans_index; |
| 645 pCodec->m_GifFrameRect = img_rc; | 645 pCodec->m_GifFrameRect = img_rc; |
| 646 pCodec->m_SrcPassNumber = interlace ? 4 : 1; | 646 pCodec->m_SrcPassNumber = interlace ? 4 : 1; |
| 647 int32_t pal_index = pCodec->m_GifBgIndex; | 647 int32_t pal_index = pCodec->m_GifBgIndex; |
| 648 CFX_DIBitmap* pDevice = pCodec->m_pDeviceBitmap; | 648 CFX_DIBitmap* pDevice = pCodec->m_pDeviceBitmap; |
| 649 if (trans_index >= pal_num) { | 649 if (trans_index >= pal_num) { |
| 650 trans_index = -1; | 650 trans_index = -1; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 731 pCodec->ReSampleScanline(pDIBitmap, des_row, pCodec->m_pDecodeBuf, | 731 pCodec->ReSampleScanline(pDIBitmap, des_row, pCodec->m_pDecodeBuf, |
| 732 pCodec->m_SrcFormat); | 732 pCodec->m_SrcFormat); |
| 733 if (scale_y > 1.0 && | 733 if (scale_y > 1.0 && |
| 734 (!pCodec->m_bInterpol || pCodec->m_SrcPassNumber == 1)) { | 734 (!pCodec->m_bInterpol || pCodec->m_SrcPassNumber == 1)) { |
| 735 pCodec->ResampleVert(pDIBitmap, scale_y, des_row); | 735 pCodec->ResampleVert(pDIBitmap, scale_y, des_row); |
| 736 return; | 736 return; |
| 737 } | 737 } |
| 738 if (scale_y > 1.0) { | 738 if (scale_y > 1.0) { |
| 739 int des_bottom = des_top + pCodec->m_sizeY; | 739 int des_bottom = des_top + pCodec->m_sizeY; |
| 740 int des_Bpp = pDIBitmap->GetBPP() >> 3; | 740 int des_Bpp = pDIBitmap->GetBPP() >> 3; |
| 741 FX_DWORD des_ScanOffet = pCodec->m_startX * des_Bpp; | 741 uint32_t des_ScanOffet = pCodec->m_startX * des_Bpp; |
| 742 if (des_row + (int)scale_y >= des_bottom - 1) { | 742 if (des_row + (int)scale_y >= des_bottom - 1) { |
| 743 uint8_t* scan_src = | 743 uint8_t* scan_src = |
| 744 (uint8_t*)pDIBitmap->GetScanline(des_row) + des_ScanOffet; | 744 (uint8_t*)pDIBitmap->GetScanline(des_row) + des_ScanOffet; |
| 745 int cur_row = des_row; | 745 int cur_row = des_row; |
| 746 while (++cur_row < des_bottom) { | 746 while (++cur_row < des_bottom) { |
| 747 uint8_t* scan_des = | 747 uint8_t* scan_des = |
| 748 (uint8_t*)pDIBitmap->GetScanline(cur_row) + des_ScanOffet; | 748 (uint8_t*)pDIBitmap->GetScanline(cur_row) + des_ScanOffet; |
| 749 FX_DWORD size = pCodec->m_sizeX * des_Bpp; | 749 uint32_t size = pCodec->m_sizeX * des_Bpp; |
| 750 FXSYS_memcpy(scan_des, scan_src, size); | 750 FXSYS_memcpy(scan_des, scan_src, size); |
| 751 } | 751 } |
| 752 } | 752 } |
| 753 if (bLastPass) { | 753 if (bLastPass) { |
| 754 pCodec->GifDoubleLineResampleVert(pDIBitmap, scale_y, des_row); | 754 pCodec->GifDoubleLineResampleVert(pDIBitmap, scale_y, des_row); |
| 755 } | 755 } |
| 756 } | 756 } |
| 757 } | 757 } |
| 758 } | 758 } |
| 759 void CCodec_ProgressiveDecoder::GifDoubleLineResampleVert( | 759 void CCodec_ProgressiveDecoder::GifDoubleLineResampleVert( |
| 760 CFX_DIBitmap* pDeviceBitmap, | 760 CFX_DIBitmap* pDeviceBitmap, |
| 761 double scale_y, | 761 double scale_y, |
| 762 int des_row) { | 762 int des_row) { |
| 763 int des_Bpp = pDeviceBitmap->GetBPP() >> 3; | 763 int des_Bpp = pDeviceBitmap->GetBPP() >> 3; |
| 764 FX_DWORD des_ScanOffet = m_startX * des_Bpp; | 764 uint32_t des_ScanOffet = m_startX * des_Bpp; |
| 765 int des_top = m_startY; | 765 int des_top = m_startY; |
| 766 int des_row_1 = des_row - int(2 * scale_y); | 766 int des_row_1 = des_row - int(2 * scale_y); |
| 767 if (des_row_1 < des_top) { | 767 if (des_row_1 < des_top) { |
| 768 des_row_1 = des_top; | 768 des_row_1 = des_top; |
| 769 } | 769 } |
| 770 for (; des_row_1 < des_row; des_row_1++) { | 770 for (; des_row_1 < des_row; des_row_1++) { |
| 771 uint8_t* scan_des = | 771 uint8_t* scan_des = |
| 772 (uint8_t*)pDeviceBitmap->GetScanline(des_row_1) + des_ScanOffet; | 772 (uint8_t*)pDeviceBitmap->GetScanline(des_row_1) + des_ScanOffet; |
| 773 PixelWeight* pWeight = m_WeightVert.GetPixelWeight(des_row_1 - des_top); | 773 PixelWeight* pWeight = m_WeightVert.GetPixelWeight(des_row_1 - des_top); |
| 774 const uint8_t* scan_src1 = | 774 const uint8_t* scan_src1 = |
| (...skipping 12 matching lines...) Expand all Loading... |
| 787 if (pDeviceBitmap->GetPalette()) { | 787 if (pDeviceBitmap->GetPalette()) { |
| 788 return; | 788 return; |
| 789 } | 789 } |
| 790 int des_g = 0; | 790 int des_g = 0; |
| 791 des_g += pWeight->m_Weights[0] * (*scan_src1++); | 791 des_g += pWeight->m_Weights[0] * (*scan_src1++); |
| 792 des_g += pWeight->m_Weights[1] * (*scan_src2++); | 792 des_g += pWeight->m_Weights[1] * (*scan_src2++); |
| 793 *scan_des++ = (uint8_t)(des_g >> 16); | 793 *scan_des++ = (uint8_t)(des_g >> 16); |
| 794 } break; | 794 } break; |
| 795 case FXDIB_Rgb: | 795 case FXDIB_Rgb: |
| 796 case FXDIB_Rgb32: { | 796 case FXDIB_Rgb32: { |
| 797 FX_DWORD des_b = 0, des_g = 0, des_r = 0; | 797 uint32_t des_b = 0, des_g = 0, des_r = 0; |
| 798 des_b += pWeight->m_Weights[0] * (*scan_src1++); | 798 des_b += pWeight->m_Weights[0] * (*scan_src1++); |
| 799 des_g += pWeight->m_Weights[0] * (*scan_src1++); | 799 des_g += pWeight->m_Weights[0] * (*scan_src1++); |
| 800 des_r += pWeight->m_Weights[0] * (*scan_src1++); | 800 des_r += pWeight->m_Weights[0] * (*scan_src1++); |
| 801 scan_src1 += des_Bpp - 3; | 801 scan_src1 += des_Bpp - 3; |
| 802 des_b += pWeight->m_Weights[1] * (*scan_src2++); | 802 des_b += pWeight->m_Weights[1] * (*scan_src2++); |
| 803 des_g += pWeight->m_Weights[1] * (*scan_src2++); | 803 des_g += pWeight->m_Weights[1] * (*scan_src2++); |
| 804 des_r += pWeight->m_Weights[1] * (*scan_src2++); | 804 des_r += pWeight->m_Weights[1] * (*scan_src2++); |
| 805 scan_src2 += des_Bpp - 3; | 805 scan_src2 += des_Bpp - 3; |
| 806 *scan_des++ = (uint8_t)((des_b) >> 16); | 806 *scan_des++ = (uint8_t)((des_b) >> 16); |
| 807 *scan_des++ = (uint8_t)((des_g) >> 16); | 807 *scan_des++ = (uint8_t)((des_g) >> 16); |
| 808 *scan_des++ = (uint8_t)((des_r) >> 16); | 808 *scan_des++ = (uint8_t)((des_r) >> 16); |
| 809 scan_des += des_Bpp - 3; | 809 scan_des += des_Bpp - 3; |
| 810 } break; | 810 } break; |
| 811 case FXDIB_Argb: { | 811 case FXDIB_Argb: { |
| 812 FX_DWORD des_a = 0, des_b = 0, des_g = 0, des_r = 0; | 812 uint32_t des_a = 0, des_b = 0, des_g = 0, des_r = 0; |
| 813 des_b += pWeight->m_Weights[0] * (*scan_src1++); | 813 des_b += pWeight->m_Weights[0] * (*scan_src1++); |
| 814 des_g += pWeight->m_Weights[0] * (*scan_src1++); | 814 des_g += pWeight->m_Weights[0] * (*scan_src1++); |
| 815 des_r += pWeight->m_Weights[0] * (*scan_src1++); | 815 des_r += pWeight->m_Weights[0] * (*scan_src1++); |
| 816 des_a += pWeight->m_Weights[0] * (*scan_src1++); | 816 des_a += pWeight->m_Weights[0] * (*scan_src1++); |
| 817 des_b += pWeight->m_Weights[1] * (*scan_src2++); | 817 des_b += pWeight->m_Weights[1] * (*scan_src2++); |
| 818 des_g += pWeight->m_Weights[1] * (*scan_src2++); | 818 des_g += pWeight->m_Weights[1] * (*scan_src2++); |
| 819 des_r += pWeight->m_Weights[1] * (*scan_src2++); | 819 des_r += pWeight->m_Weights[1] * (*scan_src2++); |
| 820 des_a += pWeight->m_Weights[1] * (*scan_src2++); | 820 des_a += pWeight->m_Weights[1] * (*scan_src2++); |
| 821 *scan_des++ = (uint8_t)((des_b) >> 16); | 821 *scan_des++ = (uint8_t)((des_b) >> 16); |
| 822 *scan_des++ = (uint8_t)((des_g) >> 16); | 822 *scan_des++ = (uint8_t)((des_g) >> 16); |
| 823 *scan_des++ = (uint8_t)((des_r) >> 16); | 823 *scan_des++ = (uint8_t)((des_r) >> 16); |
| 824 *scan_des++ = (uint8_t)((des_a) >> 16); | 824 *scan_des++ = (uint8_t)((des_a) >> 16); |
| 825 } break; | 825 } break; |
| 826 default: | 826 default: |
| 827 return; | 827 return; |
| 828 } | 828 } |
| 829 } | 829 } |
| 830 } | 830 } |
| 831 int des_bottom = des_top + m_sizeY - 1; | 831 int des_bottom = des_top + m_sizeY - 1; |
| 832 if (des_row + (int)(2 * scale_y) >= des_bottom && | 832 if (des_row + (int)(2 * scale_y) >= des_bottom && |
| 833 des_row + (int)scale_y < des_bottom) { | 833 des_row + (int)scale_y < des_bottom) { |
| 834 GifDoubleLineResampleVert(pDeviceBitmap, scale_y, des_row + (int)scale_y); | 834 GifDoubleLineResampleVert(pDeviceBitmap, scale_y, des_row + (int)scale_y); |
| 835 } | 835 } |
| 836 } | 836 } |
| 837 FX_BOOL CCodec_ProgressiveDecoder::BmpReadMoreData(ICodec_BmpModule* pBmpModule, | 837 FX_BOOL CCodec_ProgressiveDecoder::BmpReadMoreData(ICodec_BmpModule* pBmpModule, |
| 838 FXCODEC_STATUS& err_status) { | 838 FXCODEC_STATUS& err_status) { |
| 839 FX_DWORD dwSize = (FX_DWORD)m_pFile->GetSize(); | 839 uint32_t dwSize = (uint32_t)m_pFile->GetSize(); |
| 840 if (dwSize <= m_offSet) { | 840 if (dwSize <= m_offSet) { |
| 841 return FALSE; | 841 return FALSE; |
| 842 } | 842 } |
| 843 dwSize = dwSize - m_offSet; | 843 dwSize = dwSize - m_offSet; |
| 844 FX_DWORD dwAvail = pBmpModule->GetAvailInput(m_pBmpContext, NULL); | 844 uint32_t dwAvail = pBmpModule->GetAvailInput(m_pBmpContext, NULL); |
| 845 if (dwAvail == m_SrcSize) { | 845 if (dwAvail == m_SrcSize) { |
| 846 if (dwSize > FXCODEC_BLOCK_SIZE) { | 846 if (dwSize > FXCODEC_BLOCK_SIZE) { |
| 847 dwSize = FXCODEC_BLOCK_SIZE; | 847 dwSize = FXCODEC_BLOCK_SIZE; |
| 848 } | 848 } |
| 849 m_SrcSize = (dwSize + dwAvail + FXCODEC_BLOCK_SIZE - 1) / | 849 m_SrcSize = (dwSize + dwAvail + FXCODEC_BLOCK_SIZE - 1) / |
| 850 FXCODEC_BLOCK_SIZE * FXCODEC_BLOCK_SIZE; | 850 FXCODEC_BLOCK_SIZE * FXCODEC_BLOCK_SIZE; |
| 851 m_pSrcBuf = FX_Realloc(uint8_t, m_pSrcBuf, m_SrcSize); | 851 m_pSrcBuf = FX_Realloc(uint8_t, m_pSrcBuf, m_SrcSize); |
| 852 if (!m_pSrcBuf) { | 852 if (!m_pSrcBuf) { |
| 853 err_status = FXCODEC_STATUS_ERR_MEMORY; | 853 err_status = FXCODEC_STATUS_ERR_MEMORY; |
| 854 return FALSE; | 854 return FALSE; |
| 855 } | 855 } |
| 856 } else { | 856 } else { |
| 857 FX_DWORD dwConsume = m_SrcSize - dwAvail; | 857 uint32_t dwConsume = m_SrcSize - dwAvail; |
| 858 if (dwAvail) { | 858 if (dwAvail) { |
| 859 FXSYS_memcpy(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); | 859 FXSYS_memcpy(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); |
| 860 } | 860 } |
| 861 if (dwSize > dwConsume) { | 861 if (dwSize > dwConsume) { |
| 862 dwSize = dwConsume; | 862 dwSize = dwConsume; |
| 863 } | 863 } |
| 864 } | 864 } |
| 865 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { | 865 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { |
| 866 err_status = FXCODEC_STATUS_ERR_READ; | 866 err_status = FXCODEC_STATUS_ERR_READ; |
| 867 return FALSE; | 867 return FALSE; |
| 868 } | 868 } |
| 869 m_offSet += dwSize; | 869 m_offSet += dwSize; |
| 870 pBmpModule->Input(m_pBmpContext, m_pSrcBuf, dwSize + dwAvail); | 870 pBmpModule->Input(m_pBmpContext, m_pSrcBuf, dwSize + dwAvail); |
| 871 return TRUE; | 871 return TRUE; |
| 872 } | 872 } |
| 873 FX_BOOL CCodec_ProgressiveDecoder::BmpInputImagePositionBufCallback( | 873 FX_BOOL CCodec_ProgressiveDecoder::BmpInputImagePositionBufCallback( |
| 874 void* pModule, | 874 void* pModule, |
| 875 FX_DWORD rcd_pos) { | 875 uint32_t rcd_pos) { |
| 876 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; | 876 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; |
| 877 pCodec->m_offSet = rcd_pos; | 877 pCodec->m_offSet = rcd_pos; |
| 878 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERROR; | 878 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERROR; |
| 879 if (!pCodec->BmpReadMoreData(pCodec->m_pCodecMgr->GetBmpModule(), | 879 if (!pCodec->BmpReadMoreData(pCodec->m_pCodecMgr->GetBmpModule(), |
| 880 error_status)) { | 880 error_status)) { |
| 881 return FALSE; | 881 return FALSE; |
| 882 } | 882 } |
| 883 return TRUE; | 883 return TRUE; |
| 884 } | 884 } |
| 885 void CCodec_ProgressiveDecoder::BmpReadScanlineCallback(void* pModule, | 885 void CCodec_ProgressiveDecoder::BmpReadScanlineCallback(void* pModule, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 910 } else { | 910 } else { |
| 911 pCodec->ResampleVertBT(pDIBitmap, scale_y, des_row); | 911 pCodec->ResampleVertBT(pDIBitmap, scale_y, des_row); |
| 912 } | 912 } |
| 913 } | 913 } |
| 914 } | 914 } |
| 915 } | 915 } |
| 916 void CCodec_ProgressiveDecoder::ResampleVertBT(CFX_DIBitmap* pDeviceBitmap, | 916 void CCodec_ProgressiveDecoder::ResampleVertBT(CFX_DIBitmap* pDeviceBitmap, |
| 917 double scale_y, | 917 double scale_y, |
| 918 int des_row) { | 918 int des_row) { |
| 919 int des_Bpp = pDeviceBitmap->GetBPP() >> 3; | 919 int des_Bpp = pDeviceBitmap->GetBPP() >> 3; |
| 920 FX_DWORD des_ScanOffet = m_startX * des_Bpp; | 920 uint32_t des_ScanOffet = m_startX * des_Bpp; |
| 921 int des_top = m_startY; | 921 int des_top = m_startY; |
| 922 int des_bottom = m_startY + m_sizeY; | 922 int des_bottom = m_startY + m_sizeY; |
| 923 int des_row_1 = des_row + int(scale_y); | 923 int des_row_1 = des_row + int(scale_y); |
| 924 if (des_row_1 >= des_bottom - 1) { | 924 if (des_row_1 >= des_bottom - 1) { |
| 925 uint8_t* scan_src = | 925 uint8_t* scan_src = |
| 926 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; | 926 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; |
| 927 while (++des_row < des_bottom) { | 927 while (++des_row < des_bottom) { |
| 928 uint8_t* scan_des = | 928 uint8_t* scan_des = |
| 929 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; | 929 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; |
| 930 FX_DWORD size = m_sizeX * des_Bpp; | 930 uint32_t size = m_sizeX * des_Bpp; |
| 931 FXSYS_memcpy(scan_des, scan_src, size); | 931 FXSYS_memcpy(scan_des, scan_src, size); |
| 932 } | 932 } |
| 933 return; | 933 return; |
| 934 } | 934 } |
| 935 for (; des_row_1 > des_row; des_row_1--) { | 935 for (; des_row_1 > des_row; des_row_1--) { |
| 936 uint8_t* scan_des = | 936 uint8_t* scan_des = |
| 937 (uint8_t*)pDeviceBitmap->GetScanline(des_row_1) + des_ScanOffet; | 937 (uint8_t*)pDeviceBitmap->GetScanline(des_row_1) + des_ScanOffet; |
| 938 PixelWeight* pWeight = m_WeightVert.GetPixelWeight(des_row_1 - des_top); | 938 PixelWeight* pWeight = m_WeightVert.GetPixelWeight(des_row_1 - des_top); |
| 939 const uint8_t* scan_src1 = | 939 const uint8_t* scan_src1 = |
| 940 pDeviceBitmap->GetScanline(pWeight->m_SrcStart + des_top) + | 940 pDeviceBitmap->GetScanline(pWeight->m_SrcStart + des_top) + |
| (...skipping 11 matching lines...) Expand all Loading... |
| 952 if (pDeviceBitmap->GetPalette()) { | 952 if (pDeviceBitmap->GetPalette()) { |
| 953 return; | 953 return; |
| 954 } | 954 } |
| 955 int des_g = 0; | 955 int des_g = 0; |
| 956 des_g += pWeight->m_Weights[0] * (*scan_src1++); | 956 des_g += pWeight->m_Weights[0] * (*scan_src1++); |
| 957 des_g += pWeight->m_Weights[1] * (*scan_src2++); | 957 des_g += pWeight->m_Weights[1] * (*scan_src2++); |
| 958 *scan_des++ = (uint8_t)(des_g >> 16); | 958 *scan_des++ = (uint8_t)(des_g >> 16); |
| 959 } break; | 959 } break; |
| 960 case FXDIB_Rgb: | 960 case FXDIB_Rgb: |
| 961 case FXDIB_Rgb32: { | 961 case FXDIB_Rgb32: { |
| 962 FX_DWORD des_b = 0, des_g = 0, des_r = 0; | 962 uint32_t des_b = 0, des_g = 0, des_r = 0; |
| 963 des_b += pWeight->m_Weights[0] * (*scan_src1++); | 963 des_b += pWeight->m_Weights[0] * (*scan_src1++); |
| 964 des_g += pWeight->m_Weights[0] * (*scan_src1++); | 964 des_g += pWeight->m_Weights[0] * (*scan_src1++); |
| 965 des_r += pWeight->m_Weights[0] * (*scan_src1++); | 965 des_r += pWeight->m_Weights[0] * (*scan_src1++); |
| 966 scan_src1 += des_Bpp - 3; | 966 scan_src1 += des_Bpp - 3; |
| 967 des_b += pWeight->m_Weights[1] * (*scan_src2++); | 967 des_b += pWeight->m_Weights[1] * (*scan_src2++); |
| 968 des_g += pWeight->m_Weights[1] * (*scan_src2++); | 968 des_g += pWeight->m_Weights[1] * (*scan_src2++); |
| 969 des_r += pWeight->m_Weights[1] * (*scan_src2++); | 969 des_r += pWeight->m_Weights[1] * (*scan_src2++); |
| 970 scan_src2 += des_Bpp - 3; | 970 scan_src2 += des_Bpp - 3; |
| 971 *scan_des++ = (uint8_t)((des_b) >> 16); | 971 *scan_des++ = (uint8_t)((des_b) >> 16); |
| 972 *scan_des++ = (uint8_t)((des_g) >> 16); | 972 *scan_des++ = (uint8_t)((des_g) >> 16); |
| 973 *scan_des++ = (uint8_t)((des_r) >> 16); | 973 *scan_des++ = (uint8_t)((des_r) >> 16); |
| 974 scan_des += des_Bpp - 3; | 974 scan_des += des_Bpp - 3; |
| 975 } break; | 975 } break; |
| 976 case FXDIB_Argb: { | 976 case FXDIB_Argb: { |
| 977 FX_DWORD des_a = 0, des_b = 0, des_g = 0, des_r = 0; | 977 uint32_t des_a = 0, des_b = 0, des_g = 0, des_r = 0; |
| 978 des_b += pWeight->m_Weights[0] * (*scan_src1++); | 978 des_b += pWeight->m_Weights[0] * (*scan_src1++); |
| 979 des_g += pWeight->m_Weights[0] * (*scan_src1++); | 979 des_g += pWeight->m_Weights[0] * (*scan_src1++); |
| 980 des_r += pWeight->m_Weights[0] * (*scan_src1++); | 980 des_r += pWeight->m_Weights[0] * (*scan_src1++); |
| 981 des_a += pWeight->m_Weights[0] * (*scan_src1++); | 981 des_a += pWeight->m_Weights[0] * (*scan_src1++); |
| 982 des_b += pWeight->m_Weights[1] * (*scan_src2++); | 982 des_b += pWeight->m_Weights[1] * (*scan_src2++); |
| 983 des_g += pWeight->m_Weights[1] * (*scan_src2++); | 983 des_g += pWeight->m_Weights[1] * (*scan_src2++); |
| 984 des_r += pWeight->m_Weights[1] * (*scan_src2++); | 984 des_r += pWeight->m_Weights[1] * (*scan_src2++); |
| 985 des_a += pWeight->m_Weights[1] * (*scan_src2++); | 985 des_a += pWeight->m_Weights[1] * (*scan_src2++); |
| 986 *scan_des++ = (uint8_t)((des_b) >> 16); | 986 *scan_des++ = (uint8_t)((des_b) >> 16); |
| 987 *scan_des++ = (uint8_t)((des_g) >> 16); | 987 *scan_des++ = (uint8_t)((des_g) >> 16); |
| 988 *scan_des++ = (uint8_t)((des_r) >> 16); | 988 *scan_des++ = (uint8_t)((des_r) >> 16); |
| 989 *scan_des++ = (uint8_t)((des_a) >> 16); | 989 *scan_des++ = (uint8_t)((des_a) >> 16); |
| 990 } break; | 990 } break; |
| 991 default: | 991 default: |
| 992 return; | 992 return; |
| 993 } | 993 } |
| 994 } | 994 } |
| 995 } | 995 } |
| 996 } | 996 } |
| 997 FX_BOOL CCodec_ProgressiveDecoder::DetectImageType( | 997 FX_BOOL CCodec_ProgressiveDecoder::DetectImageType( |
| 998 FXCODEC_IMAGE_TYPE imageType, | 998 FXCODEC_IMAGE_TYPE imageType, |
| 999 CFX_DIBAttribute* pAttribute) { | 999 CFX_DIBAttribute* pAttribute) { |
| 1000 m_offSet = 0; | 1000 m_offSet = 0; |
| 1001 FX_DWORD size = (FX_DWORD)m_pFile->GetSize(); | 1001 uint32_t size = (uint32_t)m_pFile->GetSize(); |
| 1002 if (size > FXCODEC_BLOCK_SIZE) { | 1002 if (size > FXCODEC_BLOCK_SIZE) { |
| 1003 size = FXCODEC_BLOCK_SIZE; | 1003 size = FXCODEC_BLOCK_SIZE; |
| 1004 } | 1004 } |
| 1005 FX_Free(m_pSrcBuf); | 1005 FX_Free(m_pSrcBuf); |
| 1006 m_pSrcBuf = FX_Alloc(uint8_t, size); | 1006 m_pSrcBuf = FX_Alloc(uint8_t, size); |
| 1007 FXSYS_memset(m_pSrcBuf, 0, size); | 1007 FXSYS_memset(m_pSrcBuf, 0, size); |
| 1008 m_SrcSize = size; | 1008 m_SrcSize = size; |
| 1009 switch (imageType) { | 1009 switch (imageType) { |
| 1010 case FXCODEC_IMAGE_BMP: { | 1010 case FXCODEC_IMAGE_BMP: { |
| 1011 ICodec_BmpModule* pBmpModule = m_pCodecMgr->GetBmpModule(); | 1011 ICodec_BmpModule* pBmpModule = m_pCodecMgr->GetBmpModule(); |
| 1012 if (pBmpModule == NULL) { | 1012 if (pBmpModule == NULL) { |
| 1013 m_status = FXCODEC_STATUS_ERR_MEMORY; | 1013 m_status = FXCODEC_STATUS_ERR_MEMORY; |
| 1014 return FALSE; | 1014 return FALSE; |
| 1015 } | 1015 } |
| 1016 pBmpModule->InputImagePositionBufCallback = | 1016 pBmpModule->InputImagePositionBufCallback = |
| 1017 BmpInputImagePositionBufCallback; | 1017 BmpInputImagePositionBufCallback; |
| 1018 pBmpModule->ReadScanlineCallback = BmpReadScanlineCallback; | 1018 pBmpModule->ReadScanlineCallback = BmpReadScanlineCallback; |
| 1019 m_pBmpContext = pBmpModule->Start((void*)this); | 1019 m_pBmpContext = pBmpModule->Start((void*)this); |
| 1020 if (m_pBmpContext == NULL) { | 1020 if (m_pBmpContext == NULL) { |
| 1021 m_status = FXCODEC_STATUS_ERR_MEMORY; | 1021 m_status = FXCODEC_STATUS_ERR_MEMORY; |
| 1022 return FALSE; | 1022 return FALSE; |
| 1023 } | 1023 } |
| 1024 FX_BOOL bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); | 1024 FX_BOOL bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); |
| 1025 if (!bResult) { | 1025 if (!bResult) { |
| 1026 m_status = FXCODEC_STATUS_ERR_READ; | 1026 m_status = FXCODEC_STATUS_ERR_READ; |
| 1027 return FALSE; | 1027 return FALSE; |
| 1028 } | 1028 } |
| 1029 m_offSet += size; | 1029 m_offSet += size; |
| 1030 pBmpModule->Input(m_pBmpContext, m_pSrcBuf, size); | 1030 pBmpModule->Input(m_pBmpContext, m_pSrcBuf, size); |
| 1031 FX_DWORD* pPalette = NULL; | 1031 uint32_t* pPalette = NULL; |
| 1032 int32_t readResult = pBmpModule->ReadHeader( | 1032 int32_t readResult = pBmpModule->ReadHeader( |
| 1033 m_pBmpContext, &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom, | 1033 m_pBmpContext, &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom, |
| 1034 &m_SrcComponents, &m_SrcPaletteNumber, &pPalette, pAttribute); | 1034 &m_SrcComponents, &m_SrcPaletteNumber, &pPalette, pAttribute); |
| 1035 while (readResult == 2) { | 1035 while (readResult == 2) { |
| 1036 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERR_FORMAT; | 1036 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERR_FORMAT; |
| 1037 if (!BmpReadMoreData(pBmpModule, error_status)) { | 1037 if (!BmpReadMoreData(pBmpModule, error_status)) { |
| 1038 m_status = error_status; | 1038 m_status = error_status; |
| 1039 return FALSE; | 1039 return FALSE; |
| 1040 } | 1040 } |
| 1041 readResult = pBmpModule->ReadHeader( | 1041 readResult = pBmpModule->ReadHeader( |
| 1042 m_pBmpContext, &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom, | 1042 m_pBmpContext, &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom, |
| 1043 &m_SrcComponents, &m_SrcPaletteNumber, &pPalette, pAttribute); | 1043 &m_SrcComponents, &m_SrcPaletteNumber, &pPalette, pAttribute); |
| 1044 } | 1044 } |
| 1045 if (readResult == 1) { | 1045 if (readResult == 1) { |
| 1046 m_SrcBPC = 8; | 1046 m_SrcBPC = 8; |
| 1047 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); | 1047 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); |
| 1048 FX_Free(m_pSrcPalette); | 1048 FX_Free(m_pSrcPalette); |
| 1049 if (m_SrcPaletteNumber) { | 1049 if (m_SrcPaletteNumber) { |
| 1050 m_pSrcPalette = FX_Alloc(FX_ARGB, m_SrcPaletteNumber); | 1050 m_pSrcPalette = FX_Alloc(FX_ARGB, m_SrcPaletteNumber); |
| 1051 FXSYS_memcpy(m_pSrcPalette, pPalette, | 1051 FXSYS_memcpy(m_pSrcPalette, pPalette, |
| 1052 m_SrcPaletteNumber * sizeof(FX_DWORD)); | 1052 m_SrcPaletteNumber * sizeof(uint32_t)); |
| 1053 } else { | 1053 } else { |
| 1054 m_pSrcPalette = nullptr; | 1054 m_pSrcPalette = nullptr; |
| 1055 } | 1055 } |
| 1056 return TRUE; | 1056 return TRUE; |
| 1057 } | 1057 } |
| 1058 if (m_pBmpContext) { | 1058 if (m_pBmpContext) { |
| 1059 pBmpModule->Finish(m_pBmpContext); | 1059 pBmpModule->Finish(m_pBmpContext); |
| 1060 m_pBmpContext = NULL; | 1060 m_pBmpContext = NULL; |
| 1061 } | 1061 } |
| 1062 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1062 m_status = FXCODEC_STATUS_ERR_FORMAT; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1123 return FALSE; | 1123 return FALSE; |
| 1124 } | 1124 } |
| 1125 FX_BOOL bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); | 1125 FX_BOOL bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); |
| 1126 if (!bResult) { | 1126 if (!bResult) { |
| 1127 m_status = FXCODEC_STATUS_ERR_READ; | 1127 m_status = FXCODEC_STATUS_ERR_READ; |
| 1128 return FALSE; | 1128 return FALSE; |
| 1129 } | 1129 } |
| 1130 m_offSet += size; | 1130 m_offSet += size; |
| 1131 bResult = pPngModule->Input(m_pPngContext, m_pSrcBuf, size, pAttribute); | 1131 bResult = pPngModule->Input(m_pPngContext, m_pSrcBuf, size, pAttribute); |
| 1132 while (bResult) { | 1132 while (bResult) { |
| 1133 FX_DWORD remain_size = (FX_DWORD)m_pFile->GetSize() - m_offSet; | 1133 uint32_t remain_size = (uint32_t)m_pFile->GetSize() - m_offSet; |
| 1134 FX_DWORD input_size = | 1134 uint32_t input_size = |
| 1135 remain_size > FXCODEC_BLOCK_SIZE ? FXCODEC_BLOCK_SIZE : remain_size; | 1135 remain_size > FXCODEC_BLOCK_SIZE ? FXCODEC_BLOCK_SIZE : remain_size; |
| 1136 if (input_size == 0) { | 1136 if (input_size == 0) { |
| 1137 if (m_pPngContext) { | 1137 if (m_pPngContext) { |
| 1138 pPngModule->Finish(m_pPngContext); | 1138 pPngModule->Finish(m_pPngContext); |
| 1139 } | 1139 } |
| 1140 m_pPngContext = NULL; | 1140 m_pPngContext = NULL; |
| 1141 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1141 m_status = FXCODEC_STATUS_ERR_FORMAT; |
| 1142 return FALSE; | 1142 return FALSE; |
| 1143 } | 1143 } |
| 1144 if (m_pSrcBuf && input_size > m_SrcSize) { | 1144 if (m_pSrcBuf && input_size > m_SrcSize) { |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1224 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1224 m_status = FXCODEC_STATUS_ERR_FORMAT; |
| 1225 return FALSE; | 1225 return FALSE; |
| 1226 } | 1226 } |
| 1227 m_pTiffContext = pTiffModule->CreateDecoder(m_pFile); | 1227 m_pTiffContext = pTiffModule->CreateDecoder(m_pFile); |
| 1228 if (m_pTiffContext == NULL) { | 1228 if (m_pTiffContext == NULL) { |
| 1229 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1229 m_status = FXCODEC_STATUS_ERR_FORMAT; |
| 1230 return FALSE; | 1230 return FALSE; |
| 1231 } | 1231 } |
| 1232 int32_t frames = 0; | 1232 int32_t frames = 0; |
| 1233 pTiffModule->GetFrames(m_pTiffContext, frames); | 1233 pTiffModule->GetFrames(m_pTiffContext, frames); |
| 1234 FX_DWORD bpc; | 1234 uint32_t bpc; |
| 1235 FX_BOOL ret = pTiffModule->LoadFrameInfo( | 1235 FX_BOOL ret = pTiffModule->LoadFrameInfo( |
| 1236 m_pTiffContext, 0, (FX_DWORD&)m_SrcWidth, (FX_DWORD&)m_SrcHeight, | 1236 m_pTiffContext, 0, (uint32_t&)m_SrcWidth, (uint32_t&)m_SrcHeight, |
| 1237 (FX_DWORD&)m_SrcComponents, bpc, pAttribute); | 1237 (uint32_t&)m_SrcComponents, bpc, pAttribute); |
| 1238 m_SrcComponents = 4; | 1238 m_SrcComponents = 4; |
| 1239 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); | 1239 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); |
| 1240 if (!ret) { | 1240 if (!ret) { |
| 1241 pTiffModule->DestroyDecoder(m_pTiffContext); | 1241 pTiffModule->DestroyDecoder(m_pTiffContext); |
| 1242 (m_pTiffContext = NULL); | 1242 (m_pTiffContext = NULL); |
| 1243 (m_status = FXCODEC_STATUS_ERR_FORMAT); | 1243 (m_status = FXCODEC_STATUS_ERR_FORMAT); |
| 1244 return FALSE; | 1244 return FALSE; |
| 1245 } | 1245 } |
| 1246 } break; | 1246 } break; |
| 1247 default: | 1247 default: |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1468 for (int des_col = 0; des_col < m_sizeX; des_col++) { | 1468 for (int des_col = 0; des_col < m_sizeX; des_col++) { |
| 1469 PixelWeight* pPixelWeights = m_WeightHorz.GetPixelWeight(des_col); | 1469 PixelWeight* pPixelWeights = m_WeightHorz.GetPixelWeight(des_col); |
| 1470 switch (m_TransMethod) { | 1470 switch (m_TransMethod) { |
| 1471 case -1: | 1471 case -1: |
| 1472 return; | 1472 return; |
| 1473 case 0: | 1473 case 0: |
| 1474 return; | 1474 return; |
| 1475 case 1: | 1475 case 1: |
| 1476 return; | 1476 return; |
| 1477 case 2: { | 1477 case 2: { |
| 1478 FX_DWORD des_g = 0; | 1478 uint32_t des_g = 0; |
| 1479 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; | 1479 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; |
| 1480 j++) { | 1480 j++) { |
| 1481 int pixel_weight = | 1481 int pixel_weight = |
| 1482 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; | 1482 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; |
| 1483 des_g += pixel_weight * src_scan[j]; | 1483 des_g += pixel_weight * src_scan[j]; |
| 1484 } | 1484 } |
| 1485 *des_scan++ = (uint8_t)(des_g >> 16); | 1485 *des_scan++ = (uint8_t)(des_g >> 16); |
| 1486 } break; | 1486 } break; |
| 1487 case 3: { | 1487 case 3: { |
| 1488 int des_r = 0, des_g = 0, des_b = 0; | 1488 int des_r = 0, des_g = 0, des_b = 0; |
| 1489 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; | 1489 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; |
| 1490 j++) { | 1490 j++) { |
| 1491 int pixel_weight = | 1491 int pixel_weight = |
| 1492 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; | 1492 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; |
| 1493 unsigned long argb = m_pSrcPalette[src_scan[j]]; | 1493 unsigned long argb = m_pSrcPalette[src_scan[j]]; |
| 1494 des_r += pixel_weight * (uint8_t)(argb >> 16); | 1494 des_r += pixel_weight * (uint8_t)(argb >> 16); |
| 1495 des_g += pixel_weight * (uint8_t)(argb >> 8); | 1495 des_g += pixel_weight * (uint8_t)(argb >> 8); |
| 1496 des_b += pixel_weight * (uint8_t)argb; | 1496 des_b += pixel_weight * (uint8_t)argb; |
| 1497 } | 1497 } |
| 1498 *des_scan++ = | 1498 *des_scan++ = |
| 1499 (uint8_t)FXRGB2GRAY((des_r >> 16), (des_g >> 16), (des_b >> 16)); | 1499 (uint8_t)FXRGB2GRAY((des_r >> 16), (des_g >> 16), (des_b >> 16)); |
| 1500 } break; | 1500 } break; |
| 1501 case 4: { | 1501 case 4: { |
| 1502 FX_DWORD des_b = 0, des_g = 0, des_r = 0; | 1502 uint32_t des_b = 0, des_g = 0, des_r = 0; |
| 1503 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; | 1503 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; |
| 1504 j++) { | 1504 j++) { |
| 1505 int pixel_weight = | 1505 int pixel_weight = |
| 1506 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; | 1506 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; |
| 1507 const uint8_t* src_pixel = src_scan + j * src_Bpp; | 1507 const uint8_t* src_pixel = src_scan + j * src_Bpp; |
| 1508 des_b += pixel_weight * (*src_pixel++); | 1508 des_b += pixel_weight * (*src_pixel++); |
| 1509 des_g += pixel_weight * (*src_pixel++); | 1509 des_g += pixel_weight * (*src_pixel++); |
| 1510 des_r += pixel_weight * (*src_pixel); | 1510 des_r += pixel_weight * (*src_pixel); |
| 1511 } | 1511 } |
| 1512 *des_scan++ = | 1512 *des_scan++ = |
| 1513 (uint8_t)FXRGB2GRAY((des_r >> 16), (des_g >> 16), (des_b >> 16)); | 1513 (uint8_t)FXRGB2GRAY((des_r >> 16), (des_g >> 16), (des_b >> 16)); |
| 1514 } break; | 1514 } break; |
| 1515 case 5: { | 1515 case 5: { |
| 1516 FX_DWORD des_b = 0, des_g = 0, des_r = 0; | 1516 uint32_t des_b = 0, des_g = 0, des_r = 0; |
| 1517 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; | 1517 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; |
| 1518 j++) { | 1518 j++) { |
| 1519 int pixel_weight = | 1519 int pixel_weight = |
| 1520 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; | 1520 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; |
| 1521 const uint8_t* src_pixel = src_scan + j * src_Bpp; | 1521 const uint8_t* src_pixel = src_scan + j * src_Bpp; |
| 1522 uint8_t src_b = 0, src_g = 0, src_r = 0; | 1522 uint8_t src_b = 0, src_g = 0, src_r = 0; |
| 1523 AdobeCMYK_to_sRGB1(255 - src_pixel[0], 255 - src_pixel[1], | 1523 AdobeCMYK_to_sRGB1(255 - src_pixel[0], 255 - src_pixel[1], |
| 1524 255 - src_pixel[2], 255 - src_pixel[3], src_r, | 1524 255 - src_pixel[2], 255 - src_pixel[3], src_r, |
| 1525 src_g, src_b); | 1525 src_g, src_b); |
| 1526 des_b += pixel_weight * src_b; | 1526 des_b += pixel_weight * src_b; |
| 1527 des_g += pixel_weight * src_g; | 1527 des_g += pixel_weight * src_g; |
| 1528 des_r += pixel_weight * src_r; | 1528 des_r += pixel_weight * src_r; |
| 1529 } | 1529 } |
| 1530 *des_scan++ = | 1530 *des_scan++ = |
| 1531 (uint8_t)FXRGB2GRAY((des_r >> 16), (des_g >> 16), (des_b >> 16)); | 1531 (uint8_t)FXRGB2GRAY((des_r >> 16), (des_g >> 16), (des_b >> 16)); |
| 1532 } break; | 1532 } break; |
| 1533 case 6: | 1533 case 6: |
| 1534 return; | 1534 return; |
| 1535 case 7: { | 1535 case 7: { |
| 1536 FX_DWORD des_g = 0; | 1536 uint32_t des_g = 0; |
| 1537 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; | 1537 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; |
| 1538 j++) { | 1538 j++) { |
| 1539 int pixel_weight = | 1539 int pixel_weight = |
| 1540 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; | 1540 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; |
| 1541 des_g += pixel_weight * src_scan[j]; | 1541 des_g += pixel_weight * src_scan[j]; |
| 1542 } | 1542 } |
| 1543 FXSYS_memset(des_scan, (uint8_t)(des_g >> 16), 3); | 1543 FXSYS_memset(des_scan, (uint8_t)(des_g >> 16), 3); |
| 1544 des_scan += des_Bpp; | 1544 des_scan += des_Bpp; |
| 1545 } break; | 1545 } break; |
| 1546 case 8: { | 1546 case 8: { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1587 des_g += pixel_weight * (uint8_t)(argb >> 8); | 1587 des_g += pixel_weight * (uint8_t)(argb >> 8); |
| 1588 des_b += pixel_weight * (uint8_t)argb; | 1588 des_b += pixel_weight * (uint8_t)argb; |
| 1589 } | 1589 } |
| 1590 *des_scan++ = (uint8_t)((des_b) >> 16); | 1590 *des_scan++ = (uint8_t)((des_b) >> 16); |
| 1591 *des_scan++ = (uint8_t)((des_g) >> 16); | 1591 *des_scan++ = (uint8_t)((des_g) >> 16); |
| 1592 *des_scan++ = (uint8_t)((des_r) >> 16); | 1592 *des_scan++ = (uint8_t)((des_r) >> 16); |
| 1593 *des_scan++ = (uint8_t)((des_a) >> 16); | 1593 *des_scan++ = (uint8_t)((des_a) >> 16); |
| 1594 } | 1594 } |
| 1595 } break; | 1595 } break; |
| 1596 case 9: { | 1596 case 9: { |
| 1597 FX_DWORD des_b = 0, des_g = 0, des_r = 0; | 1597 uint32_t des_b = 0, des_g = 0, des_r = 0; |
| 1598 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; | 1598 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; |
| 1599 j++) { | 1599 j++) { |
| 1600 int pixel_weight = | 1600 int pixel_weight = |
| 1601 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; | 1601 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; |
| 1602 const uint8_t* src_pixel = src_scan + j * src_Bpp; | 1602 const uint8_t* src_pixel = src_scan + j * src_Bpp; |
| 1603 des_b += pixel_weight * (*src_pixel++); | 1603 des_b += pixel_weight * (*src_pixel++); |
| 1604 des_g += pixel_weight * (*src_pixel++); | 1604 des_g += pixel_weight * (*src_pixel++); |
| 1605 des_r += pixel_weight * (*src_pixel); | 1605 des_r += pixel_weight * (*src_pixel); |
| 1606 } | 1606 } |
| 1607 *des_scan++ = (uint8_t)((des_b) >> 16); | 1607 *des_scan++ = (uint8_t)((des_b) >> 16); |
| 1608 *des_scan++ = (uint8_t)((des_g) >> 16); | 1608 *des_scan++ = (uint8_t)((des_g) >> 16); |
| 1609 *des_scan++ = (uint8_t)((des_r) >> 16); | 1609 *des_scan++ = (uint8_t)((des_r) >> 16); |
| 1610 des_scan += des_Bpp - 3; | 1610 des_scan += des_Bpp - 3; |
| 1611 } break; | 1611 } break; |
| 1612 case 10: { | 1612 case 10: { |
| 1613 FX_DWORD des_b = 0, des_g = 0, des_r = 0; | 1613 uint32_t des_b = 0, des_g = 0, des_r = 0; |
| 1614 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; | 1614 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; |
| 1615 j++) { | 1615 j++) { |
| 1616 int pixel_weight = | 1616 int pixel_weight = |
| 1617 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; | 1617 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; |
| 1618 const uint8_t* src_pixel = src_scan + j * src_Bpp; | 1618 const uint8_t* src_pixel = src_scan + j * src_Bpp; |
| 1619 uint8_t src_b = 0, src_g = 0, src_r = 0; | 1619 uint8_t src_b = 0, src_g = 0, src_r = 0; |
| 1620 AdobeCMYK_to_sRGB1(255 - src_pixel[0], 255 - src_pixel[1], | 1620 AdobeCMYK_to_sRGB1(255 - src_pixel[0], 255 - src_pixel[1], |
| 1621 255 - src_pixel[2], 255 - src_pixel[3], src_r, | 1621 255 - src_pixel[2], 255 - src_pixel[3], src_r, |
| 1622 src_g, src_b); | 1622 src_g, src_b); |
| 1623 des_b += pixel_weight * src_b; | 1623 des_b += pixel_weight * src_b; |
| 1624 des_g += pixel_weight * src_g; | 1624 des_g += pixel_weight * src_g; |
| 1625 des_r += pixel_weight * src_r; | 1625 des_r += pixel_weight * src_r; |
| 1626 } | 1626 } |
| 1627 *des_scan++ = (uint8_t)((des_b) >> 16); | 1627 *des_scan++ = (uint8_t)((des_b) >> 16); |
| 1628 *des_scan++ = (uint8_t)((des_g) >> 16); | 1628 *des_scan++ = (uint8_t)((des_g) >> 16); |
| 1629 *des_scan++ = (uint8_t)((des_r) >> 16); | 1629 *des_scan++ = (uint8_t)((des_r) >> 16); |
| 1630 des_scan += des_Bpp - 3; | 1630 des_scan += des_Bpp - 3; |
| 1631 } break; | 1631 } break; |
| 1632 case 11: { | 1632 case 11: { |
| 1633 FX_DWORD des_alpha = 0, des_r = 0, des_g = 0, des_b = 0; | 1633 uint32_t des_alpha = 0, des_r = 0, des_g = 0, des_b = 0; |
| 1634 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; | 1634 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; |
| 1635 j++) { | 1635 j++) { |
| 1636 int pixel_weight = | 1636 int pixel_weight = |
| 1637 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; | 1637 pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart]; |
| 1638 const uint8_t* src_pixel = src_scan + j * src_Bpp; | 1638 const uint8_t* src_pixel = src_scan + j * src_Bpp; |
| 1639 pixel_weight = pixel_weight * src_pixel[3] / 255; | 1639 pixel_weight = pixel_weight * src_pixel[3] / 255; |
| 1640 des_b += pixel_weight * (*src_pixel++); | 1640 des_b += pixel_weight * (*src_pixel++); |
| 1641 des_g += pixel_weight * (*src_pixel++); | 1641 des_g += pixel_weight * (*src_pixel++); |
| 1642 des_r += pixel_weight * (*src_pixel); | 1642 des_r += pixel_weight * (*src_pixel); |
| 1643 des_alpha += pixel_weight; | 1643 des_alpha += pixel_weight; |
| 1644 } | 1644 } |
| 1645 *des_scan++ = (uint8_t)((des_b) >> 16); | 1645 *des_scan++ = (uint8_t)((des_b) >> 16); |
| 1646 *des_scan++ = (uint8_t)((des_g) >> 16); | 1646 *des_scan++ = (uint8_t)((des_g) >> 16); |
| 1647 *des_scan++ = (uint8_t)((des_r) >> 16); | 1647 *des_scan++ = (uint8_t)((des_r) >> 16); |
| 1648 *des_scan++ = (uint8_t)((des_alpha * 255) >> 16); | 1648 *des_scan++ = (uint8_t)((des_alpha * 255) >> 16); |
| 1649 } break; | 1649 } break; |
| 1650 default: | 1650 default: |
| 1651 return; | 1651 return; |
| 1652 } | 1652 } |
| 1653 } | 1653 } |
| 1654 } | 1654 } |
| 1655 void CCodec_ProgressiveDecoder::ResampleVert(CFX_DIBitmap* pDeviceBitmap, | 1655 void CCodec_ProgressiveDecoder::ResampleVert(CFX_DIBitmap* pDeviceBitmap, |
| 1656 double scale_y, | 1656 double scale_y, |
| 1657 int des_row) { | 1657 int des_row) { |
| 1658 int des_Bpp = pDeviceBitmap->GetBPP() >> 3; | 1658 int des_Bpp = pDeviceBitmap->GetBPP() >> 3; |
| 1659 FX_DWORD des_ScanOffet = m_startX * des_Bpp; | 1659 uint32_t des_ScanOffet = m_startX * des_Bpp; |
| 1660 if (m_bInterpol) { | 1660 if (m_bInterpol) { |
| 1661 int des_top = m_startY; | 1661 int des_top = m_startY; |
| 1662 int des_row_1 = des_row - int(scale_y); | 1662 int des_row_1 = des_row - int(scale_y); |
| 1663 if (des_row_1 < des_top) { | 1663 if (des_row_1 < des_top) { |
| 1664 int des_bottom = des_top + m_sizeY; | 1664 int des_bottom = des_top + m_sizeY; |
| 1665 if (des_row + (int)scale_y >= des_bottom - 1) { | 1665 if (des_row + (int)scale_y >= des_bottom - 1) { |
| 1666 uint8_t* scan_src = | 1666 uint8_t* scan_src = |
| 1667 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; | 1667 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; |
| 1668 while (++des_row < des_bottom) { | 1668 while (++des_row < des_bottom) { |
| 1669 uint8_t* scan_des = | 1669 uint8_t* scan_des = |
| 1670 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; | 1670 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; |
| 1671 FX_DWORD size = m_sizeX * des_Bpp; | 1671 uint32_t size = m_sizeX * des_Bpp; |
| 1672 FXSYS_memcpy(scan_des, scan_src, size); | 1672 FXSYS_memcpy(scan_des, scan_src, size); |
| 1673 } | 1673 } |
| 1674 } | 1674 } |
| 1675 return; | 1675 return; |
| 1676 } | 1676 } |
| 1677 for (; des_row_1 < des_row; des_row_1++) { | 1677 for (; des_row_1 < des_row; des_row_1++) { |
| 1678 uint8_t* scan_des = | 1678 uint8_t* scan_des = |
| 1679 (uint8_t*)pDeviceBitmap->GetScanline(des_row_1) + des_ScanOffet; | 1679 (uint8_t*)pDeviceBitmap->GetScanline(des_row_1) + des_ScanOffet; |
| 1680 PixelWeight* pWeight = m_WeightVert.GetPixelWeight(des_row_1 - des_top); | 1680 PixelWeight* pWeight = m_WeightVert.GetPixelWeight(des_row_1 - des_top); |
| 1681 const uint8_t* scan_src1 = | 1681 const uint8_t* scan_src1 = |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1695 if (pDeviceBitmap->GetPalette()) { | 1695 if (pDeviceBitmap->GetPalette()) { |
| 1696 return; | 1696 return; |
| 1697 } | 1697 } |
| 1698 int des_g = 0; | 1698 int des_g = 0; |
| 1699 des_g += pWeight->m_Weights[0] * (*scan_src1++); | 1699 des_g += pWeight->m_Weights[0] * (*scan_src1++); |
| 1700 des_g += pWeight->m_Weights[1] * (*scan_src2++); | 1700 des_g += pWeight->m_Weights[1] * (*scan_src2++); |
| 1701 *scan_des++ = (uint8_t)(des_g >> 16); | 1701 *scan_des++ = (uint8_t)(des_g >> 16); |
| 1702 } break; | 1702 } break; |
| 1703 case FXDIB_Rgb: | 1703 case FXDIB_Rgb: |
| 1704 case FXDIB_Rgb32: { | 1704 case FXDIB_Rgb32: { |
| 1705 FX_DWORD des_b = 0, des_g = 0, des_r = 0; | 1705 uint32_t des_b = 0, des_g = 0, des_r = 0; |
| 1706 des_b += pWeight->m_Weights[0] * (*scan_src1++); | 1706 des_b += pWeight->m_Weights[0] * (*scan_src1++); |
| 1707 des_g += pWeight->m_Weights[0] * (*scan_src1++); | 1707 des_g += pWeight->m_Weights[0] * (*scan_src1++); |
| 1708 des_r += pWeight->m_Weights[0] * (*scan_src1++); | 1708 des_r += pWeight->m_Weights[0] * (*scan_src1++); |
| 1709 scan_src1 += des_Bpp - 3; | 1709 scan_src1 += des_Bpp - 3; |
| 1710 des_b += pWeight->m_Weights[1] * (*scan_src2++); | 1710 des_b += pWeight->m_Weights[1] * (*scan_src2++); |
| 1711 des_g += pWeight->m_Weights[1] * (*scan_src2++); | 1711 des_g += pWeight->m_Weights[1] * (*scan_src2++); |
| 1712 des_r += pWeight->m_Weights[1] * (*scan_src2++); | 1712 des_r += pWeight->m_Weights[1] * (*scan_src2++); |
| 1713 scan_src2 += des_Bpp - 3; | 1713 scan_src2 += des_Bpp - 3; |
| 1714 *scan_des++ = (uint8_t)((des_b) >> 16); | 1714 *scan_des++ = (uint8_t)((des_b) >> 16); |
| 1715 *scan_des++ = (uint8_t)((des_g) >> 16); | 1715 *scan_des++ = (uint8_t)((des_g) >> 16); |
| 1716 *scan_des++ = (uint8_t)((des_r) >> 16); | 1716 *scan_des++ = (uint8_t)((des_r) >> 16); |
| 1717 scan_des += des_Bpp - 3; | 1717 scan_des += des_Bpp - 3; |
| 1718 } break; | 1718 } break; |
| 1719 case FXDIB_Argb: { | 1719 case FXDIB_Argb: { |
| 1720 FX_DWORD des_a = 0, des_b = 0, des_g = 0, des_r = 0; | 1720 uint32_t des_a = 0, des_b = 0, des_g = 0, des_r = 0; |
| 1721 des_b += pWeight->m_Weights[0] * (*scan_src1++); | 1721 des_b += pWeight->m_Weights[0] * (*scan_src1++); |
| 1722 des_g += pWeight->m_Weights[0] * (*scan_src1++); | 1722 des_g += pWeight->m_Weights[0] * (*scan_src1++); |
| 1723 des_r += pWeight->m_Weights[0] * (*scan_src1++); | 1723 des_r += pWeight->m_Weights[0] * (*scan_src1++); |
| 1724 des_a += pWeight->m_Weights[0] * (*scan_src1++); | 1724 des_a += pWeight->m_Weights[0] * (*scan_src1++); |
| 1725 des_b += pWeight->m_Weights[1] * (*scan_src2++); | 1725 des_b += pWeight->m_Weights[1] * (*scan_src2++); |
| 1726 des_g += pWeight->m_Weights[1] * (*scan_src2++); | 1726 des_g += pWeight->m_Weights[1] * (*scan_src2++); |
| 1727 des_r += pWeight->m_Weights[1] * (*scan_src2++); | 1727 des_r += pWeight->m_Weights[1] * (*scan_src2++); |
| 1728 des_a += pWeight->m_Weights[1] * (*scan_src2++); | 1728 des_a += pWeight->m_Weights[1] * (*scan_src2++); |
| 1729 *scan_des++ = (uint8_t)((des_b) >> 16); | 1729 *scan_des++ = (uint8_t)((des_b) >> 16); |
| 1730 *scan_des++ = (uint8_t)((des_g) >> 16); | 1730 *scan_des++ = (uint8_t)((des_g) >> 16); |
| 1731 *scan_des++ = (uint8_t)((des_r) >> 16); | 1731 *scan_des++ = (uint8_t)((des_r) >> 16); |
| 1732 *scan_des++ = (uint8_t)((des_a) >> 16); | 1732 *scan_des++ = (uint8_t)((des_a) >> 16); |
| 1733 } break; | 1733 } break; |
| 1734 default: | 1734 default: |
| 1735 return; | 1735 return; |
| 1736 } | 1736 } |
| 1737 } | 1737 } |
| 1738 } | 1738 } |
| 1739 int des_bottom = des_top + m_sizeY; | 1739 int des_bottom = des_top + m_sizeY; |
| 1740 if (des_row + (int)scale_y >= des_bottom - 1) { | 1740 if (des_row + (int)scale_y >= des_bottom - 1) { |
| 1741 uint8_t* scan_src = | 1741 uint8_t* scan_src = |
| 1742 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; | 1742 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; |
| 1743 while (++des_row < des_bottom) { | 1743 while (++des_row < des_bottom) { |
| 1744 uint8_t* scan_des = | 1744 uint8_t* scan_des = |
| 1745 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; | 1745 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; |
| 1746 FX_DWORD size = m_sizeX * des_Bpp; | 1746 uint32_t size = m_sizeX * des_Bpp; |
| 1747 FXSYS_memcpy(scan_des, scan_src, size); | 1747 FXSYS_memcpy(scan_des, scan_src, size); |
| 1748 } | 1748 } |
| 1749 } | 1749 } |
| 1750 return; | 1750 return; |
| 1751 } | 1751 } |
| 1752 int multiple = (int)FXSYS_ceil((FX_FLOAT)scale_y - 1); | 1752 int multiple = (int)FXSYS_ceil((FX_FLOAT)scale_y - 1); |
| 1753 if (multiple > 0) { | 1753 if (multiple > 0) { |
| 1754 uint8_t* scan_src = | 1754 uint8_t* scan_src = |
| 1755 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; | 1755 (uint8_t*)pDeviceBitmap->GetScanline(des_row) + des_ScanOffet; |
| 1756 for (int i = 1; i <= multiple; i++) { | 1756 for (int i = 1; i <= multiple; i++) { |
| 1757 if (des_row + i >= m_startY + m_sizeY) { | 1757 if (des_row + i >= m_startY + m_sizeY) { |
| 1758 return; | 1758 return; |
| 1759 } | 1759 } |
| 1760 uint8_t* scan_des = | 1760 uint8_t* scan_des = |
| 1761 (uint8_t*)pDeviceBitmap->GetScanline(des_row + i) + des_ScanOffet; | 1761 (uint8_t*)pDeviceBitmap->GetScanline(des_row + i) + des_ScanOffet; |
| 1762 FX_DWORD size = m_sizeX * des_Bpp; | 1762 uint32_t size = m_sizeX * des_Bpp; |
| 1763 FXSYS_memcpy(scan_des, scan_src, size); | 1763 FXSYS_memcpy(scan_des, scan_src, size); |
| 1764 } | 1764 } |
| 1765 } | 1765 } |
| 1766 } | 1766 } |
| 1767 void CCodec_ProgressiveDecoder::Resample(CFX_DIBitmap* pDeviceBitmap, | 1767 void CCodec_ProgressiveDecoder::Resample(CFX_DIBitmap* pDeviceBitmap, |
| 1768 int32_t src_line, | 1768 int32_t src_line, |
| 1769 uint8_t* src_scan, | 1769 uint8_t* src_scan, |
| 1770 FXCodec_Format src_format) { | 1770 FXCodec_Format src_format) { |
| 1771 int src_top = m_clipBox.top; | 1771 int src_top = m_clipBox.top; |
| 1772 int des_top = m_startY; | 1772 int des_top = m_startY; |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2056 Resample(m_pDeviceBitmap, m_SrcRow, m_pDecodeBuf, m_SrcFormat); | 2056 Resample(m_pDeviceBitmap, m_SrcRow, m_pDecodeBuf, m_SrcFormat); |
| 2057 m_SrcRow++; | 2057 m_SrcRow++; |
| 2058 if (pPause && pPause->NeedToPauseNow()) { | 2058 if (pPause && pPause->NeedToPauseNow()) { |
| 2059 return m_status = FXCODEC_STATUS_DECODE_TOBECONTINUE; | 2059 return m_status = FXCODEC_STATUS_DECODE_TOBECONTINUE; |
| 2060 } | 2060 } |
| 2061 } | 2061 } |
| 2062 } break; | 2062 } break; |
| 2063 case FXCODEC_IMAGE_PNG: { | 2063 case FXCODEC_IMAGE_PNG: { |
| 2064 ICodec_PngModule* pPngModule = m_pCodecMgr->GetPngModule(); | 2064 ICodec_PngModule* pPngModule = m_pCodecMgr->GetPngModule(); |
| 2065 while (TRUE) { | 2065 while (TRUE) { |
| 2066 FX_DWORD remain_size = (FX_DWORD)m_pFile->GetSize() - m_offSet; | 2066 uint32_t remain_size = (uint32_t)m_pFile->GetSize() - m_offSet; |
| 2067 FX_DWORD input_size = | 2067 uint32_t input_size = |
| 2068 remain_size > FXCODEC_BLOCK_SIZE ? FXCODEC_BLOCK_SIZE : remain_size; | 2068 remain_size > FXCODEC_BLOCK_SIZE ? FXCODEC_BLOCK_SIZE : remain_size; |
| 2069 if (input_size == 0) { | 2069 if (input_size == 0) { |
| 2070 if (m_pPngContext) { | 2070 if (m_pPngContext) { |
| 2071 pPngModule->Finish(m_pPngContext); | 2071 pPngModule->Finish(m_pPngContext); |
| 2072 } | 2072 } |
| 2073 m_pPngContext = NULL; | 2073 m_pPngContext = NULL; |
| 2074 m_pDeviceBitmap = NULL; | 2074 m_pDeviceBitmap = NULL; |
| 2075 m_pFile = NULL; | 2075 m_pFile = NULL; |
| 2076 return m_status = FXCODEC_STATUS_DECODE_FINISH; | 2076 return m_status = FXCODEC_STATUS_DECODE_FINISH; |
| 2077 } | 2077 } |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2292 } | 2292 } |
| 2293 } break; | 2293 } break; |
| 2294 default: | 2294 default: |
| 2295 break; | 2295 break; |
| 2296 } | 2296 } |
| 2297 return FXCODEC_STATUS_ERROR; | 2297 return FXCODEC_STATUS_ERROR; |
| 2298 } | 2298 } |
| 2299 ICodec_ProgressiveDecoder* CCodec_ModuleMgr::CreateProgressiveDecoder() { | 2299 ICodec_ProgressiveDecoder* CCodec_ModuleMgr::CreateProgressiveDecoder() { |
| 2300 return new CCodec_ProgressiveDecoder(this); | 2300 return new CCodec_ProgressiveDecoder(this); |
| 2301 } | 2301 } |
| OLD | NEW |