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 
26 package com.sun.imageio.plugins.jpeg;
27 
28 import javax.imageio.metadata.IIOInvalidTreeException;
29 import javax.imageio.metadata.IIOMetadataNode;
30 import javax.imageio.stream.ImageOutputStream;
31 
32 import java.io.IOException;
33 
34 import org.w3c.dom.Node;
35 
36 /**
37      * A DRI (Define Restart Interval) marker segment.
38      */
39 class DRIMarkerSegment extends MarkerSegment {
40     /**
41      * Restart interval, or 0 if none is specified.
42      */
43     int restartInterval = 0;
44 
DRIMarkerSegment(JPEGBuffer buffer)45     DRIMarkerSegment(JPEGBuffer buffer)
46         throws IOException {
47         super(buffer);
48         restartInterval = (buffer.buf[buffer.bufPtr++] & 0xff) << 8;
49         restartInterval |= buffer.buf[buffer.bufPtr++] & 0xff;
50         buffer.bufAvail -= length;
51     }
52 
DRIMarkerSegment(Node node)53     DRIMarkerSegment(Node node) throws IIOInvalidTreeException {
54         super(JPEG.DRI);
55         updateFromNativeNode(node, true);
56     }
57 
getNativeNode()58     IIOMetadataNode getNativeNode() {
59         IIOMetadataNode node = new IIOMetadataNode("dri");
60         node.setAttribute("interval", Integer.toString(restartInterval));
61         return node;
62     }
63 
updateFromNativeNode(Node node, boolean fromScratch)64     void updateFromNativeNode(Node node, boolean fromScratch)
65         throws IIOInvalidTreeException {
66         restartInterval = getAttributeValue(node, null, "interval",
67                                             0, 65535, true);
68     }
69 
70     /**
71      * Writes the data for this segment to the stream in
72      * valid JPEG format.
73      */
write(ImageOutputStream ios)74     void write(ImageOutputStream ios) throws IOException {
75         // We don't write DRI segments; the IJG library does.
76     }
77 
print()78     void print() {
79         printTag("DRI");
80         System.out.println("Interval: "
81                            + Integer.toString(restartInterval));
82     }
83 }
84