Home | History | Annotate | Download | only in params
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.hardware.camera2.params;
     18 
     19 import static com.android.internal.util.Preconditions.*;
     20 
     21 import android.hardware.camera2.CameraCharacteristics;
     22 import android.hardware.camera2.utils.HashCodeHelpers;
     23 import android.util.Range;
     24 import android.util.Size;
     25 
     26 /**
     27  * Immutable class to store the available
     28  * {@link CameraCharacteristics#CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS high speed video
     29  *  configurations}
     30  *
     31  * @see CameraCharacteristics#CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS
     32  *
     33  * @hide
     34  */
     35 public final class HighSpeedVideoConfiguration {
     36     static final private int HIGH_SPEED_MAX_MINIMAL_FPS = 120;
     37 
     38     /**
     39      * Create a new {@link HighSpeedVideoConfiguration}.
     40      *
     41      * @param width image width, in pixels (positive)
     42      * @param height image height, in pixels (positive)
     43      * @param fpsMin minimum frames per second for the configuration (positive)
     44      * @param fpsMax maximum frames per second for the configuration (larger or equal to 60)
     45      *
     46      * @throws IllegalArgumentException
     47      *              if width/height/fpsMin were not positive or fpsMax less than 60
     48      *
     49      * @hide
     50      */
     51     public HighSpeedVideoConfiguration(
     52             final int width, final int height, final int fpsMin, final int fpsMax,
     53             final int batchSizeMax) {
     54         if (fpsMax < HIGH_SPEED_MAX_MINIMAL_FPS) {
     55             throw new IllegalArgumentException("fpsMax must be at least " +
     56                     HIGH_SPEED_MAX_MINIMAL_FPS);
     57         }
     58         mFpsMax = fpsMax;
     59         mWidth = checkArgumentPositive(width, "width must be positive");
     60         mHeight = checkArgumentPositive(height, "height must be positive");
     61         mFpsMin = checkArgumentPositive(fpsMin, "fpsMin must be positive");
     62         mSize = new Size(mWidth, mHeight);
     63         mBatchSizeMax = checkArgumentPositive(batchSizeMax, "batchSizeMax must be positive");
     64         mFpsRange = new Range<Integer>(mFpsMin, mFpsMax);
     65     }
     66 
     67     /**
     68      * Return the width of the high speed video configuration.
     69      *
     70      * @return width > 0
     71      */
     72     public int getWidth() {
     73         return mWidth;
     74     }
     75 
     76     /**
     77      * Return the height of the high speed video configuration.
     78      *
     79      * @return height > 0
     80      */
     81     public int getHeight() {
     82         return mHeight;
     83     }
     84 
     85     /**
     86      * Return the minimum frame per second of the high speed video configuration.
     87      *
     88      * @return fpsMin > 0
     89      */
     90     public int getFpsMin() {
     91         return mFpsMin;
     92     }
     93 
     94     /**
     95      * Return the maximum frame per second of the high speed video configuration.
     96      *
     97      * @return fpsMax >= 60
     98      */
     99     public int getFpsMax() {
    100         return mFpsMax;
    101     }
    102 
    103     /**
    104      * Convenience method to return the size of this high speed video configuration.
    105      *
    106      * @return a Size with positive width and height
    107      */
    108     public Size getSize() {
    109         return mSize;
    110     }
    111 
    112     /**
    113      * Convenience method to return the max batch size of this high speed video configuration.
    114      *
    115      * @return the maximal batch size for this high speed video configuration
    116      */
    117     public int getBatchSizeMax() {
    118         return mBatchSizeMax;
    119     }
    120 
    121     /**
    122      * Convenience method to return the FPS range of this high speed video configuration.
    123      *
    124      * @return a Range with high bound >= {@value #HIGH_SPEED_MAX_MINIMAL_FPS}
    125      */
    126     public Range<Integer> getFpsRange() {
    127         return mFpsRange;
    128     }
    129 
    130     /**
    131      * Check if this {@link HighSpeedVideoConfiguration} is equal to another
    132      * {@link HighSpeedVideoConfiguration}.
    133      *
    134      * <p>Two configurations are equal if and only if each of the respective elements is equal.</p>
    135      *
    136      * @return {@code true} if the objects were equal, {@code false} otherwise
    137      */
    138     @Override
    139     public boolean equals(final Object obj) {
    140         if (obj == null) {
    141             return false;
    142         }
    143         if (this == obj) {
    144             return true;
    145         }
    146         if (obj instanceof HighSpeedVideoConfiguration) {
    147             final HighSpeedVideoConfiguration other = (HighSpeedVideoConfiguration) obj;
    148             return mWidth == other.mWidth &&
    149                     mHeight == other.mHeight &&
    150                     mFpsMin == other.mFpsMin &&
    151                     mFpsMax == other.mFpsMax &&
    152                     mBatchSizeMax == other.mBatchSizeMax;
    153         }
    154         return false;
    155     }
    156 
    157     /**
    158      * {@inheritDoc}
    159      */
    160     @Override
    161     public int hashCode() {
    162         return HashCodeHelpers.hashCode(mWidth, mHeight, mFpsMin, mFpsMax);
    163     }
    164 
    165     private final int mWidth;
    166     private final int mHeight;
    167     private final int mFpsMin;
    168     private final int mFpsMax;
    169     private final int mBatchSizeMax;
    170     private final Size mSize;
    171     private final Range<Integer> mFpsRange;
    172 }
    173