| OLD | NEW |
| 1 /* $Id: tif_ojpeg.c,v 1.56 2012-05-24 03:15:18 fwarmerdam Exp $ */ | 1 /* $Id: tif_ojpeg.c,v 1.60 2015-05-31 00:38:46 bfriesen Exp $ */ |
| 2 | 2 |
| 3 /* WARNING: The type of JPEG encapsulation defined by the TIFF Version 6.0 | 3 /* WARNING: The type of JPEG encapsulation defined by the TIFF Version 6.0 |
| 4 specification is now totally obsolete and deprecated for new applications and | 4 specification is now totally obsolete and deprecated for new applications and |
| 5 images. This file was was created solely in order to read unconverted images | 5 images. This file was was created solely in order to read unconverted images |
| 6 still present on some users' computer systems. It will never be extended | 6 still present on some users' computer systems. It will never be extended |
| 7 to write such files. Writing new-style JPEG compressed TIFFs is implemented | 7 to write such files. Writing new-style JPEG compressed TIFFs is implemented |
| 8 in tif_jpeg.c. | 8 in tif_jpeg.c. |
| 9 | 9 |
| 10 The code is carefully crafted to robustly read all gathered JPEG-in-TIFF | 10 The code is carefully crafted to robustly read all gathered JPEG-in-TIFF |
| 11 testfiles, and anticipate as much as possible all other... But still, it may | 11 testfiles, and anticipate as much as possible all other... But still, it may |
| (...skipping 20 matching lines...) Expand all Loading... |
| 32 library. | 32 library. |
| 33 | 33 |
| 34 IN NO EVENT SHALL JORIS VAN DAMME OR AWARE SYSTEMS BE LIABLE FOR | 34 IN NO EVENT SHALL JORIS VAN DAMME OR AWARE SYSTEMS BE LIABLE FOR |
| 35 ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, | 35 ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, |
| 36 OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | 36 OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, |
| 37 WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF | 37 WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF |
| 38 LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE | 38 LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE |
| 39 OF THIS SOFTWARE. | 39 OF THIS SOFTWARE. |
| 40 | 40 |
| 41 Joris Van Damme and/or AWare Systems may be available for custom | 41 Joris Van Damme and/or AWare Systems may be available for custom |
| 42 developement. If you like what you see, and need anything similar or related, | 42 development. If you like what you see, and need anything similar or related, |
| 43 contact <info@awaresystems.be>. | 43 contact <info@awaresystems.be>. |
| 44 */ | 44 */ |
| 45 | 45 |
| 46 /* What is what, and what is not? | 46 /* What is what, and what is not? |
| 47 | 47 |
| 48 This decoder starts with an input stream, that is essentially the JpegInterch
angeFormat | 48 This decoder starts with an input stream, that is essentially the JpegInterch
angeFormat |
| 49 stream, if any, followed by the strile data, if any. This stream is read in | 49 stream, if any, followed by the strile data, if any. This stream is read in |
| 50 OJPEGReadByte and related functions. | 50 OJPEGReadByte and related functions. |
| 51 | 51 |
| 52 It analyzes the start of this stream, until it encounters non-marker data, i.
e. | 52 It analyzes the start of this stream, until it encounters non-marker data, i.
e. |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 planarconfig is not separate (vast majority). We may one day use that to buil
d | 113 planarconfig is not separate (vast majority). We may one day use that to buil
d |
| 114 converters to JPEG, and/or to new-style JPEG compression inside TIFF. | 114 converters to JPEG, and/or to new-style JPEG compression inside TIFF. |
| 115 | 115 |
| 116 A dissadvantage is the lack of random access to the individual striles. This
is the | 116 A dissadvantage is the lack of random access to the individual striles. This
is the |
| 117 reason for much of the complicated restart-and-position stuff inside OJPEGPre
Decode. | 117 reason for much of the complicated restart-and-position stuff inside OJPEGPre
Decode. |
| 118 Applications would do well accessing all striles in order, as this will resul
t in | 118 Applications would do well accessing all striles in order, as this will resul
t in |
| 119 a single sequential scan of the input stream, and no restarting of LibJpeg de
coding | 119 a single sequential scan of the input stream, and no restarting of LibJpeg de
coding |
| 120 session. | 120 session. |
| 121 */ | 121 */ |
| 122 | 122 |
| 123 | |
| 124 #define WIN32_LEAN_AND_MEAN | 123 #define WIN32_LEAN_AND_MEAN |
| 125 #define VC_EXTRALEAN | 124 #define VC_EXTRALEAN |
| 126 | 125 |
| 127 #include "tiffiop.h" | 126 #include "tiffiop.h" |
| 128 #ifdef OJPEG_SUPPORT | 127 #ifdef OJPEG_SUPPORT |
| 129 | 128 |
| 130 /* Configuration defines here are: | 129 /* Configuration defines here are: |
| 131 * JPEG_ENCAP_EXTERNAL: The normal way to call libjpeg, uses longjump. In some e
nvironments, | 130 * JPEG_ENCAP_EXTERNAL: The normal way to call libjpeg, uses longjump. In some e
nvironments, |
| 132 * like eg LibTiffDelphi, this is not possible. For this reason, the actual
calls to | 131 * like eg LibTiffDelphi, this is not possible. For this reason, the actual
calls to |
| 133 * libjpeg, with longjump stuff, are encapsulated in dedicated functions. W
hen | 132 * libjpeg, with longjump stuff, are encapsulated in dedicated functions. W
hen |
| 134 * JPEG_ENCAP_EXTERNAL is defined, these encapsulating functions are declar
ed external | 133 * JPEG_ENCAP_EXTERNAL is defined, these encapsulating functions are declar
ed external |
| 135 * to this unit, and can be defined elsewhere to use stuff other then longj
ump. | 134 * to this unit, and can be defined elsewhere to use stuff other then longj
ump. |
| 136 * The default mode, without JPEG_ENCAP_EXTERNAL, implements the call encap
sulators | 135 * The default mode, without JPEG_ENCAP_EXTERNAL, implements the call encap
sulators |
| 137 * here, internally, with normal longjump. | 136 * here, internally, with normal longjump. |
| 138 * SETJMP, LONGJMP, JMP_BUF: On some machines/environments a longjump equivalent
is | 137 * SETJMP, LONGJMP, JMP_BUF: On some machines/environments a longjump equivalent
is |
| 139 * conviniently available, but still it may be worthwhile to use _setjmp or
sigsetjmp | 138 * conviniently available, but still it may be worthwhile to use _setjmp or
sigsetjmp |
| 140 * in place of plain setjmp. These macros will make it easier. It is useles
s | 139 * in place of plain setjmp. These macros will make it easier. It is useles
s |
| 141 * to fiddle with these if you define JPEG_ENCAP_EXTERNAL. | 140 * to fiddle with these if you define JPEG_ENCAP_EXTERNAL. |
| 142 * OJPEG_BUFFER: Define the size of the desired buffer here. Should be small eno
ugh so as to guarantee | 141 * OJPEG_BUFFER: Define the size of the desired buffer here. Should be small eno
ugh so as to guarantee |
| 143 * instant processing, optimal streaming and optimal use of processor cache
, but also big | 142 * instant processing, optimal streaming and optimal use of processor cache
, but also big |
| 144 * enough so as to not result in significant call overhead. It should be at
least a few | 143 * enough so as to not result in significant call overhead. It should be at
least a few |
| 145 * » bytes to accomodate some structures (this is verified in asserts), but i
t would not be | 144 * » bytes to accommodate some structures (this is verified in asserts), but
it would not be |
| 146 * sensible to make it this small anyway, and it should be at most 64K sinc
e it is indexed | 145 * sensible to make it this small anyway, and it should be at most 64K sinc
e it is indexed |
| 147 * with uint16. We recommend 2K. | 146 * with uint16. We recommend 2K. |
| 148 * EGYPTIANWALK: You could also define EGYPTIANWALK here, but it is not used any
where and has | 147 * EGYPTIANWALK: You could also define EGYPTIANWALK here, but it is not used any
where and has |
| 149 * absolutely no effect. That is why most people insist the EGYPTIANWALK is
a bit silly. | 148 * absolutely no effect. That is why most people insist the EGYPTIANWALK is
a bit silly. |
| 150 */ | 149 */ |
| 151 | 150 |
| 152 /* define LIBJPEG_ENCAP_EXTERNAL */ | 151 /* define LIBJPEG_ENCAP_EXTERNAL */ |
| 153 #define SETJMP(jbuf) setjmp(jbuf) | 152 #define SETJMP(jbuf) setjmp(jbuf) |
| 154 #define LONGJMP(jbuf,code) longjmp(jbuf,code) | 153 #define LONGJMP(jbuf,code) longjmp(jbuf,code) |
| 155 #define JMP_BUF jmp_buf | 154 #define JMP_BUF jmp_buf |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 | 208 |
| 210 /* Define "boolean" as unsigned char, not int, per Windows custom. */ | 209 /* Define "boolean" as unsigned char, not int, per Windows custom. */ |
| 211 #if defined(__WIN32__) && !defined(__MINGW32__) | 210 #if defined(__WIN32__) && !defined(__MINGW32__) |
| 212 # ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ | 211 # ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ |
| 213 typedef unsigned char boolean; | 212 typedef unsigned char boolean; |
| 214 # endif | 213 # endif |
| 215 # define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ | 214 # define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ |
| 216 #endif | 215 #endif |
| 217 | 216 |
| 218 #if defined(USE_SYSTEM_LIBJPEG) | 217 #if defined(USE_SYSTEM_LIBJPEG) |
| 218 #include <jerror.h> |
| 219 #include <jpeglib.h> | 219 #include <jpeglib.h> |
| 220 #elif defined(USE_LIBJPEG_TURBO) | 220 #elif defined(USE_LIBJPEG_TURBO) |
| 221 #include "third_party/libjpeg_turbo/jerror.h" |
| 221 #include "third_party/libjpeg_turbo/jpeglib.h" | 222 #include "third_party/libjpeg_turbo/jpeglib.h" |
| 222 #else | 223 #else |
| 224 #include "third_party/libjpeg/jerror.h" |
| 223 #include "third_party/libjpeg/jpeglib.h" | 225 #include "third_party/libjpeg/jpeglib.h" |
| 224 #endif | 226 #endif |
| 225 | 227 |
| 228 |
| 226 typedef struct jpeg_error_mgr jpeg_error_mgr; | 229 typedef struct jpeg_error_mgr jpeg_error_mgr; |
| 227 typedef struct jpeg_common_struct jpeg_common_struct; | 230 typedef struct jpeg_common_struct jpeg_common_struct; |
| 228 typedef struct jpeg_decompress_struct jpeg_decompress_struct; | 231 typedef struct jpeg_decompress_struct jpeg_decompress_struct; |
| 229 typedef struct jpeg_source_mgr jpeg_source_mgr; | 232 typedef struct jpeg_source_mgr jpeg_source_mgr; |
| 230 | 233 |
| 231 typedef enum { | 234 typedef enum { |
| 232 osibsNotSetYet, | 235 osibsNotSetYet, |
| 233 osibsJpegInterchangeFormat, | 236 osibsJpegInterchangeFormat, |
| 234 osibsStrile, | 237 osibsStrile, |
| 235 osibsEof | 238 osibsEof |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 /* | 435 /* |
| 433 * Merge codec-specific tag information. | 436 * Merge codec-specific tag information. |
| 434 */ | 437 */ |
| 435 if (!_TIFFMergeFields(tif, ojpegFields, TIFFArrayCount(ojpegFields))) { | 438 if (!_TIFFMergeFields(tif, ojpegFields, TIFFArrayCount(ojpegFields))) { |
| 436 TIFFErrorExt(tif->tif_clientdata, module, | 439 TIFFErrorExt(tif->tif_clientdata, module, |
| 437 "Merging Old JPEG codec-specific tags failed"); | 440 "Merging Old JPEG codec-specific tags failed"); |
| 438 return 0; | 441 return 0; |
| 439 } | 442 } |
| 440 | 443 |
| 441 /* state block */ | 444 /* state block */ |
| 442 » sp = (OJPEGState*)_TIFFmalloc(sizeof(OJPEGState));» » // // ad
d (OJPEGState*) cast | 445 » sp=_TIFFmalloc(sizeof(OJPEGState)); |
| 443 » if (sp == NULL) | 446 » if (sp==NULL) |
| 444 { | 447 { |
| 445 TIFFErrorExt(tif->tif_clientdata,module,"No space for OJPEG stat
e block"); | 448 TIFFErrorExt(tif->tif_clientdata,module,"No space for OJPEG stat
e block"); |
| 446 return(0); | 449 return(0); |
| 447 } | 450 } |
| 448 _TIFFmemset(sp,0,sizeof(OJPEGState)); | 451 _TIFFmemset(sp,0,sizeof(OJPEGState)); |
| 449 sp->tif=tif; | 452 sp->tif=tif; |
| 450 sp->jpeg_proc=1; | 453 sp->jpeg_proc=1; |
| 451 sp->subsampling_hor=2; | 454 sp->subsampling_hor=2; |
| 452 sp->subsampling_ver=2; | 455 sp->subsampling_ver=2; |
| 453 TIFFSetField(tif,TIFFTAG_YCBCRSUBSAMPLING,2,2); | 456 TIFFSetField(tif,TIFFTAG_YCBCRSUBSAMPLING,2,2); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 527 } | 530 } |
| 528 | 531 |
| 529 static int | 532 static int |
| 530 OJPEGVSetField(TIFF* tif, uint32 tag, va_list ap) | 533 OJPEGVSetField(TIFF* tif, uint32 tag, va_list ap) |
| 531 { | 534 { |
| 532 static const char module[]="OJPEGVSetField"; | 535 static const char module[]="OJPEGVSetField"; |
| 533 OJPEGState* sp=(OJPEGState*)tif->tif_data; | 536 OJPEGState* sp=(OJPEGState*)tif->tif_data; |
| 534 uint32 ma; | 537 uint32 ma; |
| 535 uint64* mb; | 538 uint64* mb; |
| 536 uint32 n; | 539 uint32 n; |
| 540 const TIFFField* fip; |
| 541 |
| 537 switch(tag) | 542 switch(tag) |
| 538 { | 543 { |
| 539 case TIFFTAG_JPEGIFOFFSET: | 544 case TIFFTAG_JPEGIFOFFSET: |
| 540 sp->jpeg_interchange_format=(uint64)va_arg(ap,uint64); | 545 sp->jpeg_interchange_format=(uint64)va_arg(ap,uint64); |
| 541 break; | 546 break; |
| 542 case TIFFTAG_JPEGIFBYTECOUNT: | 547 case TIFFTAG_JPEGIFBYTECOUNT: |
| 543 sp->jpeg_interchange_format_length=(uint64)va_arg(ap,uin
t64); | 548 sp->jpeg_interchange_format_length=(uint64)va_arg(ap,uin
t64); |
| 544 break; | 549 break; |
| 545 case TIFFTAG_YCBCRSUBSAMPLING: | 550 case TIFFTAG_YCBCRSUBSAMPLING: |
| 546 sp->subsampling_tag=1; | 551 sp->subsampling_tag=1; |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 596 break; | 601 break; |
| 597 case TIFFTAG_JPEGPROC: | 602 case TIFFTAG_JPEGPROC: |
| 598 sp->jpeg_proc=(uint8)va_arg(ap,uint16_vap); | 603 sp->jpeg_proc=(uint8)va_arg(ap,uint16_vap); |
| 599 break; | 604 break; |
| 600 case TIFFTAG_JPEGRESTARTINTERVAL: | 605 case TIFFTAG_JPEGRESTARTINTERVAL: |
| 601 sp->restart_interval=(uint16)va_arg(ap,uint16_vap); | 606 sp->restart_interval=(uint16)va_arg(ap,uint16_vap); |
| 602 break; | 607 break; |
| 603 default: | 608 default: |
| 604 return (*sp->vsetparent)(tif,tag,ap); | 609 return (*sp->vsetparent)(tif,tag,ap); |
| 605 } | 610 } |
| 606 » TIFFSetFieldBit(tif,TIFFFieldWithTag(tif,tag)->field_bit); | 611 » fip = TIFFFieldWithTag(tif,tag); |
| 612 » if( fip == NULL ) /* shouldn't happen */ |
| 613 » return(0); |
| 614 » TIFFSetFieldBit(tif,fip->field_bit); |
| 607 tif->tif_flags|=TIFF_DIRTYDIRECT; | 615 tif->tif_flags|=TIFF_DIRTYDIRECT; |
| 608 return(1); | 616 return(1); |
| 609 } | 617 } |
| 610 | 618 |
| 611 static void | 619 static void |
| 612 OJPEGPrintDir(TIFF* tif, FILE* fd, long flags) | 620 OJPEGPrintDir(TIFF* tif, FILE* fd, long flags) |
| 613 { | 621 { |
| 614 OJPEGState* sp=(OJPEGState*)tif->tif_data; | 622 OJPEGState* sp=(OJPEGState*)tif->tif_data; |
| 615 uint8 m; | 623 uint8 m; |
| 616 (void)flags; | 624 (void)flags; |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 760 } | 768 } |
| 761 | 769 |
| 762 static int | 770 static int |
| 763 OJPEGPreDecodeSkipScanlines(TIFF* tif) | 771 OJPEGPreDecodeSkipScanlines(TIFF* tif) |
| 764 { | 772 { |
| 765 static const char module[]="OJPEGPreDecodeSkipScanlines"; | 773 static const char module[]="OJPEGPreDecodeSkipScanlines"; |
| 766 OJPEGState* sp=(OJPEGState*)tif->tif_data; | 774 OJPEGState* sp=(OJPEGState*)tif->tif_data; |
| 767 uint32 m; | 775 uint32 m; |
| 768 if (sp->skip_buffer==NULL) | 776 if (sp->skip_buffer==NULL) |
| 769 { | 777 { |
| 770 » » // add (uint8*) cast | 778 » » sp->skip_buffer=_TIFFmalloc(sp->bytes_per_line); |
| 771 » » sp->skip_buffer = (uint8*)_TIFFmalloc(sp->bytes_per_line); | 779 » » if (sp->skip_buffer==NULL) |
| 772 » » if (sp->skip_buffer == NULL) | |
| 773 { | 780 { |
| 774 TIFFErrorExt(tif->tif_clientdata,module,"Out of memory")
; | 781 TIFFErrorExt(tif->tif_clientdata,module,"Out of memory")
; |
| 775 return(0); | 782 return(0); |
| 776 } | 783 } |
| 777 } | 784 } |
| 778 for (m=0; m<sp->lines_per_strile; m++) | 785 for (m=0; m<sp->lines_per_strile; m++) |
| 779 { | 786 { |
| 780 if (jpeg_read_scanlines_encap(sp,&(sp->libjpeg_jpeg_decompress_s
truct),&sp->skip_buffer,1)==0) | 787 if (jpeg_read_scanlines_encap(sp,&(sp->libjpeg_jpeg_decompress_s
truct),&sp->skip_buffer,1)==0) |
| 781 return(0); | 788 return(0); |
| 782 } | 789 } |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1186 { | 1193 { |
| 1187 assert(sp->subsampling_convert_ycbcrbuf==0); | 1194 assert(sp->subsampling_convert_ycbcrbuf==0); |
| 1188 assert(sp->subsampling_convert_ycbcrimage==0); | 1195 assert(sp->subsampling_convert_ycbcrimage==0); |
| 1189 sp->subsampling_convert_ylinelen=((sp->strile_width+sp->
subsampling_hor*8-1)/(sp->subsampling_hor*8)*sp->subsampling_hor*8); | 1196 sp->subsampling_convert_ylinelen=((sp->strile_width+sp->
subsampling_hor*8-1)/(sp->subsampling_hor*8)*sp->subsampling_hor*8); |
| 1190 sp->subsampling_convert_ylines=sp->subsampling_ver*8; | 1197 sp->subsampling_convert_ylines=sp->subsampling_ver*8; |
| 1191 sp->subsampling_convert_clinelen=sp->subsampling_convert
_ylinelen/sp->subsampling_hor; | 1198 sp->subsampling_convert_clinelen=sp->subsampling_convert
_ylinelen/sp->subsampling_hor; |
| 1192 sp->subsampling_convert_clines=8; | 1199 sp->subsampling_convert_clines=8; |
| 1193 sp->subsampling_convert_ybuflen=sp->subsampling_convert_
ylinelen*sp->subsampling_convert_ylines; | 1200 sp->subsampling_convert_ybuflen=sp->subsampling_convert_
ylinelen*sp->subsampling_convert_ylines; |
| 1194 sp->subsampling_convert_cbuflen=sp->subsampling_convert_
clinelen*sp->subsampling_convert_clines; | 1201 sp->subsampling_convert_cbuflen=sp->subsampling_convert_
clinelen*sp->subsampling_convert_clines; |
| 1195 sp->subsampling_convert_ycbcrbuflen=sp->subsampling_conv
ert_ybuflen+2*sp->subsampling_convert_cbuflen; | 1202 sp->subsampling_convert_ycbcrbuflen=sp->subsampling_conv
ert_ybuflen+2*sp->subsampling_convert_cbuflen; |
| 1196 » » » sp->subsampling_convert_ycbcrbuf = (uint8*)_TIFFmalloc(s
p->subsampling_convert_ycbcrbuflen);» // add (uint8*) cast | 1203 » » » sp->subsampling_convert_ycbcrbuf=_TIFFmalloc(sp->subsamp
ling_convert_ycbcrbuflen); |
| 1197 if (sp->subsampling_convert_ycbcrbuf==0) | 1204 if (sp->subsampling_convert_ycbcrbuf==0) |
| 1198 { | 1205 { |
| 1199 TIFFErrorExt(tif->tif_clientdata,module,"Out of
memory"); | 1206 TIFFErrorExt(tif->tif_clientdata,module,"Out of
memory"); |
| 1200 return(0); | 1207 return(0); |
| 1201 } | 1208 } |
| 1202 sp->subsampling_convert_ybuf=sp->subsampling_convert_ycb
crbuf; | 1209 sp->subsampling_convert_ybuf=sp->subsampling_convert_ycb
crbuf; |
| 1203 sp->subsampling_convert_cbbuf=sp->subsampling_convert_yb
uf+sp->subsampling_convert_ybuflen; | 1210 sp->subsampling_convert_cbbuf=sp->subsampling_convert_yb
uf+sp->subsampling_convert_ybuflen; |
| 1204 sp->subsampling_convert_crbuf=sp->subsampling_convert_cb
buf+sp->subsampling_convert_cbuflen; | 1211 sp->subsampling_convert_crbuf=sp->subsampling_convert_cb
buf+sp->subsampling_convert_cbuflen; |
| 1205 sp->subsampling_convert_ycbcrimagelen=3+sp->subsampling_
convert_ylines+2*sp->subsampling_convert_clines; | 1212 sp->subsampling_convert_ycbcrimagelen=3+sp->subsampling_
convert_ylines+2*sp->subsampling_convert_clines; |
| 1206 » » » sp->subsampling_convert_ycbcrimage = (uint8**)_TIFFmallo
c(sp->subsampling_convert_ycbcrimagelen * sizeof(uint8*));// add (uint8**) cast | 1213 » » » sp->subsampling_convert_ycbcrimage=_TIFFmalloc(sp->subsa
mpling_convert_ycbcrimagelen*sizeof(uint8*)); |
| 1207 if (sp->subsampling_convert_ycbcrimage==0) | 1214 if (sp->subsampling_convert_ycbcrimage==0) |
| 1208 { | 1215 { |
| 1209 TIFFErrorExt(tif->tif_clientdata,module,"Out of
memory"); | 1216 TIFFErrorExt(tif->tif_clientdata,module,"Out of
memory"); |
| 1210 return(0); | 1217 return(0); |
| 1211 } | 1218 } |
| 1212 m=sp->subsampling_convert_ycbcrimage; | 1219 m=sp->subsampling_convert_ycbcrimage; |
| 1213 *m++=(uint8*)(sp->subsampling_convert_ycbcrimage+3); | 1220 *m++=(uint8*)(sp->subsampling_convert_ycbcrimage+3); |
| 1214 *m++=(uint8*)(sp->subsampling_convert_ycbcrimage+3+sp->s
ubsampling_convert_ylines); | 1221 *m++=(uint8*)(sp->subsampling_convert_ycbcrimage+3+sp->s
ubsampling_convert_ylines); |
| 1215 *m++=(uint8*)(sp->subsampling_convert_ycbcrimage+3+sp->s
ubsampling_convert_ylines+sp->subsampling_convert_clines); | 1222 *m++=(uint8*)(sp->subsampling_convert_ycbcrimage+3+sp->s
ubsampling_convert_ylines+sp->subsampling_convert_clines); |
| 1216 for (n=0; n<sp->subsampling_convert_ylines; n++) | 1223 for (n=0; n<sp->subsampling_convert_ylines; n++) |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1423 else | 1430 else |
| 1424 { | 1431 { |
| 1425 m-=2; | 1432 m-=2; |
| 1426 do | 1433 do |
| 1427 { | 1434 { |
| 1428 if (m<65) | 1435 if (m<65) |
| 1429 { | 1436 { |
| 1430 TIFFErrorExt(tif->tif_clientdata,module,"Corrupt
DQT marker in JPEG data"); | 1437 TIFFErrorExt(tif->tif_clientdata,module,"Corrupt
DQT marker in JPEG data"); |
| 1431 return(0); | 1438 return(0); |
| 1432 } | 1439 } |
| 1433 » » » na = sizeof(uint32) + 69; | 1440 » » » na=sizeof(uint32)+69; |
| 1434 » » » nb = (uint8*)_TIFFmalloc(na);» // add (uint8*) cast | 1441 » » » nb=_TIFFmalloc(na); |
| 1435 » » » if (nb == 0) | 1442 » » » if (nb==0) |
| 1436 { | 1443 { |
| 1437 TIFFErrorExt(tif->tif_clientdata,module,"Out of
memory"); | 1444 TIFFErrorExt(tif->tif_clientdata,module,"Out of
memory"); |
| 1438 return(0); | 1445 return(0); |
| 1439 } | 1446 } |
| 1440 *(uint32*)nb=na; | 1447 *(uint32*)nb=na; |
| 1441 nb[sizeof(uint32)]=255; | 1448 nb[sizeof(uint32)]=255; |
| 1442 nb[sizeof(uint32)+1]=JPEG_MARKER_DQT; | 1449 nb[sizeof(uint32)+1]=JPEG_MARKER_DQT; |
| 1443 nb[sizeof(uint32)+2]=0; | 1450 nb[sizeof(uint32)+2]=0; |
| 1444 nb[sizeof(uint32)+3]=67; | 1451 nb[sizeof(uint32)+3]=67; |
| 1445 if (OJPEGReadBlock(sp,65,&nb[sizeof(uint32)+4])==0) { | 1452 if (OJPEGReadBlock(sp,65,&nb[sizeof(uint32)+4])==0) { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1480 if (sp->subsamplingcorrect==0) | 1487 if (sp->subsamplingcorrect==0) |
| 1481 TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DHT mar
ker in JPEG data"); | 1488 TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DHT mar
ker in JPEG data"); |
| 1482 return(0); | 1489 return(0); |
| 1483 } | 1490 } |
| 1484 if (sp->subsamplingcorrect!=0) | 1491 if (sp->subsamplingcorrect!=0) |
| 1485 { | 1492 { |
| 1486 OJPEGReadSkip(sp,m-2); | 1493 OJPEGReadSkip(sp,m-2); |
| 1487 } | 1494 } |
| 1488 else | 1495 else |
| 1489 { | 1496 { |
| 1490 » » na = sizeof(uint32) + 2 + m; | 1497 » » na=sizeof(uint32)+2+m; |
| 1491 » » nb = (uint8*)_TIFFmalloc(na);» // add (uint8*) cast | 1498 » » nb=_TIFFmalloc(na); |
| 1492 » » if (nb == 0) | 1499 » » if (nb==0) |
| 1493 { | 1500 { |
| 1494 TIFFErrorExt(tif->tif_clientdata,module,"Out of memory")
; | 1501 TIFFErrorExt(tif->tif_clientdata,module,"Out of memory")
; |
| 1495 return(0); | 1502 return(0); |
| 1496 } | 1503 } |
| 1497 *(uint32*)nb=na; | 1504 *(uint32*)nb=na; |
| 1498 nb[sizeof(uint32)]=255; | 1505 nb[sizeof(uint32)]=255; |
| 1499 nb[sizeof(uint32)+1]=JPEG_MARKER_DHT; | 1506 nb[sizeof(uint32)+1]=JPEG_MARKER_DHT; |
| 1500 nb[sizeof(uint32)+2]=(m>>8); | 1507 nb[sizeof(uint32)+2]=(m>>8); |
| 1501 nb[sizeof(uint32)+3]=(m&255); | 1508 nb[sizeof(uint32)+3]=(m&255); |
| 1502 » » if (OJPEGReadBlock(sp,m-2,&nb[sizeof(uint32)+4])==0) | 1509 » » if (OJPEGReadBlock(sp,m-2,&nb[sizeof(uint32)+4])==0) { |
| 1510 _TIFFfree(nb); |
| 1503 return(0); | 1511 return(0); |
| 1512 } |
| 1504 o=nb[sizeof(uint32)+4]; | 1513 o=nb[sizeof(uint32)+4]; |
| 1505 if ((o&240)==0) | 1514 if ((o&240)==0) |
| 1506 { | 1515 { |
| 1507 if (3<o) | 1516 if (3<o) |
| 1508 { | 1517 { |
| 1509 TIFFErrorExt(tif->tif_clientdata,module,"Corrupt
DHT marker in JPEG data"); | 1518 TIFFErrorExt(tif->tif_clientdata,module,"Corrupt
DHT marker in JPEG data"); |
| 1519 _TIFFfree(nb); |
| 1510 return(0); | 1520 return(0); |
| 1511 } | 1521 } |
| 1512 if (sp->dctable[o]!=0) | 1522 if (sp->dctable[o]!=0) |
| 1513 _TIFFfree(sp->dctable[o]); | 1523 _TIFFfree(sp->dctable[o]); |
| 1514 sp->dctable[o]=nb; | 1524 sp->dctable[o]=nb; |
| 1515 } | 1525 } |
| 1516 else | 1526 else |
| 1517 { | 1527 { |
| 1518 if ((o&240)!=16) | 1528 if ((o&240)!=16) |
| 1519 { | 1529 { |
| 1520 TIFFErrorExt(tif->tif_clientdata,module,"Corrupt
DHT marker in JPEG data"); | 1530 TIFFErrorExt(tif->tif_clientdata,module,"Corrupt
DHT marker in JPEG data"); |
| 1531 _TIFFfree(nb); |
| 1521 return(0); | 1532 return(0); |
| 1522 } | 1533 } |
| 1523 o&=15; | 1534 o&=15; |
| 1524 if (3<o) | 1535 if (3<o) |
| 1525 { | 1536 { |
| 1526 TIFFErrorExt(tif->tif_clientdata,module,"Corrupt
DHT marker in JPEG data"); | 1537 TIFFErrorExt(tif->tif_clientdata,module,"Corrupt
DHT marker in JPEG data"); |
| 1538 _TIFFfree(nb); |
| 1527 return(0); | 1539 return(0); |
| 1528 } | 1540 } |
| 1529 if (sp->actable[o]!=0) | 1541 if (sp->actable[o]!=0) |
| 1530 _TIFFfree(sp->actable[o]); | 1542 _TIFFfree(sp->actable[o]); |
| 1531 sp->actable[o]=nb; | 1543 sp->actable[o]=nb; |
| 1532 } | 1544 } |
| 1533 } | 1545 } |
| 1534 return(1); | 1546 return(1); |
| 1535 } | 1547 } |
| 1536 | 1548 |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1756 { | 1768 { |
| 1757 for (n=0; n<m-1; n++) | 1769 for (n=0; n<m-1; n++) |
| 1758 { | 1770 { |
| 1759 if (sp->qtable_offset[m]==sp->qtable_offset[n]) | 1771 if (sp->qtable_offset[m]==sp->qtable_offset[n]) |
| 1760 { | 1772 { |
| 1761 TIFFErrorExt(tif->tif_clientdata,module,
"Corrupt JpegQTables tag value"); | 1773 TIFFErrorExt(tif->tif_clientdata,module,
"Corrupt JpegQTables tag value"); |
| 1762 return(0); | 1774 return(0); |
| 1763 } | 1775 } |
| 1764 } | 1776 } |
| 1765 oa=sizeof(uint32)+69; | 1777 oa=sizeof(uint32)+69; |
| 1766 » » » ob = (uint8*)_TIFFmalloc(oa);» // add (uint8*) cast | 1778 » » » ob=_TIFFmalloc(oa); |
| 1767 if (ob==0) | 1779 if (ob==0) |
| 1768 { | 1780 { |
| 1769 TIFFErrorExt(tif->tif_clientdata,module,"Out of
memory"); | 1781 TIFFErrorExt(tif->tif_clientdata,module,"Out of
memory"); |
| 1770 return(0); | 1782 return(0); |
| 1771 } | 1783 } |
| 1772 *(uint32*)ob=oa; | 1784 *(uint32*)ob=oa; |
| 1773 ob[sizeof(uint32)]=255; | 1785 ob[sizeof(uint32)]=255; |
| 1774 ob[sizeof(uint32)+1]=JPEG_MARKER_DQT; | 1786 ob[sizeof(uint32)+1]=JPEG_MARKER_DQT; |
| 1775 ob[sizeof(uint32)+2]=0; | 1787 ob[sizeof(uint32)+2]=0; |
| 1776 ob[sizeof(uint32)+3]=67; | 1788 ob[sizeof(uint32)+3]=67; |
| 1777 ob[sizeof(uint32)+4]=m; | 1789 ob[sizeof(uint32)+4]=m; |
| 1778 TIFFSeekFile(tif,sp->qtable_offset[m],SEEK_SET); | 1790 TIFFSeekFile(tif,sp->qtable_offset[m],SEEK_SET); |
| 1779 » » » p=(uint32)TIFFReadFile(tif,&ob[sizeof(uint32)+5],64); | 1791 » » » p=TIFFReadFile(tif,&ob[sizeof(uint32)+5],64); |
| 1780 if (p!=64) | 1792 if (p!=64) |
| 1781 return(0); | 1793 return(0); |
| 1782 sp->qtable[m]=ob; | 1794 sp->qtable[m]=ob; |
| 1783 sp->sof_tq[m]=m; | 1795 sp->sof_tq[m]=m; |
| 1784 } | 1796 } |
| 1785 else | 1797 else |
| 1786 sp->sof_tq[m]=sp->sof_tq[m-1]; | 1798 sp->sof_tq[m]=sp->sof_tq[m-1]; |
| 1787 } | 1799 } |
| 1788 return(1); | 1800 return(1); |
| 1789 } | 1801 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1812 { | 1824 { |
| 1813 for (n=0; n<m-1; n++) | 1825 for (n=0; n<m-1; n++) |
| 1814 { | 1826 { |
| 1815 if (sp->dctable_offset[m]==sp->dctable_offset[n]
) | 1827 if (sp->dctable_offset[m]==sp->dctable_offset[n]
) |
| 1816 { | 1828 { |
| 1817 TIFFErrorExt(tif->tif_clientdata,module,
"Corrupt JpegDcTables tag value"); | 1829 TIFFErrorExt(tif->tif_clientdata,module,
"Corrupt JpegDcTables tag value"); |
| 1818 return(0); | 1830 return(0); |
| 1819 } | 1831 } |
| 1820 } | 1832 } |
| 1821 TIFFSeekFile(tif,sp->dctable_offset[m],SEEK_SET); | 1833 TIFFSeekFile(tif,sp->dctable_offset[m],SEEK_SET); |
| 1822 » » » p=(uint32)TIFFReadFile(tif,o,16); | 1834 » » » p=TIFFReadFile(tif,o,16); |
| 1823 if (p!=16) | 1835 if (p!=16) |
| 1824 return(0); | 1836 return(0); |
| 1825 q=0; | 1837 q=0; |
| 1826 for (n=0; n<16; n++) | 1838 for (n=0; n<16; n++) |
| 1827 q+=o[n]; | 1839 q+=o[n]; |
| 1828 ra=sizeof(uint32)+21+q; | 1840 ra=sizeof(uint32)+21+q; |
| 1829 » » » rb = (uint8*)_TIFFmalloc(ra);» // add (uint8*) cast | 1841 » » » rb=_TIFFmalloc(ra); |
| 1830 if (rb==0) | 1842 if (rb==0) |
| 1831 { | 1843 { |
| 1832 TIFFErrorExt(tif->tif_clientdata,module,"Out of
memory"); | 1844 TIFFErrorExt(tif->tif_clientdata,module,"Out of
memory"); |
| 1833 return(0); | 1845 return(0); |
| 1834 } | 1846 } |
| 1835 *(uint32*)rb=ra; | 1847 *(uint32*)rb=ra; |
| 1836 rb[sizeof(uint32)]=255; | 1848 rb[sizeof(uint32)]=255; |
| 1837 rb[sizeof(uint32)+1]=JPEG_MARKER_DHT; | 1849 rb[sizeof(uint32)+1]=JPEG_MARKER_DHT; |
| 1838 rb[sizeof(uint32)+2]=((19+q)>>8); | 1850 rb[sizeof(uint32)+2]=((19+q)>>8); |
| 1839 rb[sizeof(uint32)+3]=((19+q)&255); | 1851 rb[sizeof(uint32)+3]=((19+q)&255); |
| 1840 rb[sizeof(uint32)+4]=m; | 1852 rb[sizeof(uint32)+4]=m; |
| 1841 for (n=0; n<16; n++) | 1853 for (n=0; n<16; n++) |
| 1842 rb[sizeof(uint32)+5+n]=o[n]; | 1854 rb[sizeof(uint32)+5+n]=o[n]; |
| 1843 » » » p=(uint32)TIFFReadFile(tif,&(rb[sizeof(uint32)+21]),q); | 1855 » » » p=TIFFReadFile(tif,&(rb[sizeof(uint32)+21]),q); |
| 1844 if (p!=q) | 1856 if (p!=q) |
| 1845 return(0); | 1857 return(0); |
| 1846 sp->dctable[m]=rb; | 1858 sp->dctable[m]=rb; |
| 1847 sp->sos_tda[m]=(m<<4); | 1859 sp->sos_tda[m]=(m<<4); |
| 1848 } | 1860 } |
| 1849 else | 1861 else |
| 1850 sp->sos_tda[m]=sp->sos_tda[m-1]; | 1862 sp->sos_tda[m]=sp->sos_tda[m-1]; |
| 1851 } | 1863 } |
| 1852 return(1); | 1864 return(1); |
| 1853 } | 1865 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1876 { | 1888 { |
| 1877 for (n=0; n<m-1; n++) | 1889 for (n=0; n<m-1; n++) |
| 1878 { | 1890 { |
| 1879 if (sp->actable_offset[m]==sp->actable_offset[n]
) | 1891 if (sp->actable_offset[m]==sp->actable_offset[n]
) |
| 1880 { | 1892 { |
| 1881 TIFFErrorExt(tif->tif_clientdata,module,
"Corrupt JpegAcTables tag value"); | 1893 TIFFErrorExt(tif->tif_clientdata,module,
"Corrupt JpegAcTables tag value"); |
| 1882 return(0); | 1894 return(0); |
| 1883 } | 1895 } |
| 1884 } | 1896 } |
| 1885 TIFFSeekFile(tif,sp->actable_offset[m],SEEK_SET); | 1897 TIFFSeekFile(tif,sp->actable_offset[m],SEEK_SET); |
| 1886 » » » p=(uint32)TIFFReadFile(tif,o,16); | 1898 » » » p=TIFFReadFile(tif,o,16); |
| 1887 if (p!=16) | 1899 if (p!=16) |
| 1888 return(0); | 1900 return(0); |
| 1889 q=0; | 1901 q=0; |
| 1890 for (n=0; n<16; n++) | 1902 for (n=0; n<16; n++) |
| 1891 q+=o[n]; | 1903 q+=o[n]; |
| 1892 ra=sizeof(uint32)+21+q; | 1904 ra=sizeof(uint32)+21+q; |
| 1893 » » » rb = (uint8*)_TIFFmalloc(ra);» // add (uint8*) cast | 1905 » » » rb=_TIFFmalloc(ra); |
| 1894 if (rb==0) | 1906 if (rb==0) |
| 1895 { | 1907 { |
| 1896 TIFFErrorExt(tif->tif_clientdata,module,"Out of
memory"); | 1908 TIFFErrorExt(tif->tif_clientdata,module,"Out of
memory"); |
| 1897 return(0); | 1909 return(0); |
| 1898 } | 1910 } |
| 1899 *(uint32*)rb=ra; | 1911 *(uint32*)rb=ra; |
| 1900 rb[sizeof(uint32)]=255; | 1912 rb[sizeof(uint32)]=255; |
| 1901 rb[sizeof(uint32)+1]=JPEG_MARKER_DHT; | 1913 rb[sizeof(uint32)+1]=JPEG_MARKER_DHT; |
| 1902 rb[sizeof(uint32)+2]=((19+q)>>8); | 1914 rb[sizeof(uint32)+2]=((19+q)>>8); |
| 1903 rb[sizeof(uint32)+3]=((19+q)&255); | 1915 rb[sizeof(uint32)+3]=((19+q)&255); |
| 1904 rb[sizeof(uint32)+4]=(16|m); | 1916 rb[sizeof(uint32)+4]=(16|m); |
| 1905 for (n=0; n<16; n++) | 1917 for (n=0; n<16; n++) |
| 1906 rb[sizeof(uint32)+5+n]=o[n]; | 1918 rb[sizeof(uint32)+5+n]=o[n]; |
| 1907 » » » p=(uint32)TIFFReadFile(tif,&(rb[sizeof(uint32)+21]),q); | 1919 » » » p=TIFFReadFile(tif,&(rb[sizeof(uint32)+21]),q); |
| 1908 if (p!=q) | 1920 if (p!=q) |
| 1909 return(0); | 1921 return(0); |
| 1910 sp->actable[m]=rb; | 1922 sp->actable[m]=rb; |
| 1911 sp->sos_tda[m]=(sp->sos_tda[m]|m); | 1923 sp->sos_tda[m]=(sp->sos_tda[m]|m); |
| 1912 } | 1924 } |
| 1913 else | 1925 else |
| 1914 sp->sos_tda[m]=(sp->sos_tda[m]|(sp->sos_tda[m-1]&15)); | 1926 sp->sos_tda[m]=(sp->sos_tda[m]|(sp->sos_tda[m-1]&15)); |
| 1915 } | 1927 } |
| 1916 return(1); | 1928 return(1); |
| 1917 } | 1929 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1955 case osibsNotSetYet: | 1967 case osibsNotSetYet: |
| 1956 if (sp->jpeg_interchange_format!=0) | 1968 if (sp->jpeg_interchange_format!=0) |
| 1957 { | 1969 { |
| 1958 sp->in_buffer_file_pos=sp->jpeg_intercha
nge_format; | 1970 sp->in_buffer_file_pos=sp->jpeg_intercha
nge_format; |
| 1959 sp->in_buffer_file_togo=sp->jpeg_interch
ange_format_length; | 1971 sp->in_buffer_file_togo=sp->jpeg_interch
ange_format_length; |
| 1960 } | 1972 } |
| 1961 sp->in_buffer_source=osibsJpegInterchangeFormat; | 1973 sp->in_buffer_source=osibsJpegInterchangeFormat; |
| 1962 break; | 1974 break; |
| 1963 case osibsJpegInterchangeFormat: | 1975 case osibsJpegInterchangeFormat: |
| 1964 sp->in_buffer_source=osibsStrile; | 1976 sp->in_buffer_source=osibsStrile; |
| 1977 break; |
| 1965 case osibsStrile: | 1978 case osibsStrile: |
| 1966 if (!_TIFFFillStriles( sp->tif ) | 1979 if (!_TIFFFillStriles( sp->tif ) |
| 1967 || sp->tif->tif_dir.td_stripoffset == NULL | 1980 || sp->tif->tif_dir.td_stripoffset == NULL |
| 1968 || sp->tif->tif_dir.td_stripbytecount == NUL
L) | 1981 || sp->tif->tif_dir.td_stripbytecount == NUL
L) |
| 1969 return 0; | 1982 return 0; |
| 1970 | 1983 |
| 1971 if (sp->in_buffer_next_strile==sp->in_buffer_str
ile_count) | 1984 if (sp->in_buffer_next_strile==sp->in_buffer_str
ile_count) |
| 1972 sp->in_buffer_source=osibsEof; | 1985 sp->in_buffer_source=osibsEof; |
| 1973 else | 1986 else |
| 1974 { | 1987 { |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2052 } | 2065 } |
| 2053 | 2066 |
| 2054 static int | 2067 static int |
| 2055 OJPEGReadBlock(OJPEGState* sp, uint16 len, void* mem) | 2068 OJPEGReadBlock(OJPEGState* sp, uint16 len, void* mem) |
| 2056 { | 2069 { |
| 2057 uint16 mlen; | 2070 uint16 mlen; |
| 2058 uint8* mmem; | 2071 uint8* mmem; |
| 2059 uint16 n; | 2072 uint16 n; |
| 2060 assert(len>0); | 2073 assert(len>0); |
| 2061 mlen=len; | 2074 mlen=len; |
| 2062 » mmem = (uint8*)mem;» » // add (uint8*) cast | 2075 » mmem=mem; |
| 2063 do | 2076 do |
| 2064 { | 2077 { |
| 2065 if (sp->in_buffer_togo==0) | 2078 if (sp->in_buffer_togo==0) |
| 2066 { | 2079 { |
| 2067 if (OJPEGReadBufferFill(sp)==0) | 2080 if (OJPEGReadBufferFill(sp)==0) |
| 2068 return(0); | 2081 return(0); |
| 2069 assert(sp->in_buffer_togo>0); | 2082 assert(sp->in_buffer_togo>0); |
| 2070 } | 2083 } |
| 2071 n=mlen; | 2084 n=mlen; |
| 2072 if (n>sp->in_buffer_togo) | 2085 if (n>sp->in_buffer_togo) |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2454 { | 2467 { |
| 2455 TIFF* tif=(TIFF*)cinfo->client_data; | 2468 TIFF* tif=(TIFF*)cinfo->client_data; |
| 2456 OJPEGState* sp=(OJPEGState*)tif->tif_data; | 2469 OJPEGState* sp=(OJPEGState*)tif->tif_data; |
| 2457 void* mem=0; | 2470 void* mem=0; |
| 2458 uint32 len=0U; | 2471 uint32 len=0U; |
| 2459 if (OJPEGWriteStream(tif,&mem,&len)==0) | 2472 if (OJPEGWriteStream(tif,&mem,&len)==0) |
| 2460 { | 2473 { |
| 2461 TIFFErrorExt(tif->tif_clientdata,"LibJpeg","Premature end of JPE
G data"); | 2474 TIFFErrorExt(tif->tif_clientdata,"LibJpeg","Premature end of JPE
G data"); |
| 2462 jpeg_encap_unwind(tif); | 2475 jpeg_encap_unwind(tif); |
| 2463 } | 2476 } |
| 2464 » sp->libjpeg_jpeg_source_mgr.bytes_in_buffer = len; | 2477 » sp->libjpeg_jpeg_source_mgr.bytes_in_buffer=len; |
| 2465 » sp->libjpeg_jpeg_source_mgr.next_input_byte = (const JOCTET * )mem;»
» // add (const JOCTET * ) cast | 2478 » sp->libjpeg_jpeg_source_mgr.next_input_byte=mem; |
| 2466 return(1); | 2479 return(1); |
| 2467 } | 2480 } |
| 2468 | 2481 |
| 2469 static void | 2482 static void |
| 2470 OJPEGLibjpegJpegSourceMgrSkipInputData(jpeg_decompress_struct* cinfo, long num_b
ytes) | 2483 OJPEGLibjpegJpegSourceMgrSkipInputData(jpeg_decompress_struct* cinfo, long num_b
ytes) |
| 2471 { | 2484 { |
| 2472 TIFF* tif=(TIFF*)cinfo->client_data; | 2485 TIFF* tif=(TIFF*)cinfo->client_data; |
| 2473 (void)num_bytes; | 2486 (void)num_bytes; |
| 2474 TIFFErrorExt(tif->tif_clientdata,"LibJpeg","Unexpected error"); | 2487 TIFFErrorExt(tif->tif_clientdata,"LibJpeg","Unexpected error"); |
| 2475 jpeg_encap_unwind(tif); | 2488 jpeg_encap_unwind(tif); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 2494 #endif | 2507 #endif |
| 2495 | 2508 |
| 2496 | 2509 |
| 2497 /* | 2510 /* |
| 2498 * Local Variables: | 2511 * Local Variables: |
| 2499 * mode: c | 2512 * mode: c |
| 2500 * c-basic-offset: 8 | 2513 * c-basic-offset: 8 |
| 2501 * fill-column: 78 | 2514 * fill-column: 78 |
| 2502 * End: | 2515 * End: |
| 2503 */ | 2516 */ |
| 2504 | |
| OLD | NEW |