src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java
Print this page
rev 9343 : 8033716: Fix raw and unchecked lint warnings in com.sun.imageio
Reviewed-by: darcy, prr, bae
*** 50,59 ****
--- 50,60 ----
import java.util.ListIterator;
import java.io.IOException;
import java.awt.color.ICC_Profile;
import java.awt.color.ICC_ColorSpace;
import java.awt.color.ColorSpace;
+ import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.Point;
/**
* Metadata for the JPEG plug-in.
*** 67,77 ****
/**
* A copy of <code>markerSequence</code>, created the first time the
* <code>markerSequence</code> is modified. This is used by reset
* to restore the original state.
*/
! private List resetSequence = null;
/**
* Set to <code>true</code> when reading a thumbnail stored as
* JPEG. This is used to enforce the prohibition of JFIF thumbnails
* containing any JFIF marker segments, and to ensure generation of
--- 68,78 ----
/**
* A copy of <code>markerSequence</code>, created the first time the
* <code>markerSequence</code> is modified. This is used by reset
* to restore the original state.
*/
! private List<MarkerSegment> resetSequence = null;
/**
* Set to <code>true</code> when reading a thumbnail stored as
* JPEG. This is used to enforce the prohibition of JFIF thumbnails
* containing any JFIF marker segments, and to ensure generation of
*** 98,108 ****
* of the list if it is present, and any JFXX or APP2ICC marker
* segments are subordinate to the JFIF marker segment. This
* list is package visible so that the writer can access it.
* @see #MarkerSegment
*/
! List markerSequence = new ArrayList();
/**
* Indicates whether this object represents stream or image
* metadata. Package-visible so the writer can see it.
*/
--- 99,109 ----
* of the list if it is present, and any JFXX or APP2ICC marker
* segments are subordinate to the JFIF marker segment. This
* list is package visible so that the writer can access it.
* @see #MarkerSegment
*/
! List<MarkerSegment> markerSequence = new ArrayList<>();
/**
* Indicates whether this object represents stream or image
* metadata. Package-visible so the writer can see it.
*/
*** 643,655 ****
/**
* Returns the first MarkerSegment object in the list
* with the given tag, or null if none is found.
*/
MarkerSegment findMarkerSegment(int tag) {
! Iterator iter = markerSequence.iterator();
while (iter.hasNext()) {
! MarkerSegment seg = (MarkerSegment)iter.next();
if (seg.tag == tag) {
return seg;
}
}
return null;
--- 644,656 ----
/**
* Returns the first MarkerSegment object in the list
* with the given tag, or null if none is found.
*/
MarkerSegment findMarkerSegment(int tag) {
! Iterator<MarkerSegment> iter = markerSequence.iterator();
while (iter.hasNext()) {
! MarkerSegment seg = iter.next();
if (seg.tag == tag) {
return seg;
}
}
return null;
*** 657,679 ****
/**
* Returns the first or last MarkerSegment object in the list
* of the given class, or null if none is found.
*/
! MarkerSegment findMarkerSegment(Class cls, boolean first) {
if (first) {
! Iterator iter = markerSequence.iterator();
while (iter.hasNext()) {
! MarkerSegment seg = (MarkerSegment)iter.next();
if (cls.isInstance(seg)) {
return seg;
}
}
} else {
! ListIterator iter = markerSequence.listIterator(markerSequence.size());
while (iter.hasPrevious()) {
! MarkerSegment seg = (MarkerSegment)iter.previous();
if (cls.isInstance(seg)) {
return seg;
}
}
}
--- 658,681 ----
/**
* Returns the first or last MarkerSegment object in the list
* of the given class, or null if none is found.
*/
! MarkerSegment findMarkerSegment(Class<? extends MarkerSegment> cls, boolean first) {
if (first) {
! Iterator<MarkerSegment> iter = markerSequence.iterator();
while (iter.hasNext()) {
! MarkerSegment seg = iter.next();
if (cls.isInstance(seg)) {
return seg;
}
}
} else {
! ListIterator<MarkerSegment> iter =
! markerSequence.listIterator(markerSequence.size());
while (iter.hasPrevious()) {
! MarkerSegment seg = iter.previous();
if (cls.isInstance(seg)) {
return seg;
}
}
}
*** 682,716 ****
/**
* Returns the index of the first or last MarkerSegment in the list
* of the given class, or -1 if none is found.
*/
! private int findMarkerSegmentPosition(Class cls, boolean first) {
if (first) {
! ListIterator iter = markerSequence.listIterator();
for (int i = 0; iter.hasNext(); i++) {
! MarkerSegment seg = (MarkerSegment)iter.next();
if (cls.isInstance(seg)) {
return i;
}
}
} else {
! ListIterator iter = markerSequence.listIterator(markerSequence.size());
for (int i = markerSequence.size()-1; iter.hasPrevious(); i--) {
! MarkerSegment seg = (MarkerSegment)iter.previous();
if (cls.isInstance(seg)) {
return i;
}
}
}
return -1;
}
private int findLastUnknownMarkerSegmentPosition() {
! ListIterator iter = markerSequence.listIterator(markerSequence.size());
for (int i = markerSequence.size()-1; iter.hasPrevious(); i--) {
! MarkerSegment seg = (MarkerSegment)iter.previous();
if (seg.unknown == true) {
return i;
}
}
return -1;
--- 684,721 ----
/**
* Returns the index of the first or last MarkerSegment in the list
* of the given class, or -1 if none is found.
*/
! private int findMarkerSegmentPosition(Class<? extends MarkerSegment> cls,
! boolean first) {
if (first) {
! ListIterator<MarkerSegment> iter = markerSequence.listIterator();
for (int i = 0; iter.hasNext(); i++) {
! MarkerSegment seg = iter.next();
if (cls.isInstance(seg)) {
return i;
}
}
} else {
! ListIterator<MarkerSegment> iter =
! markerSequence.listIterator(markerSequence.size());
for (int i = markerSequence.size()-1; iter.hasPrevious(); i--) {
! MarkerSegment seg = iter.previous();
if (cls.isInstance(seg)) {
return i;
}
}
}
return -1;
}
private int findLastUnknownMarkerSegmentPosition() {
! ListIterator<MarkerSegment> iter =
! markerSequence.listIterator(markerSequence.size());
for (int i = markerSequence.size()-1; iter.hasPrevious(); i--) {
! MarkerSegment seg = iter.previous();
if (seg.unknown == true) {
return i;
}
}
return -1;
*** 731,749 ****
}
/**
* Returns a deep copy of the current marker sequence.
*/
! private List cloneSequence() {
if (markerSequence == null) {
return null;
}
! List retval = new ArrayList(markerSequence.size());
! Iterator iter = markerSequence.iterator();
while(iter.hasNext()) {
! MarkerSegment seg = (MarkerSegment)iter.next();
! retval.add(seg.clone());
}
return retval;
}
--- 736,754 ----
}
/**
* Returns a deep copy of the current marker sequence.
*/
! private List<MarkerSegment> cloneSequence() {
if (markerSequence == null) {
return null;
}
! List<MarkerSegment> retval = new ArrayList<>(markerSequence.size());
! Iterator<MarkerSegment> iter = markerSequence.iterator();
while(iter.hasNext()) {
! MarkerSegment seg = iter.next();
! retval.add((MarkerSegment) seg.clone());
}
return retval;
}
*** 772,782 ****
}
IIOMetadataNode getNativeTree() {
IIOMetadataNode root;
IIOMetadataNode top;
! Iterator iter = markerSequence.iterator();
if (isStream) {
root = new IIOMetadataNode(JPEG.nativeStreamMetadataFormatName);
top = root;
} else {
IIOMetadataNode sequence = new IIOMetadataNode("markerSequence");
--- 777,787 ----
}
IIOMetadataNode getNativeTree() {
IIOMetadataNode root;
IIOMetadataNode top;
! Iterator<MarkerSegment> iter = markerSequence.iterator();
if (isStream) {
root = new IIOMetadataNode(JPEG.nativeStreamMetadataFormatName);
top = root;
} else {
IIOMetadataNode sequence = new IIOMetadataNode("markerSequence");
*** 795,805 ****
root = sequence;
}
top = sequence;
}
while(iter.hasNext()) {
! MarkerSegment seg = (MarkerSegment) iter.next();
top.appendChild(seg.getNativeNode());
}
return root;
}
--- 800,810 ----
root = sequence;
}
top = sequence;
}
while(iter.hasNext()) {
! MarkerSegment seg = iter.next();
top.appendChild(seg.getNativeNode());
}
return root;
}
*** 959,971 ****
lossless.setAttribute("value", "FALSE");
compression.appendChild(lossless);
// NumProgressiveScans - count sos segments
int sosCount = 0;
! Iterator iter = markerSequence.iterator();
while (iter.hasNext()) {
! MarkerSegment ms = (MarkerSegment) iter.next();
if (ms.tag == JPEG.SOS) {
sosCount++;
}
}
if (sosCount != 0) {
--- 964,976 ----
lossless.setAttribute("value", "FALSE");
compression.appendChild(lossless);
// NumProgressiveScans - count sos segments
int sosCount = 0;
! Iterator<MarkerSegment> iter = markerSequence.iterator();
while (iter.hasNext()) {
! MarkerSegment ms = iter.next();
if (ms.tag == JPEG.SOS) {
sosCount++;
}
}
if (sosCount != 0) {
*** 1026,1038 ****
protected IIOMetadataNode getStandardTextNode() {
IIOMetadataNode text = null;
// Add a text entry for each COM Marker Segment
if (findMarkerSegment(JPEG.COM) != null) {
text = new IIOMetadataNode("Text");
! Iterator iter = markerSequence.iterator();
while (iter.hasNext()) {
! MarkerSegment seg = (MarkerSegment) iter.next();
if (seg.tag == JPEG.COM) {
COMMarkerSegment com = (COMMarkerSegment) seg;
IIOMetadataNode entry = new IIOMetadataNode("TextEntry");
entry.setAttribute("keyword", "comment");
entry.setAttribute("value", com.getComment());
--- 1031,1043 ----
protected IIOMetadataNode getStandardTextNode() {
IIOMetadataNode text = null;
// Add a text entry for each COM Marker Segment
if (findMarkerSegment(JPEG.COM) != null) {
text = new IIOMetadataNode("Text");
! Iterator<MarkerSegment> iter = markerSequence.iterator();
while (iter.hasNext()) {
! MarkerSegment seg = iter.next();
if (seg.tag == JPEG.COM) {
COMMarkerSegment com = (COMMarkerSegment) seg;
IIOMetadataNode entry = new IIOMetadataNode("TextEntry");
entry.setAttribute("keyword", "comment");
entry.setAttribute("value", com.getComment());
*** 1066,1076 ****
throw new IllegalArgumentException("null formatName!");
}
if (root == null) {
throw new IllegalArgumentException("null root!");
}
! List copy = null;
if (resetSequence == null) {
resetSequence = cloneSequence(); // Deep copy
copy = resetSequence; // Avoid cloning twice
} else {
copy = cloneSequence();
--- 1071,1081 ----
throw new IllegalArgumentException("null formatName!");
}
if (root == null) {
throw new IllegalArgumentException("null root!");
}
! List<MarkerSegment> copy = null;
if (resetSequence == null) {
resetSequence = cloneSequence(); // Deep copy
copy = resetSequence; // Avoid cloning twice
} else {
copy = cloneSequence();
*** 1179,1194 ****
* If there is no SOS segment, the new DQT segment is added to the end
* of the sequence.
*/
private void mergeDQTNode(Node node) throws IIOInvalidTreeException {
// First collect any existing DQT nodes into a local list
! ArrayList oldDQTs = new ArrayList();
! Iterator iter = markerSequence.iterator();
while (iter.hasNext()) {
! MarkerSegment seg = (MarkerSegment) iter.next();
if (seg instanceof DQTMarkerSegment) {
! oldDQTs.add(seg);
}
}
if (!oldDQTs.isEmpty()) {
NodeList children = node.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
--- 1184,1199 ----
* If there is no SOS segment, the new DQT segment is added to the end
* of the sequence.
*/
private void mergeDQTNode(Node node) throws IIOInvalidTreeException {
// First collect any existing DQT nodes into a local list
! ArrayList<DQTMarkerSegment> oldDQTs = new ArrayList<>();
! Iterator<MarkerSegment> iter = markerSequence.iterator();
while (iter.hasNext()) {
! MarkerSegment seg = iter.next();
if (seg instanceof DQTMarkerSegment) {
! oldDQTs.add((DQTMarkerSegment) seg);
}
}
if (!oldDQTs.isEmpty()) {
NodeList children = node.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
*** 1199,1212 ****
0, 3,
true);
DQTMarkerSegment dqt = null;
int tableIndex = -1;
for (int j = 0; j < oldDQTs.size(); j++) {
! DQTMarkerSegment testDQT = (DQTMarkerSegment) oldDQTs.get(j);
for (int k = 0; k < testDQT.tables.size(); k++) {
! DQTMarkerSegment.Qtable testTable =
! (DQTMarkerSegment.Qtable) testDQT.tables.get(k);
if (childID == testTable.tableID) {
dqt = testDQT;
tableIndex = k;
break;
}
--- 1204,1216 ----
0, 3,
true);
DQTMarkerSegment dqt = null;
int tableIndex = -1;
for (int j = 0; j < oldDQTs.size(); j++) {
! DQTMarkerSegment testDQT = oldDQTs.get(j);
for (int k = 0; k < testDQT.tables.size(); k++) {
! DQTMarkerSegment.Qtable testTable = testDQT.tables.get(k);
if (childID == testTable.tableID) {
dqt = testDQT;
tableIndex = k;
break;
}
*** 1214,1224 ****
if (dqt != null) break;
}
if (dqt != null) {
dqt.tables.set(tableIndex, dqt.getQtableFromNode(child));
} else {
! dqt = (DQTMarkerSegment) oldDQTs.get(oldDQTs.size()-1);
dqt.tables.add(dqt.getQtableFromNode(child));
}
}
} else {
DQTMarkerSegment newGuy = new DQTMarkerSegment(node);
--- 1218,1228 ----
if (dqt != null) break;
}
if (dqt != null) {
dqt.tables.set(tableIndex, dqt.getQtableFromNode(child));
} else {
! dqt = oldDQTs.get(oldDQTs.size()-1);
dqt.tables.add(dqt.getQtableFromNode(child));
}
}
} else {
DQTMarkerSegment newGuy = new DQTMarkerSegment(node);
*** 1255,1270 ****
* If there is no SOS segment, the new DHT segment is added to the end
* of the sequence.
*/
private void mergeDHTNode(Node node) throws IIOInvalidTreeException {
// First collect any existing DQT nodes into a local list
! ArrayList oldDHTs = new ArrayList();
! Iterator iter = markerSequence.iterator();
while (iter.hasNext()) {
! MarkerSegment seg = (MarkerSegment) iter.next();
if (seg instanceof DHTMarkerSegment) {
! oldDHTs.add(seg);
}
}
if (!oldDHTs.isEmpty()) {
NodeList children = node.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
--- 1259,1274 ----
* If there is no SOS segment, the new DHT segment is added to the end
* of the sequence.
*/
private void mergeDHTNode(Node node) throws IIOInvalidTreeException {
// First collect any existing DQT nodes into a local list
! ArrayList<DHTMarkerSegment> oldDHTs = new ArrayList<>();
! Iterator<MarkerSegment> iter = markerSequence.iterator();
while (iter.hasNext()) {
! MarkerSegment seg = iter.next();
if (seg instanceof DHTMarkerSegment) {
! oldDHTs.add((DHTMarkerSegment) seg);
}
}
if (!oldDHTs.isEmpty()) {
NodeList children = node.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
*** 1281,1294 ****
0, 1,
true);
DHTMarkerSegment dht = null;
int tableIndex = -1;
for (int j = 0; j < oldDHTs.size(); j++) {
! DHTMarkerSegment testDHT = (DHTMarkerSegment) oldDHTs.get(j);
for (int k = 0; k < testDHT.tables.size(); k++) {
! DHTMarkerSegment.Htable testTable =
! (DHTMarkerSegment.Htable) testDHT.tables.get(k);
if ((childID == testTable.tableID) &&
(childClass == testTable.tableClass)) {
dht = testDHT;
tableIndex = k;
break;
--- 1285,1297 ----
0, 1,
true);
DHTMarkerSegment dht = null;
int tableIndex = -1;
for (int j = 0; j < oldDHTs.size(); j++) {
! DHTMarkerSegment testDHT = oldDHTs.get(j);
for (int k = 0; k < testDHT.tables.size(); k++) {
! DHTMarkerSegment.Htable testTable = testDHT.tables.get(k);
if ((childID == testTable.tableID) &&
(childClass == testTable.tableClass)) {
dht = testDHT;
tableIndex = k;
break;
*** 1297,1307 ****
if (dht != null) break;
}
if (dht != null) {
dht.tables.set(tableIndex, dht.getHtableFromNode(child));
} else {
! dht = (DHTMarkerSegment) oldDHTs.get(oldDHTs.size()-1);
dht.tables.add(dht.getHtableFromNode(child));
}
}
} else {
DHTMarkerSegment newGuy = new DHTMarkerSegment(node);
--- 1300,1310 ----
if (dht != null) break;
}
if (dht != null) {
dht.tables.set(tableIndex, dht.getHtableFromNode(child));
} else {
! dht = oldDHTs.get(oldDHTs.size()-1);
dht.tables.add(dht.getHtableFromNode(child));
}
}
} else {
DHTMarkerSegment newGuy = new DHTMarkerSegment(node);
*** 1733,1744 ****
idsDiffer = true;
}
}
if (idsDiffer) {
// update the ids in each SOS marker segment
! for (Iterator iter = markerSequence.iterator(); iter.hasNext();) {
! MarkerSegment seg = (MarkerSegment) iter.next();
if (seg instanceof SOSMarkerSegment) {
SOSMarkerSegment target = (SOSMarkerSegment) seg;
for (int i = 0; i < target.componentSpecs.length; i++) {
int oldSelector =
target.componentSpecs[i].componentSelector;
--- 1736,1748 ----
idsDiffer = true;
}
}
if (idsDiffer) {
// update the ids in each SOS marker segment
! for (Iterator<MarkerSegment> iter = markerSequence.iterator();
! iter.hasNext();) {
! MarkerSegment seg = iter.next();
if (seg instanceof SOSMarkerSegment) {
SOSMarkerSegment target = (SOSMarkerSegment) seg;
for (int i = 0; i < target.componentSpecs.length; i++) {
int oldSelector =
target.componentSpecs[i].componentSelector;
*** 1786,1800 ****
updateHtables = true;
}
}
if (updateQtables) {
! List tableSegments = new ArrayList();
! for (Iterator iter = markerSequence.iterator(); iter.hasNext();) {
! MarkerSegment seg = (MarkerSegment) iter.next();
if (seg instanceof DQTMarkerSegment) {
! tableSegments.add(seg);
}
}
// If there are no tables, don't add them, as the metadata encodes an
// abbreviated stream.
// If we are not subsampling, we just need one, so don't do anything
--- 1790,1805 ----
updateHtables = true;
}
}
if (updateQtables) {
! List<DQTMarkerSegment> tableSegments = new ArrayList<>();
! for (Iterator<MarkerSegment> iter = markerSequence.iterator();
! iter.hasNext();) {
! MarkerSegment seg = iter.next();
if (seg instanceof DQTMarkerSegment) {
! tableSegments.add((DQTMarkerSegment) seg);
}
}
// If there are no tables, don't add them, as the metadata encodes an
// abbreviated stream.
// If we are not subsampling, we just need one, so don't do anything
*** 1804,1855 ****
// luminance table, extract the scaling factor, and generate a
// scaled "standard" chrominance table.
// Find the table with selector 1.
boolean found = false;
! for (Iterator iter = tableSegments.iterator(); iter.hasNext();) {
! DQTMarkerSegment testdqt = (DQTMarkerSegment) iter.next();
! for (Iterator tabiter = testdqt.tables.iterator();
! tabiter.hasNext();) {
! DQTMarkerSegment.Qtable tab =
! (DQTMarkerSegment.Qtable) tabiter.next();
if (tab.tableID == 1) {
found = true;
}
}
}
if (!found) {
// find the table with selector 0. There should be one.
DQTMarkerSegment.Qtable table0 = null;
! for (Iterator iter = tableSegments.iterator(); iter.hasNext();) {
! DQTMarkerSegment testdqt = (DQTMarkerSegment) iter.next();
! for (Iterator tabiter = testdqt.tables.iterator();
! tabiter.hasNext();) {
! DQTMarkerSegment.Qtable tab =
! (DQTMarkerSegment.Qtable) tabiter.next();
if (tab.tableID == 0) {
table0 = tab;
}
}
}
// Assuming that the table with id 0 is a luminance table,
// compute a new chrominance table of the same quality and
// add it to the last DQT segment
! DQTMarkerSegment dqt =
! (DQTMarkerSegment) tableSegments.get(tableSegments.size()-1);
dqt.tables.add(dqt.getChromaForLuma(table0));
}
}
}
if (updateHtables) {
! List tableSegments = new ArrayList();
! for (Iterator iter = markerSequence.iterator(); iter.hasNext();) {
! MarkerSegment seg = (MarkerSegment) iter.next();
if (seg instanceof DHTMarkerSegment) {
! tableSegments.add(seg);
}
}
// If there are no tables, don't add them, as the metadata encodes an
// abbreviated stream.
// If we are not subsampling, we just need one, so don't do anything
--- 1809,1860 ----
// luminance table, extract the scaling factor, and generate a
// scaled "standard" chrominance table.
// Find the table with selector 1.
boolean found = false;
! for (Iterator<DQTMarkerSegment> iter = tableSegments.iterator();
! iter.hasNext();) {
! DQTMarkerSegment testdqt = iter.next();
! for (Iterator<DQTMarkerSegment.Qtable> tabiter =
! testdqt.tables.iterator(); tabiter.hasNext();) {
! DQTMarkerSegment.Qtable tab = tabiter.next();
if (tab.tableID == 1) {
found = true;
}
}
}
if (!found) {
// find the table with selector 0. There should be one.
DQTMarkerSegment.Qtable table0 = null;
! for (Iterator<DQTMarkerSegment> iter =
! tableSegments.iterator(); iter.hasNext();) {
! DQTMarkerSegment testdqt = iter.next();
! for (Iterator<DQTMarkerSegment.Qtable> tabiter =
! testdqt.tables.iterator(); tabiter.hasNext();) {
! DQTMarkerSegment.Qtable tab = tabiter.next();
if (tab.tableID == 0) {
table0 = tab;
}
}
}
// Assuming that the table with id 0 is a luminance table,
// compute a new chrominance table of the same quality and
// add it to the last DQT segment
! DQTMarkerSegment dqt = tableSegments.get(tableSegments.size()-1);
dqt.tables.add(dqt.getChromaForLuma(table0));
}
}
}
if (updateHtables) {
! List<DHTMarkerSegment> tableSegments = new ArrayList<>();
! for (Iterator<MarkerSegment> iter = markerSequence.iterator();
! iter.hasNext();) {
! MarkerSegment seg = iter.next();
if (seg instanceof DHTMarkerSegment) {
! tableSegments.add((DHTMarkerSegment) seg);
}
}
// If there are no tables, don't add them, as the metadata encodes an
// abbreviated stream.
// If we are not subsampling, we just need one, so don't do anything
*** 1858,1883 ****
// tables. If there is only one, add a
// "standard " chrominance table.
// find a table with selector 1. AC/DC is irrelevant
boolean found = false;
! for (Iterator iter = tableSegments.iterator(); iter.hasNext();) {
! DHTMarkerSegment testdht = (DHTMarkerSegment) iter.next();
! for (Iterator tabiter = testdht.tables.iterator();
! tabiter.hasNext();) {
! DHTMarkerSegment.Htable tab =
! (DHTMarkerSegment.Htable) tabiter.next();
if (tab.tableID == 1) {
found = true;
}
}
}
if (!found) {
// Create new standard dc and ac chrominance tables and add them
// to the last DHT segment
DHTMarkerSegment lastDHT =
! (DHTMarkerSegment) tableSegments.get(tableSegments.size()-1);
lastDHT.addHtable(JPEGHuffmanTable.StdDCLuminance, true, 1);
lastDHT.addHtable(JPEGHuffmanTable.StdACLuminance, true, 1);
}
}
}
--- 1863,1888 ----
// tables. If there is only one, add a
// "standard " chrominance table.
// find a table with selector 1. AC/DC is irrelevant
boolean found = false;
! for (Iterator<DHTMarkerSegment> iter = tableSegments.iterator();
! iter.hasNext();) {
! DHTMarkerSegment testdht = iter.next();
! for (Iterator<DHTMarkerSegment.Htable> tabiter =
! testdht.tables.iterator(); tabiter.hasNext();) {
! DHTMarkerSegment.Htable tab = tabiter.next();
if (tab.tableID == 1) {
found = true;
}
}
}
if (!found) {
// Create new standard dc and ac chrominance tables and add them
// to the last DHT segment
DHTMarkerSegment lastDHT =
! tableSegments.get(tableSegments.size()-1);
lastDHT.addHtable(JPEGHuffmanTable.StdDCLuminance, true, 1);
lastDHT.addHtable(JPEGHuffmanTable.StdACLuminance, true, 1);
}
}
}
*** 2179,2189 ****
private void setFromNativeTree(Node root) throws IIOInvalidTreeException {
if (resetSequence == null) {
resetSequence = markerSequence;
}
! markerSequence = new ArrayList();
// Build a whole new marker sequence from the tree
String name = root.getNodeName();
if (name != ((isStream) ? JPEG.nativeStreamMetadataFormatName
--- 2184,2194 ----
private void setFromNativeTree(Node root) throws IIOInvalidTreeException {
if (resetSequence == null) {
resetSequence = markerSequence;
}
! markerSequence = new ArrayList<>();
// Build a whole new marker sequence from the tree
String name = root.getNodeName();
if (name != ((isStream) ? JPEG.nativeStreamMetadataFormatName
*** 2308,2321 ****
/**
* Returns the total number of bands referenced in all SOS marker
* segments, including 0 if there are no SOS marker segments.
*/
private int countScanBands() {
! List ids = new ArrayList();
! Iterator iter = markerSequence.iterator();
while(iter.hasNext()) {
! MarkerSegment seg = (MarkerSegment)iter.next();
if (seg instanceof SOSMarkerSegment) {
SOSMarkerSegment sos = (SOSMarkerSegment) seg;
SOSMarkerSegment.ScanComponentSpec [] specs = sos.componentSpecs;
for (int i = 0; i < specs.length; i++) {
Integer id = new Integer(specs[i].componentSelector);
--- 2313,2326 ----
/**
* Returns the total number of bands referenced in all SOS marker
* segments, including 0 if there are no SOS marker segments.
*/
private int countScanBands() {
! List<Integer> ids = new ArrayList<>();
! Iterator<MarkerSegment> iter = markerSequence.iterator();
while(iter.hasNext()) {
! MarkerSegment seg = iter.next();
if (seg instanceof SOSMarkerSegment) {
SOSMarkerSegment sos = (SOSMarkerSegment) seg;
SOSMarkerSegment.ScanComponentSpec [] specs = sos.componentSpecs;
for (int i = 0; i < specs.length; i++) {
Integer id = new Integer(specs[i].componentSelector);
*** 2332,2342 ****
///// Writer support
void writeToStream(ImageOutputStream ios,
boolean ignoreJFIF,
boolean forceJFIF,
! List thumbnails,
ICC_Profile iccProfile,
boolean ignoreAdobe,
int newAdobeTransform,
JPEGImageWriter writer)
throws IOException {
--- 2337,2347 ----
///// Writer support
void writeToStream(ImageOutputStream ios,
boolean ignoreJFIF,
boolean forceJFIF,
! List<? extends BufferedImage> thumbnails,
ICC_Profile iccProfile,
boolean ignoreAdobe,
int newAdobeTransform,
JPEGImageWriter writer)
throws IOException {
*** 2358,2370 ****
(JPEGImageWriter.WARNING_METADATA_ADJUSTED_FOR_THUMB);
}
}
}
// Iterate over each MarkerSegment
! Iterator iter = markerSequence.iterator();
while(iter.hasNext()) {
! MarkerSegment seg = (MarkerSegment)iter.next();
if (seg instanceof JFIFMarkerSegment) {
if (ignoreJFIF == false) {
JFIFMarkerSegment jfif = (JFIFMarkerSegment) seg;
jfif.writeWithThumbs(ios, thumbnails, writer);
if (iccProfile != null) {
--- 2363,2375 ----
(JPEGImageWriter.WARNING_METADATA_ADJUSTED_FOR_THUMB);
}
}
}
// Iterate over each MarkerSegment
! Iterator<MarkerSegment> iter = markerSequence.iterator();
while(iter.hasNext()) {
! MarkerSegment seg = iter.next();
if (seg instanceof JFIFMarkerSegment) {
if (ignoreJFIF == false) {
JFIFMarkerSegment jfif = (JFIFMarkerSegment) seg;
jfif.writeWithThumbs(ios, thumbnails, writer);
if (iccProfile != null) {
*** 2407,2417 ****
}
}
public void print() {
for (int i = 0; i < markerSequence.size(); i++) {
! MarkerSegment seg = (MarkerSegment) markerSequence.get(i);
seg.print();
}
}
}
--- 2412,2422 ----
}
}
public void print() {
for (int i = 0; i < markerSequence.size(); i++) {
! MarkerSegment seg = markerSequence.get(i);
seg.print();
}
}
}