1 /* 2 * Copyright (C) 2022 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.display; 18 19 import android.annotation.IntDef; 20 import android.annotation.NonNull; 21 import android.annotation.Nullable; 22 import android.os.Parcel; 23 import android.os.Parcelable; 24 import android.view.Display; 25 26 import java.lang.annotation.Retention; 27 import java.lang.annotation.RetentionPolicy; 28 29 /** 30 * Describes the HDR conversion mode for a device. 31 * 32 * HDR conversion mode has a conversionMode and preferredHdrOutputType. </p><p> 33 * The conversionMode can be one of: 34 * {@link HdrConversionMode#HDR_CONVERSION_UNSUPPORTED} : HDR conversion is unsupported. In this 35 * mode, preferredHdrOutputType should not be set. 36 * {@link HdrConversionMode#HDR_CONVERSION_PASSTHROUGH} : HDR conversion is disabled. The output HDR 37 * type will change dynamically to match the content. In this mode, preferredHdrOutputType should 38 * not be set. 39 * {@link HdrConversionMode#HDR_CONVERSION_SYSTEM}: The output HDR type is selected by the 40 * implementation. In this mode, preferredHdrOutputType will be the mode preferred by the system 41 * when querying. However, it should be set to HDR_TYPE_INVALID when setting the mode. 42 * {@link HdrConversionMode#HDR_CONVERSION_FORCE}: The implementation converts all content to this 43 * HDR type, when possible. 44 * In this mode, preferredHdrOutputType should be set. 45 * </p> 46 */ 47 public final class HdrConversionMode implements Parcelable { 48 /** HDR output conversion is unsupported */ 49 public static final int HDR_CONVERSION_UNSUPPORTED = 0; 50 /** HDR output conversion is disabled */ 51 public static final int HDR_CONVERSION_PASSTHROUGH = 1; 52 /** HDR output conversion is managed by the device manufacturer's implementation. */ 53 public static final int HDR_CONVERSION_SYSTEM = 2; 54 /** 55 * HDR output conversion is set by the user. The preferred output type must be 56 * set in this case. 57 */ 58 public static final int HDR_CONVERSION_FORCE = 3; 59 60 /** @hide */ 61 @IntDef(prefix = {"HDR_CONVERSION"}, value = { 62 HDR_CONVERSION_PASSTHROUGH, 63 HDR_CONVERSION_SYSTEM, 64 HDR_CONVERSION_FORCE 65 }) 66 @Retention(RetentionPolicy.SOURCE) 67 public @interface ConversionMode {} 68 69 public static final @NonNull 70 Parcelable.Creator<HdrConversionMode> CREATOR = 71 new Parcelable.Creator<>() { 72 @Override 73 public HdrConversionMode createFromParcel(Parcel source) { 74 return new HdrConversionMode(source); 75 } 76 77 @Override 78 public HdrConversionMode[] newArray(int size) { 79 return new HdrConversionMode[size]; 80 } 81 }; 82 83 private final @ConversionMode int mConversionMode; 84 private @Display.HdrCapabilities.HdrType int mPreferredHdrOutputType; 85 HdrConversionMode(@onversionMode int conversionMode, @Display.HdrCapabilities.HdrType int preferredHdrOutputType)86 public HdrConversionMode(@ConversionMode int conversionMode, 87 @Display.HdrCapabilities.HdrType int preferredHdrOutputType) { 88 if ((conversionMode == HdrConversionMode.HDR_CONVERSION_PASSTHROUGH 89 || conversionMode == HDR_CONVERSION_UNSUPPORTED) 90 && preferredHdrOutputType != Display.HdrCapabilities.HDR_TYPE_INVALID) { 91 throw new IllegalArgumentException("preferredHdrOutputType must not be set if" 92 + " the conversion mode is " + hdrConversionModeString(conversionMode)); 93 } 94 95 mConversionMode = conversionMode; 96 mPreferredHdrOutputType = preferredHdrOutputType; 97 } 98 HdrConversionMode(@onversionMode int conversionMode)99 public HdrConversionMode(@ConversionMode int conversionMode) { 100 mConversionMode = conversionMode; 101 mPreferredHdrOutputType = Display.HdrCapabilities.HDR_TYPE_INVALID; 102 } 103 HdrConversionMode(Parcel source)104 private HdrConversionMode(Parcel source) { 105 this(source.readInt(), source.readInt()); 106 } 107 108 @ConversionMode getConversionMode()109 public int getConversionMode() { 110 return mConversionMode; 111 } 112 113 @Display.HdrCapabilities.HdrType getPreferredHdrOutputType()114 public int getPreferredHdrOutputType() { 115 return mPreferredHdrOutputType; 116 } 117 118 @Override describeContents()119 public int describeContents() { 120 return 0; 121 } 122 123 @Override writeToParcel(@onNull Parcel dest, int flags)124 public void writeToParcel(@NonNull Parcel dest, int flags) { 125 dest.writeInt(mConversionMode); 126 dest.writeInt(mPreferredHdrOutputType); 127 } 128 129 @Override equals(@ullable Object o)130 public boolean equals(@Nullable Object o) { 131 return o instanceof HdrConversionMode && equals((HdrConversionMode) o); 132 } 133 134 @Override hashCode()135 public int hashCode() { 136 return 0; // don't care 137 } 138 139 @Override toString()140 public String toString() { 141 return "HdrConversionMode{ConversionMode=" + hdrConversionModeString(getConversionMode()) 142 + ", PreferredHdrOutputType=" 143 + Display.HdrCapabilities.hdrTypeToString(getPreferredHdrOutputType()) + "}"; 144 } 145 equals(HdrConversionMode other)146 private boolean equals(HdrConversionMode other) { 147 return other != null 148 && mConversionMode == other.getConversionMode() 149 && mPreferredHdrOutputType == other.getPreferredHdrOutputType(); 150 } 151 hdrConversionModeString(@onversionMode int hdrConversionMode)152 private static String hdrConversionModeString(@ConversionMode int hdrConversionMode) { 153 switch (hdrConversionMode) { 154 case HDR_CONVERSION_PASSTHROUGH: 155 return "HDR_CONVERSION_PASSTHROUGH"; 156 case HDR_CONVERSION_SYSTEM: 157 return "HDR_CONVERSION_SYSTEM"; 158 case HDR_CONVERSION_FORCE: 159 return "HDR_CONVERSION_FORCE"; 160 default: 161 return "HDR_CONVERSION_UNSUPPORTED"; 162 } 163 } 164 }