Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: core/src/fxcodec/codec/fx_codec_tiff.cpp

Issue 1172793002: Merge to XFA: Use stdint.h types throughout PDFium. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "../../../include/fxcodec/fx_codec.h" 7 #include "../../../include/fxcodec/fx_codec.h"
8 #include "../../../include/fxge/fx_dib.h" 8 #include "../../../include/fxge/fx_dib.h"
9 #include "codec_int.h" 9 #include "codec_int.h"
10 extern "C" { 10 extern "C" {
11 #include "../fx_tiff/include/fx_tiffiop.h" 11 #include "../fx_tiff/include/fx_tiffiop.h"
12 } 12 }
13 void* IccLib_CreateTransform_sRGB(const unsigned char* pProfileData, unsigned in t dwProfileSize, int nComponents, int intent, FX_DWORD dwSrcFormat = Icc_FORMAT_ DEFAULT); 13 void* IccLib_CreateTransform_sRGB(const unsigned char* pProfileData, unsigned in t dwProfileSize, int nComponents, int intent, FX_DWORD dwSrcFormat = Icc_FORMAT_ DEFAULT);
14 void IccLib_TranslateImage(void* pTransform, unsigned char* pDest, const unsigne d char* pSrc, int pixels); 14 void IccLib_TranslateImage(void* pTransform, unsigned char* pDest, const unsigne d char* pSrc, int pixels);
15 void IccLib_DestroyTransform(void* pTransform); 15 void IccLib_DestroyTransform(void* pTransform);
16 class CCodec_TiffContext 16 class CCodec_TiffContext
17 { 17 {
18 public: 18 public:
19 CCodec_TiffContext(); 19 CCodec_TiffContext();
20 ~CCodec_TiffContext(); 20 ~CCodec_TiffContext();
21 21
22 FX_BOOL InitDecoder(IFX_FileRead* file_ptr); 22 FX_BOOL InitDecoder(IFX_FileRead* file_ptr);
23 void» GetFrames(FX_INT32& frames); 23 void» GetFrames(int32_t& frames);
24 FX_BOOL» LoadFrameInfo(FX_INT32 frame, FX_DWORD& width, FX_DWORD& height, FX_DWORD& comps, FX_DWORD& bpc, CFX_DIBAttribute* pAttribute); 24 FX_BOOL» LoadFrameInfo(int32_t frame, FX_DWORD& width, FX_DWORD& height, FX_DWORD& comps, FX_DWORD& bpc, CFX_DIBAttribute* pAttribute);
25 FX_BOOL Decode(CFX_DIBitmap* pDIBitmap); 25 FX_BOOL Decode(CFX_DIBitmap* pDIBitmap);
26 26
27 union { 27 union {
28 IFX_FileRead* in; 28 IFX_FileRead* in;
29 IFX_FileStream* out; 29 IFX_FileStream* out;
30 } io; 30 } io;
31 31
32 FX_DWORD offset; 32 FX_DWORD offset;
33 33
34 TIFF* tif_ctx; 34 TIFF* tif_ctx;
35 void* icc_ctx; 35 void* icc_ctx;
36 FX_INT32» » frame_num; 36 int32_t» » frame_num;
37 FX_INT32» » frame_cur; 37 int32_t» » frame_cur;
38 FX_BOOL isDecoder; 38 FX_BOOL isDecoder;
39 private: 39 private:
40 FX_BOOL isSupport(CFX_DIBitmap* pDIBitmap); 40 FX_BOOL isSupport(CFX_DIBitmap* pDIBitmap);
41 void» SetPalette(CFX_DIBitmap* pDIBitmap, FX_UINT16 bps); 41 void» SetPalette(CFX_DIBitmap* pDIBitmap, uint16_t bps);
42 FX_BOOL» Decode1bppRGB(CFX_DIBitmap* pDIBitmap, FX_INT32 height, FX_INT32 width, FX_UINT16 bps, FX_UINT16 spp); 42 FX_BOOL» Decode1bppRGB(CFX_DIBitmap* pDIBitmap, int32_t height, int32_t w idth, uint16_t bps, uint16_t spp);
43 FX_BOOL» Decode8bppRGB(CFX_DIBitmap* pDIBitmap, FX_INT32 height, FX_INT32 width, FX_UINT16 bps, FX_UINT16 spp); 43 FX_BOOL» Decode8bppRGB(CFX_DIBitmap* pDIBitmap, int32_t height, int32_t w idth, uint16_t bps, uint16_t spp);
44 FX_BOOL» Decode24bppRGB(CFX_DIBitmap* pDIBitmap, FX_INT32 height, FX_INT3 2 width, FX_UINT16 bps, FX_UINT16 spp); 44 FX_BOOL» Decode24bppRGB(CFX_DIBitmap* pDIBitmap, int32_t height, int32_t width, uint16_t bps, uint16_t spp);
45 }; 45 };
46 CCodec_TiffContext::CCodec_TiffContext() 46 CCodec_TiffContext::CCodec_TiffContext()
47 { 47 {
48 offset = 0; 48 offset = 0;
49 frame_num = 0; 49 frame_num = 0;
50 frame_cur = 0; 50 frame_cur = 0;
51 io.in = NULL; 51 io.in = NULL;
52 tif_ctx = NULL; 52 tif_ctx = NULL;
53 icc_ctx = NULL; 53 icc_ctx = NULL;
54 isDecoder = TRUE; 54 isDecoder = TRUE;
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 return 0; 135 return 0;
136 } 136 }
137 static void _tiff_unmap(thandle_t context, tdata_t, toff_t) {} 137 static void _tiff_unmap(thandle_t context, tdata_t, toff_t) {}
138 TIFF* _tiff_open(void* context, const char* mode) 138 TIFF* _tiff_open(void* context, const char* mode)
139 { 139 {
140 TIFF* tif = TIFFClientOpen("Tiff Image", mode, 140 TIFF* tif = TIFFClientOpen("Tiff Image", mode,
141 (thandle_t)context, 141 (thandle_t)context,
142 _tiff_read, _tiff_write, _tiff_seek, _tiff_close, 142 _tiff_read, _tiff_write, _tiff_seek, _tiff_close,
143 _tiff_get_size, _tiff_map, _tiff_unmap); 143 _tiff_get_size, _tiff_map, _tiff_unmap);
144 if(tif) { 144 if(tif) {
145 tif->tif_fd = (int)(FX_INTPTR)context; 145 tif->tif_fd = (int)(intptr_t)context;
146 } 146 }
147 return tif; 147 return tif;
148 } 148 }
149 void* _TIFFmalloc(tmsize_t size) 149 void* _TIFFmalloc(tmsize_t size)
150 { 150 {
151 return FXMEM_DefaultAlloc(size, 0); 151 return FXMEM_DefaultAlloc(size, 0);
152 } 152 }
153 void _TIFFfree(void* ptr) 153 void _TIFFfree(void* ptr)
154 { 154 {
155 FXMEM_DefaultFree(ptr, 0); 155 FXMEM_DefaultFree(ptr, 0);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 } 200 }
201 FX_BOOL CCodec_TiffContext::InitDecoder(IFX_FileRead* file_ptr) 201 FX_BOOL CCodec_TiffContext::InitDecoder(IFX_FileRead* file_ptr)
202 { 202 {
203 io.in = file_ptr; 203 io.in = file_ptr;
204 tif_ctx = _tiff_open(this, "r"); 204 tif_ctx = _tiff_open(this, "r");
205 if(tif_ctx == NULL) { 205 if(tif_ctx == NULL) {
206 return FALSE; 206 return FALSE;
207 } 207 }
208 return TRUE; 208 return TRUE;
209 } 209 }
210 void CCodec_TiffContext::GetFrames(FX_INT32& frames) 210 void CCodec_TiffContext::GetFrames(int32_t& frames)
211 { 211 {
212 frames = frame_num = TIFFNumberOfDirectories(tif_ctx); 212 frames = frame_num = TIFFNumberOfDirectories(tif_ctx);
213 } 213 }
214 #define TIFF_EXIF_GETINFO(key, T, tag) {\ 214 #define TIFF_EXIF_GETINFO(key, T, tag) {\
215 T val = (T)0;\ 215 T val = (T)0;\
216 TIFFGetField(tif_ctx,tag,&val);\ 216 TIFFGetField(tif_ctx,tag,&val);\
217 if (val) {\ 217 if (val) {\
218 (key) = FX_Alloc(FX_BYTE,sizeof(T));\ 218 (key) = FX_Alloc(uint8_t,sizeof(T));\
219 if ((key)) {\ 219 if ((key)) {\
220 T* ptr = (T*)(key);\ 220 T* ptr = (T*)(key);\
221 *ptr = val;\ 221 *ptr = val;\
222 pExif->m_TagVal.SetAt(tag,(key));}}}\ 222 pExif->m_TagVal.SetAt(tag,(key));}}}\
223 (key) = NULL; 223 (key) = NULL;
224 #define TIFF_EXIF_GETSTRINGINFO(key, tag) {\ 224 #define TIFF_EXIF_GETSTRINGINFO(key, tag) {\
225 FX_DWORD size = 0;\ 225 FX_DWORD size = 0;\
226 FX_LPBYTE buf = NULL;\ 226 FX_LPBYTE buf = NULL;\
227 TIFFGetField(tif_ctx,tag,&size, &buf);\ 227 TIFFGetField(tif_ctx,tag,&size, &buf);\
228 if (size && buf) {\ 228 if (size && buf) {\
229 (key) = FX_Alloc(FX_BYTE,size);\ 229 (key) = FX_Alloc(uint8_t,size);\
230 if ((key)) {\ 230 if ((key)) {\
231 FXSYS_memcpy32((key),buf,size);\ 231 FXSYS_memcpy32((key),buf,size);\
232 pExif->m_TagVal.SetAt(tag,(key));}}}\ 232 pExif->m_TagVal.SetAt(tag,(key));}}}\
233 (key) = NULL; 233 (key) = NULL;
234 template <class T> 234 template <class T>
235 static FX_BOOL Tiff_Exif_GetInfo(TIFF* tif_ctx, ttag_t tag, CFX_DIBAttributeExif * pExif) 235 static FX_BOOL Tiff_Exif_GetInfo(TIFF* tif_ctx, ttag_t tag, CFX_DIBAttributeExif * pExif)
236 { 236 {
237 FX_LPBYTE key = NULL; 237 FX_LPBYTE key = NULL;
238 T val = (T)0; 238 T val = (T)0;
239 TIFFGetField(tif_ctx, tag, &val); 239 TIFFGetField(tif_ctx, tag, &val);
240 if (val) { 240 if (val) {
241 (key) = FX_Alloc(FX_BYTE, sizeof(T)); 241 (key) = FX_Alloc(uint8_t, sizeof(T));
242 if ((key) == NULL) { 242 if ((key) == NULL) {
243 return FALSE; 243 return FALSE;
244 } 244 }
245 T* ptr = (T*)(key); 245 T* ptr = (T*)(key);
246 *ptr = val; 246 *ptr = val;
247 pExif->m_TagVal.SetAt(tag, (key)); 247 pExif->m_TagVal.SetAt(tag, (key));
248 return TRUE; 248 return TRUE;
249 } 249 }
250 return FALSE; 250 return FALSE;
251 } 251 }
252 static void Tiff_Exif_GetStringInfo(TIFF* tif_ctx, ttag_t tag, CFX_DIBAttributeE xif* pExif) 252 static void Tiff_Exif_GetStringInfo(TIFF* tif_ctx, ttag_t tag, CFX_DIBAttributeE xif* pExif)
253 { 253 {
254 FX_LPSTR buf = NULL; 254 FX_LPSTR buf = NULL;
255 FX_LPBYTE key = NULL; 255 FX_LPBYTE key = NULL;
256 TIFFGetField(tif_ctx, tag, &buf); 256 TIFFGetField(tif_ctx, tag, &buf);
257 if (buf) { 257 if (buf) {
258 FX_INT32 size = (FX_INT32)FXSYS_strlen(buf); 258 int32_t size = (int32_t)FXSYS_strlen(buf);
259 (key) = FX_Alloc(FX_BYTE, size + 1); 259 (key) = FX_Alloc(uint8_t, size + 1);
260 if ((key) == NULL) { 260 if ((key) == NULL) {
261 return; 261 return;
262 } 262 }
263 FXSYS_memcpy32((key), buf, size); 263 FXSYS_memcpy32((key), buf, size);
264 key[size] = 0; 264 key[size] = 0;
265 pExif->m_TagVal.SetAt(tag, (key)); 265 pExif->m_TagVal.SetAt(tag, (key));
266 } 266 }
267 } 267 }
268 FX_BOOL CCodec_TiffContext::LoadFrameInfo(FX_INT32 frame, FX_DWORD& width, FX_DW ORD& height, FX_DWORD& comps, FX_DWORD& bpc, CFX_DIBAttribute* pAttribute) 268 FX_BOOL CCodec_TiffContext::LoadFrameInfo(int32_t frame, FX_DWORD& width, FX_DWO RD& height, FX_DWORD& comps, FX_DWORD& bpc, CFX_DIBAttribute* pAttribute)
269 { 269 {
270 if (!TIFFSetDirectory(tif_ctx, (uint16)frame)) { 270 if (!TIFFSetDirectory(tif_ctx, (uint16)frame)) {
271 return FALSE; 271 return FALSE;
272 } 272 }
273 FX_WORD tif_cs; 273 FX_WORD tif_cs;
274 FX_DWORD tif_icc_size = 0; 274 FX_DWORD tif_icc_size = 0;
275 FX_LPBYTE tif_icc_buf = NULL; 275 FX_LPBYTE tif_icc_buf = NULL;
276 FX_WORD tif_bpc = 0; 276 FX_WORD tif_bpc = 0;
277 FX_WORD tif_cps; 277 FX_WORD tif_cps;
278 FX_DWORD tif_rps; 278 FX_DWORD tif_rps;
(...skipping 10 matching lines...) Expand all
289 pAttribute->m_wDPIUnit = FXCODEC_RESUNIT_INCH; 289 pAttribute->m_wDPIUnit = FXCODEC_RESUNIT_INCH;
290 if (TIFFGetField(tif_ctx, TIFFTAG_RESOLUTIONUNIT, &pAttribute->m_wDPIUni t)) { 290 if (TIFFGetField(tif_ctx, TIFFTAG_RESOLUTIONUNIT, &pAttribute->m_wDPIUni t)) {
291 pAttribute->m_wDPIUnit -= 1; 291 pAttribute->m_wDPIUnit -= 1;
292 } 292 }
293 CFX_DIBAttributeExif* pExif = (CFX_DIBAttributeExif*)pAttribute->m_pExif ; 293 CFX_DIBAttributeExif* pExif = (CFX_DIBAttributeExif*)pAttribute->m_pExif ;
294 pExif->clear(); 294 pExif->clear();
295 Tiff_Exif_GetInfo<FX_WORD>(tif_ctx, TIFFTAG_ORIENTATION, pExif); 295 Tiff_Exif_GetInfo<FX_WORD>(tif_ctx, TIFFTAG_ORIENTATION, pExif);
296 if (Tiff_Exif_GetInfo<FX_FLOAT>(tif_ctx, TIFFTAG_XRESOLUTION, pExif)) { 296 if (Tiff_Exif_GetInfo<FX_FLOAT>(tif_ctx, TIFFTAG_XRESOLUTION, pExif)) {
297 FX_FLOAT fDpi = 0; 297 FX_FLOAT fDpi = 0;
298 pExif->GetInfo(TIFFTAG_XRESOLUTION, &fDpi); 298 pExif->GetInfo(TIFFTAG_XRESOLUTION, &fDpi);
299 pAttribute->m_nXDPI = (FX_INT32)(fDpi + 0.5f); 299 pAttribute->m_nXDPI = (int32_t)(fDpi + 0.5f);
300 } 300 }
301 if (Tiff_Exif_GetInfo<FX_FLOAT>(tif_ctx, TIFFTAG_YRESOLUTION, pExif)) { 301 if (Tiff_Exif_GetInfo<FX_FLOAT>(tif_ctx, TIFFTAG_YRESOLUTION, pExif)) {
302 FX_FLOAT fDpi = 0; 302 FX_FLOAT fDpi = 0;
303 pExif->GetInfo(TIFFTAG_YRESOLUTION, &fDpi); 303 pExif->GetInfo(TIFFTAG_YRESOLUTION, &fDpi);
304 pAttribute->m_nYDPI = (FX_INT32)(fDpi + 0.5f); 304 pAttribute->m_nYDPI = (int32_t)(fDpi + 0.5f);
305 } 305 }
306 Tiff_Exif_GetStringInfo(tif_ctx, TIFFTAG_IMAGEDESCRIPTION, pExif); 306 Tiff_Exif_GetStringInfo(tif_ctx, TIFFTAG_IMAGEDESCRIPTION, pExif);
307 Tiff_Exif_GetStringInfo(tif_ctx, TIFFTAG_MAKE, pExif); 307 Tiff_Exif_GetStringInfo(tif_ctx, TIFFTAG_MAKE, pExif);
308 Tiff_Exif_GetStringInfo(tif_ctx, TIFFTAG_MODEL, pExif); 308 Tiff_Exif_GetStringInfo(tif_ctx, TIFFTAG_MODEL, pExif);
309 } 309 }
310 bpc = tif_bpc; 310 bpc = tif_bpc;
311 if(tif_rps > height) { 311 if(tif_rps > height) {
312 TIFFSetField(tif_ctx, TIFFTAG_ROWSPERSTRIP, tif_rps = height); 312 TIFFSetField(tif_ctx, TIFFTAG_ROWSPERSTRIP, tif_rps = height);
313 } 313 }
314 return TRUE; 314 return TRUE;
315 } 315 }
316 void _TiffBGRA2RGBA(FX_LPBYTE pBuf, FX_INT32 pixel, FX_INT32 spp) 316 void _TiffBGRA2RGBA(FX_LPBYTE pBuf, int32_t pixel, int32_t spp)
317 { 317 {
318 register FX_BYTE tmp; 318 register uint8_t tmp;
319 for (FX_INT32 n = 0; n < pixel; n++) { 319 for (int32_t n = 0; n < pixel; n++) {
320 tmp = pBuf[0]; 320 tmp = pBuf[0];
321 pBuf[0] = pBuf[2]; 321 pBuf[0] = pBuf[2];
322 pBuf[2] = tmp; 322 pBuf[2] = tmp;
323 pBuf += spp; 323 pBuf += spp;
324 } 324 }
325 } 325 }
326 FX_BOOL CCodec_TiffContext::isSupport(CFX_DIBitmap* pDIBitmap) 326 FX_BOOL CCodec_TiffContext::isSupport(CFX_DIBitmap* pDIBitmap)
327 { 327 {
328 if (TIFFIsTiled(tif_ctx)) { 328 if (TIFFIsTiled(tif_ctx)) {
329 return FALSE; 329 return FALSE;
330 } 330 }
331 FX_UINT16 photometric; 331 uint16_t photometric;
332 if (!TIFFGetField(tif_ctx, TIFFTAG_PHOTOMETRIC, &photometric)) { 332 if (!TIFFGetField(tif_ctx, TIFFTAG_PHOTOMETRIC, &photometric)) {
333 return FALSE; 333 return FALSE;
334 } 334 }
335 switch (pDIBitmap->GetBPP()) { 335 switch (pDIBitmap->GetBPP()) {
336 case 1: 336 case 1:
337 case 8: 337 case 8:
338 if (photometric != PHOTOMETRIC_PALETTE) { 338 if (photometric != PHOTOMETRIC_PALETTE) {
339 return FALSE; 339 return FALSE;
340 } 340 }
341 break; 341 break;
342 case 24: 342 case 24:
343 if (photometric != PHOTOMETRIC_RGB) { 343 if (photometric != PHOTOMETRIC_RGB) {
344 return FALSE; 344 return FALSE;
345 } 345 }
346 break; 346 break;
347 default: 347 default:
348 return FALSE; 348 return FALSE;
349 } 349 }
350 FX_UINT16 planarconfig; 350 uint16_t planarconfig;
351 if (!TIFFGetFieldDefaulted(tif_ctx, TIFFTAG_PLANARCONFIG, &planarconfig)) { 351 if (!TIFFGetFieldDefaulted(tif_ctx, TIFFTAG_PLANARCONFIG, &planarconfig)) {
352 return FALSE; 352 return FALSE;
353 } 353 }
354 if (planarconfig == PLANARCONFIG_SEPARATE) { 354 if (planarconfig == PLANARCONFIG_SEPARATE) {
355 return FALSE; 355 return FALSE;
356 } 356 }
357 return TRUE; 357 return TRUE;
358 } 358 }
359 void CCodec_TiffContext::SetPalette(CFX_DIBitmap* pDIBitmap, FX_UINT16 bps) 359 void CCodec_TiffContext::SetPalette(CFX_DIBitmap* pDIBitmap, uint16_t bps)
360 { 360 {
361 FX_UINT16 *red_orig, *green_orig, *blue_orig; 361 uint16_t *red_orig, *green_orig, *blue_orig;
362 TIFFGetField(tif_ctx, TIFFTAG_COLORMAP, &red_orig, &green_orig, &blue_orig); 362 TIFFGetField(tif_ctx, TIFFTAG_COLORMAP, &red_orig, &green_orig, &blue_orig);
363 for (FX_INT32 i = (1L << bps) - 1; i >= 0; i--) { 363 for (int32_t i = (1L << bps) - 1; i >= 0; i--) {
364 #define»CVT(x)» » ((FX_UINT16)((x)>>8)) 364 #define»CVT(x)» » ((uint16_t)((x)>>8))
365 red_orig[i] = CVT(red_orig[i]); 365 red_orig[i] = CVT(red_orig[i]);
366 green_orig[i] = CVT(green_orig[i]); 366 green_orig[i] = CVT(green_orig[i]);
367 blue_orig[i] = CVT(blue_orig[i]); 367 blue_orig[i] = CVT(blue_orig[i]);
368 #undef CVT 368 #undef CVT
369 } 369 }
370 FX_INT32 len = 1 << bps; 370 int32_t len = 1 << bps;
371 for(FX_INT32 index = 0; index < len; index++) { 371 for(int32_t index = 0; index < len; index++) {
372 FX_DWORD r = red_orig[index] & 0xFF; 372 FX_DWORD r = red_orig[index] & 0xFF;
373 FX_DWORD g = green_orig[index] & 0xFF; 373 FX_DWORD g = green_orig[index] & 0xFF;
374 FX_DWORD b = blue_orig[index] & 0xFF; 374 FX_DWORD b = blue_orig[index] & 0xFF;
375 FX_DWORD color = (FX_UINT32)b | ((FX_UINT32)g << 8) | ((FX_UINT32)r << 1 6) | (((uint32)0xffL) << 24); 375 FX_DWORD color = (uint32_t)b | ((uint32_t)g << 8) | ((uint32_t)r << 16) | (((uint32)0xffL) << 24);
376 pDIBitmap->SetPaletteEntry(index, color); 376 pDIBitmap->SetPaletteEntry(index, color);
377 } 377 }
378 } 378 }
379 FX_BOOL CCodec_TiffContext::Decode1bppRGB(CFX_DIBitmap* pDIBitmap, FX_INT32 heig ht, FX_INT32 width, FX_UINT16 bps, FX_UINT16 spp) 379 FX_BOOL CCodec_TiffContext::Decode1bppRGB(CFX_DIBitmap* pDIBitmap, int32_t heigh t, int32_t width, uint16_t bps, uint16_t spp)
380 { 380 {
381 if (pDIBitmap->GetBPP() != 1 || spp != 1 || bps != 1 || !isSupport(pDIBitmap )) { 381 if (pDIBitmap->GetBPP() != 1 || spp != 1 || bps != 1 || !isSupport(pDIBitmap )) {
382 return FALSE; 382 return FALSE;
383 } 383 }
384 SetPalette(pDIBitmap, bps); 384 SetPalette(pDIBitmap, bps);
385 FX_INT32 size = (FX_INT32)TIFFScanlineSize(tif_ctx); 385 int32_t size = (int32_t)TIFFScanlineSize(tif_ctx);
386 FX_LPBYTE buf = (FX_LPBYTE)_TIFFmalloc(size); 386 FX_LPBYTE buf = (FX_LPBYTE)_TIFFmalloc(size);
387 if (buf == NULL) { 387 if (buf == NULL) {
388 TIFFError(TIFFFileName(tif_ctx), "No space for scanline buffer"); 388 TIFFError(TIFFFileName(tif_ctx), "No space for scanline buffer");
389 return FALSE; 389 return FALSE;
390 } 390 }
391 FX_LPBYTE bitMapbuffer = (FX_LPBYTE)pDIBitmap->GetBuffer(); 391 FX_LPBYTE bitMapbuffer = (FX_LPBYTE)pDIBitmap->GetBuffer();
392 FX_DWORD pitch = pDIBitmap->GetPitch(); 392 FX_DWORD pitch = pDIBitmap->GetPitch();
393 for(FX_INT32 row = 0; row < height; row++) { 393 for(int32_t row = 0; row < height; row++) {
394 TIFFReadScanline(tif_ctx, buf, row, 0); 394 TIFFReadScanline(tif_ctx, buf, row, 0);
395 for(FX_INT32 j = 0; j < size; j++) { 395 for(int32_t j = 0; j < size; j++) {
396 bitMapbuffer[row * pitch + j] = buf[j]; 396 bitMapbuffer[row * pitch + j] = buf[j];
397 } 397 }
398 } 398 }
399 _TIFFfree(buf); 399 _TIFFfree(buf);
400 return TRUE; 400 return TRUE;
401 } 401 }
402 FX_BOOL CCodec_TiffContext::Decode8bppRGB(CFX_DIBitmap* pDIBitmap, FX_INT32 heig ht, FX_INT32 width, FX_UINT16 bps, FX_UINT16 spp) 402 FX_BOOL CCodec_TiffContext::Decode8bppRGB(CFX_DIBitmap* pDIBitmap, int32_t heigh t, int32_t width, uint16_t bps, uint16_t spp)
403 { 403 {
404 if (pDIBitmap->GetBPP() != 8 || spp != 1 || (bps != 4 && bps != 8) || !isSup port(pDIBitmap)) { 404 if (pDIBitmap->GetBPP() != 8 || spp != 1 || (bps != 4 && bps != 8) || !isSup port(pDIBitmap)) {
405 return FALSE; 405 return FALSE;
406 } 406 }
407 SetPalette(pDIBitmap, bps); 407 SetPalette(pDIBitmap, bps);
408 FX_INT32 size = (FX_INT32)TIFFScanlineSize(tif_ctx); 408 int32_t size = (int32_t)TIFFScanlineSize(tif_ctx);
409 FX_LPBYTE buf = (FX_LPBYTE)_TIFFmalloc(size); 409 FX_LPBYTE buf = (FX_LPBYTE)_TIFFmalloc(size);
410 if (buf == NULL) { 410 if (buf == NULL) {
411 TIFFError(TIFFFileName(tif_ctx), "No space for scanline buffer"); 411 TIFFError(TIFFFileName(tif_ctx), "No space for scanline buffer");
412 return FALSE; 412 return FALSE;
413 } 413 }
414 FX_LPBYTE bitMapbuffer = (FX_LPBYTE)pDIBitmap->GetBuffer(); 414 FX_LPBYTE bitMapbuffer = (FX_LPBYTE)pDIBitmap->GetBuffer();
415 FX_DWORD pitch = pDIBitmap->GetPitch(); 415 FX_DWORD pitch = pDIBitmap->GetPitch();
416 for(FX_INT32 row = 0; row < height; row++) { 416 for(int32_t row = 0; row < height; row++) {
417 TIFFReadScanline(tif_ctx, buf, row, 0); 417 TIFFReadScanline(tif_ctx, buf, row, 0);
418 for(FX_INT32 j = 0; j < size; j++) { 418 for(int32_t j = 0; j < size; j++) {
419 switch(bps) { 419 switch(bps) {
420 case 4: 420 case 4:
421 bitMapbuffer[row * pitch + 2 * j + 0] = (buf[j] & 0xF0) >> 4 ; 421 bitMapbuffer[row * pitch + 2 * j + 0] = (buf[j] & 0xF0) >> 4 ;
422 bitMapbuffer[row * pitch + 2 * j + 1] = (buf[j] & 0x0F) >> 0 ; 422 bitMapbuffer[row * pitch + 2 * j + 1] = (buf[j] & 0x0F) >> 0 ;
423 break; 423 break;
424 case 8: 424 case 8:
425 bitMapbuffer[row * pitch + j] = buf[j]; 425 bitMapbuffer[row * pitch + j] = buf[j];
426 break; 426 break;
427 } 427 }
428 } 428 }
429 } 429 }
430 _TIFFfree(buf); 430 _TIFFfree(buf);
431 return TRUE; 431 return TRUE;
432 } 432 }
433 FX_BOOL CCodec_TiffContext::Decode24bppRGB(CFX_DIBitmap* pDIBitmap, FX_INT32 hei ght, FX_INT32 width, FX_UINT16 bps, FX_UINT16 spp) 433 FX_BOOL CCodec_TiffContext::Decode24bppRGB(CFX_DIBitmap* pDIBitmap, int32_t heig ht, int32_t width, uint16_t bps, uint16_t spp)
434 { 434 {
435 if (pDIBitmap->GetBPP() != 24 || !isSupport(pDIBitmap)) { 435 if (pDIBitmap->GetBPP() != 24 || !isSupport(pDIBitmap)) {
436 return FALSE; 436 return FALSE;
437 } 437 }
438 FX_INT32 size = (FX_INT32)TIFFScanlineSize(tif_ctx); 438 int32_t size = (int32_t)TIFFScanlineSize(tif_ctx);
439 FX_LPBYTE buf = (FX_LPBYTE)_TIFFmalloc(size); 439 FX_LPBYTE buf = (FX_LPBYTE)_TIFFmalloc(size);
440 if (buf == NULL) { 440 if (buf == NULL) {
441 TIFFError(TIFFFileName(tif_ctx), "No space for scanline buffer"); 441 TIFFError(TIFFFileName(tif_ctx), "No space for scanline buffer");
442 return FALSE; 442 return FALSE;
443 } 443 }
444 FX_LPBYTE bitMapbuffer = (FX_LPBYTE)pDIBitmap->GetBuffer(); 444 FX_LPBYTE bitMapbuffer = (FX_LPBYTE)pDIBitmap->GetBuffer();
445 FX_DWORD pitch = pDIBitmap->GetPitch(); 445 FX_DWORD pitch = pDIBitmap->GetPitch();
446 for(FX_INT32 row = 0; row < height; row++) { 446 for(int32_t row = 0; row < height; row++) {
447 TIFFReadScanline(tif_ctx, buf, row, 0); 447 TIFFReadScanline(tif_ctx, buf, row, 0);
448 for(FX_INT32 j = 0; j < size - 2; j += 3) { 448 for(int32_t j = 0; j < size - 2; j += 3) {
449 bitMapbuffer[row * pitch + j + 0] = buf[j + 2]; 449 bitMapbuffer[row * pitch + j + 0] = buf[j + 2];
450 bitMapbuffer[row * pitch + j + 1] = buf[j + 1]; 450 bitMapbuffer[row * pitch + j + 1] = buf[j + 1];
451 bitMapbuffer[row * pitch + j + 2] = buf[j + 0]; 451 bitMapbuffer[row * pitch + j + 2] = buf[j + 0];
452 } 452 }
453 } 453 }
454 _TIFFfree(buf); 454 _TIFFfree(buf);
455 return TRUE; 455 return TRUE;
456 } 456 }
457 FX_BOOL CCodec_TiffContext::Decode(CFX_DIBitmap* pDIBitmap) 457 FX_BOOL CCodec_TiffContext::Decode(CFX_DIBitmap* pDIBitmap)
458 { 458 {
(...skipping 11 matching lines...) Expand all
470 TIFFGetField(tif_ctx, TIFFTAG_ORIENTATION, &rotation); 470 TIFFGetField(tif_ctx, TIFFTAG_ORIENTATION, &rotation);
471 if(TIFFReadRGBAImageOriented(tif_ctx, img_wid, img_hei, 471 if(TIFFReadRGBAImageOriented(tif_ctx, img_wid, img_hei,
472 (uint32*)pDIBitmap->GetBuffer(), rotation, 1)) { 472 (uint32*)pDIBitmap->GetBuffer(), rotation, 1)) {
473 for (FX_DWORD row = 0; row < img_hei; row++) { 473 for (FX_DWORD row = 0; row < img_hei; row++) {
474 FX_LPBYTE row_buf = (FX_LPBYTE)pDIBitmap->GetScanline(row); 474 FX_LPBYTE row_buf = (FX_LPBYTE)pDIBitmap->GetScanline(row);
475 _TiffBGRA2RGBA(row_buf, img_wid, 4); 475 _TiffBGRA2RGBA(row_buf, img_wid, 4);
476 } 476 }
477 return TRUE; 477 return TRUE;
478 } 478 }
479 } 479 }
480 FX_UINT16 spp, bps; 480 uint16_t spp, bps;
481 TIFFGetField(tif_ctx, TIFFTAG_SAMPLESPERPIXEL, &spp); 481 TIFFGetField(tif_ctx, TIFFTAG_SAMPLESPERPIXEL, &spp);
482 TIFFGetField(tif_ctx, TIFFTAG_BITSPERSAMPLE, &bps); 482 TIFFGetField(tif_ctx, TIFFTAG_BITSPERSAMPLE, &bps);
483 FX_DWORD bpp = bps * spp; 483 FX_DWORD bpp = bps * spp;
484 if (bpp == 1) { 484 if (bpp == 1) {
485 return Decode1bppRGB(pDIBitmap, height, width, bps, spp); 485 return Decode1bppRGB(pDIBitmap, height, width, bps, spp);
486 } else if (bpp <= 8) { 486 } else if (bpp <= 8) {
487 return Decode8bppRGB(pDIBitmap, height, width, bps, spp); 487 return Decode8bppRGB(pDIBitmap, height, width, bps, spp);
488 } else if (bpp <= 24) { 488 } else if (bpp <= 24) {
489 return Decode24bppRGB(pDIBitmap, height, width, bps, spp); 489 return Decode24bppRGB(pDIBitmap, height, width, bps, spp);
490 } 490 }
491 return FALSE; 491 return FALSE;
492 } 492 }
493 FX_LPVOID CCodec_TiffModule::CreateDecoder(IFX_FileRead* file_ptr) 493 FX_LPVOID CCodec_TiffModule::CreateDecoder(IFX_FileRead* file_ptr)
494 { 494 {
495 CCodec_TiffContext* pDecoder = new CCodec_TiffContext; 495 CCodec_TiffContext* pDecoder = new CCodec_TiffContext;
496 if (!pDecoder->InitDecoder(file_ptr)) { 496 if (!pDecoder->InitDecoder(file_ptr)) {
497 delete pDecoder; 497 delete pDecoder;
498 return NULL; 498 return NULL;
499 } 499 }
500 return pDecoder; 500 return pDecoder;
501 } 501 }
502 void CCodec_TiffModule::GetFrames(FX_LPVOID ctx, FX_INT32& frames) 502 void CCodec_TiffModule::GetFrames(FX_LPVOID ctx, int32_t& frames)
503 { 503 {
504 CCodec_TiffContext* pDecoder = (CCodec_TiffContext*)ctx; 504 CCodec_TiffContext* pDecoder = (CCodec_TiffContext*)ctx;
505 pDecoder->GetFrames(frames); 505 pDecoder->GetFrames(frames);
506 } 506 }
507 FX_BOOL CCodec_TiffModule::LoadFrameInfo(FX_LPVOID ctx, FX_INT32 frame, FX_DWORD & width, FX_DWORD& height, FX_DWORD& comps, FX_DWORD& bpc, CFX_DIBAttribute* pAt tribute) 507 FX_BOOL CCodec_TiffModule::LoadFrameInfo(FX_LPVOID ctx, int32_t frame, FX_DWORD& width, FX_DWORD& height, FX_DWORD& comps, FX_DWORD& bpc, CFX_DIBAttribute* pAtt ribute)
508 { 508 {
509 CCodec_TiffContext* pDecoder = (CCodec_TiffContext*)ctx; 509 CCodec_TiffContext* pDecoder = (CCodec_TiffContext*)ctx;
510 return pDecoder->LoadFrameInfo(frame, width, height, comps, bpc, pAttribute) ; 510 return pDecoder->LoadFrameInfo(frame, width, height, comps, bpc, pAttribute) ;
511 } 511 }
512 FX_BOOL CCodec_TiffModule::Decode(void* ctx, class CFX_DIBitmap* pDIBitmap) 512 FX_BOOL CCodec_TiffModule::Decode(void* ctx, class CFX_DIBitmap* pDIBitmap)
513 { 513 {
514 CCodec_TiffContext* pDecoder = (CCodec_TiffContext*)ctx; 514 CCodec_TiffContext* pDecoder = (CCodec_TiffContext*)ctx;
515 return pDecoder->Decode(pDIBitmap); 515 return pDecoder->Decode(pDIBitmap);
516 } 516 }
517 void CCodec_TiffModule::DestroyDecoder(void* ctx) 517 void CCodec_TiffModule::DestroyDecoder(void* ctx)
518 { 518 {
519 CCodec_TiffContext* pDecoder = (CCodec_TiffContext*)ctx; 519 CCodec_TiffContext* pDecoder = (CCodec_TiffContext*)ctx;
520 delete pDecoder; 520 delete pDecoder;
521 } 521 }
OLDNEW
« no previous file with comments | « core/src/fxcodec/codec/fx_codec_progress.cpp ('k') | core/src/fxcodec/fx_tiff/tiff_v403/tiffconf.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698