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/ccodec_progressivedecoder.h" | 7 #include "core/fxcodec/codec/ccodec_progressivedecoder.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 29 matching lines...) Expand all Loading... |
40 CCodec_ProgressiveDecoder::CFXCODEC_WeightTable::CFXCODEC_WeightTable() {} | 40 CCodec_ProgressiveDecoder::CFXCODEC_WeightTable::CFXCODEC_WeightTable() {} |
41 | 41 |
42 CCodec_ProgressiveDecoder::CFXCODEC_WeightTable::~CFXCODEC_WeightTable() {} | 42 CCodec_ProgressiveDecoder::CFXCODEC_WeightTable::~CFXCODEC_WeightTable() {} |
43 | 43 |
44 void CCodec_ProgressiveDecoder::CFXCODEC_WeightTable::Calc(int dest_len, | 44 void CCodec_ProgressiveDecoder::CFXCODEC_WeightTable::Calc(int dest_len, |
45 int dest_min, | 45 int dest_min, |
46 int dest_max, | 46 int dest_max, |
47 int src_len, | 47 int src_len, |
48 int src_min, | 48 int src_min, |
49 int src_max, | 49 int src_max, |
50 FX_BOOL bInterpol) { | 50 bool bInterpol) { |
51 double scale, base; | 51 double scale, base; |
52 scale = (FX_FLOAT)src_len / (FX_FLOAT)dest_len; | 52 scale = (FX_FLOAT)src_len / (FX_FLOAT)dest_len; |
53 if (dest_len < 0) { | 53 if (dest_len < 0) { |
54 base = (FX_FLOAT)(src_len); | 54 base = (FX_FLOAT)(src_len); |
55 } else { | 55 } else { |
56 base = 0.0f; | 56 base = 0.0f; |
57 } | 57 } |
58 m_ItemSize = | 58 m_ItemSize = |
59 (int)(sizeof(int) * 2 + | 59 (int)(sizeof(int) * 2 + |
60 sizeof(int) * (FXSYS_ceil(FXSYS_fabs((FX_FLOAT)scale)) + 1)); | 60 sizeof(int) * (FXSYS_ceil(FXSYS_fabs((FX_FLOAT)scale)) + 1)); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 } | 139 } |
140 } | 140 } |
141 } | 141 } |
142 | 142 |
143 CCodec_ProgressiveDecoder::CFXCODEC_HorzTable::CFXCODEC_HorzTable() {} | 143 CCodec_ProgressiveDecoder::CFXCODEC_HorzTable::CFXCODEC_HorzTable() {} |
144 | 144 |
145 CCodec_ProgressiveDecoder::CFXCODEC_HorzTable::~CFXCODEC_HorzTable() {} | 145 CCodec_ProgressiveDecoder::CFXCODEC_HorzTable::~CFXCODEC_HorzTable() {} |
146 | 146 |
147 void CCodec_ProgressiveDecoder::CFXCODEC_HorzTable::Calc(int dest_len, | 147 void CCodec_ProgressiveDecoder::CFXCODEC_HorzTable::Calc(int dest_len, |
148 int src_len, | 148 int src_len, |
149 FX_BOOL bInterpol) { | 149 bool bInterpol) { |
150 double scale = (double)dest_len / (double)src_len; | 150 double scale = (double)dest_len / (double)src_len; |
151 m_ItemSize = sizeof(int) * 4; | 151 m_ItemSize = sizeof(int) * 4; |
152 int size = dest_len * m_ItemSize + 4; | 152 int size = dest_len * m_ItemSize + 4; |
153 m_pWeightTables.resize(size, 0); | 153 m_pWeightTables.resize(size, 0); |
154 if (scale > 1) { | 154 if (scale > 1) { |
155 int pre_des_col = 0; | 155 int pre_des_col = 0; |
156 for (int src_col = 0; src_col < src_len; src_col++) { | 156 for (int src_col = 0; src_col < src_len; src_col++) { |
157 double des_col_f = src_col * scale; | 157 double des_col_f = src_col * scale; |
158 int des_col = FXSYS_round((FX_FLOAT)des_col_f); | 158 int des_col = FXSYS_round((FX_FLOAT)des_col_f); |
159 PixelWeight* pWeight = GetPixelWeight(des_col); | 159 PixelWeight* pWeight = GetPixelWeight(des_col); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 m_SrcHeight = 0; | 275 m_SrcHeight = 0; |
276 m_SrcComponents = 0; | 276 m_SrcComponents = 0; |
277 m_SrcBPC = 0; | 277 m_SrcBPC = 0; |
278 m_SrcPassNumber = 0; | 278 m_SrcPassNumber = 0; |
279 m_clipBox = FX_RECT(0, 0, 0, 0); | 279 m_clipBox = FX_RECT(0, 0, 0, 0); |
280 m_imagType = FXCODEC_IMAGE_UNKNOWN; | 280 m_imagType = FXCODEC_IMAGE_UNKNOWN; |
281 m_status = FXCODEC_STATUS_DECODE_FINISH; | 281 m_status = FXCODEC_STATUS_DECODE_FINISH; |
282 m_TransMethod = -1; | 282 m_TransMethod = -1; |
283 m_SrcRow = 0; | 283 m_SrcRow = 0; |
284 m_SrcFormat = FXCodec_Invalid; | 284 m_SrcFormat = FXCodec_Invalid; |
285 m_bInterpol = TRUE; | 285 m_bInterpol = true; |
286 m_FrameNumber = 0; | 286 m_FrameNumber = 0; |
287 m_FrameCur = 0; | 287 m_FrameCur = 0; |
288 m_SrcPaletteNumber = 0; | 288 m_SrcPaletteNumber = 0; |
289 m_GifPltNumber = 0; | 289 m_GifPltNumber = 0; |
290 m_GifBgIndex = 0; | 290 m_GifBgIndex = 0; |
291 m_pGifPalette = nullptr; | 291 m_pGifPalette = nullptr; |
292 m_GifTransIndex = -1; | 292 m_GifTransIndex = -1; |
293 m_GifFrameRect = FX_RECT(0, 0, 0, 0); | 293 m_GifFrameRect = FX_RECT(0, 0, 0, 0); |
294 m_BmpIsTopBottom = FALSE; | 294 m_BmpIsTopBottom = false; |
295 } | 295 } |
296 | 296 |
297 CCodec_ProgressiveDecoder::~CCodec_ProgressiveDecoder() { | 297 CCodec_ProgressiveDecoder::~CCodec_ProgressiveDecoder() { |
298 m_pFile = nullptr; | 298 m_pFile = nullptr; |
299 if (m_pJpegContext) | 299 if (m_pJpegContext) |
300 m_pCodecMgr->GetJpegModule()->Finish(m_pJpegContext); | 300 m_pCodecMgr->GetJpegModule()->Finish(m_pJpegContext); |
301 if (m_pPngContext) | 301 if (m_pPngContext) |
302 m_pCodecMgr->GetPngModule()->Finish(m_pPngContext); | 302 m_pCodecMgr->GetPngModule()->Finish(m_pPngContext); |
303 if (m_pGifContext) | 303 if (m_pGifContext) |
304 m_pCodecMgr->GetGifModule()->Finish(m_pGifContext); | 304 m_pCodecMgr->GetGifModule()->Finish(m_pGifContext); |
305 if (m_pBmpContext) | 305 if (m_pBmpContext) |
306 m_pCodecMgr->GetBmpModule()->Finish(m_pBmpContext); | 306 m_pCodecMgr->GetBmpModule()->Finish(m_pBmpContext); |
307 if (m_pTiffContext) | 307 if (m_pTiffContext) |
308 m_pCodecMgr->GetTiffModule()->DestroyDecoder(m_pTiffContext); | 308 m_pCodecMgr->GetTiffModule()->DestroyDecoder(m_pTiffContext); |
309 FX_Free(m_pSrcBuf); | 309 FX_Free(m_pSrcBuf); |
310 FX_Free(m_pDecodeBuf); | 310 FX_Free(m_pDecodeBuf); |
311 FX_Free(m_pSrcPalette); | 311 FX_Free(m_pSrcPalette); |
312 } | 312 } |
313 | 313 |
314 FX_BOOL CCodec_ProgressiveDecoder::JpegReadMoreData( | 314 bool CCodec_ProgressiveDecoder::JpegReadMoreData(CCodec_JpegModule* pJpegModule, |
315 CCodec_JpegModule* pJpegModule, | 315 FXCODEC_STATUS& err_status) { |
316 FXCODEC_STATUS& err_status) { | |
317 uint32_t dwSize = (uint32_t)m_pFile->GetSize(); | 316 uint32_t dwSize = (uint32_t)m_pFile->GetSize(); |
318 if (dwSize <= m_offSet) { | 317 if (dwSize <= m_offSet) { |
319 return FALSE; | 318 return false; |
320 } | 319 } |
321 dwSize = dwSize - m_offSet; | 320 dwSize = dwSize - m_offSet; |
322 uint32_t dwAvail = pJpegModule->GetAvailInput(m_pJpegContext, nullptr); | 321 uint32_t dwAvail = pJpegModule->GetAvailInput(m_pJpegContext, nullptr); |
323 if (dwAvail == m_SrcSize) { | 322 if (dwAvail == m_SrcSize) { |
324 if (dwSize > FXCODEC_BLOCK_SIZE) { | 323 if (dwSize > FXCODEC_BLOCK_SIZE) { |
325 dwSize = FXCODEC_BLOCK_SIZE; | 324 dwSize = FXCODEC_BLOCK_SIZE; |
326 } | 325 } |
327 m_SrcSize = (dwSize + dwAvail + FXCODEC_BLOCK_SIZE - 1) / | 326 m_SrcSize = (dwSize + dwAvail + FXCODEC_BLOCK_SIZE - 1) / |
328 FXCODEC_BLOCK_SIZE * FXCODEC_BLOCK_SIZE; | 327 FXCODEC_BLOCK_SIZE * FXCODEC_BLOCK_SIZE; |
329 m_pSrcBuf = FX_Realloc(uint8_t, m_pSrcBuf, m_SrcSize); | 328 m_pSrcBuf = FX_Realloc(uint8_t, m_pSrcBuf, m_SrcSize); |
330 if (!m_pSrcBuf) { | 329 if (!m_pSrcBuf) { |
331 err_status = FXCODEC_STATUS_ERR_MEMORY; | 330 err_status = FXCODEC_STATUS_ERR_MEMORY; |
332 return FALSE; | 331 return false; |
333 } | 332 } |
334 } else { | 333 } else { |
335 uint32_t dwConsume = m_SrcSize - dwAvail; | 334 uint32_t dwConsume = m_SrcSize - dwAvail; |
336 if (dwAvail) { | 335 if (dwAvail) { |
337 FXSYS_memmove(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); | 336 FXSYS_memmove(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); |
338 } | 337 } |
339 if (dwSize > dwConsume) { | 338 if (dwSize > dwConsume) { |
340 dwSize = dwConsume; | 339 dwSize = dwConsume; |
341 } | 340 } |
342 } | 341 } |
343 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { | 342 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { |
344 err_status = FXCODEC_STATUS_ERR_READ; | 343 err_status = FXCODEC_STATUS_ERR_READ; |
345 return FALSE; | 344 return false; |
346 } | 345 } |
347 m_offSet += dwSize; | 346 m_offSet += dwSize; |
348 pJpegModule->Input(m_pJpegContext, m_pSrcBuf, dwSize + dwAvail); | 347 pJpegModule->Input(m_pJpegContext, m_pSrcBuf, dwSize + dwAvail); |
349 return TRUE; | 348 return true; |
350 } | 349 } |
351 | 350 |
352 FX_BOOL CCodec_ProgressiveDecoder::PngReadHeaderFunc(void* pModule, | 351 bool CCodec_ProgressiveDecoder::PngReadHeaderFunc(void* pModule, |
353 int width, | 352 int width, |
354 int height, | 353 int height, |
355 int bpc, | 354 int bpc, |
356 int pass, | 355 int pass, |
357 int* color_type, | 356 int* color_type, |
358 double* gamma) { | 357 double* gamma) { |
359 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; | 358 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; |
360 if (!pCodec->m_pDeviceBitmap) { | 359 if (!pCodec->m_pDeviceBitmap) { |
361 pCodec->m_SrcWidth = width; | 360 pCodec->m_SrcWidth = width; |
362 pCodec->m_SrcHeight = height; | 361 pCodec->m_SrcHeight = height; |
363 pCodec->m_SrcBPC = bpc; | 362 pCodec->m_SrcBPC = bpc; |
364 pCodec->m_SrcPassNumber = pass; | 363 pCodec->m_SrcPassNumber = pass; |
365 switch (*color_type) { | 364 switch (*color_type) { |
366 case 0: | 365 case 0: |
367 pCodec->m_SrcComponents = 1; | 366 pCodec->m_SrcComponents = 1; |
368 break; | 367 break; |
369 case 4: | 368 case 4: |
370 pCodec->m_SrcComponents = 2; | 369 pCodec->m_SrcComponents = 2; |
371 break; | 370 break; |
372 case 2: | 371 case 2: |
373 pCodec->m_SrcComponents = 3; | 372 pCodec->m_SrcComponents = 3; |
374 break; | 373 break; |
375 case 3: | 374 case 3: |
376 case 6: | 375 case 6: |
377 pCodec->m_SrcComponents = 4; | 376 pCodec->m_SrcComponents = 4; |
378 break; | 377 break; |
379 default: | 378 default: |
380 pCodec->m_SrcComponents = 0; | 379 pCodec->m_SrcComponents = 0; |
381 break; | 380 break; |
382 } | 381 } |
383 pCodec->m_clipBox = FX_RECT(0, 0, width, height); | 382 pCodec->m_clipBox = FX_RECT(0, 0, width, height); |
384 return FALSE; | 383 return false; |
385 } | 384 } |
386 FXDIB_Format format = pCodec->m_pDeviceBitmap->GetFormat(); | 385 FXDIB_Format format = pCodec->m_pDeviceBitmap->GetFormat(); |
387 switch (format) { | 386 switch (format) { |
388 case FXDIB_1bppMask: | 387 case FXDIB_1bppMask: |
389 case FXDIB_1bppRgb: | 388 case FXDIB_1bppRgb: |
390 ASSERT(FALSE); | 389 ASSERT(false); |
391 return FALSE; | 390 return false; |
392 case FXDIB_8bppMask: | 391 case FXDIB_8bppMask: |
393 case FXDIB_8bppRgb: | 392 case FXDIB_8bppRgb: |
394 *color_type = 0; | 393 *color_type = 0; |
395 break; | 394 break; |
396 case FXDIB_Rgb: | 395 case FXDIB_Rgb: |
397 *color_type = 2; | 396 *color_type = 2; |
398 break; | 397 break; |
399 case FXDIB_Rgb32: | 398 case FXDIB_Rgb32: |
400 case FXDIB_Argb: | 399 case FXDIB_Argb: |
401 *color_type = 6; | 400 *color_type = 6; |
402 break; | 401 break; |
403 default: | 402 default: |
404 ASSERT(FALSE); | 403 ASSERT(false); |
405 return FALSE; | 404 return false; |
406 } | 405 } |
407 *gamma = kPngGamma; | 406 *gamma = kPngGamma; |
408 return TRUE; | 407 return true; |
409 } | 408 } |
410 | 409 |
411 FX_BOOL CCodec_ProgressiveDecoder::PngAskScanlineBufFunc(void* pModule, | 410 bool CCodec_ProgressiveDecoder::PngAskScanlineBufFunc(void* pModule, |
412 int line, | 411 int line, |
413 uint8_t*& src_buf) { | 412 uint8_t*& src_buf) { |
414 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; | 413 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; |
415 CFX_DIBitmap* pDIBitmap = pCodec->m_pDeviceBitmap; | 414 CFX_DIBitmap* pDIBitmap = pCodec->m_pDeviceBitmap; |
416 if (!pDIBitmap) { | 415 if (!pDIBitmap) { |
417 ASSERT(false); | 416 ASSERT(false); |
418 return FALSE; | 417 return false; |
419 } | 418 } |
420 if (line >= pCodec->m_clipBox.top && line < pCodec->m_clipBox.bottom) { | 419 if (line >= pCodec->m_clipBox.top && line < pCodec->m_clipBox.bottom) { |
421 double scale_y = | 420 double scale_y = |
422 (double)pCodec->m_sizeY / (double)pCodec->m_clipBox.Height(); | 421 (double)pCodec->m_sizeY / (double)pCodec->m_clipBox.Height(); |
423 int32_t row = | 422 int32_t row = |
424 (int32_t)((line - pCodec->m_clipBox.top) * scale_y) + pCodec->m_startY; | 423 (int32_t)((line - pCodec->m_clipBox.top) * scale_y) + pCodec->m_startY; |
425 uint8_t* src_scan = (uint8_t*)pDIBitmap->GetScanline(row); | 424 uint8_t* src_scan = (uint8_t*)pDIBitmap->GetScanline(row); |
426 uint8_t* des_scan = pCodec->m_pDecodeBuf; | 425 uint8_t* des_scan = pCodec->m_pDecodeBuf; |
427 src_buf = pCodec->m_pDecodeBuf; | 426 src_buf = pCodec->m_pDecodeBuf; |
428 int32_t src_Bpp = pDIBitmap->GetBPP() >> 3; | 427 int32_t src_Bpp = pDIBitmap->GetBPP() >> 3; |
429 int32_t des_Bpp = (pCodec->m_SrcFormat & 0xff) >> 3; | 428 int32_t des_Bpp = (pCodec->m_SrcFormat & 0xff) >> 3; |
430 int32_t src_left = pCodec->m_startX; | 429 int32_t src_left = pCodec->m_startX; |
431 int32_t des_left = pCodec->m_clipBox.left; | 430 int32_t des_left = pCodec->m_clipBox.left; |
432 src_scan += src_left * src_Bpp; | 431 src_scan += src_left * src_Bpp; |
433 des_scan += des_left * des_Bpp; | 432 des_scan += des_left * des_Bpp; |
434 for (int32_t src_col = 0; src_col < pCodec->m_sizeX; src_col++) { | 433 for (int32_t src_col = 0; src_col < pCodec->m_sizeX; src_col++) { |
435 PixelWeight* pPixelWeights = | 434 PixelWeight* pPixelWeights = |
436 pCodec->m_WeightHorzOO.GetPixelWeight(src_col); | 435 pCodec->m_WeightHorzOO.GetPixelWeight(src_col); |
437 if (pPixelWeights->m_SrcStart != pPixelWeights->m_SrcEnd) { | 436 if (pPixelWeights->m_SrcStart != pPixelWeights->m_SrcEnd) { |
438 continue; | 437 continue; |
439 } | 438 } |
440 switch (pDIBitmap->GetFormat()) { | 439 switch (pDIBitmap->GetFormat()) { |
441 case FXDIB_1bppMask: | 440 case FXDIB_1bppMask: |
442 case FXDIB_1bppRgb: | 441 case FXDIB_1bppRgb: |
443 ASSERT(FALSE); | 442 ASSERT(false); |
444 return FALSE; | 443 return false; |
445 case FXDIB_8bppMask: | 444 case FXDIB_8bppMask: |
446 case FXDIB_8bppRgb: { | 445 case FXDIB_8bppRgb: { |
447 if (pDIBitmap->GetPalette()) { | 446 if (pDIBitmap->GetPalette()) { |
448 return FALSE; | 447 return false; |
449 } | 448 } |
450 uint32_t des_g = 0; | 449 uint32_t des_g = 0; |
451 des_g += pPixelWeights->m_Weights[0] * src_scan[src_col]; | 450 des_g += pPixelWeights->m_Weights[0] * src_scan[src_col]; |
452 des_scan[pPixelWeights->m_SrcStart] = (uint8_t)(des_g >> 16); | 451 des_scan[pPixelWeights->m_SrcStart] = (uint8_t)(des_g >> 16); |
453 } break; | 452 } break; |
454 case FXDIB_Rgb: | 453 case FXDIB_Rgb: |
455 case FXDIB_Rgb32: { | 454 case FXDIB_Rgb32: { |
456 uint32_t des_b = 0, des_g = 0, des_r = 0; | 455 uint32_t des_b = 0, des_g = 0, des_r = 0; |
457 const uint8_t* p = src_scan + src_col * src_Bpp; | 456 const uint8_t* p = src_scan + src_col * src_Bpp; |
458 des_b += pPixelWeights->m_Weights[0] * (*p++); | 457 des_b += pPixelWeights->m_Weights[0] * (*p++); |
(...skipping 10 matching lines...) Expand all Loading... |
469 des_b += pPixelWeights->m_Weights[0] * (*p++); | 468 des_b += pPixelWeights->m_Weights[0] * (*p++); |
470 des_g += pPixelWeights->m_Weights[0] * (*p++); | 469 des_g += pPixelWeights->m_Weights[0] * (*p++); |
471 des_r += pPixelWeights->m_Weights[0] * (*p++); | 470 des_r += pPixelWeights->m_Weights[0] * (*p++); |
472 uint8_t* pDes = &des_scan[pPixelWeights->m_SrcStart * des_Bpp]; | 471 uint8_t* pDes = &des_scan[pPixelWeights->m_SrcStart * des_Bpp]; |
473 *pDes++ = (uint8_t)((des_b) >> 16); | 472 *pDes++ = (uint8_t)((des_b) >> 16); |
474 *pDes++ = (uint8_t)((des_g) >> 16); | 473 *pDes++ = (uint8_t)((des_g) >> 16); |
475 *pDes++ = (uint8_t)((des_r) >> 16); | 474 *pDes++ = (uint8_t)((des_r) >> 16); |
476 *pDes = *p; | 475 *pDes = *p; |
477 } break; | 476 } break; |
478 default: | 477 default: |
479 return FALSE; | 478 return false; |
480 } | 479 } |
481 } | 480 } |
482 } | 481 } |
483 return TRUE; | 482 return true; |
484 } | 483 } |
485 | 484 |
486 void CCodec_ProgressiveDecoder::PngOneOneMapResampleHorz( | 485 void CCodec_ProgressiveDecoder::PngOneOneMapResampleHorz( |
487 CFX_DIBitmap* pDeviceBitmap, | 486 CFX_DIBitmap* pDeviceBitmap, |
488 int32_t des_line, | 487 int32_t des_line, |
489 uint8_t* src_scan, | 488 uint8_t* src_scan, |
490 FXCodec_Format src_format) { | 489 FXCodec_Format src_format) { |
491 uint8_t* des_scan = (uint8_t*)pDeviceBitmap->GetScanline(des_line); | 490 uint8_t* des_scan = (uint8_t*)pDeviceBitmap->GetScanline(des_line); |
492 int32_t src_Bpp = (m_SrcFormat & 0xff) >> 3; | 491 int32_t src_Bpp = (m_SrcFormat & 0xff) >> 3; |
493 int32_t des_Bpp = pDeviceBitmap->GetBPP() >> 3; | 492 int32_t des_Bpp = pDeviceBitmap->GetBPP() >> 3; |
494 int32_t src_left = m_clipBox.left; | 493 int32_t src_left = m_clipBox.left; |
495 int32_t des_left = m_startX; | 494 int32_t des_left = m_startX; |
496 src_scan += src_left * src_Bpp; | 495 src_scan += src_left * src_Bpp; |
497 des_scan += des_left * des_Bpp; | 496 des_scan += des_left * des_Bpp; |
498 for (int32_t des_col = 0; des_col < m_sizeX; des_col++) { | 497 for (int32_t des_col = 0; des_col < m_sizeX; des_col++) { |
499 PixelWeight* pPixelWeights = m_WeightHorzOO.GetPixelWeight(des_col); | 498 PixelWeight* pPixelWeights = m_WeightHorzOO.GetPixelWeight(des_col); |
500 switch (pDeviceBitmap->GetFormat()) { | 499 switch (pDeviceBitmap->GetFormat()) { |
501 case FXDIB_1bppMask: | 500 case FXDIB_1bppMask: |
502 case FXDIB_1bppRgb: | 501 case FXDIB_1bppRgb: |
503 ASSERT(FALSE); | 502 ASSERT(false); |
504 return; | 503 return; |
505 case FXDIB_8bppMask: | 504 case FXDIB_8bppMask: |
506 case FXDIB_8bppRgb: { | 505 case FXDIB_8bppRgb: { |
507 if (pDeviceBitmap->GetPalette()) { | 506 if (pDeviceBitmap->GetPalette()) { |
508 return; | 507 return; |
509 } | 508 } |
510 uint32_t des_g = 0; | 509 uint32_t des_g = 0; |
511 des_g += | 510 des_g += |
512 pPixelWeights->m_Weights[0] * src_scan[pPixelWeights->m_SrcStart]; | 511 pPixelWeights->m_Weights[0] * src_scan[pPixelWeights->m_SrcStart]; |
513 des_g += | 512 des_g += |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
578 if (pCodec->m_SrcPassNumber == 1 && scale_y > 1.0) { | 577 if (pCodec->m_SrcPassNumber == 1 && scale_y > 1.0) { |
579 pCodec->ResampleVert(pDIBitmap, scale_y, des_row); | 578 pCodec->ResampleVert(pDIBitmap, scale_y, des_row); |
580 return; | 579 return; |
581 } | 580 } |
582 if (pass == 6 && scale_y > 1.0) { | 581 if (pass == 6 && scale_y > 1.0) { |
583 pCodec->ResampleVert(pDIBitmap, scale_y, des_row); | 582 pCodec->ResampleVert(pDIBitmap, scale_y, des_row); |
584 } | 583 } |
585 } | 584 } |
586 } | 585 } |
587 | 586 |
588 FX_BOOL CCodec_ProgressiveDecoder::GifReadMoreData(CCodec_GifModule* pGifModule, | 587 bool CCodec_ProgressiveDecoder::GifReadMoreData(CCodec_GifModule* pGifModule, |
589 FXCODEC_STATUS& err_status) { | 588 FXCODEC_STATUS& err_status) { |
590 uint32_t dwSize = (uint32_t)m_pFile->GetSize(); | 589 uint32_t dwSize = (uint32_t)m_pFile->GetSize(); |
591 if (dwSize <= m_offSet) { | 590 if (dwSize <= m_offSet) { |
592 return FALSE; | 591 return false; |
593 } | 592 } |
594 dwSize = dwSize - m_offSet; | 593 dwSize = dwSize - m_offSet; |
595 uint32_t dwAvail = pGifModule->GetAvailInput(m_pGifContext, nullptr); | 594 uint32_t dwAvail = pGifModule->GetAvailInput(m_pGifContext, nullptr); |
596 if (dwAvail == m_SrcSize) { | 595 if (dwAvail == m_SrcSize) { |
597 if (dwSize > FXCODEC_BLOCK_SIZE) { | 596 if (dwSize > FXCODEC_BLOCK_SIZE) { |
598 dwSize = FXCODEC_BLOCK_SIZE; | 597 dwSize = FXCODEC_BLOCK_SIZE; |
599 } | 598 } |
600 m_SrcSize = (dwSize + dwAvail + FXCODEC_BLOCK_SIZE - 1) / | 599 m_SrcSize = (dwSize + dwAvail + FXCODEC_BLOCK_SIZE - 1) / |
601 FXCODEC_BLOCK_SIZE * FXCODEC_BLOCK_SIZE; | 600 FXCODEC_BLOCK_SIZE * FXCODEC_BLOCK_SIZE; |
602 m_pSrcBuf = FX_Realloc(uint8_t, m_pSrcBuf, m_SrcSize); | 601 m_pSrcBuf = FX_Realloc(uint8_t, m_pSrcBuf, m_SrcSize); |
603 if (!m_pSrcBuf) { | 602 if (!m_pSrcBuf) { |
604 err_status = FXCODEC_STATUS_ERR_MEMORY; | 603 err_status = FXCODEC_STATUS_ERR_MEMORY; |
605 return FALSE; | 604 return false; |
606 } | 605 } |
607 } else { | 606 } else { |
608 uint32_t dwConsume = m_SrcSize - dwAvail; | 607 uint32_t dwConsume = m_SrcSize - dwAvail; |
609 if (dwAvail) { | 608 if (dwAvail) { |
610 FXSYS_memmove(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); | 609 FXSYS_memmove(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); |
611 } | 610 } |
612 if (dwSize > dwConsume) { | 611 if (dwSize > dwConsume) { |
613 dwSize = dwConsume; | 612 dwSize = dwConsume; |
614 } | 613 } |
615 } | 614 } |
616 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { | 615 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { |
617 err_status = FXCODEC_STATUS_ERR_READ; | 616 err_status = FXCODEC_STATUS_ERR_READ; |
618 return FALSE; | 617 return false; |
619 } | 618 } |
620 m_offSet += dwSize; | 619 m_offSet += dwSize; |
621 pGifModule->Input(m_pGifContext, m_pSrcBuf, dwSize + dwAvail); | 620 pGifModule->Input(m_pGifContext, m_pSrcBuf, dwSize + dwAvail); |
622 return TRUE; | 621 return true; |
623 } | 622 } |
624 | 623 |
625 void CCodec_ProgressiveDecoder::GifRecordCurrentPositionCallback( | 624 void CCodec_ProgressiveDecoder::GifRecordCurrentPositionCallback( |
626 void* pModule, | 625 void* pModule, |
627 uint32_t& cur_pos) { | 626 uint32_t& cur_pos) { |
628 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; | 627 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; |
629 uint32_t remain_size = | 628 uint32_t remain_size = |
630 pCodec->m_pCodecMgr->GetGifModule()->GetAvailInput(pCodec->m_pGifContext); | 629 pCodec->m_pCodecMgr->GetGifModule()->GetAvailInput(pCodec->m_pGifContext); |
631 cur_pos = pCodec->m_offSet - remain_size; | 630 cur_pos = pCodec->m_offSet - remain_size; |
632 } | 631 } |
633 | 632 |
634 uint8_t* CCodec_ProgressiveDecoder::GifAskLocalPaletteBufCallback( | 633 uint8_t* CCodec_ProgressiveDecoder::GifAskLocalPaletteBufCallback( |
635 void* pModule, | 634 void* pModule, |
636 int32_t frame_num, | 635 int32_t frame_num, |
637 int32_t pal_size) { | 636 int32_t pal_size) { |
638 return FX_Alloc(uint8_t, pal_size); | 637 return FX_Alloc(uint8_t, pal_size); |
639 } | 638 } |
640 | 639 |
641 FX_BOOL CCodec_ProgressiveDecoder::GifInputRecordPositionBufCallback( | 640 bool CCodec_ProgressiveDecoder::GifInputRecordPositionBufCallback( |
642 void* pModule, | 641 void* pModule, |
643 uint32_t rcd_pos, | 642 uint32_t rcd_pos, |
644 const FX_RECT& img_rc, | 643 const FX_RECT& img_rc, |
645 int32_t pal_num, | 644 int32_t pal_num, |
646 void* pal_ptr, | 645 void* pal_ptr, |
647 int32_t delay_time, | 646 int32_t delay_time, |
648 FX_BOOL user_input, | 647 bool user_input, |
649 int32_t trans_index, | 648 int32_t trans_index, |
650 int32_t disposal_method, | 649 int32_t disposal_method, |
651 FX_BOOL interlace) { | 650 bool interlace) { |
652 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; | 651 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; |
653 pCodec->m_offSet = rcd_pos; | 652 pCodec->m_offSet = rcd_pos; |
654 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERROR; | 653 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERROR; |
655 if (!pCodec->GifReadMoreData(pCodec->m_pCodecMgr->GetGifModule(), | 654 if (!pCodec->GifReadMoreData(pCodec->m_pCodecMgr->GetGifModule(), |
656 error_status)) { | 655 error_status)) { |
657 return FALSE; | 656 return false; |
658 } | 657 } |
659 uint8_t* pPalette = nullptr; | 658 uint8_t* pPalette = nullptr; |
660 if (pal_num != 0 && pal_ptr) { | 659 if (pal_num != 0 && pal_ptr) { |
661 pPalette = (uint8_t*)pal_ptr; | 660 pPalette = (uint8_t*)pal_ptr; |
662 } else { | 661 } else { |
663 pal_num = pCodec->m_GifPltNumber; | 662 pal_num = pCodec->m_GifPltNumber; |
664 pPalette = pCodec->m_pGifPalette; | 663 pPalette = pCodec->m_pGifPalette; |
665 } | 664 } |
666 if (!pCodec->m_pSrcPalette) { | 665 if (!pCodec->m_pSrcPalette) { |
667 pCodec->m_pSrcPalette = FX_Alloc(FX_ARGB, pal_num); | 666 pCodec->m_pSrcPalette = FX_Alloc(FX_ARGB, pal_num); |
668 } else if (pal_num > pCodec->m_SrcPaletteNumber) { | 667 } else if (pal_num > pCodec->m_SrcPaletteNumber) { |
669 pCodec->m_pSrcPalette = FX_Realloc(FX_ARGB, pCodec->m_pSrcPalette, pal_num); | 668 pCodec->m_pSrcPalette = FX_Realloc(FX_ARGB, pCodec->m_pSrcPalette, pal_num); |
670 } | 669 } |
671 if (!pCodec->m_pSrcPalette) | 670 if (!pCodec->m_pSrcPalette) |
672 return FALSE; | 671 return false; |
673 | 672 |
674 pCodec->m_SrcPaletteNumber = pal_num; | 673 pCodec->m_SrcPaletteNumber = pal_num; |
675 for (int i = 0; i < pal_num; i++) { | 674 for (int i = 0; i < pal_num; i++) { |
676 uint32_t j = i * 3; | 675 uint32_t j = i * 3; |
677 pCodec->m_pSrcPalette[i] = | 676 pCodec->m_pSrcPalette[i] = |
678 ArgbEncode(0xff, pPalette[j], pPalette[j + 1], pPalette[j + 2]); | 677 ArgbEncode(0xff, pPalette[j], pPalette[j + 1], pPalette[j + 2]); |
679 } | 678 } |
680 pCodec->m_GifTransIndex = trans_index; | 679 pCodec->m_GifTransIndex = trans_index; |
681 pCodec->m_GifFrameRect = img_rc; | 680 pCodec->m_GifFrameRect = img_rc; |
682 pCodec->m_SrcPassNumber = interlace ? 4 : 1; | 681 pCodec->m_SrcPassNumber = interlace ? 4 : 1; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
718 } | 717 } |
719 case 12: { | 718 case 12: { |
720 for (int col = 0; col < sizeX; col++) { | 719 for (int col = 0; col < sizeX; col++) { |
721 FXARGB_SETDIB(pScanline, argb); | 720 FXARGB_SETDIB(pScanline, argb); |
722 pScanline += 4; | 721 pScanline += 4; |
723 } | 722 } |
724 break; | 723 break; |
725 } | 724 } |
726 } | 725 } |
727 } | 726 } |
728 return TRUE; | 727 return true; |
729 } | 728 } |
730 | 729 |
731 void CCodec_ProgressiveDecoder::GifReadScanlineCallback(void* pModule, | 730 void CCodec_ProgressiveDecoder::GifReadScanlineCallback(void* pModule, |
732 int32_t row_num, | 731 int32_t row_num, |
733 uint8_t* row_buf) { | 732 uint8_t* row_buf) { |
734 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; | 733 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; |
735 CFX_DIBitmap* pDIBitmap = pCodec->m_pDeviceBitmap; | 734 CFX_DIBitmap* pDIBitmap = pCodec->m_pDeviceBitmap; |
736 ASSERT(pDIBitmap); | 735 ASSERT(pDIBitmap); |
737 int32_t img_width = pCodec->m_GifFrameRect.Width(); | 736 int32_t img_width = pCodec->m_GifFrameRect.Width(); |
738 if (!pDIBitmap->HasAlpha()) { | 737 if (!pDIBitmap->HasAlpha()) { |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
868 } | 867 } |
869 } | 868 } |
870 } | 869 } |
871 int des_bottom = des_top + m_sizeY - 1; | 870 int des_bottom = des_top + m_sizeY - 1; |
872 if (des_row + (int)(2 * scale_y) >= des_bottom && | 871 if (des_row + (int)(2 * scale_y) >= des_bottom && |
873 des_row + (int)scale_y < des_bottom) { | 872 des_row + (int)scale_y < des_bottom) { |
874 GifDoubleLineResampleVert(pDeviceBitmap, scale_y, des_row + (int)scale_y); | 873 GifDoubleLineResampleVert(pDeviceBitmap, scale_y, des_row + (int)scale_y); |
875 } | 874 } |
876 } | 875 } |
877 | 876 |
878 FX_BOOL CCodec_ProgressiveDecoder::BmpReadMoreData(CCodec_BmpModule* pBmpModule, | 877 bool CCodec_ProgressiveDecoder::BmpReadMoreData(CCodec_BmpModule* pBmpModule, |
879 FXCODEC_STATUS& err_status) { | 878 FXCODEC_STATUS& err_status) { |
880 uint32_t dwSize = (uint32_t)m_pFile->GetSize(); | 879 uint32_t dwSize = (uint32_t)m_pFile->GetSize(); |
881 if (dwSize <= m_offSet) | 880 if (dwSize <= m_offSet) |
882 return FALSE; | 881 return false; |
883 | 882 |
884 dwSize = dwSize - m_offSet; | 883 dwSize = dwSize - m_offSet; |
885 uint32_t dwAvail = pBmpModule->GetAvailInput(m_pBmpContext, nullptr); | 884 uint32_t dwAvail = pBmpModule->GetAvailInput(m_pBmpContext, nullptr); |
886 if (dwAvail == m_SrcSize) { | 885 if (dwAvail == m_SrcSize) { |
887 if (dwSize > FXCODEC_BLOCK_SIZE) { | 886 if (dwSize > FXCODEC_BLOCK_SIZE) { |
888 dwSize = FXCODEC_BLOCK_SIZE; | 887 dwSize = FXCODEC_BLOCK_SIZE; |
889 } | 888 } |
890 m_SrcSize = (dwSize + dwAvail + FXCODEC_BLOCK_SIZE - 1) / | 889 m_SrcSize = (dwSize + dwAvail + FXCODEC_BLOCK_SIZE - 1) / |
891 FXCODEC_BLOCK_SIZE * FXCODEC_BLOCK_SIZE; | 890 FXCODEC_BLOCK_SIZE * FXCODEC_BLOCK_SIZE; |
892 m_pSrcBuf = FX_Realloc(uint8_t, m_pSrcBuf, m_SrcSize); | 891 m_pSrcBuf = FX_Realloc(uint8_t, m_pSrcBuf, m_SrcSize); |
893 if (!m_pSrcBuf) { | 892 if (!m_pSrcBuf) { |
894 err_status = FXCODEC_STATUS_ERR_MEMORY; | 893 err_status = FXCODEC_STATUS_ERR_MEMORY; |
895 return FALSE; | 894 return false; |
896 } | 895 } |
897 } else { | 896 } else { |
898 uint32_t dwConsume = m_SrcSize - dwAvail; | 897 uint32_t dwConsume = m_SrcSize - dwAvail; |
899 if (dwAvail) { | 898 if (dwAvail) { |
900 FXSYS_memmove(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); | 899 FXSYS_memmove(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); |
901 } | 900 } |
902 if (dwSize > dwConsume) { | 901 if (dwSize > dwConsume) { |
903 dwSize = dwConsume; | 902 dwSize = dwConsume; |
904 } | 903 } |
905 } | 904 } |
906 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { | 905 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { |
907 err_status = FXCODEC_STATUS_ERR_READ; | 906 err_status = FXCODEC_STATUS_ERR_READ; |
908 return FALSE; | 907 return false; |
909 } | 908 } |
910 m_offSet += dwSize; | 909 m_offSet += dwSize; |
911 pBmpModule->Input(m_pBmpContext, m_pSrcBuf, dwSize + dwAvail); | 910 pBmpModule->Input(m_pBmpContext, m_pSrcBuf, dwSize + dwAvail); |
912 return TRUE; | 911 return true; |
913 } | 912 } |
914 | 913 |
915 FX_BOOL CCodec_ProgressiveDecoder::BmpInputImagePositionBufCallback( | 914 bool CCodec_ProgressiveDecoder::BmpInputImagePositionBufCallback( |
916 void* pModule, | 915 void* pModule, |
917 uint32_t rcd_pos) { | 916 uint32_t rcd_pos) { |
918 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; | 917 CCodec_ProgressiveDecoder* pCodec = (CCodec_ProgressiveDecoder*)pModule; |
919 pCodec->m_offSet = rcd_pos; | 918 pCodec->m_offSet = rcd_pos; |
920 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERROR; | 919 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERROR; |
921 return pCodec->BmpReadMoreData(pCodec->m_pCodecMgr->GetBmpModule(), | 920 return pCodec->BmpReadMoreData(pCodec->m_pCodecMgr->GetBmpModule(), |
922 error_status); | 921 error_status); |
923 } | 922 } |
924 | 923 |
925 void CCodec_ProgressiveDecoder::BmpReadScanlineCallback(void* pModule, | 924 void CCodec_ProgressiveDecoder::BmpReadScanlineCallback(void* pModule, |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1032 *scan_des++ = (uint8_t)((des_r) >> 16); | 1031 *scan_des++ = (uint8_t)((des_r) >> 16); |
1033 *scan_des++ = (uint8_t)((des_a) >> 16); | 1032 *scan_des++ = (uint8_t)((des_a) >> 16); |
1034 } break; | 1033 } break; |
1035 default: | 1034 default: |
1036 return; | 1035 return; |
1037 } | 1036 } |
1038 } | 1037 } |
1039 } | 1038 } |
1040 } | 1039 } |
1041 | 1040 |
1042 FX_BOOL CCodec_ProgressiveDecoder::DetectImageType( | 1041 bool CCodec_ProgressiveDecoder::DetectImageType(FXCODEC_IMAGE_TYPE imageType, |
1043 FXCODEC_IMAGE_TYPE imageType, | 1042 CFX_DIBAttribute* pAttribute) { |
1044 CFX_DIBAttribute* pAttribute) { | |
1045 m_offSet = 0; | 1043 m_offSet = 0; |
1046 uint32_t size = (uint32_t)m_pFile->GetSize(); | 1044 uint32_t size = (uint32_t)m_pFile->GetSize(); |
1047 if (size > FXCODEC_BLOCK_SIZE) { | 1045 if (size > FXCODEC_BLOCK_SIZE) { |
1048 size = FXCODEC_BLOCK_SIZE; | 1046 size = FXCODEC_BLOCK_SIZE; |
1049 } | 1047 } |
1050 FX_Free(m_pSrcBuf); | 1048 FX_Free(m_pSrcBuf); |
1051 m_pSrcBuf = FX_Alloc(uint8_t, size); | 1049 m_pSrcBuf = FX_Alloc(uint8_t, size); |
1052 FXSYS_memset(m_pSrcBuf, 0, size); | 1050 FXSYS_memset(m_pSrcBuf, 0, size); |
1053 m_SrcSize = size; | 1051 m_SrcSize = size; |
1054 switch (imageType) { | 1052 switch (imageType) { |
1055 case FXCODEC_IMAGE_BMP: { | 1053 case FXCODEC_IMAGE_BMP: { |
1056 CCodec_BmpModule* pBmpModule = m_pCodecMgr->GetBmpModule(); | 1054 CCodec_BmpModule* pBmpModule = m_pCodecMgr->GetBmpModule(); |
1057 if (!pBmpModule) { | 1055 if (!pBmpModule) { |
1058 m_status = FXCODEC_STATUS_ERR_MEMORY; | 1056 m_status = FXCODEC_STATUS_ERR_MEMORY; |
1059 return FALSE; | 1057 return false; |
1060 } | 1058 } |
1061 pBmpModule->InputImagePositionBufCallback = | 1059 pBmpModule->InputImagePositionBufCallback = |
1062 BmpInputImagePositionBufCallback; | 1060 BmpInputImagePositionBufCallback; |
1063 pBmpModule->ReadScanlineCallback = BmpReadScanlineCallback; | 1061 pBmpModule->ReadScanlineCallback = BmpReadScanlineCallback; |
1064 m_pBmpContext = pBmpModule->Start((void*)this); | 1062 m_pBmpContext = pBmpModule->Start((void*)this); |
1065 if (!m_pBmpContext) { | 1063 if (!m_pBmpContext) { |
1066 m_status = FXCODEC_STATUS_ERR_MEMORY; | 1064 m_status = FXCODEC_STATUS_ERR_MEMORY; |
1067 return FALSE; | 1065 return false; |
1068 } | 1066 } |
1069 FX_BOOL bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); | 1067 bool bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); |
1070 if (!bResult) { | 1068 if (!bResult) { |
1071 m_status = FXCODEC_STATUS_ERR_READ; | 1069 m_status = FXCODEC_STATUS_ERR_READ; |
1072 return FALSE; | 1070 return false; |
1073 } | 1071 } |
1074 m_offSet += size; | 1072 m_offSet += size; |
1075 pBmpModule->Input(m_pBmpContext, m_pSrcBuf, size); | 1073 pBmpModule->Input(m_pBmpContext, m_pSrcBuf, size); |
1076 uint32_t* pPalette = nullptr; | 1074 uint32_t* pPalette = nullptr; |
1077 int32_t readResult = pBmpModule->ReadHeader( | 1075 int32_t readResult = pBmpModule->ReadHeader( |
1078 m_pBmpContext, &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom, | 1076 m_pBmpContext, &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom, |
1079 &m_SrcComponents, &m_SrcPaletteNumber, &pPalette, pAttribute); | 1077 &m_SrcComponents, &m_SrcPaletteNumber, &pPalette, pAttribute); |
1080 while (readResult == 2) { | 1078 while (readResult == 2) { |
1081 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERR_FORMAT; | 1079 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERR_FORMAT; |
1082 if (!BmpReadMoreData(pBmpModule, error_status)) { | 1080 if (!BmpReadMoreData(pBmpModule, error_status)) { |
1083 m_status = error_status; | 1081 m_status = error_status; |
1084 return FALSE; | 1082 return false; |
1085 } | 1083 } |
1086 readResult = pBmpModule->ReadHeader( | 1084 readResult = pBmpModule->ReadHeader( |
1087 m_pBmpContext, &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom, | 1085 m_pBmpContext, &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom, |
1088 &m_SrcComponents, &m_SrcPaletteNumber, &pPalette, pAttribute); | 1086 &m_SrcComponents, &m_SrcPaletteNumber, &pPalette, pAttribute); |
1089 } | 1087 } |
1090 if (readResult == 1) { | 1088 if (readResult == 1) { |
1091 m_SrcBPC = 8; | 1089 m_SrcBPC = 8; |
1092 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); | 1090 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); |
1093 FX_Free(m_pSrcPalette); | 1091 FX_Free(m_pSrcPalette); |
1094 if (m_SrcPaletteNumber) { | 1092 if (m_SrcPaletteNumber) { |
1095 m_pSrcPalette = FX_Alloc(FX_ARGB, m_SrcPaletteNumber); | 1093 m_pSrcPalette = FX_Alloc(FX_ARGB, m_SrcPaletteNumber); |
1096 FXSYS_memcpy(m_pSrcPalette, pPalette, | 1094 FXSYS_memcpy(m_pSrcPalette, pPalette, |
1097 m_SrcPaletteNumber * sizeof(uint32_t)); | 1095 m_SrcPaletteNumber * sizeof(uint32_t)); |
1098 } else { | 1096 } else { |
1099 m_pSrcPalette = nullptr; | 1097 m_pSrcPalette = nullptr; |
1100 } | 1098 } |
1101 return TRUE; | 1099 return true; |
1102 } | 1100 } |
1103 if (m_pBmpContext) { | 1101 if (m_pBmpContext) { |
1104 pBmpModule->Finish(m_pBmpContext); | 1102 pBmpModule->Finish(m_pBmpContext); |
1105 m_pBmpContext = nullptr; | 1103 m_pBmpContext = nullptr; |
1106 } | 1104 } |
1107 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1105 m_status = FXCODEC_STATUS_ERR_FORMAT; |
1108 return FALSE; | 1106 return false; |
1109 } | 1107 } |
1110 case FXCODEC_IMAGE_JPG: { | 1108 case FXCODEC_IMAGE_JPG: { |
1111 CCodec_JpegModule* pJpegModule = m_pCodecMgr->GetJpegModule(); | 1109 CCodec_JpegModule* pJpegModule = m_pCodecMgr->GetJpegModule(); |
1112 if (!pJpegModule) { | 1110 if (!pJpegModule) { |
1113 m_status = FXCODEC_STATUS_ERR_MEMORY; | 1111 m_status = FXCODEC_STATUS_ERR_MEMORY; |
1114 return FALSE; | 1112 return false; |
1115 } | 1113 } |
1116 m_pJpegContext = pJpegModule->Start(); | 1114 m_pJpegContext = pJpegModule->Start(); |
1117 if (!m_pJpegContext) { | 1115 if (!m_pJpegContext) { |
1118 m_status = FXCODEC_STATUS_ERR_MEMORY; | 1116 m_status = FXCODEC_STATUS_ERR_MEMORY; |
1119 return FALSE; | 1117 return false; |
1120 } | 1118 } |
1121 FX_BOOL bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); | 1119 bool bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); |
1122 if (!bResult) { | 1120 if (!bResult) { |
1123 m_status = FXCODEC_STATUS_ERR_READ; | 1121 m_status = FXCODEC_STATUS_ERR_READ; |
1124 return FALSE; | 1122 return false; |
1125 } | 1123 } |
1126 m_offSet += size; | 1124 m_offSet += size; |
1127 pJpegModule->Input(m_pJpegContext, m_pSrcBuf, size); | 1125 pJpegModule->Input(m_pJpegContext, m_pSrcBuf, size); |
1128 int32_t readResult = | 1126 int32_t readResult = |
1129 pJpegModule->ReadHeader(m_pJpegContext, &m_SrcWidth, &m_SrcHeight, | 1127 pJpegModule->ReadHeader(m_pJpegContext, &m_SrcWidth, &m_SrcHeight, |
1130 &m_SrcComponents, pAttribute); | 1128 &m_SrcComponents, pAttribute); |
1131 while (readResult == 2) { | 1129 while (readResult == 2) { |
1132 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERR_FORMAT; | 1130 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERR_FORMAT; |
1133 if (!JpegReadMoreData(pJpegModule, error_status)) { | 1131 if (!JpegReadMoreData(pJpegModule, error_status)) { |
1134 m_status = error_status; | 1132 m_status = error_status; |
1135 return FALSE; | 1133 return false; |
1136 } | 1134 } |
1137 readResult = | 1135 readResult = |
1138 pJpegModule->ReadHeader(m_pJpegContext, &m_SrcWidth, &m_SrcHeight, | 1136 pJpegModule->ReadHeader(m_pJpegContext, &m_SrcWidth, &m_SrcHeight, |
1139 &m_SrcComponents, pAttribute); | 1137 &m_SrcComponents, pAttribute); |
1140 } | 1138 } |
1141 if (!readResult) { | 1139 if (!readResult) { |
1142 m_SrcBPC = 8; | 1140 m_SrcBPC = 8; |
1143 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); | 1141 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); |
1144 return TRUE; | 1142 return true; |
1145 } | 1143 } |
1146 if (m_pJpegContext) { | 1144 if (m_pJpegContext) { |
1147 pJpegModule->Finish(m_pJpegContext); | 1145 pJpegModule->Finish(m_pJpegContext); |
1148 m_pJpegContext = nullptr; | 1146 m_pJpegContext = nullptr; |
1149 } | 1147 } |
1150 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1148 m_status = FXCODEC_STATUS_ERR_FORMAT; |
1151 return FALSE; | 1149 return false; |
1152 } | 1150 } |
1153 case FXCODEC_IMAGE_PNG: { | 1151 case FXCODEC_IMAGE_PNG: { |
1154 CCodec_PngModule* pPngModule = m_pCodecMgr->GetPngModule(); | 1152 CCodec_PngModule* pPngModule = m_pCodecMgr->GetPngModule(); |
1155 if (!pPngModule) { | 1153 if (!pPngModule) { |
1156 m_status = FXCODEC_STATUS_ERR_MEMORY; | 1154 m_status = FXCODEC_STATUS_ERR_MEMORY; |
1157 return FALSE; | 1155 return false; |
1158 } | 1156 } |
1159 pPngModule->ReadHeaderCallback = | 1157 pPngModule->ReadHeaderCallback = |
1160 CCodec_ProgressiveDecoder::PngReadHeaderFunc; | 1158 CCodec_ProgressiveDecoder::PngReadHeaderFunc; |
1161 pPngModule->AskScanlineBufCallback = | 1159 pPngModule->AskScanlineBufCallback = |
1162 CCodec_ProgressiveDecoder::PngAskScanlineBufFunc; | 1160 CCodec_ProgressiveDecoder::PngAskScanlineBufFunc; |
1163 pPngModule->FillScanlineBufCompletedCallback = | 1161 pPngModule->FillScanlineBufCompletedCallback = |
1164 CCodec_ProgressiveDecoder::PngFillScanlineBufCompletedFunc; | 1162 CCodec_ProgressiveDecoder::PngFillScanlineBufCompletedFunc; |
1165 m_pPngContext = pPngModule->Start((void*)this); | 1163 m_pPngContext = pPngModule->Start((void*)this); |
1166 if (!m_pPngContext) { | 1164 if (!m_pPngContext) { |
1167 m_status = FXCODEC_STATUS_ERR_MEMORY; | 1165 m_status = FXCODEC_STATUS_ERR_MEMORY; |
1168 return FALSE; | 1166 return false; |
1169 } | 1167 } |
1170 FX_BOOL bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); | 1168 bool bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); |
1171 if (!bResult) { | 1169 if (!bResult) { |
1172 m_status = FXCODEC_STATUS_ERR_READ; | 1170 m_status = FXCODEC_STATUS_ERR_READ; |
1173 return FALSE; | 1171 return false; |
1174 } | 1172 } |
1175 m_offSet += size; | 1173 m_offSet += size; |
1176 bResult = pPngModule->Input(m_pPngContext, m_pSrcBuf, size, pAttribute); | 1174 bResult = pPngModule->Input(m_pPngContext, m_pSrcBuf, size, pAttribute); |
1177 while (bResult) { | 1175 while (bResult) { |
1178 uint32_t remain_size = (uint32_t)m_pFile->GetSize() - m_offSet; | 1176 uint32_t remain_size = (uint32_t)m_pFile->GetSize() - m_offSet; |
1179 uint32_t input_size = | 1177 uint32_t input_size = |
1180 remain_size > FXCODEC_BLOCK_SIZE ? FXCODEC_BLOCK_SIZE : remain_size; | 1178 remain_size > FXCODEC_BLOCK_SIZE ? FXCODEC_BLOCK_SIZE : remain_size; |
1181 if (input_size == 0) { | 1179 if (input_size == 0) { |
1182 if (m_pPngContext) { | 1180 if (m_pPngContext) { |
1183 pPngModule->Finish(m_pPngContext); | 1181 pPngModule->Finish(m_pPngContext); |
1184 } | 1182 } |
1185 m_pPngContext = nullptr; | 1183 m_pPngContext = nullptr; |
1186 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1184 m_status = FXCODEC_STATUS_ERR_FORMAT; |
1187 return FALSE; | 1185 return false; |
1188 } | 1186 } |
1189 if (m_pSrcBuf && input_size > m_SrcSize) { | 1187 if (m_pSrcBuf && input_size > m_SrcSize) { |
1190 FX_Free(m_pSrcBuf); | 1188 FX_Free(m_pSrcBuf); |
1191 m_pSrcBuf = FX_Alloc(uint8_t, input_size); | 1189 m_pSrcBuf = FX_Alloc(uint8_t, input_size); |
1192 FXSYS_memset(m_pSrcBuf, 0, input_size); | 1190 FXSYS_memset(m_pSrcBuf, 0, input_size); |
1193 m_SrcSize = input_size; | 1191 m_SrcSize = input_size; |
1194 } | 1192 } |
1195 bResult = m_pFile->ReadBlock(m_pSrcBuf, m_offSet, input_size); | 1193 bResult = m_pFile->ReadBlock(m_pSrcBuf, m_offSet, input_size); |
1196 if (!bResult) { | 1194 if (!bResult) { |
1197 m_status = FXCODEC_STATUS_ERR_READ; | 1195 m_status = FXCODEC_STATUS_ERR_READ; |
1198 return FALSE; | 1196 return false; |
1199 } | 1197 } |
1200 m_offSet += input_size; | 1198 m_offSet += input_size; |
1201 bResult = | 1199 bResult = |
1202 pPngModule->Input(m_pPngContext, m_pSrcBuf, input_size, pAttribute); | 1200 pPngModule->Input(m_pPngContext, m_pSrcBuf, input_size, pAttribute); |
1203 } | 1201 } |
1204 ASSERT(!bResult); | 1202 ASSERT(!bResult); |
1205 if (m_pPngContext) { | 1203 if (m_pPngContext) { |
1206 pPngModule->Finish(m_pPngContext); | 1204 pPngModule->Finish(m_pPngContext); |
1207 m_pPngContext = nullptr; | 1205 m_pPngContext = nullptr; |
1208 } | 1206 } |
1209 if (m_SrcPassNumber == 0) { | 1207 if (m_SrcPassNumber == 0) { |
1210 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1208 m_status = FXCODEC_STATUS_ERR_FORMAT; |
1211 return FALSE; | 1209 return false; |
1212 } | 1210 } |
1213 return TRUE; | 1211 return true; |
1214 } | 1212 } |
1215 case FXCODEC_IMAGE_GIF: { | 1213 case FXCODEC_IMAGE_GIF: { |
1216 CCodec_GifModule* pGifModule = m_pCodecMgr->GetGifModule(); | 1214 CCodec_GifModule* pGifModule = m_pCodecMgr->GetGifModule(); |
1217 if (!pGifModule) { | 1215 if (!pGifModule) { |
1218 m_status = FXCODEC_STATUS_ERR_MEMORY; | 1216 m_status = FXCODEC_STATUS_ERR_MEMORY; |
1219 return FALSE; | 1217 return false; |
1220 } | 1218 } |
1221 pGifModule->RecordCurrentPositionCallback = | 1219 pGifModule->RecordCurrentPositionCallback = |
1222 CCodec_ProgressiveDecoder::GifRecordCurrentPositionCallback; | 1220 CCodec_ProgressiveDecoder::GifRecordCurrentPositionCallback; |
1223 pGifModule->AskLocalPaletteBufCallback = | 1221 pGifModule->AskLocalPaletteBufCallback = |
1224 CCodec_ProgressiveDecoder::GifAskLocalPaletteBufCallback; | 1222 CCodec_ProgressiveDecoder::GifAskLocalPaletteBufCallback; |
1225 pGifModule->InputRecordPositionBufCallback = | 1223 pGifModule->InputRecordPositionBufCallback = |
1226 CCodec_ProgressiveDecoder::GifInputRecordPositionBufCallback; | 1224 CCodec_ProgressiveDecoder::GifInputRecordPositionBufCallback; |
1227 pGifModule->ReadScanlineCallback = | 1225 pGifModule->ReadScanlineCallback = |
1228 CCodec_ProgressiveDecoder::GifReadScanlineCallback; | 1226 CCodec_ProgressiveDecoder::GifReadScanlineCallback; |
1229 m_pGifContext = pGifModule->Start((void*)this); | 1227 m_pGifContext = pGifModule->Start((void*)this); |
1230 if (!m_pGifContext) { | 1228 if (!m_pGifContext) { |
1231 m_status = FXCODEC_STATUS_ERR_MEMORY; | 1229 m_status = FXCODEC_STATUS_ERR_MEMORY; |
1232 return FALSE; | 1230 return false; |
1233 } | 1231 } |
1234 FX_BOOL bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); | 1232 bool bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); |
1235 if (!bResult) { | 1233 if (!bResult) { |
1236 m_status = FXCODEC_STATUS_ERR_READ; | 1234 m_status = FXCODEC_STATUS_ERR_READ; |
1237 return FALSE; | 1235 return false; |
1238 } | 1236 } |
1239 m_offSet += size; | 1237 m_offSet += size; |
1240 pGifModule->Input(m_pGifContext, m_pSrcBuf, size); | 1238 pGifModule->Input(m_pGifContext, m_pSrcBuf, size); |
1241 m_SrcComponents = 1; | 1239 m_SrcComponents = 1; |
1242 int32_t readResult = pGifModule->ReadHeader( | 1240 int32_t readResult = pGifModule->ReadHeader( |
1243 m_pGifContext, &m_SrcWidth, &m_SrcHeight, &m_GifPltNumber, | 1241 m_pGifContext, &m_SrcWidth, &m_SrcHeight, &m_GifPltNumber, |
1244 (void**)&m_pGifPalette, &m_GifBgIndex, nullptr); | 1242 (void**)&m_pGifPalette, &m_GifBgIndex, nullptr); |
1245 while (readResult == 2) { | 1243 while (readResult == 2) { |
1246 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERR_FORMAT; | 1244 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERR_FORMAT; |
1247 if (!GifReadMoreData(pGifModule, error_status)) { | 1245 if (!GifReadMoreData(pGifModule, error_status)) { |
1248 m_status = error_status; | 1246 m_status = error_status; |
1249 return FALSE; | 1247 return false; |
1250 } | 1248 } |
1251 readResult = pGifModule->ReadHeader( | 1249 readResult = pGifModule->ReadHeader( |
1252 m_pGifContext, &m_SrcWidth, &m_SrcHeight, &m_GifPltNumber, | 1250 m_pGifContext, &m_SrcWidth, &m_SrcHeight, &m_GifPltNumber, |
1253 (void**)&m_pGifPalette, &m_GifBgIndex, nullptr); | 1251 (void**)&m_pGifPalette, &m_GifBgIndex, nullptr); |
1254 } | 1252 } |
1255 if (readResult == 1) { | 1253 if (readResult == 1) { |
1256 m_SrcBPC = 8; | 1254 m_SrcBPC = 8; |
1257 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); | 1255 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); |
1258 return TRUE; | 1256 return true; |
1259 } | 1257 } |
1260 if (m_pGifContext) { | 1258 if (m_pGifContext) { |
1261 pGifModule->Finish(m_pGifContext); | 1259 pGifModule->Finish(m_pGifContext); |
1262 m_pGifContext = nullptr; | 1260 m_pGifContext = nullptr; |
1263 } | 1261 } |
1264 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1262 m_status = FXCODEC_STATUS_ERR_FORMAT; |
1265 return FALSE; | 1263 return false; |
1266 } | 1264 } |
1267 case FXCODEC_IMAGE_TIF: { | 1265 case FXCODEC_IMAGE_TIF: { |
1268 CCodec_TiffModule* pTiffModule = m_pCodecMgr->GetTiffModule(); | 1266 CCodec_TiffModule* pTiffModule = m_pCodecMgr->GetTiffModule(); |
1269 if (!pTiffModule) { | 1267 if (!pTiffModule) { |
1270 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1268 m_status = FXCODEC_STATUS_ERR_FORMAT; |
1271 return FALSE; | 1269 return false; |
1272 } | 1270 } |
1273 m_pTiffContext = pTiffModule->CreateDecoder(m_pFile); | 1271 m_pTiffContext = pTiffModule->CreateDecoder(m_pFile); |
1274 if (!m_pTiffContext) { | 1272 if (!m_pTiffContext) { |
1275 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1273 m_status = FXCODEC_STATUS_ERR_FORMAT; |
1276 return FALSE; | 1274 return false; |
1277 } | 1275 } |
1278 int32_t dummy_bpc; | 1276 int32_t dummy_bpc; |
1279 FX_BOOL ret = pTiffModule->LoadFrameInfo(m_pTiffContext, 0, &m_SrcWidth, | 1277 bool ret = pTiffModule->LoadFrameInfo(m_pTiffContext, 0, &m_SrcWidth, |
1280 &m_SrcHeight, &m_SrcComponents, | 1278 &m_SrcHeight, &m_SrcComponents, |
1281 &dummy_bpc, pAttribute); | 1279 &dummy_bpc, pAttribute); |
1282 m_SrcComponents = 4; | 1280 m_SrcComponents = 4; |
1283 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); | 1281 m_clipBox = FX_RECT(0, 0, m_SrcWidth, m_SrcHeight); |
1284 if (!ret) { | 1282 if (!ret) { |
1285 pTiffModule->DestroyDecoder(m_pTiffContext); | 1283 pTiffModule->DestroyDecoder(m_pTiffContext); |
1286 m_pTiffContext = nullptr; | 1284 m_pTiffContext = nullptr; |
1287 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1285 m_status = FXCODEC_STATUS_ERR_FORMAT; |
1288 return FALSE; | 1286 return false; |
1289 } | 1287 } |
1290 return TRUE; | 1288 return true; |
1291 } | 1289 } |
1292 default: | 1290 default: |
1293 m_status = FXCODEC_STATUS_ERR_FORMAT; | 1291 m_status = FXCODEC_STATUS_ERR_FORMAT; |
1294 return FALSE; | 1292 return false; |
1295 } | 1293 } |
1296 } | 1294 } |
1297 | 1295 |
1298 FXCODEC_STATUS CCodec_ProgressiveDecoder::LoadImageInfo( | 1296 FXCODEC_STATUS CCodec_ProgressiveDecoder::LoadImageInfo( |
1299 IFX_SeekableReadStream* pFile, | 1297 IFX_SeekableReadStream* pFile, |
1300 FXCODEC_IMAGE_TYPE imageType, | 1298 FXCODEC_IMAGE_TYPE imageType, |
1301 CFX_DIBAttribute* pAttribute, | 1299 CFX_DIBAttribute* pAttribute, |
1302 bool bSkipImageTypeCheck) { | 1300 bool bSkipImageTypeCheck) { |
1303 switch (m_status) { | 1301 switch (m_status) { |
1304 case FXCODEC_STATUS_FRAME_READY: | 1302 case FXCODEC_STATUS_FRAME_READY: |
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1873 return FXCODEC_STATUS_ERROR; | 1871 return FXCODEC_STATUS_ERROR; |
1874 } | 1872 } |
1875 } | 1873 } |
1876 | 1874 |
1877 FXCODEC_STATUS CCodec_ProgressiveDecoder::StartDecode(CFX_DIBitmap* pDIBitmap, | 1875 FXCODEC_STATUS CCodec_ProgressiveDecoder::StartDecode(CFX_DIBitmap* pDIBitmap, |
1878 int start_x, | 1876 int start_x, |
1879 int start_y, | 1877 int start_y, |
1880 int size_x, | 1878 int size_x, |
1881 int size_y, | 1879 int size_y, |
1882 int32_t frames, | 1880 int32_t frames, |
1883 FX_BOOL bInterpol) { | 1881 bool bInterpol) { |
1884 if (m_status != FXCODEC_STATUS_DECODE_READY) | 1882 if (m_status != FXCODEC_STATUS_DECODE_READY) |
1885 return FXCODEC_STATUS_ERROR; | 1883 return FXCODEC_STATUS_ERROR; |
1886 | 1884 |
1887 if (!pDIBitmap || pDIBitmap->GetBPP() < 8 || frames < 0 || | 1885 if (!pDIBitmap || pDIBitmap->GetBPP() < 8 || frames < 0 || |
1888 frames >= m_FrameNumber) { | 1886 frames >= m_FrameNumber) { |
1889 return FXCODEC_STATUS_ERR_PARAMS; | 1887 return FXCODEC_STATUS_ERR_PARAMS; |
1890 } | 1888 } |
1891 m_pDeviceBitmap = pDIBitmap; | 1889 m_pDeviceBitmap = pDIBitmap; |
1892 if (m_clipBox.IsEmpty()) | 1890 if (m_clipBox.IsEmpty()) |
1893 return FXCODEC_STATUS_ERR_PARAMS; | 1891 return FXCODEC_STATUS_ERR_PARAMS; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1928 } | 1926 } |
1929 } | 1927 } |
1930 if (m_clipBox.IsEmpty()) { | 1928 if (m_clipBox.IsEmpty()) { |
1931 return FXCODEC_STATUS_ERR_PARAMS; | 1929 return FXCODEC_STATUS_ERR_PARAMS; |
1932 } | 1930 } |
1933 switch (m_imagType) { | 1931 switch (m_imagType) { |
1934 case FXCODEC_IMAGE_JPG: { | 1932 case FXCODEC_IMAGE_JPG: { |
1935 CCodec_JpegModule* pJpegModule = m_pCodecMgr->GetJpegModule(); | 1933 CCodec_JpegModule* pJpegModule = m_pCodecMgr->GetJpegModule(); |
1936 int down_scale = 1; | 1934 int down_scale = 1; |
1937 GetDownScale(down_scale); | 1935 GetDownScale(down_scale); |
1938 FX_BOOL bStart = pJpegModule->StartScanline(m_pJpegContext, down_scale); | 1936 bool bStart = pJpegModule->StartScanline(m_pJpegContext, down_scale); |
1939 while (!bStart) { | 1937 while (!bStart) { |
1940 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERROR; | 1938 FXCODEC_STATUS error_status = FXCODEC_STATUS_ERROR; |
1941 if (!JpegReadMoreData(pJpegModule, error_status)) { | 1939 if (!JpegReadMoreData(pJpegModule, error_status)) { |
1942 m_pDeviceBitmap = nullptr; | 1940 m_pDeviceBitmap = nullptr; |
1943 m_pFile = nullptr; | 1941 m_pFile = nullptr; |
1944 m_status = error_status; | 1942 m_status = error_status; |
1945 return m_status; | 1943 return m_status; |
1946 } | 1944 } |
1947 bStart = pJpegModule->StartScanline(m_pJpegContext, down_scale); | 1945 bStart = pJpegModule->StartScanline(m_pJpegContext, down_scale); |
1948 } | 1946 } |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2081 } | 2079 } |
2082 | 2080 |
2083 FXCODEC_STATUS CCodec_ProgressiveDecoder::ContinueDecode(IFX_Pause* pPause) { | 2081 FXCODEC_STATUS CCodec_ProgressiveDecoder::ContinueDecode(IFX_Pause* pPause) { |
2084 if (m_status != FXCODEC_STATUS_DECODE_TOBECONTINUE) | 2082 if (m_status != FXCODEC_STATUS_DECODE_TOBECONTINUE) |
2085 return FXCODEC_STATUS_ERROR; | 2083 return FXCODEC_STATUS_ERROR; |
2086 | 2084 |
2087 switch (m_imagType) { | 2085 switch (m_imagType) { |
2088 case FXCODEC_IMAGE_JPG: { | 2086 case FXCODEC_IMAGE_JPG: { |
2089 CCodec_JpegModule* pJpegModule = m_pCodecMgr->GetJpegModule(); | 2087 CCodec_JpegModule* pJpegModule = m_pCodecMgr->GetJpegModule(); |
2090 while (true) { | 2088 while (true) { |
2091 FX_BOOL readRes = | 2089 bool readRes = pJpegModule->ReadScanline(m_pJpegContext, m_pDecodeBuf); |
2092 pJpegModule->ReadScanline(m_pJpegContext, m_pDecodeBuf); | |
2093 while (!readRes) { | 2090 while (!readRes) { |
2094 FXCODEC_STATUS error_status = FXCODEC_STATUS_DECODE_FINISH; | 2091 FXCODEC_STATUS error_status = FXCODEC_STATUS_DECODE_FINISH; |
2095 if (!JpegReadMoreData(pJpegModule, error_status)) { | 2092 if (!JpegReadMoreData(pJpegModule, error_status)) { |
2096 m_pDeviceBitmap = nullptr; | 2093 m_pDeviceBitmap = nullptr; |
2097 m_pFile = nullptr; | 2094 m_pFile = nullptr; |
2098 m_status = error_status; | 2095 m_status = error_status; |
2099 return m_status; | 2096 return m_status; |
2100 } | 2097 } |
2101 readRes = pJpegModule->ReadScanline(m_pJpegContext, m_pDecodeBuf); | 2098 readRes = pJpegModule->ReadScanline(m_pJpegContext, m_pDecodeBuf); |
2102 } | 2099 } |
(...skipping 30 matching lines...) Expand all Loading... |
2133 m_pFile = nullptr; | 2130 m_pFile = nullptr; |
2134 m_status = FXCODEC_STATUS_DECODE_FINISH; | 2131 m_status = FXCODEC_STATUS_DECODE_FINISH; |
2135 return m_status; | 2132 return m_status; |
2136 } | 2133 } |
2137 if (m_pSrcBuf && input_size > m_SrcSize) { | 2134 if (m_pSrcBuf && input_size > m_SrcSize) { |
2138 FX_Free(m_pSrcBuf); | 2135 FX_Free(m_pSrcBuf); |
2139 m_pSrcBuf = FX_Alloc(uint8_t, input_size); | 2136 m_pSrcBuf = FX_Alloc(uint8_t, input_size); |
2140 FXSYS_memset(m_pSrcBuf, 0, input_size); | 2137 FXSYS_memset(m_pSrcBuf, 0, input_size); |
2141 m_SrcSize = input_size; | 2138 m_SrcSize = input_size; |
2142 } | 2139 } |
2143 FX_BOOL bResult = m_pFile->ReadBlock(m_pSrcBuf, m_offSet, input_size); | 2140 bool bResult = m_pFile->ReadBlock(m_pSrcBuf, m_offSet, input_size); |
2144 if (!bResult) { | 2141 if (!bResult) { |
2145 m_pDeviceBitmap = nullptr; | 2142 m_pDeviceBitmap = nullptr; |
2146 m_pFile = nullptr; | 2143 m_pFile = nullptr; |
2147 m_status = FXCODEC_STATUS_ERR_READ; | 2144 m_status = FXCODEC_STATUS_ERR_READ; |
2148 return m_status; | 2145 return m_status; |
2149 } | 2146 } |
2150 m_offSet += input_size; | 2147 m_offSet += input_size; |
2151 bResult = | 2148 bResult = |
2152 pPngModule->Input(m_pPngContext, m_pSrcBuf, input_size, nullptr); | 2149 pPngModule->Input(m_pPngContext, m_pSrcBuf, input_size, nullptr); |
2153 if (!bResult) { | 2150 if (!bResult) { |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2218 return m_status; | 2215 return m_status; |
2219 } | 2216 } |
2220 m_pDeviceBitmap = nullptr; | 2217 m_pDeviceBitmap = nullptr; |
2221 m_pFile = nullptr; | 2218 m_pFile = nullptr; |
2222 m_status = FXCODEC_STATUS_ERROR; | 2219 m_status = FXCODEC_STATUS_ERROR; |
2223 return m_status; | 2220 return m_status; |
2224 } | 2221 } |
2225 }; | 2222 }; |
2226 case FXCODEC_IMAGE_TIF: { | 2223 case FXCODEC_IMAGE_TIF: { |
2227 CCodec_TiffModule* pTiffModule = m_pCodecMgr->GetTiffModule(); | 2224 CCodec_TiffModule* pTiffModule = m_pCodecMgr->GetTiffModule(); |
2228 FX_BOOL ret = FALSE; | 2225 bool ret = false; |
2229 if (m_pDeviceBitmap->GetBPP() == 32 && | 2226 if (m_pDeviceBitmap->GetBPP() == 32 && |
2230 m_pDeviceBitmap->GetWidth() == m_SrcWidth && m_SrcWidth == m_sizeX && | 2227 m_pDeviceBitmap->GetWidth() == m_SrcWidth && m_SrcWidth == m_sizeX && |
2231 m_pDeviceBitmap->GetHeight() == m_SrcHeight && | 2228 m_pDeviceBitmap->GetHeight() == m_SrcHeight && |
2232 m_SrcHeight == m_sizeY && m_startX == 0 && m_startY == 0 && | 2229 m_SrcHeight == m_sizeY && m_startX == 0 && m_startY == 0 && |
2233 m_clipBox.left == 0 && m_clipBox.top == 0 && | 2230 m_clipBox.left == 0 && m_clipBox.top == 0 && |
2234 m_clipBox.right == m_SrcWidth && m_clipBox.bottom == m_SrcHeight) { | 2231 m_clipBox.right == m_SrcWidth && m_clipBox.bottom == m_SrcHeight) { |
2235 ret = pTiffModule->Decode(m_pTiffContext, m_pDeviceBitmap); | 2232 ret = pTiffModule->Decode(m_pTiffContext, m_pDeviceBitmap); |
2236 m_pDeviceBitmap = nullptr; | 2233 m_pDeviceBitmap = nullptr; |
2237 m_pFile = nullptr; | 2234 m_pFile = nullptr; |
2238 if (!ret) { | 2235 if (!ret) { |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2369 return m_status; | 2366 return m_status; |
2370 } | 2367 } |
2371 default: | 2368 default: |
2372 return FXCODEC_STATUS_ERROR; | 2369 return FXCODEC_STATUS_ERROR; |
2373 } | 2370 } |
2374 } | 2371 } |
2375 | 2372 |
2376 CCodec_ProgressiveDecoder* CCodec_ModuleMgr::CreateProgressiveDecoder() { | 2373 CCodec_ProgressiveDecoder* CCodec_ModuleMgr::CreateProgressiveDecoder() { |
2377 return new CCodec_ProgressiveDecoder(this); | 2374 return new CCodec_ProgressiveDecoder(this); |
2378 } | 2375 } |
OLD | NEW |