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 |