15398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen/* 25398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * Copyright 2015 The Android Open Source Project 35398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * 45398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * Licensed under the Apache License, Version 2.0 (the "License"); 55398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * you may not use this file except in compliance with the License. 65398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * You may obtain a copy of the License at 75398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * 85398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * http://www.apache.org/licenses/LICENSE-2.0 95398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * 105398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * Unless required by applicable law or agreed to in writing, software 115398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * distributed under the License is distributed on an "AS IS" BASIS, 125398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * See the License for the specific language governing permissions and 145398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * limitations under the License. 155398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen */ 165398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen 175398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chenpackage android.hardware.camera2.params; 185398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen 195398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chenimport android.hardware.camera2.utils.HashCodeHelpers; 205398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen 215398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen/** 228062d31d27943da4d652878b4c36aeabb8bb8b08Chien-Yu Chen * Immutable class to store an input configuration that is used to create a reprocessable capture 235398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * session. 245398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * 258062d31d27943da4d652878b4c36aeabb8bb8b08Chien-Yu Chen * @see android.hardware.camera2.CameraDevice#createReprocessableCaptureSession 268062d31d27943da4d652878b4c36aeabb8bb8b08Chien-Yu Chen * @see android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP 275398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen */ 285398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chenpublic final class InputConfiguration { 295398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen 305398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen private final int mWidth; 315398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen private final int mHeight; 325398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen private final int mFormat; 335398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen 345398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen /** 355398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * Create an input configration with the width, height, and user-defined format. 365398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * 375398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * <p>Images of an user-defined format are accessible by applications. Use 385398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * {@link android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP} 395398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * to query supported input formats</p> 405398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * 415398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * @param width Width of the input buffers. 425398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * @param height Height of the input buffers. 435398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * @param format Format of the input buffers. One of ImageFormat or PixelFormat constants. 445398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * 455398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * @see android.graphics.ImageFormat 465398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * @see android.graphics.PixelFormat 475398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * @see android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP 485398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen */ 495398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen public InputConfiguration(int width, int height, int format) { 505398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen mWidth = width; 515398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen mHeight = height; 525398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen mFormat = format; 535398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen } 545398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen 555398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen /** 565398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * Get the width of this input configration. 575398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * 585398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * @return width of this input configuration. 595398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen */ 605398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen public int getWidth() { 615398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen return mWidth; 625398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen } 635398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen 645398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen /** 655398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * Get the height of this input configration. 665398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * 675398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * @return height of this input configuration. 685398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen */ 695398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen public int getHeight() { 705398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen return mHeight; 715398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen } 725398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen 735398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen /** 745398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * Get the format of this input configration. 755398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * 765398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * @return format of this input configuration. 775398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen */ 785398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen public int getFormat() { 795398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen return mFormat; 805398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen } 815398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen 825398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen /** 835398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * Check if this InputConfiguration is equal to another InputConfiguration. 845398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * 855398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * <p>Two input configurations are equal if and only if they have the same widths, heights, and 865398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * formats.</p> 875398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * 885398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * @param obj the object to compare this instance with. 895398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * 905398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * @return {@code true} if the objects were equal, {@code false} otherwise. 915398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen */ 925398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen @Override 935398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen public boolean equals(Object obj) { 945398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen if (!(obj instanceof InputConfiguration)) { 955398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen return false; 965398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen } 975398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen 985398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen InputConfiguration otherInputConfig = (InputConfiguration) obj; 995398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen 1005398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen if (otherInputConfig.getWidth() == mWidth && 1015398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen otherInputConfig.getHeight() == mHeight && 1025398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen otherInputConfig.getFormat() == mFormat) { 1035398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen return true; 1045398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen } 1055398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen return false; 1065398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen } 1075398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen 1085398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen /** 1095398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen * {@inheritDoc} 1105398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen */ 1115398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen @Override 1125398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen public int hashCode() { 1135398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen return HashCodeHelpers.hashCode(mWidth, mHeight, mFormat); 1145398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen } 115310f381eac558bce069b52fbda9a8aeb83608858Chien-Yu Chen 116310f381eac558bce069b52fbda9a8aeb83608858Chien-Yu Chen /** 117310f381eac558bce069b52fbda9a8aeb83608858Chien-Yu Chen * Return this {@link InputConfiguration} as a string representation. 118310f381eac558bce069b52fbda9a8aeb83608858Chien-Yu Chen * 119310f381eac558bce069b52fbda9a8aeb83608858Chien-Yu Chen * <p> {@code "InputConfiguration(w:%d, h:%d, format:%d)"}, where {@code %d} represents 120310f381eac558bce069b52fbda9a8aeb83608858Chien-Yu Chen * the width, height, and format, respectively.</p> 121310f381eac558bce069b52fbda9a8aeb83608858Chien-Yu Chen * 122310f381eac558bce069b52fbda9a8aeb83608858Chien-Yu Chen * @return string representation of {@link InputConfiguration} 123310f381eac558bce069b52fbda9a8aeb83608858Chien-Yu Chen */ 124310f381eac558bce069b52fbda9a8aeb83608858Chien-Yu Chen @Override 125310f381eac558bce069b52fbda9a8aeb83608858Chien-Yu Chen public String toString() { 126310f381eac558bce069b52fbda9a8aeb83608858Chien-Yu Chen return String.format("InputConfiguration(w:%d, h:%d, format:%d)", mWidth, mHeight, mFormat); 127310f381eac558bce069b52fbda9a8aeb83608858Chien-Yu Chen } 1285398a676809faaf3c6c2875edc1907ad6b8e1c89Chien-Yu Chen} 129