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