13a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar/* 23a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * Copyright (C) 2016 The Android Open Source Project 33a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * 43a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * Licensed under the Apache License, Version 2.0 (the "License"); 53a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * you may not use this file except in compliance with the License. 63a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * You may obtain a copy of the License at 73a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * 83a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * http://www.apache.org/licenses/LICENSE-2.0 93a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * 103a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * Unless required by applicable law or agreed to in writing, software 113a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * distributed under the License is distributed on an "AS IS" BASIS, 123a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * See the License for the specific language governing permissions and 143a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * limitations under the License. 153a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar */ 163a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 173a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar#ifndef COLOR_UTILS_H_ 183a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 193a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar#define COLOR_UTILS_H_ 203a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 213a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar#include <stdint.h> 223a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 233a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar#define STRINGIFY_ENUMS 243a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 253a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar#include <media/stagefright/foundation/AMessage.h> 263a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 273a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar#include <media/hardware/VideoAPI.h> 283a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar#include <system/graphics.h> 293a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 303a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnarnamespace android { 313a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 323a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnarstruct ColorUtils { 333a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar /* 343a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * Media-platform color constants. MediaCodec uses (an extended version of) platform-defined 353a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * constants that are derived from HAL_DATASPACE, since these are directly exposed to the user. 363a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * We extend the values to maintain the richer set of information defined inside media 373a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * containers and bitstreams that are not supported by the platform. We also expect vendors 383a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * to extend some of these values with vendor-specific values. These are separated into a 393a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * vendor-extension section so they won't collide with future platform values. 403a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar */ 413a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 4204e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar /** 4304e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar * graphic.h constants changed in Android 8.0 after ColorStandard values were already public 4404e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar * in Android 7.0. We will not deal with the break in graphic.h here, but list the public 4504e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar * Android SDK MediaFormat values here. 4604e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar */ 473a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar enum ColorStandard : uint32_t { 4804e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorStandardUnspecified = 0, 4904e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorStandardBT709 = 1, 5004e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorStandardBT601_625 = 2, 5104e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorStandardBT601_625_Unadjusted = 3, // not in SDK 5204e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorStandardBT601_525 = 4, 5304e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorStandardBT601_525_Unadjusted = 5, // not in SDK 5404e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorStandardBT2020 = 6, 5504e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorStandardBT2020Constant = 7, // not in SDK 5604e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorStandardBT470M = 8, // not in SDK 5704e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorStandardFilm = 9, // not in SDK 5804e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorStandardDCI_P3 = 10, // not in SDK, new in Android 8.0 5904e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar 603a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar /* This marks a section of color-standard values that are not supported by graphics HAL, 613a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar but track defined color primaries-matrix coefficient combinations in media. 623a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar These are stable for a given release. */ 6304e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorStandardExtendedStart = 64, 643a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 653a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar /* This marks a section of color-standard values that are not supported by graphics HAL 663a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar nor using media defined color primaries or matrix coefficients. These may differ per 673a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar device. */ 683a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar kColorStandardVendorStart = 0x10000, 693a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar }; 703a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 713a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar enum ColorTransfer : uint32_t { 7204e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorTransferUnspecified = 0, 7304e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorTransferLinear = 1, 7404e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorTransferSRGB = 2, 7536aa5a11bdad24f5ca23df8ea8e02f58df476af1Lajos Molnar kColorTransferSMPTE_170M = 3, // not in SDK 7636aa5a11bdad24f5ca23df8ea8e02f58df476af1Lajos Molnar kColorTransferGamma22 = 4, // not in SDK 7736aa5a11bdad24f5ca23df8ea8e02f58df476af1Lajos Molnar kColorTransferGamma28 = 5, // not in SDK 7836aa5a11bdad24f5ca23df8ea8e02f58df476af1Lajos Molnar kColorTransferST2084 = 6, 7936aa5a11bdad24f5ca23df8ea8e02f58df476af1Lajos Molnar kColorTransferHLG = 7, 8036aa5a11bdad24f5ca23df8ea8e02f58df476af1Lajos Molnar kColorTransferGamma26 = 8, // not in SDK, new in Android 8.0 813a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 823a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar /* This marks a section of color-transfer values that are not supported by graphics HAL, 833a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar but track media-defined color-transfer. These are stable for a given release. */ 8436aa5a11bdad24f5ca23df8ea8e02f58df476af1Lajos Molnar kColorTransferExtendedStart = 32, 853a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 863a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar /* This marks a section of color-transfer values that are not supported by graphics HAL 873a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar nor defined by media. These may differ per device. */ 883a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar kColorTransferVendorStart = 0x10000, 893a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar }; 903a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 913a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar enum ColorRange : uint32_t { 9204e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorRangeUnspecified = 0, 9304e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorRangeFull = 1, 9404e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorRangeLimited = 2, 9504e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar 963a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar /* This marks a section of color-transfer values that are not supported by graphics HAL, 973a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar but track media-defined color-transfer. These are stable for a given release. */ 9804e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar kColorRangeExtendedStart = 8, 993a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 1003a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar /* This marks a section of color-transfer values that are not supported by graphics HAL 1013a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar nor defined by media. These may differ per device. */ 1023a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar kColorRangeVendorStart = 0x10000, 1033a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar }; 1043a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 1053a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar /* 1063a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar * Static utilities for codec support 1073a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar */ 1083a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 1093a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar // using int32_t for media range/standard/transfers to denote extended ranges 1103a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar // wrap methods change invalid aspects to the Unspecified value 1113a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar static int32_t wrapColorAspectsIntoColorStandard( 1123a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar ColorAspects::Primaries primaries, ColorAspects::MatrixCoeffs coeffs); 1133a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar static int32_t wrapColorAspectsIntoColorRange(ColorAspects::Range range); 1143a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar static int32_t wrapColorAspectsIntoColorTransfer(ColorAspects::Transfer transfer); 1153a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 1163a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar // unwrap methods change invalid aspects to the Other value 1173a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar static status_t unwrapColorAspectsFromColorRange( 1183a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar int32_t range, ColorAspects::Range *aspect); 1193a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar static status_t unwrapColorAspectsFromColorTransfer( 1203a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar int32_t transfer, ColorAspects::Transfer *aspect); 1213a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar static status_t unwrapColorAspectsFromColorStandard( 1223a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar int32_t standard, 1233a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar ColorAspects::Primaries *primaries, ColorAspects::MatrixCoeffs *coeffs); 1243a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 1253a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar static status_t convertPlatformColorAspectsToCodecAspects( 1263a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar int32_t range, int32_t standard, int32_t transfer, ColorAspects &aspects); 1273a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar static status_t convertCodecColorAspectsToPlatformAspects( 1283a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar const ColorAspects &aspects, int32_t *range, int32_t *standard, int32_t *transfer); 1293a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 13058fb7c6e1a9244dd7215a647388c440d8d75851bLajos Molnar // converts Other values to Unspecified 13158fb7c6e1a9244dd7215a647388c440d8d75851bLajos Molnar static void convertCodecColorAspectsToIsoAspects( 13258fb7c6e1a9244dd7215a647388c440d8d75851bLajos Molnar const ColorAspects &aspects, 13358fb7c6e1a9244dd7215a647388c440d8d75851bLajos Molnar int32_t *primaries, int32_t *transfer, int32_t *coeffs, bool *fullRange); 13458fb7c6e1a9244dd7215a647388c440d8d75851bLajos Molnar // converts unsupported values to Other 13558fb7c6e1a9244dd7215a647388c440d8d75851bLajos Molnar static void convertIsoColorAspectsToCodecAspects( 13658fb7c6e1a9244dd7215a647388c440d8d75851bLajos Molnar int32_t primaries, int32_t transfer, int32_t coeffs, bool fullRange, 13758fb7c6e1a9244dd7215a647388c440d8d75851bLajos Molnar ColorAspects &aspects); 13858fb7c6e1a9244dd7215a647388c440d8d75851bLajos Molnar 1396cf9a1238986880536de705255f7c2c91c1ba719Chong Zhang // unpack a uint32_t to a full ColorAspects struct 1406cf9a1238986880536de705255f7c2c91c1ba719Chong Zhang static ColorAspects unpackToColorAspects(uint32_t packed); 1416cf9a1238986880536de705255f7c2c91c1ba719Chong Zhang 1426cf9a1238986880536de705255f7c2c91c1ba719Chong Zhang // pack a full ColorAspects struct into a uint32_t 1436cf9a1238986880536de705255f7c2c91c1ba719Chong Zhang static uint32_t packToU32(const ColorAspects &aspects); 1446cf9a1238986880536de705255f7c2c91c1ba719Chong Zhang 145b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar // updates Unspecified color aspects to their defaults based on the video size 1463a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar static void setDefaultCodecColorAspectsIfNeeded( 1473a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar ColorAspects &aspects, int32_t width, int32_t height); 148b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar 149b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar // it returns the closest dataSpace for given color |aspects|. if |mayExpand| is true, it allows 150b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar // returning a larger dataSpace that contains the color space given by |aspects|, and is better 151b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar // suited to blending. This requires implicit color space conversion on part of the device. 152b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar static android_dataspace getDataSpaceForColorAspects(ColorAspects &aspects, bool mayExpand); 153b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar 154b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar // converts |dataSpace| to a V0 enum, and returns true if dataSpace is an aspect-only value 155b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar static bool convertDataSpaceToV0(android_dataspace &dataSpace); 156b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar 157b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar // compares |aspect| to |orig|. Returns |true| if any aspects have changed, except if they 158b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar // changed to Unspecified value. It also sets the changed values to Unspecified in |aspect|. 159b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar static bool checkIfAspectsChangedAndUnspecifyThem( 160b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar ColorAspects &aspects, const ColorAspects &orig, bool usePlatformAspects = false); 161b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar 162b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar // finds color config in format, defaulting them to 0. 163b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar static void getColorConfigFromFormat( 164b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar const sp<AMessage> &format, int *range, int *standard, int *transfer); 165b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar 166b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar // copies existing color config from |source| to |target|. 167b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar static void copyColorConfig(const sp<AMessage> &source, sp<AMessage> &target); 168b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar 169b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar // finds color config in format as ColorAspects, defaulting them to 0. 170b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar static void getColorAspectsFromFormat(const sp<AMessage> &format, ColorAspects &aspects); 171b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar 172b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar // writes |aspects| into format. iff |force| is false, Unspecified values are not 173b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar // written. 174b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar static void setColorAspectsIntoFormat( 175b77d03b62cb743d0faf74b54aa466b4d220b5e61Lajos Molnar const ColorAspects &aspects, sp<AMessage> &format, bool force = false); 176db318d40b90a456311b3920c605e33b763ca79f9Hangyu Kuang 177db318d40b90a456311b3920c605e33b763ca79f9Hangyu Kuang // finds HDR metadata in format as HDRStaticInfo, defaulting them to 0. 178db318d40b90a456311b3920c605e33b763ca79f9Hangyu Kuang // Return |true| if could find HDR metadata in format. Otherwise, return |false|. 179db318d40b90a456311b3920c605e33b763ca79f9Hangyu Kuang static bool getHDRStaticInfoFromFormat(const sp<AMessage> &format, HDRStaticInfo *info); 180db318d40b90a456311b3920c605e33b763ca79f9Hangyu Kuang 181db318d40b90a456311b3920c605e33b763ca79f9Hangyu Kuang // writes |info| into format. 182db318d40b90a456311b3920c605e33b763ca79f9Hangyu Kuang static void setHDRStaticInfoIntoFormat(const HDRStaticInfo &info, sp<AMessage> &format); 1833a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar}; 1843a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 1853a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnarinline static const char *asString(android::ColorUtils::ColorStandard i, const char *def = "??") { 1863a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar using namespace android; 1873a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar switch (i) { 1883a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorStandardUnspecified: return "Unspecified"; 1893a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorStandardBT709: return "BT709"; 1903a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorStandardBT601_625: return "BT601_625"; 1913a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorStandardBT601_625_Unadjusted: return "BT601_625_Unadjusted"; 1923a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorStandardBT601_525: return "BT601_525"; 1933a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorStandardBT601_525_Unadjusted: return "BT601_525_Unadjusted"; 1943a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorStandardBT2020: return "BT2020"; 1953a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorStandardBT2020Constant: return "BT2020Constant"; 1963a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorStandardBT470M: return "BT470M"; 1973a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorStandardFilm: return "Film"; 19804e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar case ColorUtils::kColorStandardDCI_P3: return "DCI_P3"; 19904e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar default: return def; 2003a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar } 2013a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar} 2023a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 2033a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnarinline static const char *asString(android::ColorUtils::ColorTransfer i, const char *def = "??") { 2043a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar using namespace android; 2053a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar switch (i) { 2063a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorTransferUnspecified: return "Unspecified"; 2073a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorTransferLinear: return "Linear"; 2083a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorTransferSRGB: return "SRGB"; 2093a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorTransferSMPTE_170M: return "SMPTE_170M"; 2103a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorTransferGamma22: return "Gamma22"; 2113a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorTransferGamma28: return "Gamma28"; 2123a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorTransferST2084: return "ST2084"; 2133a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorTransferHLG: return "HLG"; 21436aa5a11bdad24f5ca23df8ea8e02f58df476af1Lajos Molnar case ColorUtils::kColorTransferGamma26: return "Gamma26"; 21504e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar default: return def; 21604e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar } 21704e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar} 21804e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar 2193a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnarinline static const char *asString(android::ColorUtils::ColorRange i, const char *def = "??") { 2203a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar using namespace android; 2213a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar switch (i) { 2223a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorRangeUnspecified: return "Unspecified"; 2233a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorRangeFull: return "Full"; 2243a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar case ColorUtils::kColorRangeLimited: return "Limited"; 22504e0a45ef725ec2e34a7f579fba19d43941b924eLajos Molnar default: return def; 2263a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar } 2273a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar} 2283a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 2293a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar} // namespace android 2303a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 2313a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar#endif // COLOR_UTILS_H_ 2323a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 233