History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormat.java (1 of 18352 files). Show all

Unified · Split

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormat.java+366−0
@@ -0,0 +1,366 @@
1/*
2 * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package com.sun.imageio.plugins.jpeg;
27
28import javax.imageio.metadata.IIOMetadataFormat;
29import javax.imageio.metadata.IIOMetadataFormatImpl;
30import javax.imageio.ImageTypeSpecifier;
31
32import java.awt.color.ICC_Profile;
33import java.awt.color.ColorSpace;
34import java.awt.image.ColorModel;
35
36import java.util.List;
37import java.util.ArrayList;
38
39public class JPEGImageMetadataFormat extends JPEGMetadataFormat {
40
41 private static JPEGImageMetadataFormat theInstance = null;
42
43 private JPEGImageMetadataFormat() {
44 super(JPEG.nativeImageMetadataFormatName,
45 CHILD_POLICY_ALL);
46
47 addElement("JPEGvariety",
48 JPEG.nativeImageMetadataFormatName,
49 CHILD_POLICY_CHOICE);
50
51 addElement("markerSequence",
52 JPEG.nativeImageMetadataFormatName,
53 CHILD_POLICY_SEQUENCE);
54
55 addElement("app0JFIF", "JPEGvariety", CHILD_POLICY_SOME);
56
57 addStreamElements("markerSequence");
58
59 addElement("app14Adobe", "markerSequence", CHILD_POLICY_EMPTY);
60
61 addElement("sof", "markerSequence", 1, 4);
62
63 addElement("sos", "markerSequence", 1, 4);
64
65 addElement("JFXX", "app0JFIF", 1, Integer.MAX_VALUE);
66
67 addElement("app0JFXX", "JFXX", CHILD_POLICY_CHOICE);
68
69 addElement("app2ICC", "app0JFIF", CHILD_POLICY_EMPTY);
70
71 addAttribute("app0JFIF",
72 "majorVersion",
73 DATATYPE_INTEGER,
74 false,
75 "1",
76 "0", "255",
77 true, true);
78 addAttribute("app0JFIF",
79 "minorVersion",
80 DATATYPE_INTEGER,
81 false,
82 "2",
83 "0", "255",
84 true, true);
85 List resUnits = new ArrayList();
86 resUnits.add("0");
87 resUnits.add("1");
88 resUnits.add("2");
89 addAttribute("app0JFIF",
90 "resUnits",
91 DATATYPE_INTEGER,
92 false,
93 "0",
94 resUnits);
95 addAttribute("app0JFIF",
96 "Xdensity",
97 DATATYPE_INTEGER,
98 false,
99 "1",
100 "1", "65535",
101 true, true);
102 addAttribute("app0JFIF",
103 "Ydensity",
104 DATATYPE_INTEGER,
105 false,
106 "1",
107 "1", "65535",
108 true, true);
109 addAttribute("app0JFIF",
110 "thumbWidth",
111 DATATYPE_INTEGER,
112 false,
113 "0",
114 "0", "255",
115 true, true);
116 addAttribute("app0JFIF",
117 "thumbHeight",
118 DATATYPE_INTEGER,
119 false,
120 "0",
121 "0", "255",
122 true, true);
123
124 addElement("JFIFthumbJPEG", "app0JFXX", CHILD_POLICY_SOME);
125 addElement("JFIFthumbPalette", "app0JFXX", CHILD_POLICY_EMPTY);
126 addElement("JFIFthumbRGB", "app0JFXX", CHILD_POLICY_EMPTY);
127
128 List codes = new ArrayList();
129 codes.add("16"); // Hex 10
130 codes.add("17"); // Hex 11
131 codes.add("19"); // Hex 13
132 addAttribute("app0JFXX",
133 "extensionCode",
134 DATATYPE_INTEGER,
135 false,
136 null,
137 codes);
138
139 addChildElement("markerSequence", "JFIFthumbJPEG");
140
141 addAttribute("JFIFthumbPalette",
142 "thumbWidth",
143 DATATYPE_INTEGER,
144 false,
145 null,
146 "0", "255",
147 true, true);
148 addAttribute("JFIFthumbPalette",
149 "thumbHeight",
150 DATATYPE_INTEGER,
151 false,
152 null,
153 "0", "255",
154 true, true);
155
156 addAttribute("JFIFthumbRGB",
157 "thumbWidth",
158 DATATYPE_INTEGER,
159 false,
160 null,
161 "0", "255",
162 true, true);
163 addAttribute("JFIFthumbRGB",
164 "thumbHeight",
165 DATATYPE_INTEGER,
166 false,
167 null,
168 "0", "255",
169 true, true);
170
171 addObjectValue("app2ICC", ICC_Profile.class, false, null);
172
173 addAttribute("app14Adobe",
174 "version",
175 DATATYPE_INTEGER,
176 false,
177 "100",
178 "100", "255",
179 true, true);
180 addAttribute("app14Adobe",
181 "flags0",
182 DATATYPE_INTEGER,
183 false,
184 "0",
185 "0", "65535",
186 true, true);
187 addAttribute("app14Adobe",
188 "flags1",
189 DATATYPE_INTEGER,
190 false,
191 "0",
192 "0", "65535",
193 true, true);
194
195 List transforms = new ArrayList();
196 transforms.add("0");
197 transforms.add("1");
198 transforms.add("2");
199 addAttribute("app14Adobe",
200 "transform",
201 DATATYPE_INTEGER,
202 true,
203 null,
204 transforms);
205
206 addElement("componentSpec", "sof", CHILD_POLICY_EMPTY);
207
208 List procs = new ArrayList();
209 procs.add("0");
210 procs.add("1");
211 procs.add("2");
212 addAttribute("sof",
213 "process",
214 DATATYPE_INTEGER,
215 false,
216 null,
217 procs);
218 addAttribute("sof",
219 "samplePrecision",
220 DATATYPE_INTEGER,
221 false,
222 "8");
223 addAttribute("sof",
224 "numLines",
225 DATATYPE_INTEGER,
226 false,
227 null,
228 "0", "65535",
229 true, true);
230 addAttribute("sof",
231 "samplesPerLine",
232 DATATYPE_INTEGER,
233 false,
234 null,
235 "0", "65535",
236 true, true);
237 List comps = new ArrayList();
238 comps.add("1");
239 comps.add("2");
240 comps.add("3");
241 comps.add("4");
242 addAttribute("sof",
243 "numFrameComponents",
244 DATATYPE_INTEGER,
245 false,
246 null,
247 comps);
248
249 addAttribute("componentSpec",
250 "componentId",
251 DATATYPE_INTEGER,
252 true,
253 null,
254 "0", "255",
255 true, true);
256 addAttribute("componentSpec",
257 "HsamplingFactor",
258 DATATYPE_INTEGER,
259 true,
260 null,
261 "1", "255",
262 true, true);
263 addAttribute("componentSpec",
264 "VsamplingFactor",
265 DATATYPE_INTEGER,
266 true,
267 null,
268 "1", "255",
269 true, true);
270 List tabids = new ArrayList();
271 tabids.add("0");
272 tabids.add("1");
273 tabids.add("2");
274 tabids.add("3");
275 addAttribute("componentSpec",
276 "QtableSelector",
277 DATATYPE_INTEGER,
278 true,
279 null,
280 tabids);
281
282 addElement("scanComponentSpec", "sos", CHILD_POLICY_EMPTY);
283
284 addAttribute("sos",
285 "numScanComponents",
286 DATATYPE_INTEGER,
287 true,
288 null,
289 comps);
290 addAttribute("sos",
291 "startSpectralSelection",
292 DATATYPE_INTEGER,
293 false,
294 "0",
295 "0", "63",
296 true, true);
297 addAttribute("sos",
298 "endSpectralSelection",
299 DATATYPE_INTEGER,
300 false,
301 "63",
302 "0", "63",
303 true, true);
304 addAttribute("sos",
305 "approxHigh",
306 DATATYPE_INTEGER,
307 false,
308 "0",
309 "0", "15",
310 true, true);
311 addAttribute("sos",
312 "approxLow",
313 DATATYPE_INTEGER,
314 false,
315 "0",
316 "0", "15",
317 true, true);
318
319 addAttribute("scanComponentSpec",
320 "componentSelector",
321 DATATYPE_INTEGER,
322 true,
323 null,
324 "0", "255",
325 true, true);
326 addAttribute("scanComponentSpec",
327 "dcHuffTable",
328 DATATYPE_INTEGER,
329 true,
330 null,
331 tabids);
332 addAttribute("scanComponentSpec",
333 "acHuffTable",
334 DATATYPE_INTEGER,
335 true,
336 null,
337 tabids);
338 }
339
340 public boolean canNodeAppear(String elementName,
341 ImageTypeSpecifier imageType) {
342 // All images can have these
343 if (elementName.equals(getRootName())
344 || elementName.equals("JPEGvariety")
345 || isInSubtree(elementName, "markerSequence")) {
346 return true;
347 }
348
349 // If it is an element in the app0jfif subtree, just check
350 // that the image type is JFIF compliant.
351 if ((isInSubtree(elementName, "app0JFIF"))
352 && JPEG.isJFIFcompliant(imageType, true)) {
353 return true;
354 }
355
356 return false;
357 }
358
359
360 public static synchronized IIOMetadataFormat getInstance() {
361 if (theInstance == null) {
362 theInstance = new JPEGImageMetadataFormat();
363 }
364 return theInstance;
365 }
366}