|  | /* | 
|  | *  Licensed to the Apache Software Foundation (ASF) under one or more | 
|  | *  contributor license agreements.  See the NOTICE file distributed with | 
|  | *  this work for additional information regarding copyright ownership. | 
|  | *  The ASF licenses this file to You under the Apache License, Version 2.0 | 
|  | *  (the "License"); you may not use this file except in compliance with | 
|  | *  the License.  You may obtain a copy of the License at | 
|  | * | 
|  | *     http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | *  Unless required by applicable law or agreed to in writing, software | 
|  | *  distributed under the License is distributed on an "AS IS" BASIS, | 
|  | *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | *  See the License for the specific language governing permissions and | 
|  | *  limitations under the License. | 
|  | */ | 
|  |  | 
|  | package javax.imageio.plugins.jpeg; | 
|  |  | 
|  | import javax.imageio.ImageReadParam; | 
|  |  | 
|  | /** | 
|  | * The JPEGImageReadParam class provides functionality to set Huffman tables | 
|  | * and quantization tables when using the JPEG reader plug-in. | 
|  | */ | 
|  | public class JPEGImageReadParam extends ImageReadParam { | 
|  |  | 
|  | /** The q tables. */ | 
|  | private JPEGQTable qTables[]; | 
|  |  | 
|  | /** The dc huffman tables. */ | 
|  | private JPEGHuffmanTable dcHuffmanTables[]; | 
|  |  | 
|  | /** The ac huffman tables. */ | 
|  | private JPEGHuffmanTable acHuffmanTables[]; | 
|  |  | 
|  | /** | 
|  | * Instantiates a new JPEGImageReadParam. | 
|  | */ | 
|  | public JPEGImageReadParam() { | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Returns true if tables are set, false otherwise. | 
|  | * | 
|  | * @return true if tables are set, false otherwise. | 
|  | */ | 
|  | public boolean areTablesSet() { | 
|  | return qTables != null; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Sets the quantization and Huffman tables for using in | 
|  | * decoding streams. | 
|  | * | 
|  | * @param qTables the quantization tables. | 
|  | * @param DCHuffmanTables the standart DC Huffman tables. | 
|  | * @param ACHuffmanTables the standart AC huffman tables. | 
|  | */ | 
|  | public void setDecodeTables( | 
|  | JPEGQTable[] qTables, | 
|  | JPEGHuffmanTable[] DCHuffmanTables, | 
|  | JPEGHuffmanTable[] ACHuffmanTables | 
|  | ) { | 
|  | if (qTables == null || DCHuffmanTables == null || ACHuffmanTables == null) { | 
|  | throw new IllegalArgumentException("Invalid JPEG table arrays"); | 
|  | } | 
|  | if(DCHuffmanTables.length != ACHuffmanTables.length) { | 
|  | throw new IllegalArgumentException("Invalid JPEG table arrays"); | 
|  | } | 
|  | if (qTables.length > 4 || DCHuffmanTables.length > 4) { | 
|  | throw new IllegalArgumentException("Invalid JPEG table arrays"); | 
|  | } | 
|  |  | 
|  | // Do the shallow copy, it should be enough | 
|  | this.qTables = qTables.clone(); | 
|  | dcHuffmanTables = DCHuffmanTables.clone(); | 
|  | acHuffmanTables = ACHuffmanTables.clone(); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Unset all decoded tables. | 
|  | */ | 
|  | public void unsetDecodeTables() { | 
|  | qTables = null; | 
|  | dcHuffmanTables = null; | 
|  | acHuffmanTables = null; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Gets the quantization tables. | 
|  | * | 
|  | * @return the quantization tables, or null. | 
|  | */ | 
|  | public JPEGQTable[] getQTables() { | 
|  | return qTables == null ? null : qTables.clone(); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Gets the DC Huffman tables. | 
|  | * | 
|  | * @return the DC Huffman tables which are set, or null. | 
|  | */ | 
|  | public JPEGHuffmanTable[] getDCHuffmanTables() { | 
|  | return dcHuffmanTables == null ? null : dcHuffmanTables.clone(); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Gets the AC Huffman tables. | 
|  | * | 
|  | * @return the AC Huffman tables which are set, or null. | 
|  | */ | 
|  | public JPEGHuffmanTable[] getACHuffmanTables() { | 
|  | return acHuffmanTables == null ? null : acHuffmanTables.clone(); | 
|  | } | 
|  | } |