|
Quick Lists
|
|
Bug ID:
|
4690773
|
|
Votes
|
1
|
|
Synopsis
|
Multipage TIFF file decoding is not thread safe
|
|
Category
|
jai:codec_sample
|
|
Reported Against
|
1.1.1_01
|
|
Release Fixed
|
1.1.3-beta
|
|
State
|
10-Fix Delivered,
bug
|
|
Priority:
|
4-Low
|
|
Related Bugs
|
|
|
Submit Date
|
23-MAY-2002
|
|
Description
|
Bug reported by customer, HervM- Guillemet, xxxxx :
"The TIFF decoder seems to be thread
unsafe. When getTiles are called simultaneously on several image coming
from a single multipage tiff file, I can get, for some of the images :
With packbits TIFF :
java.lang.RuntimeException: Unable to decode Packbits compressed data -
not enough data.
at com.sun.media.jai.codecimpl.TIFFImage.decodePackbits(TIFFImage.java:1925)
at com.sun.media.jai.codecimpl.TIFFImage.getTile(TIFFImage.java:1566)
at javax.media.jai.RenderedImageAdapter.getTile(RenderedImageAdapter.java:146)
at javax.media.jai.NullOpImage.computeTile(NullOpImage.java:170)
at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:848)
at javax.media.jai.OpImage.getTile(OpImage.java:851)
With Zip TIFF :
java.lang.RuntimeException: Error inflating data: unknown compression
method
at com.sun.media.jai.codecimpl.TIFFImage.inflate(TIFFImage.java:185)
at com.sun.media.jai.codecimpl.TIFFImage.getTile(TIFFImage.java:1573)
at javax.media.jai.RenderedImageAdapter.getTile(RenderedImageAdapter.java:146)
at javax.media.jai.NullOpImage.computeTile(NullOpImage.java:170)
at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:848)
at javax.media.jai.OpImage.getTile(OpImage.java:851)
With no compression, I don't get any exception but some images are just
missing or are wrong.
Testcase :
---
import java.awt.image.*;
import javax.media.jai.*;
import com.sun.media.jai.codec.*;
import java.io.*;
class T {
public static void main(String[] a) {
try {
ImageDecoder id = ImageCodec.createImageDecoder("tiff",
new File(a[0]),
null);
final RenderedImage[] ri = new RenderedImage[id.getNumPages()];
for (int i=0; i<ri.length; i++)
ri[i] = id.decodeAsRenderedImage(i);
for (int i=0; i<ri.length; i++) {
final RenderedImage r = ri[i];
new Thread() { public void run() { r.getData(); } }.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
---
== HervM- Guillemet
xxxxx
"
Posted Date : 2005-11-17 01:20:57.0
|
|
Work Around
|
N/A
|
|
Evaluation
|
A separate instance of TIFFImage is created for each page in the multi-page TIFF and all of them refers to the same stream. All references to the stream are contained in a single method, getTile(), or methods that it in turn calls and getTile() is synchronized. This does not force synchronization of this method across all TIFFImage instances however.
Posted Date : 2005-11-17 01:20:57.0
|
|
Comments
|
PLEASE NOTE: JDK6 is formerly known as Project Mustang
|
|
|
 |