1*38e8c45fSAndroid Build Coastguard Worker /* 2*38e8c45fSAndroid Build Coastguard Worker * Copyright 2018 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 #pragma once 18*38e8c45fSAndroid Build Coastguard Worker 19*38e8c45fSAndroid Build Coastguard Worker #include <stdint.h> 20*38e8c45fSAndroid Build Coastguard Worker #include <ui/GraphicTypes.h> 21*38e8c45fSAndroid Build Coastguard Worker #include <optional> 22*38e8c45fSAndroid Build Coastguard Worker #include <vector> 23*38e8c45fSAndroid Build Coastguard Worker 24*38e8c45fSAndroid Build Coastguard Worker #include <system/graphics.h> 25*38e8c45fSAndroid Build Coastguard Worker #include <utils/Flattenable.h> 26*38e8c45fSAndroid Build Coastguard Worker 27*38e8c45fSAndroid Build Coastguard Worker namespace android { 28*38e8c45fSAndroid Build Coastguard Worker 29*38e8c45fSAndroid Build Coastguard Worker struct HdrMetadata : public LightFlattenable<HdrMetadata> { 30*38e8c45fSAndroid Build Coastguard Worker enum Type : uint32_t { 31*38e8c45fSAndroid Build Coastguard Worker SMPTE2086 = 1 << 0, 32*38e8c45fSAndroid Build Coastguard Worker CTA861_3 = 1 << 1, 33*38e8c45fSAndroid Build Coastguard Worker HDR10PLUS = 1 << 2, 34*38e8c45fSAndroid Build Coastguard Worker }; 35*38e8c45fSAndroid Build Coastguard Worker 36*38e8c45fSAndroid Build Coastguard Worker uint32_t validTypes{0}; 37*38e8c45fSAndroid Build Coastguard Worker 38*38e8c45fSAndroid Build Coastguard Worker android_smpte2086_metadata smpte2086{}; 39*38e8c45fSAndroid Build Coastguard Worker android_cta861_3_metadata cta8613{}; 40*38e8c45fSAndroid Build Coastguard Worker std::vector<uint8_t> hdr10plus{}; 41*38e8c45fSAndroid Build Coastguard Worker 42*38e8c45fSAndroid Build Coastguard Worker // LightFlattenable isFixedSizeHdrMetadata43*38e8c45fSAndroid Build Coastguard Worker bool isFixedSize() const { return false; } 44*38e8c45fSAndroid Build Coastguard Worker size_t getFlattenedSize() const; 45*38e8c45fSAndroid Build Coastguard Worker status_t flatten(void* buffer, size_t size) const; 46*38e8c45fSAndroid Build Coastguard Worker status_t unflatten(void const* buffer, size_t size); 47*38e8c45fSAndroid Build Coastguard Worker getSmpte2086HdrMetadata48*38e8c45fSAndroid Build Coastguard Worker std::optional<ui::Smpte2086> getSmpte2086() const { 49*38e8c45fSAndroid Build Coastguard Worker if (validTypes & Type::SMPTE2086) { 50*38e8c45fSAndroid Build Coastguard Worker return ui::translate(smpte2086); 51*38e8c45fSAndroid Build Coastguard Worker } 52*38e8c45fSAndroid Build Coastguard Worker return {}; 53*38e8c45fSAndroid Build Coastguard Worker } 54*38e8c45fSAndroid Build Coastguard Worker getCta8613HdrMetadata55*38e8c45fSAndroid Build Coastguard Worker std::optional<ui::Cta861_3> getCta8613() const { 56*38e8c45fSAndroid Build Coastguard Worker if (validTypes & Type::CTA861_3) { 57*38e8c45fSAndroid Build Coastguard Worker return ui::translate(cta8613); 58*38e8c45fSAndroid Build Coastguard Worker } 59*38e8c45fSAndroid Build Coastguard Worker return {}; 60*38e8c45fSAndroid Build Coastguard Worker } 61*38e8c45fSAndroid Build Coastguard Worker getHdr10PlusHdrMetadata62*38e8c45fSAndroid Build Coastguard Worker std::optional<std::vector<uint8_t>> getHdr10Plus() const { 63*38e8c45fSAndroid Build Coastguard Worker if (validTypes & Type::HDR10PLUS) { 64*38e8c45fSAndroid Build Coastguard Worker return hdr10plus; 65*38e8c45fSAndroid Build Coastguard Worker } 66*38e8c45fSAndroid Build Coastguard Worker return {}; 67*38e8c45fSAndroid Build Coastguard Worker } 68*38e8c45fSAndroid Build Coastguard Worker 69*38e8c45fSAndroid Build Coastguard Worker bool operator==(const HdrMetadata& rhs) const; 70*38e8c45fSAndroid Build Coastguard Worker bool operator!=(const HdrMetadata& rhs) const { return !(*this == rhs); } 71*38e8c45fSAndroid Build Coastguard Worker }; 72*38e8c45fSAndroid Build Coastguard Worker 73*38e8c45fSAndroid Build Coastguard Worker } // namespace android 74