xref: /aosp_15_r20/frameworks/native/include/media/hardware/VideoAPI.h (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
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