| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package org.chromium.media; |
| |
| import org.chromium.base.annotations.CalledByNative; |
| import org.chromium.base.annotations.JNINamespace; |
| |
| /** |
| * Set of PhotoCapabilities read from the different VideoCapture Devices. |
| **/ |
| @JNINamespace("media") |
| class PhotoCapabilities { |
| public boolean mBoolCapability[]; // boolean values, indexed by PhotoCapabilityBool |
| public double mDoubleCapability[]; // double values, indexed by PhotoCapabilityDouble |
| public int mIntCapability[]; // int values, indexed by PhotoCapabilityInt |
| public int mFillLightModeArray[]; // list of AndroidFillLightMode values |
| public int mMeteringMode[]; // AndroidMeteringMode values, indexed |
| // by MeteringModeType |
| public int mMeteringModeArray[][]; // lists of AndroidMeteringMode values, |
| // indexed by MeteringModeType |
| |
| PhotoCapabilities(boolean[] boolCapability, double[] doubleCapability, int[] intCapability, |
| int[] fillLightModeArray, int[] meteringMode, int[][] meteringModeArray) { |
| if (boolCapability.length != PhotoCapabilityBool.NUM_ENTRIES |
| || doubleCapability.length != PhotoCapabilityDouble.NUM_ENTRIES |
| || intCapability.length != PhotoCapabilityInt.NUM_ENTRIES |
| || meteringMode.length != MeteringModeType.NUM_ENTRIES |
| || meteringModeArray.length != MeteringModeType.NUM_ENTRIES) { |
| throw new IllegalArgumentException(); |
| } |
| if (fillLightModeArray != null) { |
| for (int i = 0; i < fillLightModeArray.length; i++) { |
| if (fillLightModeArray[i] < 0 |
| || fillLightModeArray[i] >= AndroidFillLightMode.NUM_ENTRIES) { |
| throw new IllegalArgumentException(); |
| } |
| } |
| } |
| for (int i = 0; i < meteringMode.length; i++) { |
| if (meteringMode[i] < 0 || meteringMode[i] >= AndroidMeteringMode.NUM_ENTRIES) { |
| throw new IllegalArgumentException(); |
| } |
| } |
| for (int i = 0; i < meteringModeArray.length; i++) { |
| if (meteringModeArray[i] == null) continue; |
| for (int j = 0; j < meteringModeArray[i].length; j++) { |
| if (meteringModeArray[i][j] < 0 |
| || meteringModeArray[i][j] >= AndroidMeteringMode.NUM_ENTRIES) { |
| throw new IllegalArgumentException(); |
| } |
| } |
| } |
| |
| mBoolCapability = boolCapability.clone(); |
| mDoubleCapability = doubleCapability.clone(); |
| mIntCapability = intCapability.clone(); |
| mFillLightModeArray = fillLightModeArray == null ? null : fillLightModeArray.clone(); |
| mMeteringMode = meteringMode.clone(); |
| mMeteringModeArray = new int[MeteringModeType.NUM_ENTRIES][]; |
| for (int i = 0; i < meteringModeArray.length; i++) { |
| mMeteringModeArray[i] = |
| meteringModeArray[i] == null ? null : meteringModeArray[i].clone(); |
| } |
| } |
| |
| @CalledByNative |
| public boolean getBool(@PhotoCapabilityBool int capability) { |
| if (capability < 0 || capability >= PhotoCapabilityBool.NUM_ENTRIES) { |
| throw new IllegalArgumentException(); |
| } |
| return mBoolCapability[capability]; |
| } |
| |
| @CalledByNative |
| public double getDouble(@PhotoCapabilityDouble int capability) { |
| if (capability < 0 || capability >= PhotoCapabilityDouble.NUM_ENTRIES) { |
| throw new IllegalArgumentException(); |
| } |
| return mDoubleCapability[capability]; |
| } |
| |
| @CalledByNative |
| public int getInt(@PhotoCapabilityInt int capability) { |
| if (capability < 0 || capability >= PhotoCapabilityInt.NUM_ENTRIES) { |
| throw new IllegalArgumentException(); |
| } |
| return mIntCapability[capability]; |
| } |
| |
| @CalledByNative |
| public int[] getFillLightModeArray() { |
| assert AndroidFillLightMode.NOT_SET == 0; |
| return mFillLightModeArray != null ? mFillLightModeArray.clone() : new int[0]; |
| } |
| |
| @CalledByNative |
| public @AndroidMeteringMode int getMeteringMode(@MeteringModeType int type) { |
| if (type < 0 || type >= MeteringModeType.NUM_ENTRIES) { |
| throw new IllegalArgumentException(); |
| } |
| return mMeteringMode[type]; |
| } |
| |
| @CalledByNative |
| public int[] getMeteringModeArray(@MeteringModeType int type) { |
| if (type < 0 || type >= MeteringModeType.NUM_ENTRIES) { |
| throw new IllegalArgumentException(); |
| } |
| assert AndroidMeteringMode.NOT_SET == 0; |
| return mMeteringModeArray[type] != null ? mMeteringModeArray[type].clone() : new int[0]; |
| } |
| |
| public static class Builder { |
| public boolean mBoolCapability[] = new boolean[PhotoCapabilityBool.NUM_ENTRIES]; |
| public double mDoubleCapability[] = new double[PhotoCapabilityDouble.NUM_ENTRIES]; |
| public int mIntCapability[] = new int[PhotoCapabilityInt.NUM_ENTRIES]; |
| public int mFillLightModeArray[]; |
| public int mMeteringMode[] = new int[MeteringModeType.NUM_ENTRIES]; |
| public int mMeteringModeArray[][] = new int[MeteringModeType.NUM_ENTRIES][]; |
| |
| public Builder() {} |
| |
| public Builder setBool(@PhotoCapabilityBool int capability, boolean value) { |
| this.mBoolCapability[capability] = value; |
| return this; |
| } |
| |
| public Builder setDouble(@PhotoCapabilityDouble int capability, double value) { |
| this.mDoubleCapability[capability] = value; |
| return this; |
| } |
| |
| public Builder setInt(@PhotoCapabilityInt int capability, int value) { |
| this.mIntCapability[capability] = value; |
| return this; |
| } |
| |
| public Builder setFillLightModeArray(int[] value) { |
| this.mFillLightModeArray = value.clone(); |
| return this; |
| } |
| |
| public Builder setMeteringMode(@MeteringModeType int type, int value) { |
| this.mMeteringMode[type] = value; |
| return this; |
| } |
| |
| public Builder setMeteringModeArray(@MeteringModeType int type, int[] value) { |
| this.mMeteringModeArray[type] = value.clone(); |
| return this; |
| } |
| |
| public PhotoCapabilities build() { |
| return new PhotoCapabilities(mBoolCapability, mDoubleCapability, mIntCapability, |
| mFillLightModeArray, mMeteringMode, mMeteringModeArray); |
| } |
| } |
| } |