| 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/include/fxcodec/fx_codec.h" | 7 #include "core/include/fxcodec/fx_codec.h" |
| 8 #include "core/include/fxge/fx_dib.h" | 8 #include "core/include/fxge/fx_dib.h" |
| 9 #include "core/src/fxcodec/codec/fx_codec_progress.h" | 9 #include "core/src/fxcodec/codec/fx_codec_progress.h" |
| 10 void CFXCODEC_WeightTable::Calc(int dest_len, | 10 void CFXCODEC_WeightTable::Calc(int dest_len, |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 m_SrcPaletteNumber = 0; | 265 m_SrcPaletteNumber = 0; |
| 266 m_GifPltNumber = 0; | 266 m_GifPltNumber = 0; |
| 267 m_GifBgIndex = 0; | 267 m_GifBgIndex = 0; |
| 268 m_pGifPalette = NULL; | 268 m_pGifPalette = NULL; |
| 269 m_GifTransIndex = -1; | 269 m_GifTransIndex = -1; |
| 270 m_GifFrameRect = FX_RECT(0, 0, 0, 0); | 270 m_GifFrameRect = FX_RECT(0, 0, 0, 0); |
| 271 m_BmpIsTopBottom = FALSE; | 271 m_BmpIsTopBottom = FALSE; |
| 272 } | 272 } |
| 273 CCodec_ProgressiveDecoder::~CCodec_ProgressiveDecoder() { | 273 CCodec_ProgressiveDecoder::~CCodec_ProgressiveDecoder() { |
| 274 m_pFile = NULL; | 274 m_pFile = NULL; |
| 275 if (m_pJpegContext != NULL) { | 275 if (m_pJpegContext) { |
| 276 m_pCodecMgr->GetJpegModule()->Finish(m_pJpegContext); | 276 m_pCodecMgr->GetJpegModule()->Finish(m_pJpegContext); |
| 277 } | 277 } |
| 278 if (m_pPngContext != NULL) { | 278 if (m_pPngContext) { |
| 279 m_pCodecMgr->GetPngModule()->Finish(m_pPngContext); | 279 m_pCodecMgr->GetPngModule()->Finish(m_pPngContext); |
| 280 } | 280 } |
| 281 if (m_pGifContext != NULL) { | 281 if (m_pGifContext) { |
| 282 m_pCodecMgr->GetGifModule()->Finish(m_pGifContext); | 282 m_pCodecMgr->GetGifModule()->Finish(m_pGifContext); |
| 283 } | 283 } |
| 284 if (m_pBmpContext != NULL) { | 284 if (m_pBmpContext) { |
| 285 m_pCodecMgr->GetBmpModule()->Finish(m_pBmpContext); | 285 m_pCodecMgr->GetBmpModule()->Finish(m_pBmpContext); |
| 286 } | 286 } |
| 287 if (m_pTiffContext != NULL) { | 287 if (m_pTiffContext) { |
| 288 m_pCodecMgr->GetTiffModule()->DestroyDecoder(m_pTiffContext); | 288 m_pCodecMgr->GetTiffModule()->DestroyDecoder(m_pTiffContext); |
| 289 } | 289 } |
| 290 if (m_pSrcBuf != NULL) { | 290 FX_Free(m_pSrcBuf); |
| 291 FX_Free(m_pSrcBuf); | 291 FX_Free(m_pDecodeBuf); |
| 292 } | 292 FX_Free(m_pSrcPalette); |
| 293 if (m_pDecodeBuf != NULL) { | |
| 294 FX_Free(m_pDecodeBuf); | |
| 295 } | |
| 296 if (m_pSrcPalette != NULL) { | |
| 297 FX_Free(m_pSrcPalette); | |
| 298 } | |
| 299 } | 293 } |
| 300 FX_BOOL CCodec_ProgressiveDecoder::JpegReadMoreData( | 294 FX_BOOL CCodec_ProgressiveDecoder::JpegReadMoreData( |
| 301 ICodec_JpegModule* pJpegModule, | 295 ICodec_JpegModule* pJpegModule, |
| 302 FXCODEC_STATUS& err_status) { | 296 FXCODEC_STATUS& err_status) { |
| 303 FX_DWORD dwSize = (FX_DWORD)m_pFile->GetSize(); | 297 FX_DWORD dwSize = (FX_DWORD)m_pFile->GetSize(); |
| 304 if (dwSize <= m_offSet) { | 298 if (dwSize <= m_offSet) { |
| 305 return FALSE; | 299 return FALSE; |
| 306 } | 300 } |
| 307 dwSize = dwSize - m_offSet; | 301 dwSize = dwSize - m_offSet; |
| 308 FX_DWORD dwAvail = pJpegModule->GetAvailInput(m_pJpegContext, NULL); | 302 FX_DWORD dwAvail = pJpegModule->GetAvailInput(m_pJpegContext, NULL); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 380 return FALSE; | 374 return FALSE; |
| 381 } | 375 } |
| 382 *gamma = FXCODEC_PNG_GAMMA; | 376 *gamma = FXCODEC_PNG_GAMMA; |
| 383 return TRUE; | 377 return TRUE; |
| 384 } | 378 } |
| 385 FX_BOOL CCodec_ProgressiveDecoder::PngAskScanlineBufFunc(void* pModule, | 379 FX_BOOL CCodec_ProgressiveDecoder::PngAskScanlineBufFunc(void* pModule, |
| 386 int line, | 380 int line, |
| 387 uint8_t*& src_buf) { | 381 uint8_t*& src_buf) { |
| 388 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; | 382 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; |
| 389 CFX_DIBitmap* pDIBitmap = pCodec->m_pDeviceBitmap; | 383 CFX_DIBitmap* pDIBitmap = pCodec->m_pDeviceBitmap; |
| 390 ASSERT(pDIBitmap != NULL); | 384 if (!pDIBitmap) { |
| 391 if (pDIBitmap == NULL) { | 385 ASSERT(false); |
| 392 return FALSE; | 386 return FALSE; |
| 393 } | 387 } |
| 394 if (line >= pCodec->m_clipBox.top && line < pCodec->m_clipBox.bottom) { | 388 if (line >= pCodec->m_clipBox.top && line < pCodec->m_clipBox.bottom) { |
| 395 double scale_y = | 389 double scale_y = |
| 396 (double)pCodec->m_sizeY / (double)pCodec->m_clipBox.Height(); | 390 (double)pCodec->m_sizeY / (double)pCodec->m_clipBox.Height(); |
| 397 int32_t row = | 391 int32_t row = |
| 398 (int32_t)((line - pCodec->m_clipBox.top) * scale_y) + pCodec->m_startY; | 392 (int32_t)((line - pCodec->m_clipBox.top) * scale_y) + pCodec->m_startY; |
| 399 uint8_t* src_scan = (uint8_t*)pDIBitmap->GetScanline(row); | 393 uint8_t* src_scan = (uint8_t*)pDIBitmap->GetScanline(row); |
| 400 uint8_t* des_scan = pCodec->m_pDecodeBuf; | 394 uint8_t* des_scan = pCodec->m_pDecodeBuf; |
| 401 src_buf = pCodec->m_pDecodeBuf; | 395 src_buf = pCodec->m_pDecodeBuf; |
| 402 int32_t src_Bpp = pDIBitmap->GetBPP() >> 3; | 396 int32_t src_Bpp = pDIBitmap->GetBPP() >> 3; |
| 403 int32_t des_Bpp = (pCodec->m_SrcFormat & 0xff) >> 3; | 397 int32_t des_Bpp = (pCodec->m_SrcFormat & 0xff) >> 3; |
| 404 int32_t src_left = pCodec->m_startX; | 398 int32_t src_left = pCodec->m_startX; |
| 405 int32_t des_left = pCodec->m_clipBox.left; | 399 int32_t des_left = pCodec->m_clipBox.left; |
| 406 src_scan += src_left * src_Bpp; | 400 src_scan += src_left * src_Bpp; |
| 407 des_scan += des_left * des_Bpp; | 401 des_scan += des_left * des_Bpp; |
| 408 for (int32_t src_col = 0; src_col < pCodec->m_sizeX; src_col++) { | 402 for (int32_t src_col = 0; src_col < pCodec->m_sizeX; src_col++) { |
| 409 PixelWeight* pPixelWeights = | 403 PixelWeight* pPixelWeights = |
| 410 pCodec->m_WeightHorzOO.GetPixelWeight(src_col); | 404 pCodec->m_WeightHorzOO.GetPixelWeight(src_col); |
| 411 if (pPixelWeights->m_SrcStart != pPixelWeights->m_SrcEnd) { | 405 if (pPixelWeights->m_SrcStart != pPixelWeights->m_SrcEnd) { |
| 412 continue; | 406 continue; |
| 413 } | 407 } |
| 414 switch (pDIBitmap->GetFormat()) { | 408 switch (pDIBitmap->GetFormat()) { |
| 415 case FXDIB_1bppMask: | 409 case FXDIB_1bppMask: |
| 416 case FXDIB_1bppRgb: | 410 case FXDIB_1bppRgb: |
| 417 ASSERT(FALSE); | 411 ASSERT(FALSE); |
| 418 return FALSE; | 412 return FALSE; |
| 419 case FXDIB_8bppMask: | 413 case FXDIB_8bppMask: |
| 420 case FXDIB_8bppRgb: { | 414 case FXDIB_8bppRgb: { |
| 421 if (pDIBitmap->GetPalette() != NULL) { | 415 if (pDIBitmap->GetPalette()) { |
| 422 return FALSE; | 416 return FALSE; |
| 423 } | 417 } |
| 424 FX_DWORD des_g = 0; | 418 FX_DWORD des_g = 0; |
| 425 des_g += pPixelWeights->m_Weights[0] * src_scan[src_col]; | 419 des_g += pPixelWeights->m_Weights[0] * src_scan[src_col]; |
| 426 des_scan[pPixelWeights->m_SrcStart] = (uint8_t)(des_g >> 16); | 420 des_scan[pPixelWeights->m_SrcStart] = (uint8_t)(des_g >> 16); |
| 427 } break; | 421 } break; |
| 428 case FXDIB_Rgb: | 422 case FXDIB_Rgb: |
| 429 case FXDIB_Rgb32: { | 423 case FXDIB_Rgb32: { |
| 430 FX_DWORD des_b = 0, des_g = 0, des_r = 0; | 424 FX_DWORD des_b = 0, des_g = 0, des_r = 0; |
| 431 const uint8_t* p = src_scan + src_col * src_Bpp; | 425 const uint8_t* p = src_scan + src_col * src_Bpp; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 470 des_scan += des_left * des_Bpp; | 464 des_scan += des_left * des_Bpp; |
| 471 for (int32_t des_col = 0; des_col < m_sizeX; des_col++) { | 465 for (int32_t des_col = 0; des_col < m_sizeX; des_col++) { |
| 472 PixelWeight* pPixelWeights = m_WeightHorzOO.GetPixelWeight(des_col); | 466 PixelWeight* pPixelWeights = m_WeightHorzOO.GetPixelWeight(des_col); |
| 473 switch (pDeviceBitmap->GetFormat()) { | 467 switch (pDeviceBitmap->GetFormat()) { |
| 474 case FXDIB_1bppMask: | 468 case FXDIB_1bppMask: |
| 475 case FXDIB_1bppRgb: | 469 case FXDIB_1bppRgb: |
| 476 ASSERT(FALSE); | 470 ASSERT(FALSE); |
| 477 return; | 471 return; |
| 478 case FXDIB_8bppMask: | 472 case FXDIB_8bppMask: |
| 479 case FXDIB_8bppRgb: { | 473 case FXDIB_8bppRgb: { |
| 480 if (pDeviceBitmap->GetPalette() != NULL) { | 474 if (pDeviceBitmap->GetPalette()) { |
| 481 return; | 475 return; |
| 482 } | 476 } |
| 483 FX_DWORD des_g = 0; | 477 FX_DWORD des_g = 0; |
| 484 des_g += | 478 des_g += |
| 485 pPixelWeights->m_Weights[0] * src_scan[pPixelWeights->m_SrcStart]; | 479 pPixelWeights->m_Weights[0] * src_scan[pPixelWeights->m_SrcStart]; |
| 486 des_g += | 480 des_g += |
| 487 pPixelWeights->m_Weights[1] * src_scan[pPixelWeights->m_SrcEnd]; | 481 pPixelWeights->m_Weights[1] * src_scan[pPixelWeights->m_SrcEnd]; |
| 488 *des_scan++ = (uint8_t)(des_g >> 16); | 482 *des_scan++ = (uint8_t)(des_g >> 16); |
| 489 } break; | 483 } break; |
| 490 case FXDIB_Rgb: | 484 case FXDIB_Rgb: |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 default: | 519 default: |
| 526 return; | 520 return; |
| 527 } | 521 } |
| 528 } | 522 } |
| 529 } | 523 } |
| 530 void CCodec_ProgressiveDecoder::PngFillScanlineBufCompletedFunc(void* pModule, | 524 void CCodec_ProgressiveDecoder::PngFillScanlineBufCompletedFunc(void* pModule, |
| 531 int pass, | 525 int pass, |
| 532 int line) { | 526 int line) { |
| 533 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; | 527 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; |
| 534 CFX_DIBitmap* pDIBitmap = pCodec->m_pDeviceBitmap; | 528 CFX_DIBitmap* pDIBitmap = pCodec->m_pDeviceBitmap; |
| 535 ASSERT(pDIBitmap != NULL); | 529 ASSERT(pDIBitmap); |
| 536 int src_top = pCodec->m_clipBox.top; | 530 int src_top = pCodec->m_clipBox.top; |
| 537 int src_bottom = pCodec->m_clipBox.bottom; | 531 int src_bottom = pCodec->m_clipBox.bottom; |
| 538 int des_top = pCodec->m_startY; | 532 int des_top = pCodec->m_startY; |
| 539 int src_hei = pCodec->m_clipBox.Height(); | 533 int src_hei = pCodec->m_clipBox.Height(); |
| 540 int des_hei = pCodec->m_sizeY; | 534 int des_hei = pCodec->m_sizeY; |
| 541 if (line >= src_top && line < src_bottom) { | 535 if (line >= src_top && line < src_bottom) { |
| 542 double scale_y = (double)des_hei / (double)src_hei; | 536 double scale_y = (double)des_hei / (double)src_hei; |
| 543 int src_row = line - src_top; | 537 int src_row = line - src_top; |
| 544 int des_row = (int)(src_row * scale_y) + des_top; | 538 int des_row = (int)(src_row * scale_y) + des_top; |
| 545 if (des_row >= des_top + des_hei) { | 539 if (des_row >= des_top + des_hei) { |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 693 } | 687 } |
| 694 } | 688 } |
| 695 } | 689 } |
| 696 return TRUE; | 690 return TRUE; |
| 697 } | 691 } |
| 698 void CCodec_ProgressiveDecoder::GifReadScanlineCallback(void* pModule, | 692 void CCodec_ProgressiveDecoder::GifReadScanlineCallback(void* pModule, |
| 699 int32_t row_num, | 693 int32_t row_num, |
| 700 uint8_t* row_buf) { | 694 uint8_t* row_buf) { |
| 701 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; | 695 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; |
| 702 CFX_DIBitmap* pDIBitmap = pCodec->m_pDeviceBitmap; | 696 CFX_DIBitmap* pDIBitmap = pCodec->m_pDeviceBitmap; |
| 703 ASSERT(pDIBitmap != NULL); | 697 ASSERT(pDIBitmap); |
| 704 int32_t img_width = pCodec->m_GifFrameRect.Width(); | 698 int32_t img_width = pCodec->m_GifFrameRect.Width(); |
| 705 if (!pDIBitmap->HasAlpha()) { | 699 if (!pDIBitmap->HasAlpha()) { |
| 706 uint8_t* byte_ptr = row_buf; | 700 uint8_t* byte_ptr = row_buf; |
| 707 for (int i = 0; i < img_width; i++) { | 701 for (int i = 0; i < img_width; i++) { |
| 708 if (*byte_ptr == pCodec->m_GifTransIndex) { | 702 if (*byte_ptr == pCodec->m_GifTransIndex) { |
| 709 *byte_ptr = pCodec->m_GifBgIndex; | 703 *byte_ptr = pCodec->m_GifBgIndex; |
| 710 } | 704 } |
| 711 byte_ptr++; | 705 byte_ptr++; |
| 712 } | 706 } |
| 713 } | 707 } |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 781 const uint8_t* scan_src2 = | 775 const uint8_t* scan_src2 = |
| 782 pDeviceBitmap->GetScanline(pWeight->m_SrcEnd + des_top) + des_ScanOffet; | 776 pDeviceBitmap->GetScanline(pWeight->m_SrcEnd + des_top) + des_ScanOffet; |
| 783 for (int des_col = 0; des_col < m_sizeX; des_col++) { | 777 for (int des_col = 0; des_col < m_sizeX; des_col++) { |
| 784 switch (pDeviceBitmap->GetFormat()) { | 778 switch (pDeviceBitmap->GetFormat()) { |
| 785 case FXDIB_Invalid: | 779 case FXDIB_Invalid: |
| 786 case FXDIB_1bppMask: | 780 case FXDIB_1bppMask: |
| 787 case FXDIB_1bppRgb: | 781 case FXDIB_1bppRgb: |
| 788 return; | 782 return; |
| 789 case FXDIB_8bppMask: | 783 case FXDIB_8bppMask: |
| 790 case FXDIB_8bppRgb: { | 784 case FXDIB_8bppRgb: { |
| 791 if (pDeviceBitmap->GetPalette() != NULL) { | 785 if (pDeviceBitmap->GetPalette()) { |
| 792 return; | 786 return; |
| 793 } | 787 } |
| 794 int des_g = 0; | 788 int des_g = 0; |
| 795 des_g += pWeight->m_Weights[0] * (*scan_src1++); | 789 des_g += pWeight->m_Weights[0] * (*scan_src1++); |
| 796 des_g += pWeight->m_Weights[1] * (*scan_src2++); | 790 des_g += pWeight->m_Weights[1] * (*scan_src2++); |
| 797 *scan_des++ = (uint8_t)(des_g >> 16); | 791 *scan_des++ = (uint8_t)(des_g >> 16); |
| 798 } break; | 792 } break; |
| 799 case FXDIB_Rgb: | 793 case FXDIB_Rgb: |
| 800 case FXDIB_Rgb32: { | 794 case FXDIB_Rgb32: { |
| 801 FX_DWORD des_b = 0, des_g = 0, des_r = 0; | 795 FX_DWORD des_b = 0, des_g = 0, des_r = 0; |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 884 error_status)) { | 878 error_status)) { |
| 885 return FALSE; | 879 return FALSE; |
| 886 } | 880 } |
| 887 return TRUE; | 881 return TRUE; |
| 888 } | 882 } |
| 889 void CCodec_ProgressiveDecoder::BmpReadScanlineCallback(void* pModule, | 883 void CCodec_ProgressiveDecoder::BmpReadScanlineCallback(void* pModule, |
| 890 int32_t row_num, | 884 int32_t row_num, |
| 891 uint8_t* row_buf) { | 885 uint8_t* row_buf) { |
| 892 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; | 886 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; |
| 893 CFX_DIBitmap* pDIBitmap = pCodec->m_pDeviceBitmap; | 887 CFX_DIBitmap* pDIBitmap = pCodec->m_pDeviceBitmap; |
| 894 ASSERT(pDIBitmap != NULL); | 888 ASSERT(pDIBitmap); |
| 895 FXSYS_memcpy(pCodec->m_pDecodeBuf, row_buf, pCodec->m_ScanlineSize); | 889 FXSYS_memcpy(pCodec->m_pDecodeBuf, row_buf, pCodec->m_ScanlineSize); |
| 896 int src_top = pCodec->m_clipBox.top; | 890 int src_top = pCodec->m_clipBox.top; |
| 897 int src_bottom = pCodec->m_clipBox.bottom; | 891 int src_bottom = pCodec->m_clipBox.bottom; |
| 898 int des_top = pCodec->m_startY; | 892 int des_top = pCodec->m_startY; |
| 899 int src_hei = pCodec->m_clipBox.Height(); | 893 int src_hei = pCodec->m_clipBox.Height(); |
| 900 int des_hei = pCodec->m_sizeY; | 894 int des_hei = pCodec->m_sizeY; |
| 901 if (row_num >= src_top && row_num < src_bottom) { | 895 if (row_num >= src_top && row_num < src_bottom) { |
| 902 double scale_y = (double)des_hei / (double)src_hei; | 896 double scale_y = (double)des_hei / (double)src_hei; |
| 903 int src_row = row_num - src_top; | 897 int src_row = row_num - src_top; |
| 904 int des_row = (int)(src_row * scale_y) + des_top; | 898 int des_row = (int)(src_row * scale_y) + des_top; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 946 const uint8_t* scan_src2 = | 940 const uint8_t* scan_src2 = |
| 947 pDeviceBitmap->GetScanline(pWeight->m_SrcEnd + des_top) + des_ScanOffet; | 941 pDeviceBitmap->GetScanline(pWeight->m_SrcEnd + des_top) + des_ScanOffet; |
| 948 for (int des_col = 0; des_col < m_sizeX; des_col++) { | 942 for (int des_col = 0; des_col < m_sizeX; des_col++) { |
| 949 switch (pDeviceBitmap->GetFormat()) { | 943 switch (pDeviceBitmap->GetFormat()) { |
| 950 case FXDIB_Invalid: | 944 case FXDIB_Invalid: |
| 951 case FXDIB_1bppMask: | 945 case FXDIB_1bppMask: |
| 952 case FXDIB_1bppRgb: | 946 case FXDIB_1bppRgb: |
| 953 return; | 947 return; |
| 954 case FXDIB_8bppMask: | 948 case FXDIB_8bppMask: |
| 955 case FXDIB_8bppRgb: { | 949 case FXDIB_8bppRgb: { |
| 956 if (pDeviceBitmap->GetPalette() != NULL) { | 950 if (pDeviceBitmap->GetPalette()) { |
| 957 return; | 951 return; |
| 958 } | 952 } |
| 959 int des_g = 0; | 953 int des_g = 0; |
| 960 des_g += pWeight->m_Weights[0] * (*scan_src1++); | 954 des_g += pWeight->m_Weights[0] * (*scan_src1++); |
| 961 des_g += pWeight->m_Weights[1] * (*scan_src2++); | 955 des_g += pWeight->m_Weights[1] * (*scan_src2++); |
| 962 *scan_des++ = (uint8_t)(des_g >> 16); | 956 *scan_des++ = (uint8_t)(des_g >> 16); |
| 963 } break; | 957 } break; |
| 964 case FXDIB_Rgb: | 958 case FXDIB_Rgb: |
| 965 case FXDIB_Rgb32: { | 959 case FXDIB_Rgb32: { |
| 966 FX_DWORD des_b = 0, des_g = 0, des_r = 0; | 960 FX_DWORD des_b = 0, des_g = 0, des_r = 0; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 999 } | 993 } |
| 1000 } | 994 } |
| 1001 FX_BOOL CCodec_ProgressiveDecoder::DetectImageType( | 995 FX_BOOL CCodec_ProgressiveDecoder::DetectImageType( |
| 1002 FXCODEC_IMAGE_TYPE imageType, | 996 FXCODEC_IMAGE_TYPE imageType, |
| 1003 CFX_DIBAttribute* pAttribute) { | 997 CFX_DIBAttribute* pAttribute) { |
| 1004 m_offSet = 0; | 998 m_offSet = 0; |
| 1005 FX_DWORD size = (FX_DWORD)m_pFile->GetSize(); | 999 FX_DWORD size = (FX_DWORD)m_pFile->GetSize(); |
| 1006 if (size > FXCODEC_BLOCK_SIZE) { | 1000 if (size > FXCODEC_BLOCK_SIZE) { |
| 1007 size = FXCODEC_BLOCK_SIZE; | 1001 size = FXCODEC_BLOCK_SIZE; |
| 1008 } | 1002 } |
| 1009 if (m_pSrcBuf != NULL) { | 1003 FX_Free(m_pSrcBuf); |
| 1010 FX_Free(m_pSrcBuf); | |
| 1011 m_pSrcBuf = NULL; | |
| 1012 } | |
| 1013 m_pSrcBuf = FX_Alloc(uint8_t, size); | 1004 m_pSrcBuf = FX_Alloc(uint8_t, size); |
| 1014 if (m_pSrcBuf == NULL) { | |
| 1015 m_status = FXCODEC_STATUS_ERR_MEMORY; | |
| 1016 return FALSE; | |
| 1017 } | |
| 1018 FXSYS_memset(m_pSrcBuf, 0, size); | 1005 FXSYS_memset(m_pSrcBuf, 0, size); |
| 1019 m_SrcSize = size; | 1006 m_SrcSize = size; |
| 1020 switch (imageType) { | 1007 switch (imageType) { |
| 1021 case FXCODEC_IMAGE_BMP: { | 1008 case FXCODEC_IMAGE_BMP: { |
| 1022 ICodec_BmpModule* pBmpModule = m_pCodecMgr->GetBmpModule(); | 1009 ICodec_BmpModule* pBmpModule = m_pCodecMgr->GetBmpModule(); |
| 1023 if (pBmpModule == NULL) { | 1010 if (pBmpModule == NULL) { |
| 1024 m_status = FXCODEC_STATUS_ERR_MEMORY; | 1011 m_status = FXCODEC_STATUS_ERR_MEMORY; |
| 1025 return FALSE; | 1012 return FALSE; |
| 1026 } | 1013 } |
| 1027 pBmpModule->InputImagePositionBufCallback = | 1014 pBmpModule->InputImagePositionBufCallback = |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1049 m_status = error_status; | 1036 m_status = error_status; |
| 1050 return FALSE; | 1037 return FALSE; |
| 1051 } | 1038 } |
| 1052 readResult = pBmpModule->ReadHeader( | 1039 readResult = pBmpModule->ReadHeader( |
| 1053 m_pBmpContext, &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom, | 1040 m_pBmpContext, &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom, |
| 1054 &m_SrcComponents, &m_SrcPaletteNumber, &pPalette, pAttribute); | 1041 &m_SrcComponents, &m_SrcPaletteNumber, &pPalette, pAttribute); |
| 1055 } | 1042 } |
| 1056 if (readResult == 1) { | 1043 if (readResult == 1) { |
| 1057 m_SrcBPC = 8; | 1044 m_SrcBPC = 8; |
| 1058 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); | 1045 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); |
| 1059 if (m_pSrcPalette != NULL) { | 1046 FX_Free(m_pSrcPalette); |
| 1060 FX_Free(m_pSrcPalette); | |
| 1061 m_pSrcPalette = NULL; | |
| 1062 } | |
| 1063 if (m_SrcPaletteNumber) { | 1047 if (m_SrcPaletteNumber) { |
| 1064 m_pSrcPalette = FX_Alloc(FX_ARGB, m_SrcPaletteNumber); | 1048 m_pSrcPalette = FX_Alloc(FX_ARGB, m_SrcPaletteNumber); |
| 1065 if (m_pSrcPalette == NULL) { | |
| 1066 m_status = FXCODEC_STATUS_ERR_MEMORY; | |
| 1067 return FALSE; | |
| 1068 } | |
| 1069 FXSYS_memcpy(m_pSrcPalette, pPalette, | 1049 FXSYS_memcpy(m_pSrcPalette, pPalette, |
| 1070 m_SrcPaletteNumber * sizeof(FX_DWORD)); | 1050 m_SrcPaletteNumber * sizeof(FX_DWORD)); |
| 1051 } else { |
| 1052 m_pSrcPalette = nullptr; |
| 1071 } | 1053 } |
| 1072 return TRUE; | 1054 return TRUE; |
| 1073 } | 1055 } |
| 1074 if (m_pBmpContext != NULL) { | 1056 if (m_pBmpContext) { |
| 1075 pBmpModule->Finish(m_pBmpContext); | 1057 pBmpModule->Finish(m_pBmpContext); |
| 1076 m_pBmpContext = NULL; | 1058 m_pBmpContext = NULL; |
| 1077 } | 1059 } |
| 1078 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1060 m_status = FXCODEC_STATUS_ERR_FORMAT; |
| 1079 return FALSE; | 1061 return FALSE; |
| 1080 } break; | 1062 } break; |
| 1081 case FXCODEC_IMAGE_JPG: { | 1063 case FXCODEC_IMAGE_JPG: { |
| 1082 ICodec_JpegModule* pJpegModule = m_pCodecMgr->GetJpegModule(); | 1064 ICodec_JpegModule* pJpegModule = m_pCodecMgr->GetJpegModule(); |
| 1083 if (pJpegModule == NULL) { | 1065 if (pJpegModule == NULL) { |
| 1084 m_status = FXCODEC_STATUS_ERR_MEMORY; | 1066 m_status = FXCODEC_STATUS_ERR_MEMORY; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1107 } | 1089 } |
| 1108 readResult = | 1090 readResult = |
| 1109 pJpegModule->ReadHeader(m_pJpegContext, &m_SrcWidth, &m_SrcHeight, | 1091 pJpegModule->ReadHeader(m_pJpegContext, &m_SrcWidth, &m_SrcHeight, |
| 1110 &m_SrcComponents, pAttribute); | 1092 &m_SrcComponents, pAttribute); |
| 1111 } | 1093 } |
| 1112 if (!readResult) { | 1094 if (!readResult) { |
| 1113 m_SrcBPC = 8; | 1095 m_SrcBPC = 8; |
| 1114 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); | 1096 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); |
| 1115 return TRUE; | 1097 return TRUE; |
| 1116 } | 1098 } |
| 1117 if (m_pJpegContext != NULL) { | 1099 if (m_pJpegContext) { |
| 1118 pJpegModule->Finish(m_pJpegContext); | 1100 pJpegModule->Finish(m_pJpegContext); |
| 1119 m_pJpegContext = NULL; | 1101 m_pJpegContext = NULL; |
| 1120 } | 1102 } |
| 1121 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1103 m_status = FXCODEC_STATUS_ERR_FORMAT; |
| 1122 return FALSE; | 1104 return FALSE; |
| 1123 } break; | 1105 } break; |
| 1124 case FXCODEC_IMAGE_PNG: { | 1106 case FXCODEC_IMAGE_PNG: { |
| 1125 ICodec_PngModule* pPngModule = m_pCodecMgr->GetPngModule(); | 1107 ICodec_PngModule* pPngModule = m_pCodecMgr->GetPngModule(); |
| 1126 if (pPngModule == NULL) { | 1108 if (pPngModule == NULL) { |
| 1127 m_status = FXCODEC_STATUS_ERR_MEMORY; | 1109 m_status = FXCODEC_STATUS_ERR_MEMORY; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1143 m_status = FXCODEC_STATUS_ERR_READ; | 1125 m_status = FXCODEC_STATUS_ERR_READ; |
| 1144 return FALSE; | 1126 return FALSE; |
| 1145 } | 1127 } |
| 1146 m_offSet += size; | 1128 m_offSet += size; |
| 1147 bResult = pPngModule->Input(m_pPngContext, m_pSrcBuf, size, pAttribute); | 1129 bResult = pPngModule->Input(m_pPngContext, m_pSrcBuf, size, pAttribute); |
| 1148 while (bResult) { | 1130 while (bResult) { |
| 1149 FX_DWORD remain_size = (FX_DWORD)m_pFile->GetSize() - m_offSet; | 1131 FX_DWORD remain_size = (FX_DWORD)m_pFile->GetSize() - m_offSet; |
| 1150 FX_DWORD input_size = | 1132 FX_DWORD input_size = |
| 1151 remain_size > FXCODEC_BLOCK_SIZE ? FXCODEC_BLOCK_SIZE : remain_size; | 1133 remain_size > FXCODEC_BLOCK_SIZE ? FXCODEC_BLOCK_SIZE : remain_size; |
| 1152 if (input_size == 0) { | 1134 if (input_size == 0) { |
| 1153 if (m_pPngContext != NULL) { | 1135 if (m_pPngContext) { |
| 1154 pPngModule->Finish(m_pPngContext); | 1136 pPngModule->Finish(m_pPngContext); |
| 1155 } | 1137 } |
| 1156 m_pPngContext = NULL; | 1138 m_pPngContext = NULL; |
| 1157 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1139 m_status = FXCODEC_STATUS_ERR_FORMAT; |
| 1158 return FALSE; | 1140 return FALSE; |
| 1159 } | 1141 } |
| 1160 if (m_pSrcBuf != NULL && input_size > m_SrcSize) { | 1142 if (m_pSrcBuf && input_size > m_SrcSize) { |
| 1161 FX_Free(m_pSrcBuf); | 1143 FX_Free(m_pSrcBuf); |
| 1162 m_pSrcBuf = FX_Alloc(uint8_t, input_size); | 1144 m_pSrcBuf = FX_Alloc(uint8_t, input_size); |
| 1163 if (m_pSrcBuf == NULL) { | |
| 1164 m_status = FXCODEC_STATUS_ERR_MEMORY; | |
| 1165 return FALSE; | |
| 1166 } | |
| 1167 FXSYS_memset(m_pSrcBuf, 0, input_size); | 1145 FXSYS_memset(m_pSrcBuf, 0, input_size); |
| 1168 m_SrcSize = input_size; | 1146 m_SrcSize = input_size; |
| 1169 } | 1147 } |
| 1170 bResult = m_pFile->ReadBlock(m_pSrcBuf, m_offSet, input_size); | 1148 bResult = m_pFile->ReadBlock(m_pSrcBuf, m_offSet, input_size); |
| 1171 if (!bResult) { | 1149 if (!bResult) { |
| 1172 m_status = FXCODEC_STATUS_ERR_READ; | 1150 m_status = FXCODEC_STATUS_ERR_READ; |
| 1173 return FALSE; | 1151 return FALSE; |
| 1174 } | 1152 } |
| 1175 m_offSet += input_size; | 1153 m_offSet += input_size; |
| 1176 bResult = | 1154 bResult = |
| 1177 pPngModule->Input(m_pPngContext, m_pSrcBuf, input_size, pAttribute); | 1155 pPngModule->Input(m_pPngContext, m_pSrcBuf, input_size, pAttribute); |
| 1178 } | 1156 } |
| 1179 ASSERT(!bResult); | 1157 ASSERT(!bResult); |
| 1180 if (m_pPngContext != NULL) { | 1158 if (m_pPngContext) { |
| 1181 pPngModule->Finish(m_pPngContext); | 1159 pPngModule->Finish(m_pPngContext); |
| 1182 m_pPngContext = NULL; | 1160 m_pPngContext = NULL; |
| 1183 } | 1161 } |
| 1184 if (m_SrcPassNumber == 0) { | 1162 if (m_SrcPassNumber == 0) { |
| 1185 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1163 m_status = FXCODEC_STATUS_ERR_FORMAT; |
| 1186 return FALSE; | 1164 return FALSE; |
| 1187 } | 1165 } |
| 1188 } break; | 1166 } break; |
| 1189 case FXCODEC_IMAGE_GIF: { | 1167 case FXCODEC_IMAGE_GIF: { |
| 1190 ICodec_GifModule* pGifModule = m_pCodecMgr->GetGifModule(); | 1168 ICodec_GifModule* pGifModule = m_pCodecMgr->GetGifModule(); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1224 } | 1202 } |
| 1225 readResult = pGifModule->ReadHeader( | 1203 readResult = pGifModule->ReadHeader( |
| 1226 m_pGifContext, &m_SrcWidth, &m_SrcHeight, &m_GifPltNumber, | 1204 m_pGifContext, &m_SrcWidth, &m_SrcHeight, &m_GifPltNumber, |
| 1227 (void**)&m_pGifPalette, &m_GifBgIndex, nullptr); | 1205 (void**)&m_pGifPalette, &m_GifBgIndex, nullptr); |
| 1228 } | 1206 } |
| 1229 if (readResult == 1) { | 1207 if (readResult == 1) { |
| 1230 m_SrcBPC = 8; | 1208 m_SrcBPC = 8; |
| 1231 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); | 1209 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); |
| 1232 return TRUE; | 1210 return TRUE; |
| 1233 } | 1211 } |
| 1234 if (m_pGifContext != NULL) { | 1212 if (m_pGifContext) { |
| 1235 pGifModule->Finish(m_pGifContext); | 1213 pGifModule->Finish(m_pGifContext); |
| 1236 m_pGifContext = NULL; | 1214 m_pGifContext = NULL; |
| 1237 } | 1215 } |
| 1238 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1216 m_status = FXCODEC_STATUS_ERR_FORMAT; |
| 1239 return FALSE; | 1217 return FALSE; |
| 1240 } break; | 1218 } break; |
| 1241 case FXCODEC_IMAGE_TIF: { | 1219 case FXCODEC_IMAGE_TIF: { |
| 1242 ICodec_TiffModule* pTiffModule = m_pCodecMgr->GetTiffModule(); | 1220 ICodec_TiffModule* pTiffModule = m_pCodecMgr->GetTiffModule(); |
| 1243 if (pTiffModule == NULL) { | 1221 if (pTiffModule == NULL) { |
| 1244 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1222 m_status = FXCODEC_STATUS_ERR_FORMAT; |
| (...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1704 pDeviceBitmap->GetScanline(pWeight->m_SrcEnd + des_top) + | 1682 pDeviceBitmap->GetScanline(pWeight->m_SrcEnd + des_top) + |
| 1705 des_ScanOffet; | 1683 des_ScanOffet; |
| 1706 for (int des_col = 0; des_col < m_sizeX; des_col++) { | 1684 for (int des_col = 0; des_col < m_sizeX; des_col++) { |
| 1707 switch (pDeviceBitmap->GetFormat()) { | 1685 switch (pDeviceBitmap->GetFormat()) { |
| 1708 case FXDIB_Invalid: | 1686 case FXDIB_Invalid: |
| 1709 case FXDIB_1bppMask: | 1687 case FXDIB_1bppMask: |
| 1710 case FXDIB_1bppRgb: | 1688 case FXDIB_1bppRgb: |
| 1711 return; | 1689 return; |
| 1712 case FXDIB_8bppMask: | 1690 case FXDIB_8bppMask: |
| 1713 case FXDIB_8bppRgb: { | 1691 case FXDIB_8bppRgb: { |
| 1714 if (pDeviceBitmap->GetPalette() != NULL) { | 1692 if (pDeviceBitmap->GetPalette()) { |
| 1715 return; | 1693 return; |
| 1716 } | 1694 } |
| 1717 int des_g = 0; | 1695 int des_g = 0; |
| 1718 des_g += pWeight->m_Weights[0] * (*scan_src1++); | 1696 des_g += pWeight->m_Weights[0] * (*scan_src1++); |
| 1719 des_g += pWeight->m_Weights[1] * (*scan_src2++); | 1697 des_g += pWeight->m_Weights[1] * (*scan_src2++); |
| 1720 *scan_des++ = (uint8_t)(des_g >> 16); | 1698 *scan_des++ = (uint8_t)(des_g >> 16); |
| 1721 } break; | 1699 } break; |
| 1722 case FXDIB_Rgb: | 1700 case FXDIB_Rgb: |
| 1723 case FXDIB_Rgb32: { | 1701 case FXDIB_Rgb32: { |
| 1724 FX_DWORD des_b = 0, des_g = 0, des_r = 0; | 1702 FX_DWORD des_b = 0, des_g = 0, des_r = 0; |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1829 } | 1807 } |
| 1830 if (pPause && pPause->NeedToPauseNow()) { | 1808 if (pPause && pPause->NeedToPauseNow()) { |
| 1831 return m_status = FXCODEC_STATUS_FRAME_TOBECONTINUE; | 1809 return m_status = FXCODEC_STATUS_FRAME_TOBECONTINUE; |
| 1832 } | 1810 } |
| 1833 readResult = pGifModule->LoadFrameInfo(m_pGifContext, &m_FrameNumber); | 1811 readResult = pGifModule->LoadFrameInfo(m_pGifContext, &m_FrameNumber); |
| 1834 } | 1812 } |
| 1835 if (readResult == 1) { | 1813 if (readResult == 1) { |
| 1836 frames = m_FrameNumber; | 1814 frames = m_FrameNumber; |
| 1837 return m_status = FXCODEC_STATUS_DECODE_READY; | 1815 return m_status = FXCODEC_STATUS_DECODE_READY; |
| 1838 } | 1816 } |
| 1839 if (m_pGifContext != NULL) { | 1817 if (m_pGifContext) { |
| 1840 pGifModule->Finish(m_pGifContext); | 1818 pGifModule->Finish(m_pGifContext); |
| 1841 m_pGifContext = NULL; | 1819 m_pGifContext = NULL; |
| 1842 } | 1820 } |
| 1843 return m_status = FXCODEC_STATUS_ERROR; | 1821 return m_status = FXCODEC_STATUS_ERROR; |
| 1844 } | 1822 } |
| 1845 } break; | 1823 } break; |
| 1846 default:; | 1824 default:; |
| 1847 } | 1825 } |
| 1848 return FXCODEC_STATUS_ERROR; | 1826 return FXCODEC_STATUS_ERROR; |
| 1849 } | 1827 } |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1914 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERROR; | 1892 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERROR; |
| 1915 if (!JpegReadMoreData(pJpegModule, error_status)) { | 1893 if (!JpegReadMoreData(pJpegModule, error_status)) { |
| 1916 m_pDeviceBitmap = NULL; | 1894 m_pDeviceBitmap = NULL; |
| 1917 m_pFile = NULL; | 1895 m_pFile = NULL; |
| 1918 return m_status = error_status; | 1896 return m_status = error_status; |
| 1919 } | 1897 } |
| 1920 bStart = pJpegModule->StartScanline(m_pJpegContext, down_scale); | 1898 bStart = pJpegModule->StartScanline(m_pJpegContext, down_scale); |
| 1921 } | 1899 } |
| 1922 int scanline_size = (m_SrcWidth + down_scale - 1) / down_scale; | 1900 int scanline_size = (m_SrcWidth + down_scale - 1) / down_scale; |
| 1923 scanline_size = (scanline_size * m_SrcComponents + 3) / 4 * 4; | 1901 scanline_size = (scanline_size * m_SrcComponents + 3) / 4 * 4; |
| 1924 if (m_pDecodeBuf != NULL) { | 1902 FX_Free(m_pDecodeBuf); |
| 1925 FX_Free(m_pDecodeBuf); | |
| 1926 m_pDecodeBuf = NULL; | |
| 1927 } | |
| 1928 m_pDecodeBuf = FX_Alloc(uint8_t, scanline_size); | 1903 m_pDecodeBuf = FX_Alloc(uint8_t, scanline_size); |
| 1929 if (m_pDecodeBuf == NULL) { | |
| 1930 m_pDeviceBitmap = NULL; | |
| 1931 m_pFile = NULL; | |
| 1932 return m_status = FXCODEC_STATUS_ERR_MEMORY; | |
| 1933 } | |
| 1934 FXSYS_memset(m_pDecodeBuf, 0, scanline_size); | 1904 FXSYS_memset(m_pDecodeBuf, 0, scanline_size); |
| 1935 m_WeightHorz.Calc(m_sizeX, 0, m_sizeX, m_clipBox.Width(), 0, | 1905 m_WeightHorz.Calc(m_sizeX, 0, m_sizeX, m_clipBox.Width(), 0, |
| 1936 m_clipBox.Width(), m_bInterpol); | 1906 m_clipBox.Width(), m_bInterpol); |
| 1937 m_WeightVert.Calc(m_sizeY, m_clipBox.Height()); | 1907 m_WeightVert.Calc(m_sizeY, m_clipBox.Height()); |
| 1938 switch (m_SrcComponents) { | 1908 switch (m_SrcComponents) { |
| 1939 case 1: | 1909 case 1: |
| 1940 m_SrcFormat = FXCodec_8bppGray; | 1910 m_SrcFormat = FXCodec_8bppGray; |
| 1941 break; | 1911 break; |
| 1942 case 3: | 1912 case 3: |
| 1943 m_SrcFormat = FXCodec_Rgb; | 1913 m_SrcFormat = FXCodec_Rgb; |
| 1944 break; | 1914 break; |
| 1945 case 4: | 1915 case 4: |
| 1946 m_SrcFormat = FXCodec_Cmyk; | 1916 m_SrcFormat = FXCodec_Cmyk; |
| 1947 break; | 1917 break; |
| 1948 } | 1918 } |
| 1949 GetTransMethod(pDIBitmap->GetFormat(), m_SrcFormat); | 1919 GetTransMethod(pDIBitmap->GetFormat(), m_SrcFormat); |
| 1950 return m_status = FXCODEC_STATUS_DECODE_TOBECONTINUE; | 1920 return m_status = FXCODEC_STATUS_DECODE_TOBECONTINUE; |
| 1951 } break; | 1921 } break; |
| 1952 case FXCODEC_IMAGE_PNG: { | 1922 case FXCODEC_IMAGE_PNG: { |
| 1953 ICodec_PngModule* pPngModule = m_pCodecMgr->GetPngModule(); | 1923 ICodec_PngModule* pPngModule = m_pCodecMgr->GetPngModule(); |
| 1954 if (pPngModule == NULL) { | 1924 if (pPngModule == NULL) { |
| 1955 m_pDeviceBitmap = NULL; | 1925 m_pDeviceBitmap = NULL; |
| 1956 m_pFile = NULL; | 1926 m_pFile = NULL; |
| 1957 return m_status = FXCODEC_STATUS_ERR_MEMORY; | 1927 return m_status = FXCODEC_STATUS_ERR_MEMORY; |
| 1958 } | 1928 } |
| 1959 if (m_pPngContext != NULL) { | 1929 if (m_pPngContext) { |
| 1960 pPngModule->Finish(m_pPngContext); | 1930 pPngModule->Finish(m_pPngContext); |
| 1961 m_pPngContext = NULL; | 1931 m_pPngContext = NULL; |
| 1962 } | 1932 } |
| 1963 m_pPngContext = pPngModule->Start((void*)this); | 1933 m_pPngContext = pPngModule->Start((void*)this); |
| 1964 if (m_pPngContext == NULL) { | 1934 if (m_pPngContext == NULL) { |
| 1965 m_pDeviceBitmap = NULL; | 1935 m_pDeviceBitmap = NULL; |
| 1966 m_pFile = NULL; | 1936 m_pFile = NULL; |
| 1967 return m_status = FXCODEC_STATUS_ERR_MEMORY; | 1937 return m_status = FXCODEC_STATUS_ERR_MEMORY; |
| 1968 } | 1938 } |
| 1969 m_offSet = 0; | 1939 m_offSet = 0; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1983 m_SrcFormat = FXCodec_Argb; | 1953 m_SrcFormat = FXCodec_Argb; |
| 1984 break; | 1954 break; |
| 1985 default: { | 1955 default: { |
| 1986 m_pDeviceBitmap = NULL; | 1956 m_pDeviceBitmap = NULL; |
| 1987 m_pFile = NULL; | 1957 m_pFile = NULL; |
| 1988 return m_status = FXCODEC_STATUS_ERR_PARAMS; | 1958 return m_status = FXCODEC_STATUS_ERR_PARAMS; |
| 1989 } | 1959 } |
| 1990 } | 1960 } |
| 1991 GetTransMethod(m_pDeviceBitmap->GetFormat(), m_SrcFormat); | 1961 GetTransMethod(m_pDeviceBitmap->GetFormat(), m_SrcFormat); |
| 1992 int scanline_size = (m_SrcWidth * m_SrcComponents + 3) / 4 * 4; | 1962 int scanline_size = (m_SrcWidth * m_SrcComponents + 3) / 4 * 4; |
| 1993 if (m_pDecodeBuf != NULL) { | 1963 FX_Free(m_pDecodeBuf); |
| 1994 FX_Free(m_pDecodeBuf); | |
| 1995 m_pDecodeBuf = NULL; | |
| 1996 } | |
| 1997 m_pDecodeBuf = FX_Alloc(uint8_t, scanline_size); | 1964 m_pDecodeBuf = FX_Alloc(uint8_t, scanline_size); |
| 1998 if (m_pDecodeBuf == NULL) { | |
| 1999 m_pDeviceBitmap = NULL; | |
| 2000 m_pFile = NULL; | |
| 2001 return m_status = FXCODEC_STATUS_ERR_MEMORY; | |
| 2002 } | |
| 2003 FXSYS_memset(m_pDecodeBuf, 0, scanline_size); | 1965 FXSYS_memset(m_pDecodeBuf, 0, scanline_size); |
| 2004 m_WeightHorzOO.Calc(m_sizeX, m_clipBox.Width(), m_bInterpol); | 1966 m_WeightHorzOO.Calc(m_sizeX, m_clipBox.Width(), m_bInterpol); |
| 2005 m_WeightVert.Calc(m_sizeY, m_clipBox.Height()); | 1967 m_WeightVert.Calc(m_sizeY, m_clipBox.Height()); |
| 2006 return m_status = FXCODEC_STATUS_DECODE_TOBECONTINUE; | 1968 return m_status = FXCODEC_STATUS_DECODE_TOBECONTINUE; |
| 2007 } break; | 1969 } break; |
| 2008 case FXCODEC_IMAGE_GIF: { | 1970 case FXCODEC_IMAGE_GIF: { |
| 2009 ICodec_GifModule* pGifModule = m_pCodecMgr->GetGifModule(); | 1971 ICodec_GifModule* pGifModule = m_pCodecMgr->GetGifModule(); |
| 2010 if (pGifModule == NULL) { | 1972 if (pGifModule == NULL) { |
| 2011 m_pDeviceBitmap = NULL; | 1973 m_pDeviceBitmap = NULL; |
| 2012 m_pFile = NULL; | 1974 m_pFile = NULL; |
| 2013 return m_status = FXCODEC_STATUS_ERR_MEMORY; | 1975 return m_status = FXCODEC_STATUS_ERR_MEMORY; |
| 2014 } | 1976 } |
| 2015 m_SrcFormat = FXCodec_8bppRgb; | 1977 m_SrcFormat = FXCodec_8bppRgb; |
| 2016 GetTransMethod(m_pDeviceBitmap->GetFormat(), m_SrcFormat); | 1978 GetTransMethod(m_pDeviceBitmap->GetFormat(), m_SrcFormat); |
| 2017 int scanline_size = (m_SrcWidth + 3) / 4 * 4; | 1979 int scanline_size = (m_SrcWidth + 3) / 4 * 4; |
| 2018 if (m_pDecodeBuf != NULL) { | 1980 FX_Free(m_pDecodeBuf); |
| 2019 FX_Free(m_pDecodeBuf); | |
| 2020 m_pDecodeBuf = NULL; | |
| 2021 } | |
| 2022 m_pDecodeBuf = FX_Alloc(uint8_t, scanline_size); | 1981 m_pDecodeBuf = FX_Alloc(uint8_t, scanline_size); |
| 2023 if (m_pDecodeBuf == NULL) { | |
| 2024 m_pDeviceBitmap = NULL; | |
| 2025 m_pFile = NULL; | |
| 2026 return m_status = FXCODEC_STATUS_ERR_MEMORY; | |
| 2027 } | |
| 2028 FXSYS_memset(m_pDecodeBuf, 0, scanline_size); | 1982 FXSYS_memset(m_pDecodeBuf, 0, scanline_size); |
| 2029 m_WeightHorz.Calc(m_sizeX, 0, m_sizeX, m_clipBox.Width(), 0, | 1983 m_WeightHorz.Calc(m_sizeX, 0, m_sizeX, m_clipBox.Width(), 0, |
| 2030 m_clipBox.Width(), m_bInterpol); | 1984 m_clipBox.Width(), m_bInterpol); |
| 2031 m_WeightVert.Calc(m_sizeY, m_clipBox.Height()); | 1985 m_WeightVert.Calc(m_sizeY, m_clipBox.Height()); |
| 2032 m_FrameCur = frames; | 1986 m_FrameCur = frames; |
| 2033 return m_status = FXCODEC_STATUS_DECODE_TOBECONTINUE; | 1987 return m_status = FXCODEC_STATUS_DECODE_TOBECONTINUE; |
| 2034 } break; | 1988 } break; |
| 2035 case FXCODEC_IMAGE_BMP: { | 1989 case FXCODEC_IMAGE_BMP: { |
| 2036 ICodec_BmpModule* pBmpModule = m_pCodecMgr->GetBmpModule(); | 1990 ICodec_BmpModule* pBmpModule = m_pCodecMgr->GetBmpModule(); |
| 2037 if (pBmpModule == NULL) { | 1991 if (pBmpModule == NULL) { |
| 2038 m_pDeviceBitmap = NULL; | 1992 m_pDeviceBitmap = NULL; |
| 2039 m_pFile = NULL; | 1993 m_pFile = NULL; |
| 2040 return m_status = FXCODEC_STATUS_ERR_MEMORY; | 1994 return m_status = FXCODEC_STATUS_ERR_MEMORY; |
| 2041 } | 1995 } |
| 2042 switch (m_SrcComponents) { | 1996 switch (m_SrcComponents) { |
| 2043 case 1: | 1997 case 1: |
| 2044 m_SrcFormat = FXCodec_8bppRgb; | 1998 m_SrcFormat = FXCodec_8bppRgb; |
| 2045 break; | 1999 break; |
| 2046 case 3: | 2000 case 3: |
| 2047 m_SrcFormat = FXCodec_Rgb; | 2001 m_SrcFormat = FXCodec_Rgb; |
| 2048 break; | 2002 break; |
| 2049 case 4: | 2003 case 4: |
| 2050 m_SrcFormat = FXCodec_Rgb32; | 2004 m_SrcFormat = FXCodec_Rgb32; |
| 2051 break; | 2005 break; |
| 2052 } | 2006 } |
| 2053 GetTransMethod(m_pDeviceBitmap->GetFormat(), m_SrcFormat); | 2007 GetTransMethod(m_pDeviceBitmap->GetFormat(), m_SrcFormat); |
| 2054 m_ScanlineSize = (m_SrcWidth * m_SrcComponents + 3) / 4 * 4; | 2008 m_ScanlineSize = (m_SrcWidth * m_SrcComponents + 3) / 4 * 4; |
| 2055 if (m_pDecodeBuf != NULL) { | 2009 FX_Free(m_pDecodeBuf); |
| 2056 FX_Free(m_pDecodeBuf); | |
| 2057 m_pDecodeBuf = NULL; | |
| 2058 } | |
| 2059 m_pDecodeBuf = FX_Alloc(uint8_t, m_ScanlineSize); | 2010 m_pDecodeBuf = FX_Alloc(uint8_t, m_ScanlineSize); |
| 2060 if (m_pDecodeBuf == NULL) { | |
| 2061 m_pDeviceBitmap = NULL; | |
| 2062 m_pFile = NULL; | |
| 2063 return m_status = FXCODEC_STATUS_ERR_MEMORY; | |
| 2064 } | |
| 2065 FXSYS_memset(m_pDecodeBuf, 0, m_ScanlineSize); | 2011 FXSYS_memset(m_pDecodeBuf, 0, m_ScanlineSize); |
| 2066 m_WeightHorz.Calc(m_sizeX, 0, m_sizeX, m_clipBox.Width(), 0, | 2012 m_WeightHorz.Calc(m_sizeX, 0, m_sizeX, m_clipBox.Width(), 0, |
| 2067 m_clipBox.Width(), m_bInterpol); | 2013 m_clipBox.Width(), m_bInterpol); |
| 2068 m_WeightVert.Calc(m_sizeY, m_clipBox.Height()); | 2014 m_WeightVert.Calc(m_sizeY, m_clipBox.Height()); |
| 2069 return m_status = FXCODEC_STATUS_DECODE_TOBECONTINUE; | 2015 return m_status = FXCODEC_STATUS_DECODE_TOBECONTINUE; |
| 2070 } break; | 2016 } break; |
| 2071 case FXCODEC_IMAGE_TIF: | 2017 case FXCODEC_IMAGE_TIF: |
| 2072 return m_status = FXCODEC_STATUS_DECODE_TOBECONTINUE; | 2018 return m_status = FXCODEC_STATUS_DECODE_TOBECONTINUE; |
| 2073 default: | 2019 default: |
| 2074 break; | 2020 break; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2110 } | 2056 } |
| 2111 } | 2057 } |
| 2112 } break; | 2058 } break; |
| 2113 case FXCODEC_IMAGE_PNG: { | 2059 case FXCODEC_IMAGE_PNG: { |
| 2114 ICodec_PngModule* pPngModule = m_pCodecMgr->GetPngModule(); | 2060 ICodec_PngModule* pPngModule = m_pCodecMgr->GetPngModule(); |
| 2115 while (TRUE) { | 2061 while (TRUE) { |
| 2116 FX_DWORD remain_size = (FX_DWORD)m_pFile->GetSize() - m_offSet; | 2062 FX_DWORD remain_size = (FX_DWORD)m_pFile->GetSize() - m_offSet; |
| 2117 FX_DWORD input_size = | 2063 FX_DWORD input_size = |
| 2118 remain_size > FXCODEC_BLOCK_SIZE ? FXCODEC_BLOCK_SIZE : remain_size; | 2064 remain_size > FXCODEC_BLOCK_SIZE ? FXCODEC_BLOCK_SIZE : remain_size; |
| 2119 if (input_size == 0) { | 2065 if (input_size == 0) { |
| 2120 if (m_pPngContext != NULL) { | 2066 if (m_pPngContext) { |
| 2121 pPngModule->Finish(m_pPngContext); | 2067 pPngModule->Finish(m_pPngContext); |
| 2122 } | 2068 } |
| 2123 m_pPngContext = NULL; | 2069 m_pPngContext = NULL; |
| 2124 m_pDeviceBitmap = NULL; | 2070 m_pDeviceBitmap = NULL; |
| 2125 m_pFile = NULL; | 2071 m_pFile = NULL; |
| 2126 return m_status = FXCODEC_STATUS_DECODE_FINISH; | 2072 return m_status = FXCODEC_STATUS_DECODE_FINISH; |
| 2127 } | 2073 } |
| 2128 if (m_pSrcBuf != NULL && input_size > m_SrcSize) { | 2074 if (m_pSrcBuf && input_size > m_SrcSize) { |
| 2129 FX_Free(m_pSrcBuf); | 2075 FX_Free(m_pSrcBuf); |
| 2130 m_pSrcBuf = FX_Alloc(uint8_t, input_size); | 2076 m_pSrcBuf = FX_Alloc(uint8_t, input_size); |
| 2131 if (m_pSrcBuf == NULL) { | |
| 2132 m_pDeviceBitmap = NULL; | |
| 2133 m_pFile = NULL; | |
| 2134 return m_status = FXCODEC_STATUS_ERR_MEMORY; | |
| 2135 } | |
| 2136 FXSYS_memset(m_pSrcBuf, 0, input_size); | 2077 FXSYS_memset(m_pSrcBuf, 0, input_size); |
| 2137 m_SrcSize = input_size; | 2078 m_SrcSize = input_size; |
| 2138 } | 2079 } |
| 2139 FX_BOOL bResult = m_pFile->ReadBlock(m_pSrcBuf, m_offSet, input_size); | 2080 FX_BOOL bResult = m_pFile->ReadBlock(m_pSrcBuf, m_offSet, input_size); |
| 2140 if (!bResult) { | 2081 if (!bResult) { |
| 2141 m_pDeviceBitmap = NULL; | 2082 m_pDeviceBitmap = NULL; |
| 2142 m_pFile = NULL; | 2083 m_pFile = NULL; |
| 2143 return m_status = FXCODEC_STATUS_ERR_READ; | 2084 return m_status = FXCODEC_STATUS_ERR_READ; |
| 2144 } | 2085 } |
| 2145 m_offSet += input_size; | 2086 m_offSet += input_size; |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2345 } | 2286 } |
| 2346 } break; | 2287 } break; |
| 2347 default: | 2288 default: |
| 2348 break; | 2289 break; |
| 2349 } | 2290 } |
| 2350 return FXCODEC_STATUS_ERROR; | 2291 return FXCODEC_STATUS_ERROR; |
| 2351 } | 2292 } |
| 2352 ICodec_ProgressiveDecoder* CCodec_ModuleMgr::CreateProgressiveDecoder() { | 2293 ICodec_ProgressiveDecoder* CCodec_ModuleMgr::CreateProgressiveDecoder() { |
| 2353 return new CCodec_ProgressiveDecoder(this); | 2294 return new CCodec_ProgressiveDecoder(this); |
| 2354 } | 2295 } |
| OLD | NEW |