1*38e8c45fSAndroid Build Coastguard Worker /* 2*38e8c45fSAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project 3*38e8c45fSAndroid Build Coastguard Worker * 4*38e8c45fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*38e8c45fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*38e8c45fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*38e8c45fSAndroid Build Coastguard Worker * 8*38e8c45fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*38e8c45fSAndroid Build Coastguard Worker * 10*38e8c45fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*38e8c45fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*38e8c45fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*38e8c45fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*38e8c45fSAndroid Build Coastguard Worker * limitations under the License. 15*38e8c45fSAndroid Build Coastguard Worker */ 16*38e8c45fSAndroid Build Coastguard Worker 17*38e8c45fSAndroid Build Coastguard Worker #ifndef VIDEO_API_H_ 18*38e8c45fSAndroid Build Coastguard Worker 19*38e8c45fSAndroid Build Coastguard Worker #define VIDEO_API_H_ 20*38e8c45fSAndroid Build Coastguard Worker 21*38e8c45fSAndroid Build Coastguard Worker namespace android { 22*38e8c45fSAndroid Build Coastguard Worker 23*38e8c45fSAndroid Build Coastguard Worker /** 24*38e8c45fSAndroid Build Coastguard Worker * Structure describing a media image (frame) 25*38e8c45fSAndroid Build Coastguard Worker * Currently only supporting YUV 26*38e8c45fSAndroid Build Coastguard Worker * @deprecated. Use MediaImage2 instead 27*38e8c45fSAndroid Build Coastguard Worker */ 28*38e8c45fSAndroid Build Coastguard Worker struct MediaImage { 29*38e8c45fSAndroid Build Coastguard Worker enum Type { 30*38e8c45fSAndroid Build Coastguard Worker MEDIA_IMAGE_TYPE_UNKNOWN = 0, 31*38e8c45fSAndroid Build Coastguard Worker MEDIA_IMAGE_TYPE_YUV, 32*38e8c45fSAndroid Build Coastguard Worker }; 33*38e8c45fSAndroid Build Coastguard Worker 34*38e8c45fSAndroid Build Coastguard Worker enum PlaneIndex { 35*38e8c45fSAndroid Build Coastguard Worker Y = 0, 36*38e8c45fSAndroid Build Coastguard Worker U, 37*38e8c45fSAndroid Build Coastguard Worker V, 38*38e8c45fSAndroid Build Coastguard Worker MAX_NUM_PLANES 39*38e8c45fSAndroid Build Coastguard Worker }; 40*38e8c45fSAndroid Build Coastguard Worker 41*38e8c45fSAndroid Build Coastguard Worker Type mType; 42*38e8c45fSAndroid Build Coastguard Worker uint32_t mNumPlanes; // number of planes 43*38e8c45fSAndroid Build Coastguard Worker uint32_t mWidth; // width of largest plane (unpadded, as in nFrameWidth) 44*38e8c45fSAndroid Build Coastguard Worker uint32_t mHeight; // height of largest plane (unpadded, as in nFrameHeight) 45*38e8c45fSAndroid Build Coastguard Worker uint32_t mBitDepth; // useable bit depth 46*38e8c45fSAndroid Build Coastguard Worker struct PlaneInfo { 47*38e8c45fSAndroid Build Coastguard Worker uint32_t mOffset; // offset of first pixel of the plane in bytes 48*38e8c45fSAndroid Build Coastguard Worker // from buffer offset 49*38e8c45fSAndroid Build Coastguard Worker uint32_t mColInc; // column increment in bytes 50*38e8c45fSAndroid Build Coastguard Worker uint32_t mRowInc; // row increment in bytes 51*38e8c45fSAndroid Build Coastguard Worker uint32_t mHorizSubsampling; // subsampling compared to the largest plane 52*38e8c45fSAndroid Build Coastguard Worker uint32_t mVertSubsampling; // subsampling compared to the largest plane 53*38e8c45fSAndroid Build Coastguard Worker }; 54*38e8c45fSAndroid Build Coastguard Worker PlaneInfo mPlane[MAX_NUM_PLANES]; 55*38e8c45fSAndroid Build Coastguard Worker }; 56*38e8c45fSAndroid Build Coastguard Worker 57*38e8c45fSAndroid Build Coastguard Worker /** 58*38e8c45fSAndroid Build Coastguard Worker * Structure describing a media image (frame) 59*38e8c45fSAndroid Build Coastguard Worker */ 60*38e8c45fSAndroid Build Coastguard Worker struct __attribute__ ((__packed__)) MediaImage2 { 61*38e8c45fSAndroid Build Coastguard Worker enum Type : uint32_t { 62*38e8c45fSAndroid Build Coastguard Worker MEDIA_IMAGE_TYPE_UNKNOWN = 0, 63*38e8c45fSAndroid Build Coastguard Worker MEDIA_IMAGE_TYPE_YUV, 64*38e8c45fSAndroid Build Coastguard Worker MEDIA_IMAGE_TYPE_YUVA, 65*38e8c45fSAndroid Build Coastguard Worker MEDIA_IMAGE_TYPE_RGB, 66*38e8c45fSAndroid Build Coastguard Worker MEDIA_IMAGE_TYPE_RGBA, 67*38e8c45fSAndroid Build Coastguard Worker MEDIA_IMAGE_TYPE_Y, 68*38e8c45fSAndroid Build Coastguard Worker }; 69*38e8c45fSAndroid Build Coastguard Worker 70*38e8c45fSAndroid Build Coastguard Worker enum PlaneIndex : uint32_t { 71*38e8c45fSAndroid Build Coastguard Worker Y = 0, 72*38e8c45fSAndroid Build Coastguard Worker U = 1, 73*38e8c45fSAndroid Build Coastguard Worker V = 2, 74*38e8c45fSAndroid Build Coastguard Worker R = 0, 75*38e8c45fSAndroid Build Coastguard Worker G = 1, 76*38e8c45fSAndroid Build Coastguard Worker B = 2, 77*38e8c45fSAndroid Build Coastguard Worker A = 3, 78*38e8c45fSAndroid Build Coastguard Worker MAX_NUM_PLANES = 4, 79*38e8c45fSAndroid Build Coastguard Worker }; 80*38e8c45fSAndroid Build Coastguard Worker 81*38e8c45fSAndroid Build Coastguard Worker Type mType; 82*38e8c45fSAndroid Build Coastguard Worker uint32_t mNumPlanes; // number of planes 83*38e8c45fSAndroid Build Coastguard Worker uint32_t mWidth; // width of largest plane (unpadded, as in nFrameWidth) 84*38e8c45fSAndroid Build Coastguard Worker uint32_t mHeight; // height of largest plane (unpadded, as in nFrameHeight) 85*38e8c45fSAndroid Build Coastguard Worker uint32_t mBitDepth; // useable bit depth (always MSB) 86*38e8c45fSAndroid Build Coastguard Worker uint32_t mBitDepthAllocated; // bits per component (must be 8 or 16) 87*38e8c45fSAndroid Build Coastguard Worker 88*38e8c45fSAndroid Build Coastguard Worker struct __attribute__ ((__packed__)) PlaneInfo { 89*38e8c45fSAndroid Build Coastguard Worker uint32_t mOffset; // offset of first pixel of the plane in bytes 90*38e8c45fSAndroid Build Coastguard Worker // from buffer offset 91*38e8c45fSAndroid Build Coastguard Worker int32_t mColInc; // column increment in bytes 92*38e8c45fSAndroid Build Coastguard Worker int32_t mRowInc; // row increment in bytes 93*38e8c45fSAndroid Build Coastguard Worker uint32_t mHorizSubsampling; // subsampling compared to the largest plane 94*38e8c45fSAndroid Build Coastguard Worker uint32_t mVertSubsampling; // subsampling compared to the largest plane 95*38e8c45fSAndroid Build Coastguard Worker }; 96*38e8c45fSAndroid Build Coastguard Worker PlaneInfo mPlane[MAX_NUM_PLANES]; 97*38e8c45fSAndroid Build Coastguard Worker 98*38e8c45fSAndroid Build Coastguard Worker void initFromV1(const MediaImage&); // for internal use only 99*38e8c45fSAndroid Build Coastguard Worker }; 100*38e8c45fSAndroid Build Coastguard Worker 101*38e8c45fSAndroid Build Coastguard Worker static_assert(sizeof(MediaImage2::PlaneInfo) == 20, "wrong struct size"); 102*38e8c45fSAndroid Build Coastguard Worker static_assert(sizeof(MediaImage2) == 104, "wrong struct size"); 103*38e8c45fSAndroid Build Coastguard Worker 104*38e8c45fSAndroid Build Coastguard Worker /** 105*38e8c45fSAndroid Build Coastguard Worker * Aspects of color. 106*38e8c45fSAndroid Build Coastguard Worker */ 107*38e8c45fSAndroid Build Coastguard Worker 108*38e8c45fSAndroid Build Coastguard Worker // NOTE: this structure is expected to grow in the future if new color aspects are 109*38e8c45fSAndroid Build Coastguard Worker // added to codec bitstreams. OMX component should not require a specific nSize 110*38e8c45fSAndroid Build Coastguard Worker // though could verify that nSize is at least the size of the structure at the 111*38e8c45fSAndroid Build Coastguard Worker // time of implementation. All new fields will be added at the end of the structure 112*38e8c45fSAndroid Build Coastguard Worker // ensuring backward compatibility. 113*38e8c45fSAndroid Build Coastguard Worker struct __attribute__ ((__packed__, aligned(alignof(uint32_t)))) ColorAspects { 114*38e8c45fSAndroid Build Coastguard Worker // this is in sync with the range values in graphics.h 115*38e8c45fSAndroid Build Coastguard Worker enum Range : uint32_t { 116*38e8c45fSAndroid Build Coastguard Worker RangeUnspecified, 117*38e8c45fSAndroid Build Coastguard Worker RangeFull, 118*38e8c45fSAndroid Build Coastguard Worker RangeLimited, 119*38e8c45fSAndroid Build Coastguard Worker RangeOther = 0xff, 120*38e8c45fSAndroid Build Coastguard Worker }; 121*38e8c45fSAndroid Build Coastguard Worker 122*38e8c45fSAndroid Build Coastguard Worker enum Primaries : uint32_t { 123*38e8c45fSAndroid Build Coastguard Worker PrimariesUnspecified, 124*38e8c45fSAndroid Build Coastguard Worker PrimariesBT709_5, // Rec.ITU-R BT.709-5 or equivalent 125*38e8c45fSAndroid Build Coastguard Worker PrimariesBT470_6M, // Rec.ITU-R BT.470-6 System M or equivalent 126*38e8c45fSAndroid Build Coastguard Worker PrimariesBT601_6_625, // Rec.ITU-R BT.601-6 625 or equivalent 127*38e8c45fSAndroid Build Coastguard Worker PrimariesBT601_6_525, // Rec.ITU-R BT.601-6 525 or equivalent 128*38e8c45fSAndroid Build Coastguard Worker PrimariesGenericFilm, // Generic Film 129*38e8c45fSAndroid Build Coastguard Worker PrimariesBT2020, // Rec.ITU-R BT.2020 or equivalent 130*38e8c45fSAndroid Build Coastguard Worker PrimariesRP431, // SMPTE RP 431-2 (DCI P3) 131*38e8c45fSAndroid Build Coastguard Worker PrimariesEG432, // SMPTE EG 432-1 (Display P3) 132*38e8c45fSAndroid Build Coastguard Worker PrimariesOther = 0xff, 133*38e8c45fSAndroid Build Coastguard Worker }; 134*38e8c45fSAndroid Build Coastguard Worker 135*38e8c45fSAndroid Build Coastguard Worker // this partially in sync with the transfer values in graphics.h prior to the transfers 136*38e8c45fSAndroid Build Coastguard Worker // unlikely to be required by Android section 137*38e8c45fSAndroid Build Coastguard Worker enum Transfer : uint32_t { 138*38e8c45fSAndroid Build Coastguard Worker TransferUnspecified, 139*38e8c45fSAndroid Build Coastguard Worker TransferLinear, // Linear transfer characteristics 140*38e8c45fSAndroid Build Coastguard Worker TransferSRGB, // sRGB or equivalent 141*38e8c45fSAndroid Build Coastguard Worker TransferSMPTE170M, // SMPTE 170M or equivalent (e.g. BT.601/709/2020) 142*38e8c45fSAndroid Build Coastguard Worker TransferGamma22, // Assumed display gamma 2.2 143*38e8c45fSAndroid Build Coastguard Worker TransferGamma28, // Assumed display gamma 2.8 144*38e8c45fSAndroid Build Coastguard Worker TransferST2084, // SMPTE ST 2084 for 10/12/14/16 bit systems 145*38e8c45fSAndroid Build Coastguard Worker TransferHLG, // ARIB STD-B67 hybrid-log-gamma 146*38e8c45fSAndroid Build Coastguard Worker 147*38e8c45fSAndroid Build Coastguard Worker // transfers unlikely to be required by Android 148*38e8c45fSAndroid Build Coastguard Worker TransferSMPTE240M = 0x40, // SMPTE 240M 149*38e8c45fSAndroid Build Coastguard Worker TransferXvYCC, // IEC 61966-2-4 150*38e8c45fSAndroid Build Coastguard Worker TransferBT1361, // Rec.ITU-R BT.1361 extended gamut 151*38e8c45fSAndroid Build Coastguard Worker TransferST428, // SMPTE ST 428-1 152*38e8c45fSAndroid Build Coastguard Worker TransferOther = 0xff, 153*38e8c45fSAndroid Build Coastguard Worker }; 154*38e8c45fSAndroid Build Coastguard Worker 155*38e8c45fSAndroid Build Coastguard Worker enum MatrixCoeffs : uint32_t { 156*38e8c45fSAndroid Build Coastguard Worker MatrixUnspecified, 157*38e8c45fSAndroid Build Coastguard Worker MatrixBT709_5, // Rec.ITU-R BT.709-5 or equivalent 158*38e8c45fSAndroid Build Coastguard Worker MatrixBT470_6M, // KR=0.30, KB=0.11 or equivalent 159*38e8c45fSAndroid Build Coastguard Worker MatrixBT601_6, // Rec.ITU-R BT.601-6 625 or equivalent 160*38e8c45fSAndroid Build Coastguard Worker MatrixSMPTE240M, // SMPTE 240M or equivalent 161*38e8c45fSAndroid Build Coastguard Worker MatrixBT2020, // Rec.ITU-R BT.2020 non-constant luminance 162*38e8c45fSAndroid Build Coastguard Worker MatrixBT2020Constant, // Rec.ITU-R BT.2020 constant luminance 163*38e8c45fSAndroid Build Coastguard Worker MatrixOther = 0xff, 164*38e8c45fSAndroid Build Coastguard Worker }; 165*38e8c45fSAndroid Build Coastguard Worker 166*38e8c45fSAndroid Build Coastguard Worker // this is in sync with the standard values in graphics.h 167*38e8c45fSAndroid Build Coastguard Worker enum Standard : uint32_t { 168*38e8c45fSAndroid Build Coastguard Worker StandardUnspecified, 169*38e8c45fSAndroid Build Coastguard Worker StandardBT709, // PrimariesBT709_5 and MatrixBT709_5 170*38e8c45fSAndroid Build Coastguard Worker StandardBT601_625, // PrimariesBT601_6_625 and MatrixBT601_6 171*38e8c45fSAndroid Build Coastguard Worker StandardBT601_625_Unadjusted, // PrimariesBT601_6_625 and KR=0.222, KB=0.071 172*38e8c45fSAndroid Build Coastguard Worker StandardBT601_525, // PrimariesBT601_6_525 and MatrixBT601_6 173*38e8c45fSAndroid Build Coastguard Worker StandardBT601_525_Unadjusted, // PrimariesBT601_6_525 and MatrixSMPTE240M 174*38e8c45fSAndroid Build Coastguard Worker StandardBT2020, // PrimariesBT2020 and MatrixBT2020 175*38e8c45fSAndroid Build Coastguard Worker StandardBT2020Constant, // PrimariesBT2020 and MatrixBT2020Constant 176*38e8c45fSAndroid Build Coastguard Worker StandardBT470M, // PrimariesBT470_6M and MatrixBT470_6M 177*38e8c45fSAndroid Build Coastguard Worker StandardFilm, // PrimariesGenericFilm and KR=0.253, KB=0.068 178*38e8c45fSAndroid Build Coastguard Worker StandardDisplayP3, // PrimariesEG432 and MatrixBT601_6 179*38e8c45fSAndroid Build Coastguard Worker // StandardAdobeRGB, // for placeholder only (not used by media) 180*38e8c45fSAndroid Build Coastguard Worker StandardOther = 0xff, 181*38e8c45fSAndroid Build Coastguard Worker }; 182*38e8c45fSAndroid Build Coastguard Worker 183*38e8c45fSAndroid Build Coastguard Worker Range mRange; // IN/OUT 184*38e8c45fSAndroid Build Coastguard Worker Primaries mPrimaries; // IN/OUT 185*38e8c45fSAndroid Build Coastguard Worker Transfer mTransfer; // IN/OUT 186*38e8c45fSAndroid Build Coastguard Worker MatrixCoeffs mMatrixCoeffs; // IN/OUT 187*38e8c45fSAndroid Build Coastguard Worker }; 188*38e8c45fSAndroid Build Coastguard Worker 189*38e8c45fSAndroid Build Coastguard Worker static_assert(sizeof(ColorAspects) == 16, "wrong struct size"); 190*38e8c45fSAndroid Build Coastguard Worker 191*38e8c45fSAndroid Build Coastguard Worker /** 192*38e8c45fSAndroid Build Coastguard Worker * HDR Metadata. 193*38e8c45fSAndroid Build Coastguard Worker */ 194*38e8c45fSAndroid Build Coastguard Worker 195*38e8c45fSAndroid Build Coastguard Worker // HDR Static Metadata Descriptor as defined by CTA-861-3. 196*38e8c45fSAndroid Build Coastguard Worker struct __attribute__ ((__packed__)) HDRStaticInfo { 197*38e8c45fSAndroid Build Coastguard Worker // Static_Metadata_Descriptor_ID 198*38e8c45fSAndroid Build Coastguard Worker enum ID : uint8_t { 199*38e8c45fSAndroid Build Coastguard Worker kType1 = 0, // Static Metadata Type 1 200*38e8c45fSAndroid Build Coastguard Worker } mID; 201*38e8c45fSAndroid Build Coastguard Worker 202*38e8c45fSAndroid Build Coastguard Worker struct __attribute__ ((__packed__)) Primaries1 { 203*38e8c45fSAndroid Build Coastguard Worker // values are in units of 0.00002 204*38e8c45fSAndroid Build Coastguard Worker uint16_t x; 205*38e8c45fSAndroid Build Coastguard Worker uint16_t y; 206*38e8c45fSAndroid Build Coastguard Worker }; 207*38e8c45fSAndroid Build Coastguard Worker 208*38e8c45fSAndroid Build Coastguard Worker // Static Metadata Descriptor Type 1 209*38e8c45fSAndroid Build Coastguard Worker struct __attribute__ ((__packed__)) Type1 { 210*38e8c45fSAndroid Build Coastguard Worker Primaries1 mR; // display primary 0 211*38e8c45fSAndroid Build Coastguard Worker Primaries1 mG; // display primary 1 212*38e8c45fSAndroid Build Coastguard Worker Primaries1 mB; // display primary 2 213*38e8c45fSAndroid Build Coastguard Worker Primaries1 mW; // white point 214*38e8c45fSAndroid Build Coastguard Worker uint16_t mMaxDisplayLuminance; // in cd/m^2 215*38e8c45fSAndroid Build Coastguard Worker uint16_t mMinDisplayLuminance; // in 0.0001 cd/m^2 216*38e8c45fSAndroid Build Coastguard Worker uint16_t mMaxContentLightLevel; // in cd/m^2 217*38e8c45fSAndroid Build Coastguard Worker uint16_t mMaxFrameAverageLightLevel; // in cd/m^2 218*38e8c45fSAndroid Build Coastguard Worker }; 219*38e8c45fSAndroid Build Coastguard Worker 220*38e8c45fSAndroid Build Coastguard Worker union { 221*38e8c45fSAndroid Build Coastguard Worker Type1 sType1; 222*38e8c45fSAndroid Build Coastguard Worker }; 223*38e8c45fSAndroid Build Coastguard Worker }; 224*38e8c45fSAndroid Build Coastguard Worker 225*38e8c45fSAndroid Build Coastguard Worker static_assert(sizeof(HDRStaticInfo::Primaries1) == 4, "wrong struct size"); 226*38e8c45fSAndroid Build Coastguard Worker static_assert(sizeof(HDRStaticInfo::Type1) == 24, "wrong struct size"); 227*38e8c45fSAndroid Build Coastguard Worker static_assert(sizeof(HDRStaticInfo) == 25, "wrong struct size"); 228*38e8c45fSAndroid Build Coastguard Worker 229*38e8c45fSAndroid Build Coastguard Worker #ifdef STRINGIFY_ENUMS 230*38e8c45fSAndroid Build Coastguard Worker 231*38e8c45fSAndroid Build Coastguard Worker inline static const char *asString(MediaImage::Type i, const char *def = "??") { 232*38e8c45fSAndroid Build Coastguard Worker switch (i) { 233*38e8c45fSAndroid Build Coastguard Worker case MediaImage::MEDIA_IMAGE_TYPE_UNKNOWN: return "Unknown"; 234*38e8c45fSAndroid Build Coastguard Worker case MediaImage::MEDIA_IMAGE_TYPE_YUV: return "YUV"; 235*38e8c45fSAndroid Build Coastguard Worker default: return def; 236*38e8c45fSAndroid Build Coastguard Worker } 237*38e8c45fSAndroid Build Coastguard Worker } 238*38e8c45fSAndroid Build Coastguard Worker 239*38e8c45fSAndroid Build Coastguard Worker inline static const char *asString(MediaImage::PlaneIndex i, const char *def = "??") { 240*38e8c45fSAndroid Build Coastguard Worker switch (i) { 241*38e8c45fSAndroid Build Coastguard Worker case MediaImage::Y: return "Y"; 242*38e8c45fSAndroid Build Coastguard Worker case MediaImage::U: return "U"; 243*38e8c45fSAndroid Build Coastguard Worker case MediaImage::V: return "V"; 244*38e8c45fSAndroid Build Coastguard Worker default: return def; 245*38e8c45fSAndroid Build Coastguard Worker } 246*38e8c45fSAndroid Build Coastguard Worker } 247*38e8c45fSAndroid Build Coastguard Worker 248*38e8c45fSAndroid Build Coastguard Worker inline static const char *asString(MediaImage2::Type i, const char *def = "??") { 249*38e8c45fSAndroid Build Coastguard Worker switch (i) { 250*38e8c45fSAndroid Build Coastguard Worker case MediaImage2::MEDIA_IMAGE_TYPE_UNKNOWN: return "Unknown"; 251*38e8c45fSAndroid Build Coastguard Worker case MediaImage2::MEDIA_IMAGE_TYPE_YUV: return "YUV"; 252*38e8c45fSAndroid Build Coastguard Worker case MediaImage2::MEDIA_IMAGE_TYPE_YUVA: return "YUVA"; 253*38e8c45fSAndroid Build Coastguard Worker case MediaImage2::MEDIA_IMAGE_TYPE_RGB: return "RGB"; 254*38e8c45fSAndroid Build Coastguard Worker case MediaImage2::MEDIA_IMAGE_TYPE_RGBA: return "RGBA"; 255*38e8c45fSAndroid Build Coastguard Worker case MediaImage2::MEDIA_IMAGE_TYPE_Y: return "Y"; 256*38e8c45fSAndroid Build Coastguard Worker default: return def; 257*38e8c45fSAndroid Build Coastguard Worker } 258*38e8c45fSAndroid Build Coastguard Worker } 259*38e8c45fSAndroid Build Coastguard Worker 260*38e8c45fSAndroid Build Coastguard Worker inline static char asChar2( 261*38e8c45fSAndroid Build Coastguard Worker MediaImage2::PlaneIndex i, MediaImage2::Type j, char def = '?') { 262*38e8c45fSAndroid Build Coastguard Worker const char *planes = asString(j, NULL); 263*38e8c45fSAndroid Build Coastguard Worker // handle unknown values 264*38e8c45fSAndroid Build Coastguard Worker if (j == MediaImage2::MEDIA_IMAGE_TYPE_UNKNOWN || planes == NULL || i >= strlen(planes)) { 265*38e8c45fSAndroid Build Coastguard Worker return def; 266*38e8c45fSAndroid Build Coastguard Worker } 267*38e8c45fSAndroid Build Coastguard Worker return planes[i]; 268*38e8c45fSAndroid Build Coastguard Worker } 269*38e8c45fSAndroid Build Coastguard Worker 270*38e8c45fSAndroid Build Coastguard Worker inline static const char *asString(ColorAspects::Range i, const char *def = "??") { 271*38e8c45fSAndroid Build Coastguard Worker switch (i) { 272*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::RangeUnspecified: return "Unspecified"; 273*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::RangeFull: return "Full"; 274*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::RangeLimited: return "Limited"; 275*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::RangeOther: return "Other"; 276*38e8c45fSAndroid Build Coastguard Worker default: return def; 277*38e8c45fSAndroid Build Coastguard Worker } 278*38e8c45fSAndroid Build Coastguard Worker } 279*38e8c45fSAndroid Build Coastguard Worker 280*38e8c45fSAndroid Build Coastguard Worker inline static const char *asString(ColorAspects::Primaries i, const char *def = "??") { 281*38e8c45fSAndroid Build Coastguard Worker switch (i) { 282*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::PrimariesUnspecified: return "Unspecified"; 283*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::PrimariesBT709_5: return "BT709_5"; 284*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::PrimariesBT470_6M: return "BT470_6M"; 285*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::PrimariesBT601_6_625: return "BT601_6_625"; 286*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::PrimariesBT601_6_525: return "BT601_6_525"; 287*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::PrimariesGenericFilm: return "GenericFilm"; 288*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::PrimariesBT2020: return "BT2020"; 289*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::PrimariesRP431: return "RP431"; 290*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::PrimariesEG432: return "EG432"; 291*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::PrimariesOther: return "Other"; 292*38e8c45fSAndroid Build Coastguard Worker default: return def; 293*38e8c45fSAndroid Build Coastguard Worker } 294*38e8c45fSAndroid Build Coastguard Worker } 295*38e8c45fSAndroid Build Coastguard Worker 296*38e8c45fSAndroid Build Coastguard Worker inline static const char *asString(ColorAspects::Transfer i, const char *def = "??") { 297*38e8c45fSAndroid Build Coastguard Worker switch (i) { 298*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::TransferUnspecified: return "Unspecified"; 299*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::TransferLinear: return "Linear"; 300*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::TransferSRGB: return "SRGB"; 301*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::TransferSMPTE170M: return "SMPTE170M"; 302*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::TransferGamma22: return "Gamma22"; 303*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::TransferGamma28: return "Gamma28"; 304*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::TransferST2084: return "ST2084"; 305*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::TransferHLG: return "HLG"; 306*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::TransferSMPTE240M: return "SMPTE240M"; 307*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::TransferXvYCC: return "XvYCC"; 308*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::TransferBT1361: return "BT1361"; 309*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::TransferST428: return "ST428"; 310*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::TransferOther: return "Other"; 311*38e8c45fSAndroid Build Coastguard Worker default: return def; 312*38e8c45fSAndroid Build Coastguard Worker } 313*38e8c45fSAndroid Build Coastguard Worker } 314*38e8c45fSAndroid Build Coastguard Worker 315*38e8c45fSAndroid Build Coastguard Worker inline static const char *asString(ColorAspects::MatrixCoeffs i, const char *def = "??") { 316*38e8c45fSAndroid Build Coastguard Worker switch (i) { 317*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::MatrixUnspecified: return "Unspecified"; 318*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::MatrixBT709_5: return "BT709_5"; 319*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::MatrixBT470_6M: return "BT470_6M"; 320*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::MatrixBT601_6: return "BT601_6"; 321*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::MatrixSMPTE240M: return "SMPTE240M"; 322*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::MatrixBT2020: return "BT2020"; 323*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::MatrixBT2020Constant: return "BT2020Constant"; 324*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::MatrixOther: return "Other"; 325*38e8c45fSAndroid Build Coastguard Worker default: return def; 326*38e8c45fSAndroid Build Coastguard Worker } 327*38e8c45fSAndroid Build Coastguard Worker } 328*38e8c45fSAndroid Build Coastguard Worker 329*38e8c45fSAndroid Build Coastguard Worker inline static const char *asString(ColorAspects::Standard i, const char *def = "??") { 330*38e8c45fSAndroid Build Coastguard Worker switch (i) { 331*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::StandardUnspecified: return "Unspecified"; 332*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::StandardBT709: return "BT709"; 333*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::StandardBT601_625: return "BT601_625"; 334*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::StandardBT601_625_Unadjusted: return "BT601_625_Unadjusted"; 335*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::StandardBT601_525: return "BT601_525"; 336*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::StandardBT601_525_Unadjusted: return "BT601_525_Unadjusted"; 337*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::StandardBT2020: return "BT2020"; 338*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::StandardBT2020Constant: return "BT2020Constant"; 339*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::StandardBT470M: return "BT470M"; 340*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::StandardFilm: return "Film"; 341*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::StandardDisplayP3: return "DisplayP3"; 342*38e8c45fSAndroid Build Coastguard Worker // case ColorAspects::StandardAdobeRGB: return "AdobeRGB"; 343*38e8c45fSAndroid Build Coastguard Worker case ColorAspects::StandardOther: return "Other"; 344*38e8c45fSAndroid Build Coastguard Worker default: return def; 345*38e8c45fSAndroid Build Coastguard Worker } 346*38e8c45fSAndroid Build Coastguard Worker } 347*38e8c45fSAndroid Build Coastguard Worker 348*38e8c45fSAndroid Build Coastguard Worker #endif 349*38e8c45fSAndroid Build Coastguard Worker 350*38e8c45fSAndroid Build Coastguard Worker } // namespace android 351*38e8c45fSAndroid Build Coastguard Worker 352*38e8c45fSAndroid Build Coastguard Worker #endif // VIDEO_API_H_ 353