VideoAPI.h revision 7c357a75991d6b0ae260d9e2b730bcfe7181f899
17c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar/* 27c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * Copyright (C) 2016 The Android Open Source Project 37c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * 47c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * Licensed under the Apache License, Version 2.0 (the "License"); 57c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * you may not use this file except in compliance with the License. 67c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * You may obtain a copy of the License at 77c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * 87c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * http://www.apache.org/licenses/LICENSE-2.0 97c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * 107c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * Unless required by applicable law or agreed to in writing, software 117c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * distributed under the License is distributed on an "AS IS" BASIS, 127c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * See the License for the specific language governing permissions and 147c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * limitations under the License. 157c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar */ 167c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 177c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar#ifndef VIDEO_API_H_ 187c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 197c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar#define VIDEO_API_H_ 207c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 217c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnarnamespace android { 227c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 237c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar/** 247c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * Structure describing a media image (frame) 257c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * Currently only supporting YUV 267c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * @deprecated. Use MediaImage2 instead 277c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar */ 287c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnarstruct MediaImage { 297c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar enum Type { 307c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MEDIA_IMAGE_TYPE_UNKNOWN = 0, 317c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MEDIA_IMAGE_TYPE_YUV, 327c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar }; 337c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 347c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar enum PlaneIndex { 357c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar Y = 0, 367c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar U, 377c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar V, 387c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MAX_NUM_PLANES 397c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar }; 407c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 417c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar Type mType; 427c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mNumPlanes; // number of planes 437c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mWidth; // width of largest plane (unpadded, as in nFrameWidth) 447c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mHeight; // height of largest plane (unpadded, as in nFrameHeight) 457c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mBitDepth; // useable bit depth 467c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar struct PlaneInfo { 477c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mOffset; // offset of first pixel of the plane in bytes 487c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar // from buffer offset 497c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mColInc; // column increment in bytes 507c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mRowInc; // row increment in bytes 517c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mHorizSubsampling; // subsampling compared to the largest plane 527c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mVertSubsampling; // subsampling compared to the largest plane 537c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar }; 547c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar PlaneInfo mPlane[MAX_NUM_PLANES]; 557c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar}; 567c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 577c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar/** 587c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * Structure describing a media image (frame) 597c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar */ 607c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnarstruct MediaImage2 { 617c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar enum Type : uint32_t { 627c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MEDIA_IMAGE_TYPE_UNKNOWN = 0, 637c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MEDIA_IMAGE_TYPE_YUV, 647c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MEDIA_IMAGE_TYPE_YUVA, 657c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MEDIA_IMAGE_TYPE_RGB, 667c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MEDIA_IMAGE_TYPE_RGBA, 677c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MEDIA_IMAGE_TYPE_Y, 687c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar }; 697c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 707c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar enum PlaneIndex : uint32_t { 717c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar Y = 0, 727c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar U = 1, 737c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar V = 2, 747c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar R = 0, 757c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar G = 1, 767c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar B = 2, 777c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar A = 3, 787c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MAX_NUM_PLANES = 4, 797c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar }; 807c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 817c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar Type mType; 827c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mNumPlanes; // number of planes 837c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mWidth; // width of largest plane (unpadded, as in nFrameWidth) 847c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mHeight; // height of largest plane (unpadded, as in nFrameHeight) 857c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mBitDepth; // useable bit depth (always MSB) 867c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mBitDepthAllocated; // bits per component (must be 8 or 16) 877c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 887c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar struct PlaneInfo { 897c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mOffset; // offset of first pixel of the plane in bytes 907c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar // from buffer offset 917c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar int32_t mColInc; // column increment in bytes 927c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar int32_t mRowInc; // row increment in bytes 937c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mHorizSubsampling; // subsampling compared to the largest plane 947c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar uint32_t mVertSubsampling; // subsampling compared to the largest plane 957c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar }; 967c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar PlaneInfo mPlane[MAX_NUM_PLANES]; 977c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 987c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar void initFromV1(const MediaImage&); // for internal use only 997c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar}; 1007c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 1017c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar/** 1027c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar * Aspects of color. 1037c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar */ 1047c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 1057c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar// NOTE: this structure is expected to grow in the future if new color aspects are 1067c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar// added to codec bitstreams. OMX component should not require a specific nSize 1077c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar// though could verify that nSize is at least the size of the structure at the 1087c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar// time of implementation. All new fields will be added at the end of the structure 1097c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar// ensuring backward compatibility. 1107c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnarstruct ColorAspects { 1117c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar // this is in sync with the range values in graphics.h 1127c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar enum Range : uint32_t { 1137c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar RangeUnspecified, 1147c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar RangeFull, 1157c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar RangeLimited, 1167c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar RangeOther = 0xff, 1177c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar }; 1187c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 1197c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar enum Primaries : uint32_t { 1207c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar PrimariesUnspecified, 1217c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar PrimariesBT709_5, // Rec.ITU-R BT.709-5 or equivalent 1227c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar PrimariesBT470_6M, // Rec.ITU-R BT.470-6 System M or equivalent 1237c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar PrimariesBT601_6_625, // Rec.ITU-R BT.601-6 625 or equivalent 1247c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar PrimariesBT601_6_525, // Rec.ITU-R BT.601-6 525 or equivalent 1257c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar PrimariesGenericFilm, // Generic Film 1267c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar PrimariesBT2020, // Rec.ITU-R BT.2020 or equivalent 1277c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar PrimariesOther = 0xff, 1287c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar }; 1297c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 1307c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar // this partially in sync with the transfer values in graphics.h prior to the transfers 1317c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar // unlikely to be required by Android section 1327c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar enum Transfer : uint32_t { 1337c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar TransferUnspecified, 1347c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar TransferLinear, // Linear transfer characteristics 1357c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar TransferSRGB, // sRGB or equivalent 1367c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar TransferSMPTE170M, // SMPTE 170M or equivalent (e.g. BT.601/709/2020) 1377c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar TransferGamma22, // Assumed display gamma 2.2 1387c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar TransferGamma28, // Assumed display gamma 2.8 1397c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar TransferST2084, // SMPTE ST 2084 for 10/12/14/16 bit systems 1407c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar TransferHLG, // ARIB STD-B67 hybrid-log-gamma 1417c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 1427c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar // transfers unlikely to be required by Android 1437c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar TransferSMPTE240M = 0x40, // SMPTE 240M 1447c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar TransferXvYCC, // IEC 61966-2-4 1457c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar TransferBT1361, // Rec.ITU-R BT.1361 extended gamut 1467c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar TransferST428, // SMPTE ST 428-1 1477c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar TransferOther = 0xff, 1487c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar }; 1497c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 1507c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar enum MatrixCoeffs : uint32_t { 1517c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MatrixUnspecified, 1527c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MatrixBT709_5, // Rec.ITU-R BT.709-5 or equivalent 1537c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MatrixBT470_6M, // KR=0.30, KB=0.11 or equivalent 1547c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MatrixBT601_6, // Rec.ITU-R BT.601-6 625 or equivalent 1557c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MatrixSMPTE240M, // SMPTE 240M or equivalent 1567c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MatrixBT2020, // Rec.ITU-R BT.2020 non-constant luminance 1577c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MatrixBT2020Constant, // Rec.ITU-R BT.2020 constant luminance 1587c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MatrixOther = 0xff, 1597c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar }; 1607c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 1617c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar // this is in sync with the standard values in graphics.h 1627c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar enum Standard : uint32_t { 1637c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar StandardUnspecified, 1647c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar StandardBT709, // PrimariesBT709_5 and MatrixBT709_5 1657c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar StandardBT601_625, // PrimariesBT601_6_625 and MatrixBT601_6 1667c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar StandardBT601_625_Unadjusted, // PrimariesBT601_6_625 and KR=0.222, KB=0.071 1677c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar StandardBT601_525, // PrimariesBT601_6_525 and MatrixBT601_6 1687c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar StandardBT601_525_Unadjusted, // PrimariesBT601_6_525 and MatrixSMPTE240M 1697c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar StandardBT2020, // PrimariesBT2020 and MatrixBT2020 1707c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar StandardBT2020Constant, // PrimariesBT2020 and MatrixBT2020Constant 1717c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar StandardBT470M, // PrimariesBT470_6M and MatrixBT470_6M 1727c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar StandardFilm, // PrimariesGenericFilm and KR=0.253, KB=0.068 1737c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar StandardOther = 0xff, 1747c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar }; 1757c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 1767c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar Range mRange; // IN/OUT 1777c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar Primaries mPrimaries; // IN/OUT 1787c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar Transfer mTransfer; // IN/OUT 1797c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MatrixCoeffs mMatrixCoeffs; // IN/OUT 1807c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar}; 1817c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 1827c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar#ifdef STRINGIFY_ENUMS 1837c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 1847c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnarinline static const char *asString(MediaImage::Type i, const char *def = "??") { 1857c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar switch (i) { 1867c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case MediaImage::MEDIA_IMAGE_TYPE_UNKNOWN: return "Unknown"; 1877c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case MediaImage::MEDIA_IMAGE_TYPE_YUV: return "YUV"; 1887c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar default: return def; 1897c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar } 1907c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar} 1917c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 1927c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnarinline static const char *asString(MediaImage::PlaneIndex i, const char *def = "??") { 1937c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar switch (i) { 1947c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case MediaImage::Y: return "Y"; 1957c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case MediaImage::U: return "U"; 1967c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case MediaImage::V: return "V"; 1977c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar default: return def; 1987c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar } 1997c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar} 2007c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 2017c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnarinline static const char *asString(MediaImage2::Type i, const char *def = "??") { 2027c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar switch (i) { 2037c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case MediaImage2::MEDIA_IMAGE_TYPE_UNKNOWN: return "Unknown"; 2047c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case MediaImage2::MEDIA_IMAGE_TYPE_YUV: return "YUV"; 2057c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case MediaImage2::MEDIA_IMAGE_TYPE_YUVA: return "YUVA"; 2067c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case MediaImage2::MEDIA_IMAGE_TYPE_RGB: return "RGB"; 2077c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case MediaImage2::MEDIA_IMAGE_TYPE_RGBA: return "RGBA"; 2087c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case MediaImage2::MEDIA_IMAGE_TYPE_Y: return "Y"; 2097c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar default: return def; 2107c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar } 2117c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar} 2127c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 2137c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnarinline static char asChar2( 2147c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar MediaImage2::PlaneIndex i, MediaImage2::Type j, char def = '?') { 2157c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar const char *planes = asString(j, NULL); 2167c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar // handle unknown values 2177c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar if (j == MediaImage2::MEDIA_IMAGE_TYPE_UNKNOWN || planes == NULL || i >= strlen(planes)) { 2187c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar return def; 2197c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar } 2207c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar return planes[i]; 2217c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar} 2227c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 2237c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnarinline static const char *asString(ColorAspects::Range i, const char *def = "??") { 2247c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar switch (i) { 2257c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::RangeUnspecified: return "Unspecified"; 2267c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::RangeFull: return "Full"; 2277c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::RangeLimited: return "Limited"; 2287c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::RangeOther: return "Other"; 2297c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar default: return def; 2307c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar } 2317c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar} 2327c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 2337c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnarinline static const char *asString(ColorAspects::Primaries i, const char *def = "??") { 2347c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar switch (i) { 2357c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::PrimariesUnspecified: return "Unspecified"; 2367c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::PrimariesBT709_5: return "BT709_5"; 2377c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::PrimariesBT470_6M: return "BT470_6M"; 2387c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::PrimariesBT601_6_625: return "BT601_6_625"; 2397c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::PrimariesBT601_6_525: return "BT601_6_525"; 2407c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::PrimariesGenericFilm: return "GenericFilm"; 2417c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::PrimariesBT2020: return "BT2020"; 2427c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::PrimariesOther: return "Other"; 2437c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar default: return def; 2447c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar } 2457c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar} 2467c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 2477c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnarinline static const char *asString(ColorAspects::Transfer i, const char *def = "??") { 2487c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar switch (i) { 2497c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::TransferUnspecified: return "Unspecified"; 2507c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::TransferLinear: return "Linear"; 2517c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::TransferSRGB: return "SRGB"; 2527c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::TransferSMPTE170M: return "SMPTE170M"; 2537c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::TransferGamma22: return "Gamma22"; 2547c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::TransferGamma28: return "Gamma28"; 2557c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::TransferST2084: return "ST2084"; 2567c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::TransferHLG: return "HLG"; 2577c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::TransferSMPTE240M: return "SMPTE240M"; 2587c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::TransferXvYCC: return "XvYCC"; 2597c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::TransferBT1361: return "BT1361"; 2607c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::TransferST428: return "ST428"; 2617c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::TransferOther: return "Other"; 2627c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar default: return def; 2637c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar } 2647c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar} 2657c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 2667c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnarinline static const char *asString(ColorAspects::MatrixCoeffs i, const char *def = "??") { 2677c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar switch (i) { 2687c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::MatrixUnspecified: return "Unspecified"; 2697c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::MatrixBT709_5: return "BT709_5"; 2707c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::MatrixBT470_6M: return "BT470_6M"; 2717c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::MatrixBT601_6: return "BT601_6"; 2727c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::MatrixSMPTE240M: return "SMPTE240M"; 2737c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::MatrixBT2020: return "BT2020"; 2747c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::MatrixBT2020Constant: return "BT2020Constant"; 2757c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::MatrixOther: return "Other"; 2767c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar default: return def; 2777c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar } 2787c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar} 2797c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 2807c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnarinline static const char *asString(ColorAspects::Standard i, const char *def = "??") { 2817c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar switch (i) { 2827c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::StandardUnspecified: return "Unspecified"; 2837c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::StandardBT709: return "BT709"; 2847c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::StandardBT601_625: return "BT601_625"; 2857c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::StandardBT601_625_Unadjusted: return "BT601_625_Unadjusted"; 2867c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::StandardBT601_525: return "BT601_525"; 2877c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::StandardBT601_525_Unadjusted: return "BT601_525_Unadjusted"; 2887c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::StandardBT2020: return "BT2020"; 2897c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::StandardBT2020Constant: return "BT2020Constant"; 2907c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::StandardBT470M: return "BT470M"; 2917c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::StandardFilm: return "Film"; 2927c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar case ColorAspects::StandardOther: return "Other"; 2937c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar default: return def; 2947c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar } 2957c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar} 2967c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 2977c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar#endif 2987c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 2997c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar} // namespace android 3007c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar 3017c357a75991d6b0ae260d9e2b730bcfe7181f899Lajos Molnar#endif // VIDEO_API_H_ 302